From c7f31cb4fadca67368ccf4dde8a87afa28f5d710 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 11 Apr 2024 11:34:58 +0000 Subject: [PATCH] Deploy to GitHub pages --- mo/.htaccess | 47 + mo/406.html | 10 + mo/index-de.html | 5000 ++++++ mo/index-en.html | 5000 ++++++ mo/index.html | 5000 ++++++ mo/ontology.jsonld | 4053 +++++ mo/ontology.nt | 1506 ++ mo/ontology.rdf | 2294 +++ mo/ontology.ttl | 1682 ++ mo/provenance/provenance-de.html | 17 + mo/provenance/provenance-de.ttl | 12 + mo/provenance/provenance-en.html | 17 + mo/provenance/provenance-en.ttl | 12 + mo/readme.md | 34 + mo/resources/extra.css | 124 + mo/resources/jquery.js | 18 + mo/resources/marked.min.js | 6 + mo/resources/owl.css | 248 + mo/resources/primer.css | 103 + mo/resources/rec.css | 88 + mo/webvowl/css/webvowl.app.css | 2477 +++ mo/webvowl/css/webvowl.css | 296 + mo/webvowl/data/foaf.json | 2894 ++++ mo/webvowl/data/ontology.json | 23628 ++++++++++++++++++++++++++ mo/webvowl/data/template.json | 163 + mo/webvowl/favicon.ico | Bin 0 -> 1150 bytes mo/webvowl/index.html | 514 + mo/webvowl/js/d3.min.js | 5 + mo/webvowl/js/webvowl.app.js | 9457 +++++++++++ mo/webvowl/js/webvowl.js | 25345 ++++++++++++++++++++++++++++ mo/webvowl/license.txt | 21 + pgo/.htaccess | 47 + pgo/406.html | 10 + pgo/index-de.html | 447 + pgo/index-en.html | 447 + pgo/index.html | 447 + pgo/ontology.jsonld | 266 + pgo/ontology.nt | 112 + pgo/ontology.rdf | 188 + pgo/ontology.ttl | 127 + pgo/provenance/provenance-de.html | 17 + pgo/provenance/provenance-de.ttl | 13 + pgo/provenance/provenance-en.html | 17 + pgo/provenance/provenance-en.ttl | 13 + pgo/readme.md | 34 + pgo/resources/extra.css | 124 + pgo/resources/jquery.js | 18 + pgo/resources/marked.min.js | 6 + pgo/resources/owl.css | 248 + pgo/resources/primer.css | 103 + pgo/resources/rec.css | 88 + pgo/webvowl/css/webvowl.app.css | 2477 +++ pgo/webvowl/css/webvowl.css | 296 + pgo/webvowl/data/foaf.json | 2894 ++++ pgo/webvowl/data/ontology.json | 16923 +++++++++++++++++++ pgo/webvowl/data/template.json | 163 + pgo/webvowl/favicon.ico | Bin 0 -> 1150 bytes pgo/webvowl/index.html | 514 + pgo/webvowl/js/d3.min.js | 5 + pgo/webvowl/js/webvowl.app.js | 9457 +++++++++++ pgo/webvowl/js/webvowl.js | 25345 ++++++++++++++++++++++++++++ pgo/webvowl/license.txt | 21 + tto/.htaccess | 47 + tto/406.html | 10 + tto/index-de.html | 2110 +++ tto/index-en.html | 2100 +++ tto/index.html | 2100 +++ tto/ontology.jsonld | 1889 +++ tto/ontology.nt | 789 + tto/ontology.rdf | 1223 ++ tto/ontology.ttl | 870 + tto/provenance/provenance-de.html | 17 + tto/provenance/provenance-de.ttl | 19 + tto/provenance/provenance-en.html | 17 + tto/provenance/provenance-en.ttl | 19 + tto/readme.md | 34 + tto/resources/extra.css | 124 + tto/resources/jquery.js | 18 + tto/resources/marked.min.js | 6 + tto/resources/owl.css | 248 + tto/resources/primer.css | 103 + tto/resources/rec.css | 88 + tto/webvowl/css/webvowl.app.css | 2477 +++ tto/webvowl/css/webvowl.css | 296 + tto/webvowl/data/foaf.json | 2894 ++++ tto/webvowl/data/ontology.json | 19206 +++++++++++++++++++++ tto/webvowl/data/template.json | 163 + tto/webvowl/favicon.ico | Bin 0 -> 1150 bytes tto/webvowl/index.html | 514 + tto/webvowl/js/d3.min.js | 5 + tto/webvowl/js/webvowl.app.js | 9457 +++++++++++ tto/webvowl/js/webvowl.js | 25345 ++++++++++++++++++++++++++++ tto/webvowl/license.txt | 21 + 93 files changed, 223147 insertions(+) create mode 100644 mo/.htaccess create mode 100644 mo/406.html create mode 100644 mo/index-de.html create mode 100644 mo/index-en.html create mode 100644 mo/index.html create mode 100644 mo/ontology.jsonld create mode 100644 mo/ontology.nt create mode 100644 mo/ontology.rdf create mode 100644 mo/ontology.ttl create mode 100644 mo/provenance/provenance-de.html create mode 100644 mo/provenance/provenance-de.ttl create mode 100644 mo/provenance/provenance-en.html create mode 100644 mo/provenance/provenance-en.ttl create mode 100644 mo/readme.md create mode 100644 mo/resources/extra.css create mode 100644 mo/resources/jquery.js create mode 100644 mo/resources/marked.min.js create mode 100644 mo/resources/owl.css create mode 100644 mo/resources/primer.css create mode 100644 mo/resources/rec.css create mode 100644 mo/webvowl/css/webvowl.app.css create mode 100644 mo/webvowl/css/webvowl.css create mode 100644 mo/webvowl/data/foaf.json create mode 100644 mo/webvowl/data/ontology.json create mode 100644 mo/webvowl/data/template.json create mode 100644 mo/webvowl/favicon.ico create mode 100644 mo/webvowl/index.html create mode 100644 mo/webvowl/js/d3.min.js create mode 100644 mo/webvowl/js/webvowl.app.js create mode 100644 mo/webvowl/js/webvowl.js create mode 100644 mo/webvowl/license.txt create mode 100644 pgo/.htaccess create mode 100644 pgo/406.html create mode 100644 pgo/index-de.html create mode 100644 pgo/index-en.html create mode 100644 pgo/index.html create mode 100644 pgo/ontology.jsonld create mode 100644 pgo/ontology.nt create mode 100644 pgo/ontology.rdf create mode 100644 pgo/ontology.ttl create mode 100644 pgo/provenance/provenance-de.html create mode 100644 pgo/provenance/provenance-de.ttl create mode 100644 pgo/provenance/provenance-en.html create mode 100644 pgo/provenance/provenance-en.ttl create mode 100644 pgo/readme.md create mode 100644 pgo/resources/extra.css create mode 100644 pgo/resources/jquery.js create mode 100644 pgo/resources/marked.min.js create mode 100644 pgo/resources/owl.css create mode 100644 pgo/resources/primer.css create mode 100644 pgo/resources/rec.css create mode 100644 pgo/webvowl/css/webvowl.app.css create mode 100644 pgo/webvowl/css/webvowl.css create mode 100644 pgo/webvowl/data/foaf.json create mode 100644 pgo/webvowl/data/ontology.json create mode 100644 pgo/webvowl/data/template.json create mode 100644 pgo/webvowl/favicon.ico create mode 100644 pgo/webvowl/index.html create mode 100644 pgo/webvowl/js/d3.min.js create mode 100644 pgo/webvowl/js/webvowl.app.js create mode 100644 pgo/webvowl/js/webvowl.js create mode 100644 pgo/webvowl/license.txt create mode 100644 tto/.htaccess create mode 100644 tto/406.html create mode 100644 tto/index-de.html create mode 100644 tto/index-en.html create mode 100644 tto/index.html create mode 100644 tto/ontology.jsonld create mode 100644 tto/ontology.nt create mode 100644 tto/ontology.rdf create mode 100644 tto/ontology.ttl create mode 100644 tto/provenance/provenance-de.html create mode 100644 tto/provenance/provenance-de.ttl create mode 100644 tto/provenance/provenance-en.html create mode 100644 tto/provenance/provenance-en.ttl create mode 100644 tto/readme.md create mode 100644 tto/resources/extra.css create mode 100644 tto/resources/jquery.js create mode 100644 tto/resources/marked.min.js create mode 100644 tto/resources/owl.css create mode 100644 tto/resources/primer.css create mode 100644 tto/resources/rec.css create mode 100644 tto/webvowl/css/webvowl.app.css create mode 100644 tto/webvowl/css/webvowl.css create mode 100644 tto/webvowl/data/foaf.json create mode 100644 tto/webvowl/data/ontology.json create mode 100644 tto/webvowl/data/template.json create mode 100644 tto/webvowl/favicon.ico create mode 100644 tto/webvowl/index.html create mode 100644 tto/webvowl/js/d3.min.js create mode 100644 tto/webvowl/js/webvowl.app.js create mode 100644 tto/webvowl/js/webvowl.js create mode 100644 tto/webvowl/license.txt diff --git a/mo/.htaccess b/mo/.htaccess new file mode 100644 index 0000000..5ab10d8 --- /dev/null +++ b/mo/.htaccess @@ -0,0 +1,47 @@ +# Turn off MultiViews +Options -MultiViews + +# Directive to ensure *.rdf files served as appropriate content type, +# if not present in main apache config +AddType application/rdf+xml .rdf +AddType application/rdf+xml .owl +AddType text/turtle .ttl +AddType application/n-triples .n3 +AddType application/ld+json .jsonld +# Rewrite engine setup +RewriteEngine On +#Change the path to the folder here +RewriteBase /mo + +# Rewrite rule to serve HTML content from the vocabulary URI if requested +RewriteCond %{HTTP_ACCEPT} !application/rdf\+xml.*(text/html|application/xhtml\+xml) +RewriteCond %{HTTP_ACCEPT} text/html [OR] +RewriteCond %{HTTP_ACCEPT} application/xhtml\+xml [OR] +RewriteCond %{HTTP_USER_AGENT} ^Mozilla/.* +RewriteRule ^$ index-de.html [R=303,L] + +# Rewrite rule to serve JSON-LD content from the vocabulary URI if requested +RewriteCond %{HTTP_ACCEPT} application/ld\+json +RewriteRule ^$ ontology.jsonld [R=303,L] + +# Rewrite rule to serve RDF/XML content from the vocabulary URI if requested +RewriteCond %{HTTP_ACCEPT} \*/\* [OR] +RewriteCond %{HTTP_ACCEPT} application/rdf\+xml +RewriteRule ^$ ontology.rdf [R=303,L] + +# Rewrite rule to serve N-Triples content from the vocabulary URI if requested +RewriteCond %{HTTP_ACCEPT} application/n-triples +RewriteRule ^$ ontology.nt [R=303,L] + +# Rewrite rule to serve TTL content from the vocabulary URI if requested +RewriteCond %{HTTP_ACCEPT} text/turtle [OR] +RewriteCond %{HTTP_ACCEPT} text/\* [OR] +RewriteCond %{HTTP_ACCEPT} \*/turtle +RewriteRule ^$ ontology.ttl [R=303,L] + +RewriteCond %{HTTP_ACCEPT} .+ +RewriteRule ^$ 406.html [R=406,L] +# Default response +# --------------------------- +# Rewrite rule to serve the RDF/XML content from the vocabulary URI by default +RewriteRule ^$ ontology.rdf [R=303,L] \ No newline at end of file diff --git a/mo/406.html b/mo/406.html new file mode 100644 index 0000000..1a2f4b5 --- /dev/null +++ b/mo/406.html @@ -0,0 +1,10 @@ + + +406 Not Acceptable + + +

Not Acceptable

+

An appropriate representation of the requested resource could not be found on this server.

+ Available variants: + + \ No newline at end of file diff --git a/mo/index-de.html b/mo/index-de.html new file mode 100644 index 0000000..78d29d0 --- /dev/null +++ b/mo/index-de.html @@ -0,0 +1,5000 @@ + + + + + Microscopy Ontology (MO) + + + + + + + + + + + +
+
+
language de en
+

Microscopy Ontology (MO)

+ + +
+
Diese Version:
+
https://w3id.org/pmd/mo/1.0.0
+
Autoren:
+
https://orcid.org/0000-0002-3717-7104
https://orcid.org/0000-0002-7094-5371
+ +
Importierte Ontologien:
+
prov-o#
prov-o-inverses#
co
+ +
Download Serialisierung:
JSON-LD RDF/XML N-Triples TTL
Lizenz:
http://insertlicenseURIhere.org +
Visualisierung:
Visualize with WebVowl
+
Zitieren als:
+
Markus Schilling, Bernd Bayerlein, June Lau. (January 29th, 2024) MO: microscopy ontology. Version 1.0.0, https://w3id.org/pmd/mo/
+
+ +Ursprung dieser Seite
+
+
+
+Ontology Specification Draft +
+
+ + +

Microscopy Ontology (MO): überblick zurück zum Inhaltsverzeichnis

+ +Diese Ontologie beinhaltet die folgenden Klassen und Eigenschaften. +

Klassen

+

Annotation Properties

+
+ + + +

Querverweis für... Microscopy Ontology (MO) Klassen, Object Properties und Data Properties zurück zum Inhaltsverzeichnis

+Dieser Abschnitt enthält Details für jede Klasse und jedes definierte Property, die definiert wurden durch Microscopy Ontology (MO). +
+

Klassen

+ +
+

4D-Rastertransmissionselektronenmikroskopiec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/4D-ScanningTransmissionElectronMicroscopy

+
+ 4D-STEM is a technique that adds an additional dimension of information, time, to STEM imaging, allowing the study of dynamic processes in materials at high spatial and temporal resolutions. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Rastertransmissionselektronenmikroskopie + c +
+
+
+
+

Abbildungsfilterc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/ImageFilter

+
+ An image filter is a device or component used in imaging systems, such as microscopy or photography, to modify the appearance of an image by selectively altering certain characteristics. Filters can be used to adjust contrast, brightness, color balance, and other image properties. They are often used to enhance specific features or to correct for distortions caused by lighting conditions or optical imperfections. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ processing node +
+
hat Sub-Klassen
+
+ Gatan Abbildungsfilter + c +
+
+
+
+

Aberrationc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/Aberration

+
+ Abweichung vom idealen oder erwarteten Verhalten, häufig im Zusammenhang mit optischen Systemen verwendet. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ value object +
+
hat Sub-Klassen
+
+ Chromatische Aberration + c, Sphärische Aberration + c +
+
+
+
+

Anodec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/Anode

+
+ The anode is the positively charged electrode in an electrochemical cell or other electrically driven systems. It serves as the site where oxidation occurs, meaning electrons are released from the anode, typically moving towards the cathode. In devices like batteries, the anode is where electrons are produced during the discharge process. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Elektrode + c +
+
+
+
+

Arbeitsabstandc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/WorkingDistance

+
+ Der Arbeitsabstand wirkt sich auf die Tiefenschärfe und die Auflösung des Bildes aus. +
+
+ Der Abstand zwischen der Objektivlinse des Elektronenmikroskops und der Probenoberfläche, wenn der Elektronenstrahl auf die Probe fokussiert wird. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ distance +
+
+
+
+

Atmosphärische Rasterelektronenmikroskopiec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/AtmosphericScanningElectronMicroscopy

+
+ Atmospheric Scanning Electron Microscopy is a technique that allows samples to be imaged in their natural, hydrated state at atmospheric pressure. It enables the observation of biological and other hydrated specimens without the need for dehydration or coating. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Rasterelektronenmikroskopie + c +
+
+
+
+

Atomare Auflösungc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/AtomicResolution

+
+ Die Fähigkeit, einzelne Atome in einem Bild oder einer Struktur aufzulösen. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Auflösung + c +
+
+
+
+

Auflösungc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/Resolution

+
+ In verschiedenen Zusammenhängen bezieht sich die Auflösung auf den Grad der Detailgenauigkeit, die in einem Bild, einer Messung oder einer anderen Darstellung eines Objekts oder Phänomens erkennbar ist. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ value object +
+
hat Sub-Klassen
+
+ Atomare Auflösung + c, Energieauflösung + c, Ortsauflösung + c +
+
+
+
+

Auger-Elektronen-Spektroskopiec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/AugerElectronSpectroscopy

+
+ Auger Electron Spectroscopy (AES) is a surface analysis technique used in the field of materials science and surface chemistry. It involves the study of the interactions between high-energy electrons and atoms on the surface of a material. The process is named after Pierre Auger, who made significant contributions to the understanding of this phenomenon. +In AES, a sample's surface is bombarded with a beam of high-energy electrons, which causes inner-shell electrons to be ejected from the atoms in the sample. These vacancies are then filled by higher-energy electrons from outer shells, leading to the emission of Auger electrons. The energy of these emitted Auger electrons is characteristic of the specific elements present in the sample and their chemical states. +By analyzing the energy spectrum of the emitted Auger electrons, researchers can identify the elements present on the surface of the material and determine their relative concentrations. Auger Electron Spectroscopy provides valuable information about the elemental composition and chemical bonding of the top few atomic layers of a material, making it a powerful tool for studying surface properties, thin films, and interfaces in various scientific and industrial applications. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Spektroskopie + c +
+
+
+
+

Beschleunigungsspannungc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/AccelerationVoltage

+
+ Die Beschleunigungsspannung bestimmt die kinetische Energie der Elektronen und beeinflusst die Auflösung und die Eindringtiefe in die Probe. +
+
+ Diese Klasse beschreibt die Spannung, die an ein Elektronenmikroskop angelegt wird, um die von der Elektronenquelle (in der Regel eine Kathode) emittierten Elektronen auf die Probe zu beschleunigen. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Spannung + c +
+
+
+
+

Beugungsmusterc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/DiffractionPattern

+
+ Das Muster von Flecken oder Banden, das auf einem Detektor entsteht, wenn Elektronen nach der Wechselwirkung mit einer kristallinen Probe gebeugt werden. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ digital entity +
+
hat Sub-Klassen
+
+ Elektronenbeugungsmuster + c +
+
+
+
+

Bildgebende Orientierungsmikroskopiec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/OrientationImagingMicroscopy

+
+ Orientation Imaging Microscopy is a microscopy technique used to map the crystallographic orientations of grains within a material. It is commonly applied in SEM to study the microstructural properties of polycrystalline materials. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Rasterelektronenmikroskopie + c +
+
+
+
+

Brennebenec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/FocalPlane

+
+ Die Ebene senkrecht zur optischen Achse eines Elektronenmikroskops, in der der Elektronenstrahl fokussiert wird, um ein Bild zu erzeugen. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ area +
+
+
+
+

Brennpunktc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/FocalPoint

+
+ Der Punkt, an dem der Elektronenstrahl in einem Elektronenmikroskop fokussiert wird, um ein Bild der Probe zu erzeugen. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ digital entity +
+
+
+
+

Brennweitec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/FocalLength

+
+ Der Abstand zwischen dem Brennpunkt (wo der Elektronenstrahl fokussiert wird) und der Linse oder Blende in einem Elektronenmikroskop. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ length +
+
+
+
+

camera lengthc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/CameraLength

+
+ Der Abstand zwischen der Probe und der Kamera, die zur Aufnahme von Bildern in einem Elektronenmikroskop verwendet wird. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ length +
+
+
+
+

Chromatische Aberrationc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/ChromaticAberration

+
+ Die Unfähigkeit eines Objektivs, alle Farben auf denselben Konvergenzpunkt zu fokussieren. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Aberration + c +
+
+
+
+

Detektor Quantenausbeutec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/DetectorQuantumEfficiency

+
+ Die Effizienz, mit der ein Detektor einfallende Strahlung in Nutzsignale umwandelt. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Effizienz + c +
+
+
+
+

Diffraktionc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/Diffraction

+
+ Die Biegung von Elektronenwellen beim Durchgang durch eine kristalline Probe, was zur Bildung von Beugungsmustern führt, die Informationen über die Kristallstruktur liefern. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Physikalischer Prozess + c +
+
hat Sub-Klassen
+
+ Elektronenbeugung + c, Elektronenbeugung ausgewählter Regionen + c, X-ray Diffraction Röntgenbeugung + c +
+
+
+
+

Dreidimensionale Rekonstruktionc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/3DReconstruction

+
+ Der Prozess der Erstellung einer dreidimensionalen Darstellung eines Objekts oder einer Szene aus zweidimensionalen Bildern oder Daten. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Rekonstruktion + c +
+
+
+
+

Dynamische Fokuskorrekturc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/DynamicFocusCorrection

+
+ Eine Technik, die in der Elektronenmikroskopie eingesetzt wird, um den Fokus des Elektronenstrahls kontinuierlich in Echtzeit anzupassen und so eine optimale Bildqualität zu erhalten, insbesondere bei der Abbildung unebener oder rauer Oberflächen. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ analysing process +
+
+
+
+

Dynamische Refokussierungc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/DynamicRefocusing

+
+ Der Prozess, bei dem der Fokus des Elektronenstrahls während der Bildgebung angepasst wird, um Änderungen der Probenhöhe oder -topografie zu kompensieren und sicherzustellen, dass die gesamte Probe im Fokus bleibt. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ analysing process +
+
+
+
+

Dynamische Transmissionselektronenmikroskopiec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/DynamicTransmissionElectronMicroscopy

+
+ Dynamic Transmission Electron Microscopy is a technique that uses ultrafast electron pulses to capture rapid processes in materials with nanosecond to picosecond time resolution. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ transmission electron microscopy + c +
+
+
+
+

Effizienzc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/Efficiency

+
+ Das Verhältnis von nützlichem / nutzbarem Output zum gesamten Input in einem System. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ value object +
+
hat Sub-Klassen
+
+ Detektor Quantenausbeute + c, Kollektoreffizienz + c +
+
+
+
+

Einfallender Strahlc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/IncidentBeam

+
+ Der Elektronenstrahl, der in einem Elektronenmikroskop auf die Probenoberfläche trifft und Wechselwirkungen hervorruft, die Signale für die Abbildung oder Analyse erzeugen. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Strahl + c +
+
+
+
+

Elektrodec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/Electrode

+
+ An electrode is a conductor through which electric current enters or exits a substance. In the context of electrochemical systems, an electrode facilitates the transfer of electrons between a solid material and an electrolyte. Electrodes are essential components in batteries, fuel cells, electroplating, and other electrochemical processes. They play a critical role in facilitating chemical reactions and energy storage or conversion. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ processing node +
+
hat Sub-Klassen
+
+ Anode + c, Kathode + c +
+
+
+
+

Elektronenbeugungc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/ElectronDiffraction

+
+ Das Phänomen der Beugung von Elektronenwellen beim Durchgang durch eine kristalline Probe, das Informationen über die Kristallstruktur liefert. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Diffraktion + c +
+
hat Sub-Klassen
+
+ Rückstreuelektronenbeugung + c +
+
+
+
+

Elektronenbeugung ausgewählter Regionenc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/SelectedAreaElectronDiffraction

+
+ Selected Area Electron Diffraction is a technique used in transmission electron microscopy (TEM) to study the crystallographic orientation of small regions within a sample. By selecting a specific area of the sample and directing an electron beam onto it, diffraction patterns are generated. These patterns offer insights into the sample's crystal structure and orientation. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Diffraktion + c +
+
+
+
+

Elektronenbeugungsmusterc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/ElectronDiffractionPattern

+
+ Das Muster von Flecken oder Ringen, das auf einem Detektor entsteht, wenn Elektronen nach der Wechselwirkung mit einer kristallinen Probe gebeugt werden, und das zur Bestimmung der Kristallstruktur verwendet wird. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Beugungsmuster + c +
+
+
+
+

Elektronenenergieverlustspektroskopiec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/ElectronEnergyLossSpectroscopy

+
+ Electron Energy Loss Spectroscopy (EELS) is a specialized analytical technique in the field of materials science and electron microscopy. It involves the measurement of the energy loss of electrons as they interact with a sample. EELS is commonly performed in transmission electron microscopy (TEM) setups. +In EELS, a focused beam of high-energy electrons is directed at a sample. As these electrons pass through the material, they can lose energy through various interactions, such as inelastic scattering and excitation of inner-shell electrons. The energy loss is measured and analyzed to gain information about the sample's composition, electronic structure, and bonding characteristics. +By studying the energy loss spectrum, researchers can identify the types of atoms present in the sample, determine their chemical states, and gather insights into the electronic properties of the material. EELS is particularly useful for investigating nanoscale materials, thin films, and interfaces, providing valuable information about their electronic and atomic structure. It is a powerful technique for understanding the behavior of materials at the nanometer scale and plays a significant role in advancing fields such as materials science, nanotechnology, and semiconductor research. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Spektroskopie + c +
+
+
+
+

Elektronenkanal-Kontrastbildgebungc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/ElectronChannelingContrastImaging

+
+ Electron Channeling Contrast Imaging is a technique used in SEM or TEM to study crystallographic defects, such as dislocations, in crystalline materials. It utilizes the contrast resulting from the deviation of electron trajectories due to crystal defects. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Rasterelektronenmikroskopie + c +
+
+
+
+

Elektronenmikrosondec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/ElectronMicroprobe

+
+ Ein Analyseinstrument zur Bestimmung der chemischen Zusammensetzung von Materialien. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ electron microscope +
+
hat Sub-Klassen
+
+ Elektronensonden-Mikro-Analysator + c +
+
+
+
+

Elektronensondec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/ElectronProbe

+
+ Der fokussierte Elektronenstrahl, der zur Abbildung oder Analyse in einem Elektronenmikroskop verwendet wird. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Strahl + c +
+
+
+
+

Elektronensonden-Mikro-Analysatorc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/ElectronProbeMicroAnalyzer

+
+ Ein Instrument zur Elementaranalyse fester Materialien durch Beschuss mit einem fokussierten Elektronenstrahl. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Elektronenmikrosonde + c +
+
+
+
+

Elektronenstrahlc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/ElectronBeam

+
+ Ein Strom von Elektronen, der von einer Elektronenquelle emittiert und in einem Elektronenmikroskop zur Abbildung oder Analyse auf die Probe beschleunigt wird. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Strahl + c +
+
+
+
+

Elektronentomographc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/ElectronTomograph

+
+ Ein Instrument für die tomografische Bildgebung mit Elektronen. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Transmissionelektronenmikroskop + c +
+
+
+
+

Elektronentomographiec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/ElectronTomography

+
+ Electron Tomography is a technique that involves collecting a series of transmission electron microscopy (TEM) images from different angles to reconstruct a three-dimensional image of a sample. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ transmission electron microscopy + c +
+
hat Sub-Klassen
+
+ Kryo-Elektronentomographie + c +
+
+
+
+

Emissionsstromc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/EmissionCurrent

+
+ Der Emissionsstrom wird normalerweise in Mikroampere (μA) oder Milliampere (mA) gemessen. +
+
+ Der Strom der von der Elektronenquelle emittierten Elektronen. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Strom + c +
+
+
+
+

Energiec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/Energy

+
+ Die Energie wird üblicherweise in Joule (J) oder Elektronenvolt (eV) gemessen. +
+
+ Die Fähigkeit eines physischen Systems, Arbeit zu verrichten. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ value object +
+
hat Sub-Klassen
+
+ Energieverlust + c, Strahlungsenergie + c +
+
+
+
+

Energieauflösungc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/EnergyResolution

+
+ Die Fähigkeit eines Detektors, zwischen verschiedenen Energieniveaus der einfallenden Strahlung zu unterscheiden. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Auflösung + c +
+
+
+
+

Energiegefiltertes Transmissionselektronenmikroskopc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/EnergyFilteredTransmissionElectronMicroscope

+
+ Ein Transmissionselektronenmikroskop, das mit einem Energiefilter ausgestattet ist, um Elektronen bestimmter Energieniveaus zu selektieren. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Transmissionelektronenmikroskop + c +
+
+
+
+

Energieverlustc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/EnergyLoss

+
+ Der Energieverlust, den ein Teilchen beim Durchgang durch ein Medium erfährt. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Energie + c +
+
+
+
+

Energy Dispersive X-ray Spectroscopyc + zurück zur Übersicht oder Klassenübersicht + +

+

energiedispersive Röntgenanalysec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/EnergyDispersiveXRaySpectroscopy

+
+ Energy Dispersive X-ray Spectroscopy is a technique used to analyze the elemental composition of a sample by detecting the X-rays emitted when the sample is bombarded with electrons in an electron microscope or other instrument. EDS provides information about the elements present in the sample and their relative concentrations. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Röntgen-Mikroanalyse + c +
+
+
+
+

Extraktionsspannungc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/ExtractionVoltage

+
+ Die Spannung, die an die Elektronenquelle in einem Elektronenmikroskop angelegt wird, um Elektronen aus der Kathode zu extrahieren und sie auf die Probe zu beschleunigen. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Spannung + c +
+
+
+
+

Feldemissions-Rasterelektronenmikroskopiec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/FieldEmissionScanningElectronMicroscopy

+
+ Field Emission Scanning Electron Microscopy is an advanced form of SEM that uses a field emitter to produce a highly focused electron beam, enabling high-resolution imaging and surface analysis. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Rasterelektronenmikroskopie + c +
+
+
+
+

Feldemissionskanonec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/FieldEmissionGun

+
+ A Field Emission Gun is an electron gun used in electron microscopes to produce an electron beam with extremely high brightness and coherence. It relies on the phenomenon of field emission, where electrons are emitted from a sharp emitter tip under the influence of a strong electric field. FEGs are capable of producing highly focused electron beams, leading to enhanced imaging resolution and analytical capabilities. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Kanone + c +
+
+
+
+

Feldionenmikroskopc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/FieldIonMicroscope

+
+ Ein Mikroskoptyp, der das Phänomen der Feldionisation nutzt, um Oberflächen mit atomarer Auflösung abzubilden. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Ionenmikroskop + c +
+
+
+
+

Feldionenmikroskopiec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/FieldIonMicroscopy

+
+ Field Ion Microscopy is a specialized microscopy technique that uses a strong electric field to ionize atoms on the surface of a metal sample. These ionized atoms are then repelled from the surface and can be detected to create an image of the sample's surface topography at atomic resolution. FIM is especially powerful for imaging the arrangement of atoms on metallic surfaces. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Ionenmikroskopie + c +
+
+
+
+

Flugzeit-Sekundärionen-Massenspektrometriec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/TimeOfFlightSecondaryIonMassSpectrometry

+
+ Time-of-Flight Secondary Ion Mass Spectrometry (TOF-SIMS) is an advanced surface analysis technique used to determine the elemental and molecular composition of solid surfaces and thin films with high sensitivity and spatial resolution. It is employed in various scientific and industrial fields, including materials science, nanotechnology, biomedicine, and semiconductor research. +TOF-SIMS builds upon the principles of Secondary Ion Mass Spectrometry (SIMS), where a focused beam of high-energy primary ions is directed at a sample's surface, causing the ejection of secondary ions. In TOF-SIMS, the flight time of these secondary ions is measured as they travel through a field-free region and enter a time-of-flight mass spectrometer. The mass spectrometer measures the time taken by the ions to reach the detector, which is directly proportional to their mass-to-charge ratio. +By analyzing the flight times of the secondary ions, TOF-SIMS can determine the elemental, isotopic, and molecular composition of the sample's surface. It provides information about the presence of specific elements, chemical compounds, and molecular fragments, along with their spatial distribution. The high sensitivity of TOF-SIMS allows for the detection of trace elements and molecular species in complex samples. +TOF-SIMS is valuable for characterizing surfaces at the nanoscale, profiling layered structures, investigating organic and inorganic materials, and studying biological specimens. Its ability to provide detailed chemical information while maintaining spatial resolution makes it an essential tool for understanding surface properties and material interactions in a wide range of applications. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Spektroskopie + c +
+
+
+
+

Fluoreszenzmikroskopiec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/FluorescenceMicroscopy

+
+ Fluorescence Microscopy is an optical imaging technique used to visualize biological structures and molecules that fluoresce when illuminated with specific wavelengths of light. Fluorescent molecules absorb light energy and then emit light of a longer wavelength, allowing the visualization of specific molecules or cellular components. Fluorescence microscopy is widely used in cell biology, molecular biology, and medical research. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Lichtmikroskopie + c +
+
+
+
+

Fokussierte Ionenstrahl-Rasterelektronenmikroskopiec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/FocusedIonBeamScanningElectronMicroscopy

+
+ Focused Ion Beam Scanning Electron Microscopy is a combination of two techniques: focused ion beam (FIB) and scanning electron microscopy (SEM). FIB-SEM systems use a focused ion beam to both image and modify a sample's surface. The ion beam can be used for milling, cutting, and deposition processes, making FIB-SEM a versatile tool for materials analysis, sample preparation, and three-dimensional imaging. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Ionenmikroskopie + c +
+
+
+
+

Fokussierter Ionenstrahl - Rasterelektronenmikroskopc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/FocusedIonBeam-ScanningElectronMicroscope

+
+ Ein Zweistrahlmikroskop, das einen fokussierten Ionenstrahl mit einem Rasterelektronenmikroskop kombiniert. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Ionenmikroskop + c +
+
hat Sub-Klassen
+
+ Helium-Ionen-Mikroskop + c +
+
+
+
+

Fokussierter Strahlc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/FocusedBeam

+
+ Ein Elektronenstrahl, der auf einen kleinen Punkt auf der Probenoberfläche eingeengt oder fokussiert wurde. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Strahl + c +
+
+
+
+

Fourier-Transformations-Infrarotspektroskopiec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/FourierTransformInfraredSpectroscopy

+
+ Fourier Transform Infrared Spectroscopy (FTIR) is a powerful analytical technique used in various scientific disciplines to study the molecular composition and properties of materials. It is based on the interaction between infrared radiation and a sample, providing information about the vibrational modes of molecules. +In FTIR spectroscopy, an infrared beam is directed through a sample, and the interaction between the radiation and the sample's molecules leads to absorption of specific infrared frequencies. Each type of molecular bond and functional group in the sample absorbs infrared radiation at characteristic frequencies, which correspond to the energies of molecular vibrations. The resulting absorption spectrum represents a fingerprint of the sample's molecular structure. +The Fourier transform technique is used to convert the raw data obtained from the absorption measurements into a Fourier-transformed spectrum. This transformation improves the signal-to-noise ratio and enhances the accuracy of spectral analysis. +FTIR is extensively used in a wide range of fields, including chemistry, biology, materials science, pharmaceuticals, and environmental science. It is employed for qualitative and quantitative analysis, identification of compounds, monitoring chemical reactions, and studying molecular interactions. FTIR spectroscopy provides valuable insights into molecular bonding, functional groups, and the chemical composition of substances, making it an indispensable tool in modern analytical science. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Spektroskopie + c +
+
+
+
+

Gatan Abbildungsfilterc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/GatanImageFilter

+
+ A Gatan Image Filter refers to an image filter manufactured by Gatan, Inc., a company specializing in electron microscopy and related products. Gatan's image filters are designed for electron microscopes and electron energy loss spectroscopy (EELS) applications. These filters allow researchers to control and enhance the acquisition of electron energy loss spectra while obtaining high-resolution images of the sample under investigation. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Abbildungsfilter + c +
+
+
+
+

Glühfadenstromc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/FilamentCurrent

+
+ Der Strom, der durch den Glühfaden der Elektronenkanone in einem Elektronenmikroskop fließt und den Glühfaden erhitzt, um Elektronen zu emittieren. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Strom + c +
+
+
+
+

Helium-Ionen-Mikroskopc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/HeliumIonMicroscope

+
+ Eine Art Mikroskop, das Helium-Ionen verwendet, um Proben mit hoher Auflösung abzubilden. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Fokussierter Ionenstrahl - Rasterelektronenmikroskop + c +
+
+
+
+

Helium-Ionen-Mikroskopiec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/HeliumIonMicroscopy

+
+ Helium Ion Microscopy is a microscopy technique that uses a beam of helium ions instead of electrons to interact with a sample's surface. The smaller mass of helium ions compared to electrons allows for higher resolution imaging and reduced sample damage. HIM provides high-resolution images and is often used for imaging delicate or sensitive samples. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Ionenmikroskopie + c +
+
+
+
+

Hellfeld-Transmissionselektronenmikroskopiec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/BrightFieldTransmissionElectronMicroscopy

+
+ Bright Field TEM is an imaging mode in transmission electron microscopy where regions of the sample that scatter electrons less appear brighter in the resulting image. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ transmission electron microscopy + c +
+
+
+
+

Hochauflösende Transmissionselektronenmikroskopiec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/HighResolutionTransmissionElectronMicroscopy

+
+ High Resolution TEM is a technique that provides exceptionally high-resolution images of a sample's internal structure, revealing atomic-level details. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ transmission electron microscopy + c +
+
+
+
+

Hochauflösendes Transmissionselektronenmikroskopc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/HighResolutionTransmissionElectronMicroscope

+
+ Ein Transmissionselektronenmikroskop, das hochauflösende Bilder liefert. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Transmissionelektronenmikroskop + c +
+
+
+
+

Hochwinkel-Dunkelfeld-Rastertransmissionselektronenmikroskop mit annularem Winkelc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/HighAngleAnnularDarkFieldScanningTransmissionElectronMicroscope

+
+ Eine Art Rastertransmissionselektronenmikroskop, das gestreute Elektronen in hohen Winkeln erkennt. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Rastertransmissionselektronenmikroskop + c +
+
+
+
+

Inelastische Streuungc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/InelasticScattering

+
+ Inelastic scattering is a scattering process that involves the transfer of energy and momentum between the incident particle (e.g., photon, electron) and the target particle. During inelastic scattering, the energy of the scattered particle changes, and the interaction may result in various outcomes, such as excitation, emission, or other energy transfers that alter the internal state of the target particle. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Physikalischer Prozess + c +
+
+
+
+

Ionenmikroskopc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/IonMicroscope

+
+ Ein Mikroskop, das mit Hilfe von Ionen Bilder von Proben erzeugt. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ micropscope +
+
hat Sub-Klassen
+
+ Feldionenmikroskop + c, Fokussierter Ionenstrahl - Rasterelektronenmikroskop + c +
+
+
+
+

Ionenmikroskopiec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/IonMicroscopy

+
+ Ion Microscopy refers to a group of microscopy techniques that use focused ion beams to image and analyze samples. These techniques utilize ions, such as protons or heavy ions, instead of electrons or photons to interact with the sample, providing valuable information about its composition and structure. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ microscopy process +
+
hat Sub-Klassen
+
+ Feldionenmikroskopie + c, Fokussierte Ionenstrahl-Rasterelektronenmikroskopie + c, Helium-Ionen-Mikroskopie + c +
+
+
+
+

Ionenstrahlc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/IonBeam

+
+ Ein Ionenstrom, der zum Mahlen oder zur Analyse verwendet wird, insbesondere bei Ionenmikroskopietechniken zur Bildgebung. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Strahl + c +
+
+
+
+

Kanonec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/Gun

+
+ In the context of electron microscopy and particle acceleration, a "gun" typically refers to an electron or particle source that generates and emits the particles. In electron microscopy, an electron gun is used to generate a beam of electrons for imaging or analysis. In particle accelerators, a particle gun generates and launches particles at high speeds for various experimental purposes. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ processing node +
+
hat Sub-Klassen
+
+ Feldemissionskanone + c +
+
+
+
+

Kathodec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/Cathode

+
+ The cathode is the negatively charged electrode in an electrochemical cell or other electrical systems. It is the site where reduction occurs, leading to the acceptance of electrons from the external circuit. In batteries, for instance, the cathode is where electrons are consumed during the discharge process. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Elektrode + c +
+
+
+
+

Kohärenter Strahlc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/CoherentBeam

+
+ Ein Elektronenstrahl, bei dem die einzelnen Elektronen eine konstante Phasenbeziehung zueinander haben, was bei der Wechselwirkung mit einer Probe zu Interferenzmustern führt. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Strahl + c +
+
+
+
+

Kollektoreffizienzc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/CollectionEfficiency

+
+ Die Fähigkeit eines Detektors oder Systems, relevante Signale oder Daten zu erfassen und aufzuzeichnen. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Effizienz + c +
+
+
+
+

Kondensorlinsec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/CondensorLense

+
+ A condenser lens is an optical element used in microscopy and other optical systems to focus and control the illumination on the sample being observed. It is positioned below the light source and directs light rays onto the specimen, making the illumination uniform and optimizing the quality of the sample's image. The condenser lens helps enhance contrast, resolution, and overall image quality by ensuring that a consistent and concentrated light beam illuminates the specimen. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ processing node +
+
+
+
+

Konfokale Laser-Scanning-Mikroskopiec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/ConfocalLaserScanningMicroscopy

+
+ Confocal Laser Scanning Microscopy (CLSM) is an optical imaging technique that enhances resolution and eliminates out-of-focus blur by using a spatial pinhole and laser illumination. A focused laser beam is scanned across the sample's surface or depth, and only the light emitted from the focal plane (or a defined section) passes through the pinhole to form an image. CLSM provides high-resolution three-dimensional images, making it popular for biological imaging and studying fluorescently labeled samples. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Lichtmikroskopie + c +
+
+
+
+

Konvergenzwinkelc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/ConvergenceAngle

+
+ Der Konvergenzwinkel beeinflusst die Schärfentiefe und die Auflösung des Bildes. +
+
+ Der Winkel, in dem der Elektronenstrahl in einem Elektronenmikroskop auf die Probe trifft. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Winkel + c +
+
+
+
+

Kryo-Elektronentomographiec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/CryoElectronTomography

+
+ Cryo Electron Tomography is a form of electron tomography that is performed at cryogenic temperatures. It is used to study the three-dimensional structure of frozen-hydrated samples. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Elektronentomographie + c +
+
+
+
+

Kryo-Rasterelektronenmikroskopc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/Cryo-ScanningElectronMicroscope

+
+ Ein Kryo-Rasterelektronenmikroskop wird in der Regel zur Abbildung biologischer Proben verwendet. +
+
+ A type of electron microscope that operates under cryogenic temperatures. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Rasterelektronenmikroskop + c +
+
+
+
+

Kryo-Transmissionselektronenmikroskopc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/CryoTransmissionElectronMicroscope

+
+ Ein Transmissionselektronenmikroskop, das bei kryogenen Temperaturen arbeitet. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Transmissionelektronenmikroskop + c +
+
+
+
+

Lichtmikroskopc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/LightMicroscope

+
+ Ein optisches Mikroskop, das sichtbares Licht verwendet, um Proben zu beleuchten und zu vergrößern. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Optisches Mikroskop + c +
+
hat Sub-Klassen
+
+ Polarisiertes Lichtmikroskop + c +
+
+
+
+

Lichtmikroskopiec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/LightMicroscopy

+
+ Die Verwendung von sichtbarem Licht zur Beobachtung und Untersuchung kleiner Objekte oder Strukturen. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ optical microscopy +
+
hat Sub-Klassen
+
+ Fluoreszenzmikroskopie + c, Konfokale Laser-Scanning-Mikroskopie + c, Polarisationslichtmikroskopie + c +
+
+
+
+

Mechanisches Polierenc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/MechanicalPolishing

+
+ Mechanical polishing is a material preparation technique used to enhance the surface quality and finish of a sample by removing thin layers of material through abrasion. It involves using abrasive materials, such as polishing cloths, diamond suspensions, or abrasive pastes, along with a polishing machine or device. The process typically includes several steps, each using progressively finer abrasives to achieve a smooth and mirror-like surface. + +During mechanical polishing, the sample is pressed against the rotating polishing medium with controlled pressure. The abrasive particles embedded in the medium gradually remove surface irregularities, scratches, and imperfections, resulting in improved flatness, clarity, and reflectivity. The process can be adjusted to target specific levels of surface roughness and precision. + +Mechanical polishing is commonly used in various scientific and industrial applications, such as metallography, materials science, electronics, and optics. It is an essential step before further analyses like microscopy, spectroscopy, or surface profiling, as it provides a pristine surface for accurate characterization and observation of material properties. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ manufacturing process +
+
+
+
+

Monochromatischer Strahlc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/MonochromaticBeam

+
+ Ein Elektronenstrahl, der aus Elektronen mit einem engen Energiebereich besteht, der in der Regel durch Elektronenenergiefilter oder Monochromatoren erreicht wird. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Strahl + c +
+
+
+
+

Monochromatorc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/Monochromator

+
+ Ein optisches Gerät, das einen engen Wellenlängenbereich von Licht überträgt. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ processing node +
+
+
+
+

Neigungskorrekturc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/TiltCorrection

+
+ Eine Korrektur, die bei Bildern von gekippten Proben in der Elektronenmikroskopie angewendet wird, um durch den Kippwinkel verursachte Verzerrungen zu kompensieren. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ analysing process +
+
+
+
+

Oberflächenstrukturc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/SurfaceStructure

+
+ Die Anordnung und die Merkmale der äußersten Schicht eines Materials. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ object +
+
+
+
+

Optisches Mikroskopc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/OpticalMicroscope

+
+ Ein Mikroskop, das sichtbares Licht und Linsen zur Vergrößerung von Proben verwendet. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ micropscope +
+
hat Sub-Klassen
+
+ Lichtmikroskop + c +
+
+
+
+

Ortsauflösungc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/SpatialResolution

+
+ Die Fähigkeit eines Bildgebungssystems, feine Details in einem Objekt anzuzeigen. Sie bezieht sich auf das kleinste wahrnehmbare Detail in einem Bild. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Auflösung + c +
+
+
+
+

Physikalischer Prozessc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/PhysicalProcess

+
+ A physical process refers to a sequence of events or interactions that occur in the physical world and can be described and analyzed based on the principles of physics. These processes involve the transformation of energy, matter, or both, and they often follow established laws and theories of physics. In particular, a physical process may just occur due to natural circumstances and does not necessarily have to be induced by human activities or interactions. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ process +
+
hat Sub-Klassen
+
+ Diffraktion + c, Inelastische Streuung + c +
+
+
+
+

Pixel Sizec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/PixelSize

+
+ Die Größe der einzelnen Pixel in einem digitalen Bild oder einer Anzeige. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ value object +
+
+
+
+

Polarisationslichtmikroskopiec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/PolarizedLightMicroscopy

+
+ Polarized Light Microscopy is a technique that uses polarized light to enhance the contrast and reveal structural information in transparent samples. Light waves vibrate in specific directions, and by using polarizers to control the orientation of light waves, polarized light microscopy can highlight birefringent materials, anisotropic structures, and stress patterns within samples. This technique is valuable for studying crystalline structures, fibers, and anisotropic materials. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Lichtmikroskopie + c +
+
+
+
+

Polarisiertes Lichtmikroskopc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/PolarizedLightMicroscope

+
+ Ein Mikroskop, das polarisiertes Licht zur Beobachtung und Analyse von Proben verwendet. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Lichtmikroskop + c +
+
+
+
+

Polschuhc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/PolePiece

+
+ Eine Komponente der Elektronensäule in einem Elektronenmikroskop, die den Elektronenstrahl fokussiert und auf die Probe lenkt. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ processing node +
+
+
+
+

Primärstrahlc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/PrimaryBeam

+
+ Der Hauptelektronenstrahl, der von der Elektronenquelle ausgesandt und auf die Probe in einem Elektronenmikroskop gerichtet wird. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Strahl + c +
+
+
+
+

Quellec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/Source

+
+ Die Elektronenquelle, z. B. ein Wolframfaden oder eine Feldemissionskathode, die in einem Elektronenmikroskop Elektronen emittiert. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ processing node +
+
+
+
+

Rahmenscanzeitc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/FrameTime

+
+ Die Zeit, die benötigt wird, um ein Einzelbild in einem Elektronenmikroskop aufzunehmen und anzuzeigen. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ duration +
+
+
+
+

Rasterelektronenmikroskopc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/ScanningElectronMicroscope

+
+ Ein Mikroskop, das Bilder einer Probe erzeugt, indem es diese mit einem fokussierten Elektronenstrahl abtastet. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ electron microscope +
+
hat Sub-Klassen
+
+ Kryo-Rasterelektronenmikroskop + c, Umwelt-Rasterelektronenmikroskop + c +
+
+
+
+

Rasterelektronenmikroskopiec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/ScanningElectronMicroscopy

+
+ Scanning Electron Microscopy is a microscopy technique that uses a focused beam of electrons to scan the surface of a sample. The interaction of the electrons with the sample generates signals that provide information about the sample's topography, morphology, and composition. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ electron microscopy +
+
hat Sub-Klassen
+
+ Atmosphärische Rasterelektronenmikroskopie + c, Bildgebende Orientierungsmikroskopie + c, Elektronenkanal-Kontrastbildgebung + c, Feldemissions-Rasterelektronenmikroskopie + c, Umgebungs-Rasterelektronenmikroskopie + c +
+
+
+
+

Rastersondenmikroskopc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/ScanningProbeMicroscope

+
+ Ein Mikroskoptyp, der Oberflächen abbildet, indem er eine Sonde über die Probe führt. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ electron microscope +
+
hat Sub-Klassen
+
+ Rastertunnelmikroskop + c +
+
+
+
+

Rastersondenmikroskopiec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/ScanningProbeMicroscopy

+
+ Scanning Probe Microscopy encompasses various techniques, such as Atomic Force Microscopy (AFM) and Scanning Tunneling Microscopy (STM), that use a sharp probe to scan a sample's surface. These techniques provide high-resolution images and information about surface properties on the nanometer scale. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ electron microscopy +
+
hat Sub-Klassen
+
+ Rastertunnelmikroskopie + c +
+
+
+
+

Rastertransmissionselektronenmikroskopc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/ScanningTransmissionElectronMicroscope

+
+ Eine Art von Transmissionselektronenmikroskop, bei dem ein fokussierter Elektronenstrahl über die Probe gescannt wird. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Transmissionelektronenmikroskop + c +
+
hat Sub-Klassen
+
+ Hochwinkel-Dunkelfeld-Rastertransmissionselektronenmikroskop mit annularem Winkel + c +
+
+
+
+

Rastertransmissionselektronenmikroskopiec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/ScanningTransmissionElectronMicroscopy

+
+ Scanning Transmission Electron Microscopy is a technique that combines the principles of scanning and transmission electron microscopy. It allows imaging and spectroscopy with high spatial resolution. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ transmission electron microscopy + c +
+
hat Sub-Klassen
+
+ 4D-Rastertransmissionselektronenmikroskopie + c, Rastertransmissionselektronenmikroskopie Elektronen-Energieverlust-Spektroskopie + c, Ringförmige Dunkelfeld-Rastertransmissionselektronenmikroskopie + c, Ringförmige Hellfeld-Rastertransmissionselektronenmikroskopie + c +
+
+
+
+

Rastertransmissionselektronenmikroskopie Elektronen-Energieverlust-Spektroskopiec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/ScanningTransmissionElectronMicroscopy-ElectronEnergyLossSpectroscopy

+
+ STEM-EELS combines STEM imaging with electron energy loss spectroscopy to provide information about the elemental composition and electronic structure of a sample at high spatial resolution. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Rastertransmissionselektronenmikroskopie + c +
+
+
+
+

Rastertunnelmikroskopc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/ScanningTunnelingMicroscope

+
+ Ein Mikroskop, das Quanten-Tunneling nutzt, um Oberflächen auf atomarer Ebene abzubilden. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Rastersondenmikroskop + c +
+
+
+
+

Rastertunnelmikroskopiec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/ScanningTunnelingMicroscopy

+
+ Scanning Tunneling Microscopy is a technique that uses a conducting probe to measure the tunneling current between the probe and the sample's surface. It provides atomic-scale images of surfaces and is often used to study conductive materials. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Rastersondenmikroskopie + c +
+
+
+
+

Rekonstruktionc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/Reconstruction

+
+ Der Prozess der Erstellung eines dreidimensionalen Bildes oder Modells aus zweidimensionalen Daten. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ analysing process +
+
hat Sub-Klassen
+
+ Dreidimensionale Rekonstruktion + c, Tomographische Rekonstruktion + c +
+
+
+
+

Ringförmige Dunkelfeld-Rastertransmissionselektronenmikroskopiec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/AnnularDarkFieldScanningTransmissionElectronMicroscopy

+
+ ADF STEM is a technique that utilizes a specific arrangement of detectors to create contrast in STEM images based on the scattered electrons. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Rastertransmissionselektronenmikroskopie + c +
+
+
+
+

Ringförmige Hellfeld-Rastertransmissionselektronenmikroskopiec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/AnnularBrightFieldScanningTransmissionElectronMicroscopy

+
+ ABF STEM is a technique that utilizes a specific arrangement of detectors to enhance contrast in STEM images, particularly for heavy elements. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Rastertransmissionselektronenmikroskopie + c +
+
+
+
+

Röntgen-Mappingc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/XRayMapping

+
+ X-ray mapping is a process that involves generating spatially resolved images of the distribution of specific elements within a sample. By collecting X-ray signals emitted or scattered from a sample at different points, an elemental map can be created, showing the varying concentrations of elements across the sample's surface. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Röntgenanalyse + c +
+
hat Sub-Klassen
+
+ Röntgenabsorptionsspektroskopie + c, Röntgenfluoreszenz + c, Röntgenphotoelektronenspektroskopie + c +
+
+
+
+

Röntgen-Mikroanalysec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/XRayMicroanalysis

+
+ X-ray Microanalysis is a technique that combines microscopy and X-ray analysis to study the elemental composition of small regions within a sample. It involves focusing an electron or X-ray beam on a specific area of the sample and measuring the X-rays emitted from that area to determine the elemental composition. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Röntgenanalyse + c +
+
hat Sub-Klassen
+
+ Energy Dispersive X-ray Spectroscopy energiedispersive Röntgenanalyse + c +
+
+
+
+

Röntgenabsorptionsspektroskopiec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/XRayAbsorptionSpectroscopy

+
+ X-ray Absorption Spectroscopy is a technique used to study the electronic and local structural properties of materials by analyzing the absorption of X-rays. It involves measuring how X-rays are absorbed by a sample at various energies, providing insights into the electronic states and chemical environments of specific elements. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Röntgen-Mapping + c +
+
+
+
+

Röntgenabsorptionsspektroskopie im Nahbereichc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/XRayAbsorptionNearEdgeSpectroscopy

+
+ X-ray Absorption Near Edge Spectroscopy (XANES) is a specialized technique used in the field of materials science and spectroscopy to study the electronic and structural properties of materials. It focuses on the X-ray absorption spectra of atoms within a sample, particularly the region just above the absorption edge of an element's X-ray absorption spectrum. +In XANES, a sample is irradiated with X-rays, typically generated by a synchrotron radiation source. These X-rays are tuned to specific energy levels corresponding to the absorption edges of the elements of interest in the sample. As the X-rays are absorbed by the sample, the energy levels of the atoms are altered, leading to various transitions in their electron configurations. The resulting X-ray absorption spectrum is measured, specifically targeting the energies just above the absorption edge. +XANES provides information about the electronic structure of the atoms within the sample, including the oxidation state, chemical bonding, and local environment of the absorbing element. The fine details of the XANES spectrum offer insights into the atomic and molecular interactions, as well as the coordination and symmetry of atoms in different chemical environments. +This technique is widely used in various scientific fields, including chemistry, solid-state physics, and materials science. XANES helps researchers understand the properties and behavior of materials at the atomic level, making it an invaluable tool for investigating the characteristics of complex materials, catalysts, minerals, and biomolecules. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Spektroskopie + c +
+
+
+
+

Röntgenanalysec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/XRayAnalysis

+
+ X-ray analysis is a technique used to investigate the composition and structure of materials by exposing them to X-rays. When X-rays interact with a material, they can be absorbed, scattered, or diffracted in ways that provide information about the material's internal arrangement of atoms and its elemental composition. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ analysing process +
+
hat Sub-Klassen
+
+ Röntgen-Mapping + c, Röntgen-Mikroanalyse + c +
+
+
+
+

Röntgenemissionsspektrometer mit weicher Röntgenstrahlungc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/SoftXRayEmissionSpectrometer

+
+ Ein Instrument zur Analyse der Emission weicher Röntgenstrahlen aus einer Probe. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Spektrometer + c +
+
+
+
+

Röntgenfluoreszenzc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/XRayFluorescence

+
+ X-ray Fluorescence is a method used to determine the elemental composition of a sample by analyzing the X-rays emitted when the sample is exposed to high-energy X-rays. The X-rays emitted are characteristic of the elements present, allowing for quantitative analysis of the sample's elemental composition. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Röntgen-Mapping + c +
+
+
+
+

Röntgenphotoelektronenspektroskopiec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/XRayPhotoelectronSpectroscopy

+
+ X-ray Photoelectron Spectroscopy, also known as Electron Spectroscopy for Chemical Analysis (ESCA), is a technique used to study the surface chemistry of materials. XPS involves bombarding a sample's surface with X-rays to emit photoelectrons, which are then analyzed to determine the elemental composition and chemical states of the elements on the surface. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Röntgen-Mapping + c +
+
+
+
+

Rücklaufzeitc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/FlybackTime

+
+ Die Zeit, die der Elektronenstrahl benötigt, um nach dem Abtasten einer Zeile oder eines Bildes in einem Elektronenmikroskop in seine Ausgangsposition zurückzukehren. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ duration +
+
+
+
+

Rückstreuelektronenbeugungc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/ElectronBackscatterDiffraction

+
+ Electron Backscatter Diffraction is a microscopy technique used to analyze the crystallographic orientation and microstructure of materials. It involves directing an electron beam onto a sample's surface and measuring the backscattered electrons. By analyzing the diffraction patterns of these electrons, researchers can determine the crystallographic orientation of the material's grains. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Elektronenbeugung + c +
+
+
+
+

Scheibe der geringsten Konfusionc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/DiskOfLeastConfusion

+
+ Der Bereich in der Bildebene eines Elektronenmikroskops, in dem der Elektronenstrahl auf die kleinste Punktgröße fokussiert wird, wodurch die durch sphärische Aberration verursachte Unschärfe minimiert wird. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ cross section area +
+
+
+
+

Sekundärionen-Massenspektrometriec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/SecondaryIonMassSpectrometry

+
+ Secondary Ion Mass Spectrometry (SIMS) is an advanced analytical technique used to determine the elemental and isotopic composition of solid surfaces and thin films at a very high sensitivity and spatial resolution. It is widely employed in various scientific and industrial applications, including materials science, semiconductor research, and surface analysis. +In SIMS, a focused beam of high-energy primary ions is directed at a sample's surface. The impact of these primary ions causes the ejection of secondary ions from the sample's surface. These secondary ions are then extracted, mass-separated, and detected using a mass spectrometer. The mass spectrometer measures the mass-to-charge ratios of the secondary ions, providing information about the elemental and isotopic composition of the sample. +The sensitivity and spatial resolution of SIMS allow researchers to analyze very small areas, often down to the micrometer or nanometer scale. This makes SIMS particularly valuable for investigating surface composition, depth profiling of layered structures, and detecting trace elements in complex materials. The technique is non-destructive in its elemental analysis, which is beneficial for studying delicate samples or preserving valuable materials. +SIMS has applications in diverse fields, including materials characterization, semiconductor device analysis, biological and medical research, and geological studies. It provides essential information about the chemical composition, structure, and distribution of elements in complex samples, contributing to advancements in materials science and various technological developments. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Spektroskopie + c +
+
+
+
+

Sensorgrößec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/ProbeSize

+
+ Die Größe der Sonde oder des Strahls, die bei Mikroskopie- oder Spektroskopieverfahren verwendet werden. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ value object +
+
+
+
+

Silizium-Driftdetektorc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/SiliconDriftDetector

+
+ Eine Art Röntgendetektor, der Hochgeschwindigkeitsleistung und hohe Energieauflösung bietet. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ processing node +
+
+
+
+

Sondenstromc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/ProbeCurrent

+
+ Der Strom der Elektronen im fokussierten Elektronenstrahl, der zur Abbildung oder Analyse in einem Elektronenmikroskop verwendet wird. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Strom + c +
+
+
+
+

Spannungc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/Voltage

+
+ Die Spannung, auch elektrische Potentialdifferenz, ist ein Maß für die elektrische potentielle Energie pro Ladungseinheit in einem elektrischen Stromkreis. Sie ist die Kraft, die den elektrischen Strom durch einen Leiter treibt. + +Hinweis: Die Spannung wird in Volt (V) gemessen und stellt die potenzielle Energiedifferenz zwischen zwei Punkten in einem Stromkreis dar. Je höher die Spannung ist, desto größer ist die Kraft, die die elektrischen Ladungen antreibt, und desto höher ist folglich auch das Potenzial für einen Stromfluss. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ value object +
+
hat Sub-Klassen
+
+ Beschleunigungsspannung + c, Extraktionsspannung + c +
+
+
+
+

Spektrometerc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/Spectrometer

+
+ Ein Instrument zur Messung der Eigenschaften von Licht in einem bestimmten Teil des elektromagnetischen Spektrums. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ processing node +
+
hat Sub-Klassen
+
+ Röntgenemissionsspektrometer mit weicher Röntgenstrahlung + c +
+
+
+
+

Spektroskopiec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/Spectroscopy

+
+ Spectroscopy is a scientific technique used to study and analyze the interaction of matter with electromagnetic radiation, such as light. It involves measuring the way in which different substances absorb, emit, or scatter light at various wavelengths or frequencies. By examining the spectrum of light emitted, absorbed, or transmitted by a sample, scientists can gain insights into its chemical composition, molecular structure, and physical properties. Spectroscopy is widely utilized in various fields, including chemistry, physics, astronomy, and biochemistry, to investigate the characteristics and behavior of materials at the atomic and molecular level. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ analysing process +
+
hat Sub-Klassen
+
+ Auger-Elektronen-Spektroskopie + c, Elektronenenergieverlustspektroskopie + c, Flugzeit-Sekundärionen-Massenspektrometrie + c, Fourier-Transformations-Infrarotspektroskopie + c, Röntgenabsorptionsspektroskopie im Nahbereich + c, Sekundärionen-Massenspektrometrie + c +
+
+
+
+

Sphärische Aberrationc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/SphericalAberration

+
+ Eine Art von optischer Aberration, die durch Abweichungen von der idealen sphärischen Form in Linsen oder Spiegeln verursacht wird. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Aberration + c +
+
+
+
+

Strahlc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/Beam

+
+ Ein Strom von Elektronen, der von der Elektronenquelle emittiert und auf die Probe in einem Elektronenmikroskop gerichtet wird. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ object +
+
hat Sub-Klassen
+
+ Einfallender Strahl + c, Elektronensonde + c, Elektronenstrahl + c, Fokussierter Strahl + c, Ionenstrahl + c, Kohärenter Strahl + c, Monochromatischer Strahl + c, Primärstrahl + c +
+
+
+
+

Strahlengangc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/BeamPath

+
+ Die Flugbahn des Elektronenstrahls auf seinem Weg durch das Elektronenmikroskop von der Elektronenquelle zur Probe und dann zum Detektor. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ object +
+
+
+
+

Strahlstromc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/BeamCurrent

+
+ Die Intensität des Elektronenstrahls, gemessen als Anzahl der Elektronen, die eine bestimmte Fläche pro Zeiteinheit durchdringen. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Strom + c +
+
+
+
+

Strahlungsenergiec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/BeamEnergy

+
+ Die Energie eines Teilchen- oder Photonenstrahls, der in verschiedenen Analyseverfahren verwendet wird. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Energie + c +
+
+
+
+

Stromc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/Current

+
+ Der Strom wird normalerweise in Ampere (A) gemessen. +
+
+ Der Fluss der elektrischen Ladung. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ value object +
+
hat Sub-Klassen
+
+ Emissionsstrom + c, Glühfadenstrom + c, Sondenstrom + c, Strahlstrom + c +
+
+
+
+

Szintillatorc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/Scintillator

+
+ Ein Material, das Licht aussendet, wenn es ionisierende Strahlung absorbiert. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ processing node +
+
+
+
+

Tomographische Rekonstruktionc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/TomographicReconstruction

+
+ Der Prozess der Rekonstruktion einer dreidimensionalen Struktur aus einer Reihe von zweidimensionalen Bildern, die aus verschiedenen Winkeln aufgenommen wurden. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Rekonstruktion + c +
+
+
+
+

transmission electron microscopyc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/TransmissionElectronMicroscopy

+
+ Transmission Electron Microscopy is a microscopy technique that involves transmitting a beam of electrons through a thin sample to create high-resolution images. It is used to study the internal structure and morphology of materials at the nanometer scale. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ electron microscopy +
+
hat Sub-Klassen
+
+ Dynamische Transmissionselektronenmikroskopie + c, Elektronentomographie + c, Hellfeld-Transmissionselektronenmikroskopie + c, Hochauflösende Transmissionselektronenmikroskopie + c, Rastertransmissionselektronenmikroskopie + c, Umgebungs-Transmissionselektronenmikroskopie + c +
+
+
+
+

Transmissionelektronenmikroskopc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/TransmissionElectronMicroscope

+
+ Ein Mikroskop, das einen Elektronenstrahl durch eine Probe sendet und ein Bild erzeugt. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ electron microscope +
+
hat Sub-Klassen
+
+ Elektronentomograph + c, Energiegefiltertes Transmissionselektronenmikroskop + c, Hochauflösendes Transmissionselektronenmikroskop + c, Kryo-Transmissionselektronenmikroskop + c, Rastertransmissionselektronenmikroskop + c, Transmissionselektronen-Aberrations-korrigiertes Mikroskop + c +
+
+
+
+

Transmissionselektronen-Aberrations-korrigiertes Mikroskopc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/TransmissionElectronAberrationCorrectedMicroscope

+
+ Ein Transmissions-Elektronenmikroskop mit Aberrationskorrektur zur Erzielung hochauflösender Bilder. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Transmissionelektronenmikroskop + c +
+
+
+
+

Umgebungs-Rasterelektronenmikroskopiec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/EnvironmentalScanningElectronMicroscopy

+
+ Environmental Scanning Electron Microscopy is a technique that allows imaging of samples in a gaseous environment. It is particularly useful for observing hydrated or non-conductive samples without the need for extensive sample preparation. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Rasterelektronenmikroskopie + c +
+
+
+
+

Umgebungs-Transmissionselektronenmikroskopiec + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/EnvironmentalTransmissionElectronMicroscopy

+
+ Environmental Transmission Electron Microscopy allows imaging and analysis of materials in controlled gaseous environments, simulating real-world conditions. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ transmission electron microscopy + c +
+
+
+
+

Umwelt-Rasterelektronenmikroskopc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/EnvironmentalScanningElectronMicroscope

+
+ Eine Art Elektronenmikroskop, das nicht leitende Proben in ihrem natürlichen Zustand abbilden kann. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Rasterelektronenmikroskop + c +
+
+
+
+

Vergrößerungc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/Magnification

+
+ Das Verhältnis zwischen der Größe eines von einem optischen System erzeugten Bildes und der Größe des Objekts. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ value object +
+
+
+
+

Verweilzeitc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/DwellTime

+
+ Die Zeitspanne, in der der Elektronenstrahl während der Bildgebung oder Analyse auf einen bestimmten Punkt oder einen interessierenden Bereich der Probe fokussiert wird. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ duration +
+
+
+
+

Volumenc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/Volume

+
+ Die Menge an Raum, die ein Stoff oder Gegenstand einnimmt. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ value object +
+
hat Sub-Klassen
+
+ Überlagerungsvolumen + c +
+
+
+
+

Wartezeitc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/WaitTime

+
+ Die Wartezeit wird häufig genutzt, um die Probe zu stabilisieren oder um die Beschädigung der Probe zu minimieren. +
+
+ Das Zeitintervall zwischen aufeinander folgenden Messungen oder Operationen in einem Elektronenmikroskop. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ duration +
+
+
+
+

Winkelc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/Angle

+
+ In der Geometrie und Trigonometrie ist ein Winkel ein Maß für eine Drehung, das erforderlich ist, um eine Linie oder Ebene mit einer anderen zur Deckung zu bringen. Ein Winkel wird durch zwei Strahlen gebildet, die einen gemeinsamen Endpunkt haben, der als Scheitelpunkt des Winkels bezeichnet wird. Die Strahlen werden als die Seiten des Winkels bezeichnet. + +Hinweis: Das Konzept des Winkels ist in der Geometrie von grundlegender Bedeutung und wird häufig verwendet, um die relative Ausrichtung von Linien, Ebenen oder Flächen zu beschreiben. Winkel werden in der Regel in Grad (°) oder Bogenmaß (rad) gemessen. +
+
+
hat Super-Klassen
+
+ value object +
+
hat Sub-Klassen
+
+ Konvergenzwinkel + c +
+
+
+
+

X-ray Diffractionc + zurück zur Übersicht oder Klassenübersicht + +

+

Röntgenbeugungc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/XRayDiffraction

+
+ X-ray Diffraction is a technique that utilizes the diffraction of X-rays by crystals to determine their atomic arrangement and lattice structure. X-ray diffraction patterns are produced when X-rays strike a crystalline sample, and the resulting pattern provides information about the arrangement of atoms in the crystal lattice. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Diffraktion + c +
+
+
+
+

Überlagerungsvolumenc + zurück zur Übersicht oder Klassenübersicht + +

+

+ IRI: https://w3id.org/pmd/mo/InteractionVolume

+
+ Der Bereich innerhalb einer Probe, in dem ein Teilchenstrahl mit dem Material in Wechselwirkung tritt. +
+
+
ist definiert durch
+
+ https://w3id.org/pmd/mo +
+
+
+
hat Super-Klassen
+
+ Volumen + c +
+
+
+
+

Anmerkungseigenschaften

+ +
+

abbreviationap + zurück zur Übersicht oder Übersicht der Anmerkungseigenschaften + +

+

+ IRI: https://w3id.org/pmd/co/abbreviation

+
+
+

abbreviationap + zurück zur Übersicht oder Übersicht der Anmerkungseigenschaften + +

+

+ IRI: https://w3id.org/pmd/mo/abbreviation

+
+
+

Legende zurück zu ToC

+
+c: Klassen
+
+
+
+
+

Danksagung zurück zum Inhaltsverzeichnis

+

+Die Autoren bedanken sich beiSilvio Peroni für die Entwicklung von LODE, einer Umgebung zur Live-OWL-Dokumentation, die im Abschnitt Querverweise für die Darstellung verwendet wird, bei Daniel Garijo für die Entwicklung von Widoco, welches für die Templates in dieser Anwendung verwendet wird.

+
+ + +
+ + \ No newline at end of file diff --git a/mo/index-en.html b/mo/index-en.html new file mode 100644 index 0000000..b2ce30f --- /dev/null +++ b/mo/index-en.html @@ -0,0 +1,5000 @@ + + + + + Microscopy Ontology (MO) + + + + + + + + + + + +
+
+
language de en
+

Microscopy Ontology (MO)

+ + +
+
This version:
+
https://w3id.org/pmd/mo/1.0.0
+
Authors:
+
https://orcid.org/0000-0002-3717-7104
https://orcid.org/0000-0002-7094-5371
+ +
Imported Ontologies:
+
prov-o#
prov-o-inverses#
co
+ +
Download serialization:
JSON-LD RDF/XML N-Triples TTL
License:
http://insertlicenseURIhere.org +
Visualization:
Visualize with WebVowl
+
Cite as:
+
Markus Schilling, Bernd Bayerlein, June Lau. (January 29th, 2024) MO: microscopy ontology. Version 1.0.0, https://w3id.org/pmd/mo/
+
+ +Provenance of this page
+
+
+
+Ontology Specification Draft +
+
+ + +

Microscopy Ontology (MO): Overview back to ToC

+ +This ontology has the following classes and properties. +

Classes

+

Annotation Properties

+
+ + + +

Cross-reference for Microscopy Ontology (MO) classes, object properties and data properties back to ToC

+This section provides details for each class and property defined by Microscopy Ontology (MO). +
+

Classes

+ +
+

4D Scanning Transmission Electron Microscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/4D-ScanningTransmissionElectronMicroscopy

+
+ 4D-STEM is a technique that adds an additional dimension of information, time, to STEM imaging, allowing the study of dynamic processes in materials at high spatial and temporal resolutions. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Scanning Transmission Electron Microscopy + c +
+
+
+
+

Aberrationc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/Aberration

+
+ Deviation from the ideal or expected behavior, often used in the context of optical systems. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ value object +
+
has sub-classes
+
+ Chromatic Aberration + c, Spherical Aberration + c +
+
+
+
+

Acceleration Voltagec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/AccelerationVoltage

+
+ The acceleration voltage determines the kinetic energy of the electrons and affects the resolution and depth of penetration in the sample. +
+
+ This class decribes the voltage applied to an electron microscope to accelerate the electrons emitted from the electron source (usually a cathode) towards the specimen. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Voltage + c +
+
+
+
+

Anglec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/Angle

+
+ In geometry and trigonometry, an angle is a measure of the amount of rotation needed to bring one line or plane into coincidence with another. An angle is formed by two rays that share a common endpoint, known as the vertex of the angle. The rays are referred to as the sides of the angle. + +Note: The concept of an angle is fundamental in geometry and is often used to describe the relative orientation of lines, planes, or surfaces. Angles are typically measured in degrees (°) or radians (rad). +
+
+
has super-classes
+
+ value object +
+
has sub-classes
+
+ Convergence Angle + c +
+
+
+
+

Annular Bright Field Scanning Transmission Electron Microscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/AnnularBrightFieldScanningTransmissionElectronMicroscopy

+
+ ABF STEM is a technique that utilizes a specific arrangement of detectors to enhance contrast in STEM images, particularly for heavy elements. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Scanning Transmission Electron Microscopy + c +
+
+
+
+

Annular Dark Field Scanning Transmission Electron Microscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/AnnularDarkFieldScanningTransmissionElectronMicroscopy

+
+ ADF STEM is a technique that utilizes a specific arrangement of detectors to create contrast in STEM images based on the scattered electrons. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Scanning Transmission Electron Microscopy + c +
+
+
+
+

Anodec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/Anode

+
+ The anode is the positively charged electrode in an electrochemical cell or other electrically driven systems. It serves as the site where oxidation occurs, meaning electrons are released from the anode, typically moving towards the cathode. In devices like batteries, the anode is where electrons are produced during the discharge process. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Electrode + c +
+
+
+
+

Atmospheric Scanning Electron Microscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/AtmosphericScanningElectronMicroscopy

+
+ Atmospheric Scanning Electron Microscopy is a technique that allows samples to be imaged in their natural, hydrated state at atmospheric pressure. It enables the observation of biological and other hydrated specimens without the need for dehydration or coating. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Scanning Electron Microscopy + c +
+
+
+
+

Atomic Resolutionc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/AtomicResolution

+
+ The ability to resolve individual atoms in an image or structure. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Resolution + c +
+
+
+
+

Auger Electron Spectroscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/AugerElectronSpectroscopy

+
+ Auger Electron Spectroscopy (AES) is a surface analysis technique used in the field of materials science and surface chemistry. It involves the study of the interactions between high-energy electrons and atoms on the surface of a material. The process is named after Pierre Auger, who made significant contributions to the understanding of this phenomenon. +In AES, a sample's surface is bombarded with a beam of high-energy electrons, which causes inner-shell electrons to be ejected from the atoms in the sample. These vacancies are then filled by higher-energy electrons from outer shells, leading to the emission of Auger electrons. The energy of these emitted Auger electrons is characteristic of the specific elements present in the sample and their chemical states. +By analyzing the energy spectrum of the emitted Auger electrons, researchers can identify the elements present on the surface of the material and determine their relative concentrations. Auger Electron Spectroscopy provides valuable information about the elemental composition and chemical bonding of the top few atomic layers of a material, making it a powerful tool for studying surface properties, thin films, and interfaces in various scientific and industrial applications. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Spectroscopy + c +
+
+
+
+

Beamc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/Beam

+
+ A stream of electrons emitted from the electron source and directed towards the specimen in an electron microscope. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ object +
+
has sub-classes
+
+ Coherent Beam + c, Electron Beam + c, Electron Probe + c, Focused Beam + c, Incident Beam + c, Ion Beam + c, Monochromatic Beam + c, Primary Beam + c +
+
+
+
+

Beam Currentc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/BeamCurrent

+
+ The intensity of the electron beam, measured as the number of electrons passing through a given area per unit time. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Current + c +
+
+
+
+

Beam Energyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/BeamEnergy

+
+ The energy of a particle or photon beam used in various analytical techniques. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Energy + c +
+
+
+
+

Beam Pathc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/BeamPath

+
+ The trajectory followed by the electron beam as it travels through the electron microscope, from the electron source to the specimen and then to the detector. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ object +
+
+
+
+

Bright Field Transmission Electron Microscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/BrightFieldTransmissionElectronMicroscopy

+
+ Bright Field TEM is an imaging mode in transmission electron microscopy where regions of the sample that scatter electrons less appear brighter in the resulting image. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ transmission electron microscopy + c +
+
+
+
+

camera lengthc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/CameraLength

+
+ The distance between the specimen and the camera used to capture images in an electron microscope. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ length +
+
+
+
+

Cathodec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/Cathode

+
+ The cathode is the negatively charged electrode in an electrochemical cell or other electrical systems. It is the site where reduction occurs, leading to the acceptance of electrons from the external circuit. In batteries, for instance, the cathode is where electrons are consumed during the discharge process. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Electrode + c +
+
+
+
+

Chromatic Aberrationc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ChromaticAberration

+
+ The failure of a lens to focus all colors to the same convergence point. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Aberration + c +
+
+
+
+

Coherent Beamc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/CoherentBeam

+
+ An electron beam in which the individual electrons maintain a constant phase relationship with each other, resulting in interference patterns when interacting with a sample. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Beam + c +
+
+
+
+

Collection Efficiencyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/CollectionEfficiency

+
+ The ability of a detector or system to capture and record relevant signals or data. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Efficiency + c +
+
+
+
+

Condensor Lensec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/CondensorLense

+
+ A condenser lens is an optical element used in microscopy and other optical systems to focus and control the illumination on the sample being observed. It is positioned below the light source and directs light rays onto the specimen, making the illumination uniform and optimizing the quality of the sample's image. The condenser lens helps enhance contrast, resolution, and overall image quality by ensuring that a consistent and concentrated light beam illuminates the specimen. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ processing node +
+
+
+
+

Confocal Laser Scanning Microscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ConfocalLaserScanningMicroscopy

+
+ Confocal Laser Scanning Microscopy (CLSM) is an optical imaging technique that enhances resolution and eliminates out-of-focus blur by using a spatial pinhole and laser illumination. A focused laser beam is scanned across the sample's surface or depth, and only the light emitted from the focal plane (or a defined section) passes through the pinhole to form an image. CLSM provides high-resolution three-dimensional images, making it popular for biological imaging and studying fluorescently labeled samples. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Light Microscopy + c +
+
+
+
+

Convergence Anglec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ConvergenceAngle

+
+ The convergence angle affects the depth of field and resolution of the image. +
+
+ The angle at which the electron beam converges onto the specimen in an electron microscope. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Angle + c +
+
+
+
+

Cryo Electron Tomographyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/CryoElectronTomography

+
+ Cryo Electron Tomography is a form of electron tomography that is performed at cryogenic temperatures. It is used to study the three-dimensional structure of frozen-hydrated samples. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Electron Tomography + c +
+
+
+
+

Cryo Scanning Electron Microscopec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/Cryo-ScanningElectronMicroscope

+
+ A cryo-scanning electron microscope is typically used for imaging biological samples. +
+
+ A type of electron microscope that operates under cryogenic temperatures. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Scanning Electron Microscope + c +
+
+
+
+

Cryo Transmission Electron Microscopec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/CryoTransmissionElectronMicroscope

+
+ A transmission electron microscope that operates at cryogenic temperatures. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Transmission Electron Microscope + c +
+
+
+
+

Currentc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/Current

+
+ The current is typically measured in amperes (A). +
+
+ The flow of electric charge. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ value object +
+
has sub-classes
+
+ Beam Current + c, Emission Current + c, Filament Current + c, Probe Current + c +
+
+
+
+

Detector Quantum Efficiencyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/DetectorQuantumEfficiency

+
+ The efficiency with which a detector converts incident radiation into useful signals. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Efficiency + c +
+
+
+
+

Diffractionc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/Diffraction

+
+ The bending of electron waves as they pass through a crystalline sample, resulting in the formation of diffraction patterns that provide information about the crystal structure. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Physical Process + c +
+
has sub-classes
+
+ Electron Diffraction + c, Selected Area Electron Diffraction + c, X-ray Diffraction Röntgenbeugung + c +
+
+
+
+

Diffraction Patternc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/DiffractionPattern

+
+ The pattern of spots or bands produced on a detector when electrons diffract after interacting with a crystalline sample. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ digital entity +
+
has sub-classes
+
+ Electron Diffraction Pattern + c +
+
+
+
+

Disk Of Least Confusionc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/DiskOfLeastConfusion

+
+ The region in the image plane of an electron microscope where the electron beam is focused to the smallest spot size, minimizing the blurring effect due to spherical aberration. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ cross section area +
+
+
+
+

Dwell Timec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/DwellTime

+
+ The amount of time that the electron beam is focused on a specific point or region of interest on the specimen during imaging or analysis. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ duration +
+
+
+
+

Dynamic Focus Correctionc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/DynamicFocusCorrection

+
+ A technique used in electron microscopy to continuously adjust the focus of the electron beam in real-time to maintain optimal image quality, especially when imaging uneven or rough surfaces. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ analysing process +
+
+
+
+

Dynamic Refocusingc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/DynamicRefocusing

+
+ The process of adjusting the focus of the electron beam during imaging to compensate for changes in the specimen height or topography, ensuring that the entire specimen remains in focus. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ analysing process +
+
+
+
+

Dynamic Transmission Electron Microscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/DynamicTransmissionElectronMicroscopy

+
+ Dynamic Transmission Electron Microscopy is a technique that uses ultrafast electron pulses to capture rapid processes in materials with nanosecond to picosecond time resolution. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ transmission electron microscopy + c +
+
+
+
+

Efficiencyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/Efficiency

+
+ The ratio of useful output to total input in any system. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ value object +
+
has sub-classes
+
+ Collection Efficiency + c, Detector Quantum Efficiency + c +
+
+
+
+

Electrodec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/Electrode

+
+ An electrode is a conductor through which electric current enters or exits a substance. In the context of electrochemical systems, an electrode facilitates the transfer of electrons between a solid material and an electrolyte. Electrodes are essential components in batteries, fuel cells, electroplating, and other electrochemical processes. They play a critical role in facilitating chemical reactions and energy storage or conversion. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ processing node +
+
has sub-classes
+
+ Anode + c, Cathode + c +
+
+
+
+

Electron Backscatter Diffractionc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ElectronBackscatterDiffraction

+
+ Electron Backscatter Diffraction is a microscopy technique used to analyze the crystallographic orientation and microstructure of materials. It involves directing an electron beam onto a sample's surface and measuring the backscattered electrons. By analyzing the diffraction patterns of these electrons, researchers can determine the crystallographic orientation of the material's grains. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Electron Diffraction + c +
+
+
+
+

Electron Beamc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ElectronBeam

+
+ A stream of electrons emitted from an electron source and accelerated towards the specimen in an electron microscope for imaging or analysis. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Beam + c +
+
+
+
+

Electron Channeling Contrast Imagingc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ElectronChannelingContrastImaging

+
+ Electron Channeling Contrast Imaging is a technique used in SEM or TEM to study crystallographic defects, such as dislocations, in crystalline materials. It utilizes the contrast resulting from the deviation of electron trajectories due to crystal defects. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Scanning Electron Microscopy + c +
+
+
+
+

Electron Diffractionc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ElectronDiffraction

+
+ The phenomenon of electron waves diffracting as they pass through a crystalline sample, providing information about the crystal structure. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Diffraction + c +
+
has sub-classes
+
+ Electron Backscatter Diffraction + c +
+
+
+
+

Electron Diffraction Patternc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ElectronDiffractionPattern

+
+ The pattern of spots or rings produced on a detector when electrons diffract after interacting with a crystalline sample, used to determine the crystal structure. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Diffraction Pattern + c +
+
+
+
+

Electron Energy Loss Spectroscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ElectronEnergyLossSpectroscopy

+
+ Electron Energy Loss Spectroscopy (EELS) is a specialized analytical technique in the field of materials science and electron microscopy. It involves the measurement of the energy loss of electrons as they interact with a sample. EELS is commonly performed in transmission electron microscopy (TEM) setups. +In EELS, a focused beam of high-energy electrons is directed at a sample. As these electrons pass through the material, they can lose energy through various interactions, such as inelastic scattering and excitation of inner-shell electrons. The energy loss is measured and analyzed to gain information about the sample's composition, electronic structure, and bonding characteristics. +By studying the energy loss spectrum, researchers can identify the types of atoms present in the sample, determine their chemical states, and gather insights into the electronic properties of the material. EELS is particularly useful for investigating nanoscale materials, thin films, and interfaces, providing valuable information about their electronic and atomic structure. It is a powerful technique for understanding the behavior of materials at the nanometer scale and plays a significant role in advancing fields such as materials science, nanotechnology, and semiconductor research. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Spectroscopy + c +
+
+
+
+

Electron Microprobec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ElectronMicroprobe

+
+ An analytical instrument used to determine the chemical composition of materials. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ electron microscope +
+
has sub-classes
+
+ Electron Probe Micro Analyzer + c +
+
+
+
+

Electron Probec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ElectronProbe

+
+ The focused electron beam used for imaging or analysis in an electron microscope. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Beam + c +
+
+
+
+

Electron Probe Micro Analyzerc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ElectronProbeMicroAnalyzer

+
+ An instrument used for elemental analysis of solid materials by bombarding them with a focused electron beam. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Electron Microprobe + c +
+
+
+
+

Electron Tomographc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ElectronTomograph

+
+ An instrument used for tomographic imaging using electrons. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Transmission Electron Microscope + c +
+
+
+
+

Electron Tomographyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ElectronTomography

+
+ Electron Tomography is a technique that involves collecting a series of transmission electron microscopy (TEM) images from different angles to reconstruct a three-dimensional image of a sample. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ transmission electron microscopy + c +
+
has sub-classes
+
+ Cryo Electron Tomography + c +
+
+
+
+

Emission Currentc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/EmissionCurrent

+
+ Der Emissionsstrom wird normalerweise in Mikroampere (μA) oder Milliampere (mA) gemessen. +
+
+ The current of electrons emitted from the electron source. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Current + c +
+
+
+
+

Energyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/Energy

+
+ The energy is usually measured in joules (J) or electron volts (eV). +
+
+ The capacity of a physical system to perform work. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ value object +
+
has sub-classes
+
+ Beam Energy + c, Energy Loss + c +
+
+
+
+

Energy Dispersive X-ray Spectroscopyc + back to ToC or Class ToC + +

+

energiedispersive Röntgenanalysec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/EnergyDispersiveXRaySpectroscopy

+
+ Energy Dispersive X-ray Spectroscopy is a technique used to analyze the elemental composition of a sample by detecting the X-rays emitted when the sample is bombarded with electrons in an electron microscope or other instrument. EDS provides information about the elements present in the sample and their relative concentrations. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ X-ray Microanalysis + c +
+
+
+
+

Energy Lossc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/EnergyLoss

+
+ The loss of energy experienced by a particle as it passes through a medium. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Energy + c +
+
+
+
+

Energy Resolutionc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/EnergyResolution

+
+ The ability of a detector to distinguish between different energy levels of incident radiation. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Resolution + c +
+
+
+
+

Energy-filtered Transmission Electron Microscopec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/EnergyFilteredTransmissionElectronMicroscope

+
+ A transmission electron microscope equipped with an energy filter to select electrons of specific energy levels. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Transmission Electron Microscope + c +
+
+
+
+

Environmental Scanning Electron Microscopec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/EnvironmentalScanningElectronMicroscope

+
+ A type of electron microscope that can image non-conductive samples in their natural state. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Scanning Electron Microscope + c +
+
+
+
+

Environmental Scanning Electron Microscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/EnvironmentalScanningElectronMicroscopy

+
+ Environmental Scanning Electron Microscopy is a technique that allows imaging of samples in a gaseous environment. It is particularly useful for observing hydrated or non-conductive samples without the need for extensive sample preparation. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Scanning Electron Microscopy + c +
+
+
+
+

Environmental Transmission Electron Microscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/EnvironmentalTransmissionElectronMicroscopy

+
+ Environmental Transmission Electron Microscopy allows imaging and analysis of materials in controlled gaseous environments, simulating real-world conditions. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ transmission electron microscopy + c +
+
+
+
+

Extraction Voltagec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ExtractionVoltage

+
+ The voltage applied to the electron source in an electron microscope to extract electrons from the cathode and accelerate them towards the specimen. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Voltage + c +
+
+
+
+

Field Emission Gunc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/FieldEmissionGun

+
+ A Field Emission Gun is an electron gun used in electron microscopes to produce an electron beam with extremely high brightness and coherence. It relies on the phenomenon of field emission, where electrons are emitted from a sharp emitter tip under the influence of a strong electric field. FEGs are capable of producing highly focused electron beams, leading to enhanced imaging resolution and analytical capabilities. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Gun + c +
+
+
+
+

Field Emission Scanning Electron Microscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/FieldEmissionScanningElectronMicroscopy

+
+ Field Emission Scanning Electron Microscopy is an advanced form of SEM that uses a field emitter to produce a highly focused electron beam, enabling high-resolution imaging and surface analysis. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Scanning Electron Microscopy + c +
+
+
+
+

Field Ion Microscopec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/FieldIonMicroscope

+
+ A type of microscope that uses the phenomenon of field ionization to image surfaces with atomic resolution. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Ion Microscope + c +
+
+
+
+

Field Ion Microscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/FieldIonMicroscopy

+
+ Field Ion Microscopy is a specialized microscopy technique that uses a strong electric field to ionize atoms on the surface of a metal sample. These ionized atoms are then repelled from the surface and can be detected to create an image of the sample's surface topography at atomic resolution. FIM is especially powerful for imaging the arrangement of atoms on metallic surfaces. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Ion Microscopy + c +
+
+
+
+

Filament Currentc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/FilamentCurrent

+
+ The current passing through the filament of the electron gun in an electron microscope, which heats up the filament to emit electrons. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Current + c +
+
+
+
+

Fluorescence Microscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/FluorescenceMicroscopy

+
+ Fluorescence Microscopy is an optical imaging technique used to visualize biological structures and molecules that fluoresce when illuminated with specific wavelengths of light. Fluorescent molecules absorb light energy and then emit light of a longer wavelength, allowing the visualization of specific molecules or cellular components. Fluorescence microscopy is widely used in cell biology, molecular biology, and medical research. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Light Microscopy + c +
+
+
+
+

Flyback Timec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/FlybackTime

+
+ The time taken for the electron beam to return to its starting position after scanning a line or frame in an electron microscope. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ duration +
+
+
+
+

Focal Lengthc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/FocalLength

+
+ The distance between the focal point (where the electron beam is focused) and the lens or aperture in an electron microscope. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ length +
+
+
+
+

Focal Planec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/FocalPlane

+
+ The plane perpendicular to the optical axis of an electron microscope where the electron beam is focused to form an image. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ area +
+
+
+
+

Focal Pointc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/FocalPoint

+
+ The point at which the electron beam is focused in an electron microscope to form an image of the specimen. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ digital entity +
+
+
+
+

Focus(ed) Ion Beam - Scanning Electron Microscopec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/FocusedIonBeam-ScanningElectronMicroscope

+
+ A dual-beam microscope that combines a focused ion beam with a scanning electron microscope. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Ion Microscope + c +
+
has sub-classes
+
+ Helium Ion Microscope + c +
+
+
+
+

Focused Beamc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/FocusedBeam

+
+ An electron beam that has been narrowed or focused to a small spot size on the specimen surface. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Beam + c +
+
+
+
+

Focused Ion Beam Scanning Electron Microscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/FocusedIonBeamScanningElectronMicroscopy

+
+ Focused Ion Beam Scanning Electron Microscopy is a combination of two techniques: focused ion beam (FIB) and scanning electron microscopy (SEM). FIB-SEM systems use a focused ion beam to both image and modify a sample's surface. The ion beam can be used for milling, cutting, and deposition processes, making FIB-SEM a versatile tool for materials analysis, sample preparation, and three-dimensional imaging. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Ion Microscopy + c +
+
+
+
+

Fourier Transform Infrared Spectroscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/FourierTransformInfraredSpectroscopy

+
+ Fourier Transform Infrared Spectroscopy (FTIR) is a powerful analytical technique used in various scientific disciplines to study the molecular composition and properties of materials. It is based on the interaction between infrared radiation and a sample, providing information about the vibrational modes of molecules. +In FTIR spectroscopy, an infrared beam is directed through a sample, and the interaction between the radiation and the sample's molecules leads to absorption of specific infrared frequencies. Each type of molecular bond and functional group in the sample absorbs infrared radiation at characteristic frequencies, which correspond to the energies of molecular vibrations. The resulting absorption spectrum represents a fingerprint of the sample's molecular structure. +The Fourier transform technique is used to convert the raw data obtained from the absorption measurements into a Fourier-transformed spectrum. This transformation improves the signal-to-noise ratio and enhances the accuracy of spectral analysis. +FTIR is extensively used in a wide range of fields, including chemistry, biology, materials science, pharmaceuticals, and environmental science. It is employed for qualitative and quantitative analysis, identification of compounds, monitoring chemical reactions, and studying molecular interactions. FTIR spectroscopy provides valuable insights into molecular bonding, functional groups, and the chemical composition of substances, making it an indispensable tool in modern analytical science. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Spectroscopy + c +
+
+
+
+

Frame Timec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/FrameTime

+
+ The time required to capture and display a single frame of an image in an electron microscope. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ duration +
+
+
+
+

Gatan Image Filterc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/GatanImageFilter

+
+ A Gatan Image Filter refers to an image filter manufactured by Gatan, Inc., a company specializing in electron microscopy and related products. Gatan's image filters are designed for electron microscopes and electron energy loss spectroscopy (EELS) applications. These filters allow researchers to control and enhance the acquisition of electron energy loss spectra while obtaining high-resolution images of the sample under investigation. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Image Filter + c +
+
+
+
+

Gunc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/Gun

+
+ In the context of electron microscopy and particle acceleration, a "gun" typically refers to an electron or particle source that generates and emits the particles. In electron microscopy, an electron gun is used to generate a beam of electrons for imaging or analysis. In particle accelerators, a particle gun generates and launches particles at high speeds for various experimental purposes. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ processing node +
+
has sub-classes
+
+ Field Emission Gun + c +
+
+
+
+

Helium Ion Microscopec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/HeliumIonMicroscope

+
+ A type of microscope that uses helium ions to image samples with high resolution. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Focus(ed) Ion Beam - Scanning Electron Microscope + c +
+
+
+
+

Helium Ion Microscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/HeliumIonMicroscopy

+
+ Helium Ion Microscopy is a microscopy technique that uses a beam of helium ions instead of electrons to interact with a sample's surface. The smaller mass of helium ions compared to electrons allows for higher resolution imaging and reduced sample damage. HIM provides high-resolution images and is often used for imaging delicate or sensitive samples. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Ion Microscopy + c +
+
+
+
+

High Resolution Transmission Electron Microscopec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/HighResolutionTransmissionElectronMicroscope

+
+ A transmission electron microscope capable of achieving high-resolution images. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Transmission Electron Microscope + c +
+
+
+
+

High Resolution Transmission Electron Microscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/HighResolutionTransmissionElectronMicroscopy

+
+ High Resolution TEM is a technique that provides exceptionally high-resolution images of a sample's internal structure, revealing atomic-level details. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ transmission electron microscopy + c +
+
+
+
+

High-angle Annular Dark-field Scanning Transmission Electron Microscopec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/HighAngleAnnularDarkFieldScanningTransmissionElectronMicroscope

+
+ A type of scanning transmission electron microscope that detects scattered electrons at high angles. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Scanning Transmission Electron Microscope + c +
+
+
+
+

Image Filterc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ImageFilter

+
+ An image filter is a device or component used in imaging systems, such as microscopy or photography, to modify the appearance of an image by selectively altering certain characteristics. Filters can be used to adjust contrast, brightness, color balance, and other image properties. They are often used to enhance specific features or to correct for distortions caused by lighting conditions or optical imperfections. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ processing node +
+
has sub-classes
+
+ Gatan Image Filter + c +
+
+
+
+

Incident Beamc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/IncidentBeam

+
+ The electron beam that strikes the specimen surface in an electron microscope, causing interactions that produce signals for imaging or analysis. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Beam + c +
+
+
+
+

Inelastic Scatteringc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/InelasticScattering

+
+ Inelastic scattering is a scattering process that involves the transfer of energy and momentum between the incident particle (e.g., photon, electron) and the target particle. During inelastic scattering, the energy of the scattered particle changes, and the interaction may result in various outcomes, such as excitation, emission, or other energy transfers that alter the internal state of the target particle. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Physical Process + c +
+
+
+
+

Interaction Volumec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/InteractionVolume

+
+ The region within a sample where a particle beam interacts with the material. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Volume + c +
+
+
+
+

Ion Beamc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/IonBeam

+
+ A stream of ions used for grinding or analysis, especially in ion microscopy techniques for imaging. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Beam + c +
+
+
+
+

Ion Microscopec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/IonMicroscope

+
+ A microscope that uses ions to create images of samples. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ micropscope +
+
has sub-classes
+
+ Field Ion Microscope + c, Focus(ed) Ion Beam - Scanning Electron Microscope + c +
+
+
+
+

Ion Microscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/IonMicroscopy

+
+ Ion Microscopy refers to a group of microscopy techniques that use focused ion beams to image and analyze samples. These techniques utilize ions, such as protons or heavy ions, instead of electrons or photons to interact with the sample, providing valuable information about its composition and structure. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ microscopy process +
+
has sub-classes
+
+ Field Ion Microscopy + c, Focused Ion Beam Scanning Electron Microscopy + c, Helium Ion Microscopy + c +
+
+
+
+

Light Microscopec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/LightMicroscope

+
+ An optical microscope that uses visible light to illuminate and magnify samples. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Optical Microscope + c +
+
has sub-classes
+
+ Polarized Light Microscope + c +
+
+
+
+

Light Microscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/LightMicroscopy

+
+ The use of visible light to observe and study small objects or structures. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ optical microscopy +
+
has sub-classes
+
+ Confocal Laser Scanning Microscopy + c, Fluorescence Microscopy + c, Polarized Light Microscopy + c +
+
+
+
+

Magnificationc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/Magnification

+
+ The ratio of the size of an image produced by an optical system to the size of the object. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ value object +
+
+
+
+

Mechanical Polishingc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/MechanicalPolishing

+
+ Mechanical polishing is a material preparation technique used to enhance the surface quality and finish of a sample by removing thin layers of material through abrasion. It involves using abrasive materials, such as polishing cloths, diamond suspensions, or abrasive pastes, along with a polishing machine or device. The process typically includes several steps, each using progressively finer abrasives to achieve a smooth and mirror-like surface. + +During mechanical polishing, the sample is pressed against the rotating polishing medium with controlled pressure. The abrasive particles embedded in the medium gradually remove surface irregularities, scratches, and imperfections, resulting in improved flatness, clarity, and reflectivity. The process can be adjusted to target specific levels of surface roughness and precision. + +Mechanical polishing is commonly used in various scientific and industrial applications, such as metallography, materials science, electronics, and optics. It is an essential step before further analyses like microscopy, spectroscopy, or surface profiling, as it provides a pristine surface for accurate characterization and observation of material properties. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ manufacturing process +
+
+
+
+

Monochromatic Beamc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/MonochromaticBeam

+
+ An electron beam consisting of electrons with a narrow range of energies, typically achieved using electron energy filters or monochromators. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Beam + c +
+
+
+
+

Monochromatorc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/Monochromator

+
+ An optical device that transmits a narrow range of wavelengths of light. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ processing node +
+
+
+
+

Optical Microscopec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/OpticalMicroscope

+
+ A microscope that uses visible light and lenses to magnify specimens. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ micropscope +
+
has sub-classes
+
+ Light Microscope + c +
+
+
+
+

Orientation Imaging Microscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/OrientationImagingMicroscopy

+
+ Orientation Imaging Microscopy is a microscopy technique used to map the crystallographic orientations of grains within a material. It is commonly applied in SEM to study the microstructural properties of polycrystalline materials. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Scanning Electron Microscopy + c +
+
+
+
+

Physical Processc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/PhysicalProcess

+
+ A physical process refers to a sequence of events or interactions that occur in the physical world and can be described and analyzed based on the principles of physics. These processes involve the transformation of energy, matter, or both, and they often follow established laws and theories of physics. In particular, a physical process may just occur due to natural circumstances and does not necessarily have to be induced by human activities or interactions. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ process +
+
has sub-classes
+
+ Diffraction + c, Inelastic Scattering + c +
+
+
+
+

Pixel Sizec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/PixelSize

+
+ The size of individual pixels in a digital image or display. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ value object +
+
+
+
+

Polarized Light Microscopec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/PolarizedLightMicroscope

+
+ A microscope that uses polarized light to observe and analyze samples. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Light Microscope + c +
+
+
+
+

Polarized Light Microscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/PolarizedLightMicroscopy

+
+ Polarized Light Microscopy is a technique that uses polarized light to enhance the contrast and reveal structural information in transparent samples. Light waves vibrate in specific directions, and by using polarizers to control the orientation of light waves, polarized light microscopy can highlight birefringent materials, anisotropic structures, and stress patterns within samples. This technique is valuable for studying crystalline structures, fibers, and anisotropic materials. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Light Microscopy + c +
+
+
+
+

Pole Piecec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/PolePiece

+
+ A component of the electron column in an electron microscope that focuses and guides the electron beam onto the specimen. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ processing node +
+
+
+
+

Primary Beamc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/PrimaryBeam

+
+ The main electron beam emitted from the electron source and directed towards the specimen in an electron microscope. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Beam + c +
+
+
+
+

Probe Currentc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ProbeCurrent

+
+ The current of electrons in the focused electron beam used for imaging or analysis in an electron microscope. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Current + c +
+
+
+
+

Probe Sizec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ProbeSize

+
+ The size of the probe or beam used in microscopy or spectroscopy techniques. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ value object +
+
+
+
+

Reconstructionc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/Reconstruction

+
+ The process of creating a three-dimensional image or model from two-dimensional data. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ analysing process +
+
has sub-classes
+
+ Three dimensional reconstruction + c, Tomographic Reconstruction + c +
+
+
+
+

Resolutionc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/Resolution

+
+ In various contexts, resolution refers to the degree of detail that can be discerned in an image, measurement, or other representation of an object or phenomenon. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ value object +
+
has sub-classes
+
+ Atomic Resolution + c, Energy Resolution + c, Spatial Resolution + c +
+
+
+
+

Scanning Electron Microscopec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ScanningElectronMicroscope

+
+ A microscope that produces images of a sample by scanning it with a focused beam of electrons. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ electron microscope +
+
has sub-classes
+
+ Cryo Scanning Electron Microscope + c, Environmental Scanning Electron Microscope + c +
+
+
+
+

Scanning Electron Microscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ScanningElectronMicroscopy

+
+ Scanning Electron Microscopy is a microscopy technique that uses a focused beam of electrons to scan the surface of a sample. The interaction of the electrons with the sample generates signals that provide information about the sample's topography, morphology, and composition. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ electron microscopy +
+
has sub-classes
+
+ Atmospheric Scanning Electron Microscopy + c, Electron Channeling Contrast Imaging + c, Environmental Scanning Electron Microscopy + c, Field Emission Scanning Electron Microscopy + c, Orientation Imaging Microscopy + c +
+
+
+
+

Scanning Probe Microscopec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ScanningProbeMicroscope

+
+ A type of microscope that images surfaces by scanning a probe over the sample. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ electron microscope +
+
has sub-classes
+
+ Scanning Tunneling Microscope + c +
+
+
+
+

Scanning Probe Microscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ScanningProbeMicroscopy

+
+ Scanning Probe Microscopy encompasses various techniques, such as Atomic Force Microscopy (AFM) and Scanning Tunneling Microscopy (STM), that use a sharp probe to scan a sample's surface. These techniques provide high-resolution images and information about surface properties on the nanometer scale. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ electron microscopy +
+
has sub-classes
+
+ Scanning Tunneling Microscopy + c +
+
+
+
+

Scanning Transmission Electron Microscopec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ScanningTransmissionElectronMicroscope

+
+ A type of transmission electron microscope where a focused electron beam is scanned across the sample. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Transmission Electron Microscope + c +
+
has sub-classes
+
+ High-angle Annular Dark-field Scanning Transmission Electron Microscope + c +
+
+
+
+

Scanning Transmission Electron Microscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ScanningTransmissionElectronMicroscopy

+
+ Scanning Transmission Electron Microscopy is a technique that combines the principles of scanning and transmission electron microscopy. It allows imaging and spectroscopy with high spatial resolution. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ transmission electron microscopy + c +
+
has sub-classes
+
+ 4D Scanning Transmission Electron Microscopy + c, Annular Bright Field Scanning Transmission Electron Microscopy + c, Annular Dark Field Scanning Transmission Electron Microscopy + c, Scanning Transmission Electron Microscopy Electron Energy Loss Spectroscopy + c +
+
+
+
+

Scanning Transmission Electron Microscopy Electron Energy Loss Spectroscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ScanningTransmissionElectronMicroscopy-ElectronEnergyLossSpectroscopy

+
+ STEM-EELS combines STEM imaging with electron energy loss spectroscopy to provide information about the elemental composition and electronic structure of a sample at high spatial resolution. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Scanning Transmission Electron Microscopy + c +
+
+
+
+

Scanning Tunneling Microscopec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ScanningTunnelingMicroscope

+
+ A microscope that uses quantum tunneling to image surfaces at the atomic level. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Scanning Probe Microscope + c +
+
+
+
+

Scanning Tunneling Microscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ScanningTunnelingMicroscopy

+
+ Scanning Tunneling Microscopy is a technique that uses a conducting probe to measure the tunneling current between the probe and the sample's surface. It provides atomic-scale images of surfaces and is often used to study conductive materials. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Scanning Probe Microscopy + c +
+
+
+
+

Scintillatorc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/Scintillator

+
+ A material that emits light when it absorbs ionizing radiation. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ processing node +
+
+
+
+

Secondary Ion Mass Spectrometryc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/SecondaryIonMassSpectrometry

+
+ Secondary Ion Mass Spectrometry (SIMS) is an advanced analytical technique used to determine the elemental and isotopic composition of solid surfaces and thin films at a very high sensitivity and spatial resolution. It is widely employed in various scientific and industrial applications, including materials science, semiconductor research, and surface analysis. +In SIMS, a focused beam of high-energy primary ions is directed at a sample's surface. The impact of these primary ions causes the ejection of secondary ions from the sample's surface. These secondary ions are then extracted, mass-separated, and detected using a mass spectrometer. The mass spectrometer measures the mass-to-charge ratios of the secondary ions, providing information about the elemental and isotopic composition of the sample. +The sensitivity and spatial resolution of SIMS allow researchers to analyze very small areas, often down to the micrometer or nanometer scale. This makes SIMS particularly valuable for investigating surface composition, depth profiling of layered structures, and detecting trace elements in complex materials. The technique is non-destructive in its elemental analysis, which is beneficial for studying delicate samples or preserving valuable materials. +SIMS has applications in diverse fields, including materials characterization, semiconductor device analysis, biological and medical research, and geological studies. It provides essential information about the chemical composition, structure, and distribution of elements in complex samples, contributing to advancements in materials science and various technological developments. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Spectroscopy + c +
+
+
+
+

Selected Area Electron Diffractionc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/SelectedAreaElectronDiffraction

+
+ Selected Area Electron Diffraction is a technique used in transmission electron microscopy (TEM) to study the crystallographic orientation of small regions within a sample. By selecting a specific area of the sample and directing an electron beam onto it, diffraction patterns are generated. These patterns offer insights into the sample's crystal structure and orientation. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Diffraction + c +
+
+
+
+

Silicon Drift Detectorc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/SiliconDriftDetector

+
+ A type of X-ray detector that offers high-speed performance and high energy resolution. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ processing node +
+
+
+
+

Soft X-ray Emission Spectrometerc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/SoftXRayEmissionSpectrometer

+
+ An instrument used to analyze the emission of soft X-rays from a sample. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Spectrometer + c +
+
+
+
+

Sourcec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/Source

+
+ The electron source, such as a tungsten filament or field-emission cathode, that emits electrons in an electron microscope. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ processing node +
+
+
+
+

Spatial Resolutionc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/SpatialResolution

+
+ The ability of an imaging system to discern fine details in an object. It refers to the smallest discernible detail in an image. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Resolution + c +
+
+
+
+

Spectrometerc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/Spectrometer

+
+ An instrument used to measure properties of light over a specific portion of the electromagnetic spectrum. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ processing node +
+
has sub-classes
+
+ Soft X-ray Emission Spectrometer + c +
+
+
+
+

Spectroscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/Spectroscopy

+
+ Spectroscopy is a scientific technique used to study and analyze the interaction of matter with electromagnetic radiation, such as light. It involves measuring the way in which different substances absorb, emit, or scatter light at various wavelengths or frequencies. By examining the spectrum of light emitted, absorbed, or transmitted by a sample, scientists can gain insights into its chemical composition, molecular structure, and physical properties. Spectroscopy is widely utilized in various fields, including chemistry, physics, astronomy, and biochemistry, to investigate the characteristics and behavior of materials at the atomic and molecular level. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ analysing process +
+
has sub-classes
+
+ Auger Electron Spectroscopy + c, Electron Energy Loss Spectroscopy + c, Fourier Transform Infrared Spectroscopy + c, Secondary Ion Mass Spectrometry + c, Time Of Flight Secondary Ion Mass Spectrometry + c, X-ray Absorption Near Edge Spectroscopy + c +
+
+
+
+

Spherical Aberrationc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/SphericalAberration

+
+ A type of optical aberration caused by deviations from the ideal spherical shape in lenses or mirrors. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Aberration + c +
+
+
+
+

Surface Structurec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/SurfaceStructure

+
+ The arrangement and features of the outermost layer of a material. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ object +
+
+
+
+

Three dimensional reconstructionc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/3DReconstruction

+
+ The process of creating a three-dimensional representation of an object or scene from two-dimensional images or data. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Reconstruction + c +
+
+
+
+

Tilt Correctionc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/TiltCorrection

+
+ A correction applied to images obtained from tilted specimens in electron microscopy to compensate for distortions caused by the tilt angle. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ analysing process +
+
+
+
+

Time Of Flight Secondary Ion Mass Spectrometryc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/TimeOfFlightSecondaryIonMassSpectrometry

+
+ Time-of-Flight Secondary Ion Mass Spectrometry (TOF-SIMS) is an advanced surface analysis technique used to determine the elemental and molecular composition of solid surfaces and thin films with high sensitivity and spatial resolution. It is employed in various scientific and industrial fields, including materials science, nanotechnology, biomedicine, and semiconductor research. +TOF-SIMS builds upon the principles of Secondary Ion Mass Spectrometry (SIMS), where a focused beam of high-energy primary ions is directed at a sample's surface, causing the ejection of secondary ions. In TOF-SIMS, the flight time of these secondary ions is measured as they travel through a field-free region and enter a time-of-flight mass spectrometer. The mass spectrometer measures the time taken by the ions to reach the detector, which is directly proportional to their mass-to-charge ratio. +By analyzing the flight times of the secondary ions, TOF-SIMS can determine the elemental, isotopic, and molecular composition of the sample's surface. It provides information about the presence of specific elements, chemical compounds, and molecular fragments, along with their spatial distribution. The high sensitivity of TOF-SIMS allows for the detection of trace elements and molecular species in complex samples. +TOF-SIMS is valuable for characterizing surfaces at the nanoscale, profiling layered structures, investigating organic and inorganic materials, and studying biological specimens. Its ability to provide detailed chemical information while maintaining spatial resolution makes it an essential tool for understanding surface properties and material interactions in a wide range of applications. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Spectroscopy + c +
+
+
+
+

Tomographic Reconstructionc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/TomographicReconstruction

+
+ The process of reconstructing a three-dimensional structure from a series of two-dimensional images taken at different angles. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Reconstruction + c +
+
+
+
+

Transmission Electron Aberration-corrected Microscopec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/TransmissionElectronAberrationCorrectedMicroscope

+
+ A transmission electron microscope equipped with aberration correction to achieve high-resolution imaging. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Transmission Electron Microscope + c +
+
+
+
+

Transmission Electron Microscopec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/TransmissionElectronMicroscope

+
+ A microscope that transmits a beam of electrons through a specimen, forming an image. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ electron microscope +
+
has sub-classes
+
+ Cryo Transmission Electron Microscope + c, Electron Tomograph + c, Energy-filtered Transmission Electron Microscope + c, High Resolution Transmission Electron Microscope + c, Scanning Transmission Electron Microscope + c, Transmission Electron Aberration-corrected Microscope + c +
+
+
+
+

transmission electron microscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/TransmissionElectronMicroscopy

+
+ Transmission Electron Microscopy is a microscopy technique that involves transmitting a beam of electrons through a thin sample to create high-resolution images. It is used to study the internal structure and morphology of materials at the nanometer scale. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ electron microscopy +
+
has sub-classes
+
+ Bright Field Transmission Electron Microscopy + c, Dynamic Transmission Electron Microscopy + c, Electron Tomography + c, Environmental Transmission Electron Microscopy + c, High Resolution Transmission Electron Microscopy + c, Scanning Transmission Electron Microscopy + c +
+
+
+
+

Voltagec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/Voltage

+
+ Voltage, also known as electric potential difference, is a measure of the electric potential energy per unit charge in an electrical circuit. It is the force or pressure that drives electric current through a conductor. + +Note: Voltage is measured in volts (V), and it represents the potential energy difference between two points in a circuit. The higher the voltage, the greater the force pushing the electric charges, and consequently, the higher the potential for current to flow. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ value object +
+
has sub-classes
+
+ Acceleration Voltage + c, Extraction Voltage + c +
+
+
+
+

Volumec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/Volume

+
+ The amount of space that a substance or object occupies. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ value object +
+
has sub-classes
+
+ Interaction Volume + c +
+
+
+
+

Wait Timec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/WaitTime

+
+ The wait time is often used to allow the specimen to stabilize or to minimize sample damage. +
+
+ The time interval between successive measurements or operations in an electron microscope. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ duration +
+
+
+
+

Working Distancec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/WorkingDistance

+
+ The working distance affects the depth of field and the resolution of the image. +
+
+ The distance between the electron microscope objective lens and the specimen surface when the electron beam is focused on the specimen. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ distance +
+
+
+
+

X-ray Absorption Near Edge Spectroscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/XRayAbsorptionNearEdgeSpectroscopy

+
+ X-ray Absorption Near Edge Spectroscopy (XANES) is a specialized technique used in the field of materials science and spectroscopy to study the electronic and structural properties of materials. It focuses on the X-ray absorption spectra of atoms within a sample, particularly the region just above the absorption edge of an element's X-ray absorption spectrum. +In XANES, a sample is irradiated with X-rays, typically generated by a synchrotron radiation source. These X-rays are tuned to specific energy levels corresponding to the absorption edges of the elements of interest in the sample. As the X-rays are absorbed by the sample, the energy levels of the atoms are altered, leading to various transitions in their electron configurations. The resulting X-ray absorption spectrum is measured, specifically targeting the energies just above the absorption edge. +XANES provides information about the electronic structure of the atoms within the sample, including the oxidation state, chemical bonding, and local environment of the absorbing element. The fine details of the XANES spectrum offer insights into the atomic and molecular interactions, as well as the coordination and symmetry of atoms in different chemical environments. +This technique is widely used in various scientific fields, including chemistry, solid-state physics, and materials science. XANES helps researchers understand the properties and behavior of materials at the atomic level, making it an invaluable tool for investigating the characteristics of complex materials, catalysts, minerals, and biomolecules. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Spectroscopy + c +
+
+
+
+

X-ray Absorption Spectroscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/XRayAbsorptionSpectroscopy

+
+ X-ray Absorption Spectroscopy is a technique used to study the electronic and local structural properties of materials by analyzing the absorption of X-rays. It involves measuring how X-rays are absorbed by a sample at various energies, providing insights into the electronic states and chemical environments of specific elements. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ X-ray Mapping + c +
+
+
+
+

X-ray Analysisc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/XRayAnalysis

+
+ X-ray analysis is a technique used to investigate the composition and structure of materials by exposing them to X-rays. When X-rays interact with a material, they can be absorbed, scattered, or diffracted in ways that provide information about the material's internal arrangement of atoms and its elemental composition. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ analysing process +
+
has sub-classes
+
+ X-ray Mapping + c, X-ray Microanalysis + c +
+
+
+
+

X-ray Diffractionc + back to ToC or Class ToC + +

+

Röntgenbeugungc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/XRayDiffraction

+
+ X-ray Diffraction is a technique that utilizes the diffraction of X-rays by crystals to determine their atomic arrangement and lattice structure. X-ray diffraction patterns are produced when X-rays strike a crystalline sample, and the resulting pattern provides information about the arrangement of atoms in the crystal lattice. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Diffraction + c +
+
+
+
+

X-ray Fluorescencec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/XRayFluorescence

+
+ X-ray Fluorescence is a method used to determine the elemental composition of a sample by analyzing the X-rays emitted when the sample is exposed to high-energy X-rays. The X-rays emitted are characteristic of the elements present, allowing for quantitative analysis of the sample's elemental composition. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ X-ray Mapping + c +
+
+
+
+

X-ray Mappingc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/XRayMapping

+
+ X-ray mapping is a process that involves generating spatially resolved images of the distribution of specific elements within a sample. By collecting X-ray signals emitted or scattered from a sample at different points, an elemental map can be created, showing the varying concentrations of elements across the sample's surface. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ X-ray Analysis + c +
+
has sub-classes
+
+ X-ray Absorption Spectroscopy + c, X-ray Fluorescence + c, X-ray Photoelectron Spectroscopy + c +
+
+
+
+

X-ray Microanalysisc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/XRayMicroanalysis

+
+ X-ray Microanalysis is a technique that combines microscopy and X-ray analysis to study the elemental composition of small regions within a sample. It involves focusing an electron or X-ray beam on a specific area of the sample and measuring the X-rays emitted from that area to determine the elemental composition. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ X-ray Analysis + c +
+
has sub-classes
+
+ Energy Dispersive X-ray Spectroscopy energiedispersive Röntgenanalyse + c +
+
+
+
+

X-ray Photoelectron Spectroscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/XRayPhotoelectronSpectroscopy

+
+ X-ray Photoelectron Spectroscopy, also known as Electron Spectroscopy for Chemical Analysis (ESCA), is a technique used to study the surface chemistry of materials. XPS involves bombarding a sample's surface with X-rays to emit photoelectrons, which are then analyzed to determine the elemental composition and chemical states of the elements on the surface. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ X-ray Mapping + c +
+
+
+
+

Annotation Properties

+ +
+

abbreviationap + back to ToC or Annotation Property ToC + +

+

+ IRI: https://w3id.org/pmd/co/abbreviation

+
+
+

abbreviationap + back to ToC or Annotation Property ToC + +

+

+ IRI: https://w3id.org/pmd/mo/abbreviation

+
+
+

Legend back to ToC

+
+c: Classes
+
+
+
+
+

Acknowledgments back to ToC

+

+The authors would like to thank Silvio Peroni for developing LODE, a Live OWL Documentation Environment, which is used for representing the Cross Referencing Section of this document and Daniel Garijo for developing Widoco, the program used to create the template used in this documentation.

+
+ + +
+ + \ No newline at end of file diff --git a/mo/index.html b/mo/index.html new file mode 100644 index 0000000..b2ce30f --- /dev/null +++ b/mo/index.html @@ -0,0 +1,5000 @@ + + + + + Microscopy Ontology (MO) + + + + + + + + + + + +
+
+
language de en
+

Microscopy Ontology (MO)

+ + +
+
This version:
+
https://w3id.org/pmd/mo/1.0.0
+
Authors:
+
https://orcid.org/0000-0002-3717-7104
https://orcid.org/0000-0002-7094-5371
+ +
Imported Ontologies:
+
prov-o#
prov-o-inverses#
co
+ +
Download serialization:
JSON-LD RDF/XML N-Triples TTL
License:
http://insertlicenseURIhere.org +
Visualization:
Visualize with WebVowl
+
Cite as:
+
Markus Schilling, Bernd Bayerlein, June Lau. (January 29th, 2024) MO: microscopy ontology. Version 1.0.0, https://w3id.org/pmd/mo/
+
+ +Provenance of this page
+
+
+
+Ontology Specification Draft +
+
+ + +

Microscopy Ontology (MO): Overview back to ToC

+ +This ontology has the following classes and properties. +

Classes

+

Annotation Properties

+
+ + + +

Cross-reference for Microscopy Ontology (MO) classes, object properties and data properties back to ToC

+This section provides details for each class and property defined by Microscopy Ontology (MO). +
+

Classes

+ +
+

4D Scanning Transmission Electron Microscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/4D-ScanningTransmissionElectronMicroscopy

+
+ 4D-STEM is a technique that adds an additional dimension of information, time, to STEM imaging, allowing the study of dynamic processes in materials at high spatial and temporal resolutions. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Scanning Transmission Electron Microscopy + c +
+
+
+
+

Aberrationc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/Aberration

+
+ Deviation from the ideal or expected behavior, often used in the context of optical systems. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ value object +
+
has sub-classes
+
+ Chromatic Aberration + c, Spherical Aberration + c +
+
+
+
+

Acceleration Voltagec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/AccelerationVoltage

+
+ The acceleration voltage determines the kinetic energy of the electrons and affects the resolution and depth of penetration in the sample. +
+
+ This class decribes the voltage applied to an electron microscope to accelerate the electrons emitted from the electron source (usually a cathode) towards the specimen. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Voltage + c +
+
+
+
+

Anglec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/Angle

+
+ In geometry and trigonometry, an angle is a measure of the amount of rotation needed to bring one line or plane into coincidence with another. An angle is formed by two rays that share a common endpoint, known as the vertex of the angle. The rays are referred to as the sides of the angle. + +Note: The concept of an angle is fundamental in geometry and is often used to describe the relative orientation of lines, planes, or surfaces. Angles are typically measured in degrees (°) or radians (rad). +
+
+
has super-classes
+
+ value object +
+
has sub-classes
+
+ Convergence Angle + c +
+
+
+
+

Annular Bright Field Scanning Transmission Electron Microscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/AnnularBrightFieldScanningTransmissionElectronMicroscopy

+
+ ABF STEM is a technique that utilizes a specific arrangement of detectors to enhance contrast in STEM images, particularly for heavy elements. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Scanning Transmission Electron Microscopy + c +
+
+
+
+

Annular Dark Field Scanning Transmission Electron Microscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/AnnularDarkFieldScanningTransmissionElectronMicroscopy

+
+ ADF STEM is a technique that utilizes a specific arrangement of detectors to create contrast in STEM images based on the scattered electrons. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Scanning Transmission Electron Microscopy + c +
+
+
+
+

Anodec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/Anode

+
+ The anode is the positively charged electrode in an electrochemical cell or other electrically driven systems. It serves as the site where oxidation occurs, meaning electrons are released from the anode, typically moving towards the cathode. In devices like batteries, the anode is where electrons are produced during the discharge process. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Electrode + c +
+
+
+
+

Atmospheric Scanning Electron Microscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/AtmosphericScanningElectronMicroscopy

+
+ Atmospheric Scanning Electron Microscopy is a technique that allows samples to be imaged in their natural, hydrated state at atmospheric pressure. It enables the observation of biological and other hydrated specimens without the need for dehydration or coating. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Scanning Electron Microscopy + c +
+
+
+
+

Atomic Resolutionc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/AtomicResolution

+
+ The ability to resolve individual atoms in an image or structure. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Resolution + c +
+
+
+
+

Auger Electron Spectroscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/AugerElectronSpectroscopy

+
+ Auger Electron Spectroscopy (AES) is a surface analysis technique used in the field of materials science and surface chemistry. It involves the study of the interactions between high-energy electrons and atoms on the surface of a material. The process is named after Pierre Auger, who made significant contributions to the understanding of this phenomenon. +In AES, a sample's surface is bombarded with a beam of high-energy electrons, which causes inner-shell electrons to be ejected from the atoms in the sample. These vacancies are then filled by higher-energy electrons from outer shells, leading to the emission of Auger electrons. The energy of these emitted Auger electrons is characteristic of the specific elements present in the sample and their chemical states. +By analyzing the energy spectrum of the emitted Auger electrons, researchers can identify the elements present on the surface of the material and determine their relative concentrations. Auger Electron Spectroscopy provides valuable information about the elemental composition and chemical bonding of the top few atomic layers of a material, making it a powerful tool for studying surface properties, thin films, and interfaces in various scientific and industrial applications. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Spectroscopy + c +
+
+
+
+

Beamc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/Beam

+
+ A stream of electrons emitted from the electron source and directed towards the specimen in an electron microscope. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ object +
+
has sub-classes
+
+ Coherent Beam + c, Electron Beam + c, Electron Probe + c, Focused Beam + c, Incident Beam + c, Ion Beam + c, Monochromatic Beam + c, Primary Beam + c +
+
+
+
+

Beam Currentc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/BeamCurrent

+
+ The intensity of the electron beam, measured as the number of electrons passing through a given area per unit time. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Current + c +
+
+
+
+

Beam Energyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/BeamEnergy

+
+ The energy of a particle or photon beam used in various analytical techniques. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Energy + c +
+
+
+
+

Beam Pathc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/BeamPath

+
+ The trajectory followed by the electron beam as it travels through the electron microscope, from the electron source to the specimen and then to the detector. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ object +
+
+
+
+

Bright Field Transmission Electron Microscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/BrightFieldTransmissionElectronMicroscopy

+
+ Bright Field TEM is an imaging mode in transmission electron microscopy where regions of the sample that scatter electrons less appear brighter in the resulting image. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ transmission electron microscopy + c +
+
+
+
+

camera lengthc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/CameraLength

+
+ The distance between the specimen and the camera used to capture images in an electron microscope. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ length +
+
+
+
+

Cathodec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/Cathode

+
+ The cathode is the negatively charged electrode in an electrochemical cell or other electrical systems. It is the site where reduction occurs, leading to the acceptance of electrons from the external circuit. In batteries, for instance, the cathode is where electrons are consumed during the discharge process. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Electrode + c +
+
+
+
+

Chromatic Aberrationc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ChromaticAberration

+
+ The failure of a lens to focus all colors to the same convergence point. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Aberration + c +
+
+
+
+

Coherent Beamc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/CoherentBeam

+
+ An electron beam in which the individual electrons maintain a constant phase relationship with each other, resulting in interference patterns when interacting with a sample. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Beam + c +
+
+
+
+

Collection Efficiencyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/CollectionEfficiency

+
+ The ability of a detector or system to capture and record relevant signals or data. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Efficiency + c +
+
+
+
+

Condensor Lensec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/CondensorLense

+
+ A condenser lens is an optical element used in microscopy and other optical systems to focus and control the illumination on the sample being observed. It is positioned below the light source and directs light rays onto the specimen, making the illumination uniform and optimizing the quality of the sample's image. The condenser lens helps enhance contrast, resolution, and overall image quality by ensuring that a consistent and concentrated light beam illuminates the specimen. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ processing node +
+
+
+
+

Confocal Laser Scanning Microscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ConfocalLaserScanningMicroscopy

+
+ Confocal Laser Scanning Microscopy (CLSM) is an optical imaging technique that enhances resolution and eliminates out-of-focus blur by using a spatial pinhole and laser illumination. A focused laser beam is scanned across the sample's surface or depth, and only the light emitted from the focal plane (or a defined section) passes through the pinhole to form an image. CLSM provides high-resolution three-dimensional images, making it popular for biological imaging and studying fluorescently labeled samples. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Light Microscopy + c +
+
+
+
+

Convergence Anglec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ConvergenceAngle

+
+ The convergence angle affects the depth of field and resolution of the image. +
+
+ The angle at which the electron beam converges onto the specimen in an electron microscope. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Angle + c +
+
+
+
+

Cryo Electron Tomographyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/CryoElectronTomography

+
+ Cryo Electron Tomography is a form of electron tomography that is performed at cryogenic temperatures. It is used to study the three-dimensional structure of frozen-hydrated samples. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Electron Tomography + c +
+
+
+
+

Cryo Scanning Electron Microscopec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/Cryo-ScanningElectronMicroscope

+
+ A cryo-scanning electron microscope is typically used for imaging biological samples. +
+
+ A type of electron microscope that operates under cryogenic temperatures. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Scanning Electron Microscope + c +
+
+
+
+

Cryo Transmission Electron Microscopec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/CryoTransmissionElectronMicroscope

+
+ A transmission electron microscope that operates at cryogenic temperatures. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Transmission Electron Microscope + c +
+
+
+
+

Currentc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/Current

+
+ The current is typically measured in amperes (A). +
+
+ The flow of electric charge. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ value object +
+
has sub-classes
+
+ Beam Current + c, Emission Current + c, Filament Current + c, Probe Current + c +
+
+
+
+

Detector Quantum Efficiencyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/DetectorQuantumEfficiency

+
+ The efficiency with which a detector converts incident radiation into useful signals. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Efficiency + c +
+
+
+
+

Diffractionc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/Diffraction

+
+ The bending of electron waves as they pass through a crystalline sample, resulting in the formation of diffraction patterns that provide information about the crystal structure. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Physical Process + c +
+
has sub-classes
+
+ Electron Diffraction + c, Selected Area Electron Diffraction + c, X-ray Diffraction Röntgenbeugung + c +
+
+
+
+

Diffraction Patternc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/DiffractionPattern

+
+ The pattern of spots or bands produced on a detector when electrons diffract after interacting with a crystalline sample. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ digital entity +
+
has sub-classes
+
+ Electron Diffraction Pattern + c +
+
+
+
+

Disk Of Least Confusionc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/DiskOfLeastConfusion

+
+ The region in the image plane of an electron microscope where the electron beam is focused to the smallest spot size, minimizing the blurring effect due to spherical aberration. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ cross section area +
+
+
+
+

Dwell Timec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/DwellTime

+
+ The amount of time that the electron beam is focused on a specific point or region of interest on the specimen during imaging or analysis. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ duration +
+
+
+
+

Dynamic Focus Correctionc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/DynamicFocusCorrection

+
+ A technique used in electron microscopy to continuously adjust the focus of the electron beam in real-time to maintain optimal image quality, especially when imaging uneven or rough surfaces. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ analysing process +
+
+
+
+

Dynamic Refocusingc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/DynamicRefocusing

+
+ The process of adjusting the focus of the electron beam during imaging to compensate for changes in the specimen height or topography, ensuring that the entire specimen remains in focus. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ analysing process +
+
+
+
+

Dynamic Transmission Electron Microscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/DynamicTransmissionElectronMicroscopy

+
+ Dynamic Transmission Electron Microscopy is a technique that uses ultrafast electron pulses to capture rapid processes in materials with nanosecond to picosecond time resolution. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ transmission electron microscopy + c +
+
+
+
+

Efficiencyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/Efficiency

+
+ The ratio of useful output to total input in any system. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ value object +
+
has sub-classes
+
+ Collection Efficiency + c, Detector Quantum Efficiency + c +
+
+
+
+

Electrodec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/Electrode

+
+ An electrode is a conductor through which electric current enters or exits a substance. In the context of electrochemical systems, an electrode facilitates the transfer of electrons between a solid material and an electrolyte. Electrodes are essential components in batteries, fuel cells, electroplating, and other electrochemical processes. They play a critical role in facilitating chemical reactions and energy storage or conversion. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ processing node +
+
has sub-classes
+
+ Anode + c, Cathode + c +
+
+
+
+

Electron Backscatter Diffractionc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ElectronBackscatterDiffraction

+
+ Electron Backscatter Diffraction is a microscopy technique used to analyze the crystallographic orientation and microstructure of materials. It involves directing an electron beam onto a sample's surface and measuring the backscattered electrons. By analyzing the diffraction patterns of these electrons, researchers can determine the crystallographic orientation of the material's grains. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Electron Diffraction + c +
+
+
+
+

Electron Beamc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ElectronBeam

+
+ A stream of electrons emitted from an electron source and accelerated towards the specimen in an electron microscope for imaging or analysis. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Beam + c +
+
+
+
+

Electron Channeling Contrast Imagingc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ElectronChannelingContrastImaging

+
+ Electron Channeling Contrast Imaging is a technique used in SEM or TEM to study crystallographic defects, such as dislocations, in crystalline materials. It utilizes the contrast resulting from the deviation of electron trajectories due to crystal defects. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Scanning Electron Microscopy + c +
+
+
+
+

Electron Diffractionc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ElectronDiffraction

+
+ The phenomenon of electron waves diffracting as they pass through a crystalline sample, providing information about the crystal structure. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Diffraction + c +
+
has sub-classes
+
+ Electron Backscatter Diffraction + c +
+
+
+
+

Electron Diffraction Patternc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ElectronDiffractionPattern

+
+ The pattern of spots or rings produced on a detector when electrons diffract after interacting with a crystalline sample, used to determine the crystal structure. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Diffraction Pattern + c +
+
+
+
+

Electron Energy Loss Spectroscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ElectronEnergyLossSpectroscopy

+
+ Electron Energy Loss Spectroscopy (EELS) is a specialized analytical technique in the field of materials science and electron microscopy. It involves the measurement of the energy loss of electrons as they interact with a sample. EELS is commonly performed in transmission electron microscopy (TEM) setups. +In EELS, a focused beam of high-energy electrons is directed at a sample. As these electrons pass through the material, they can lose energy through various interactions, such as inelastic scattering and excitation of inner-shell electrons. The energy loss is measured and analyzed to gain information about the sample's composition, electronic structure, and bonding characteristics. +By studying the energy loss spectrum, researchers can identify the types of atoms present in the sample, determine their chemical states, and gather insights into the electronic properties of the material. EELS is particularly useful for investigating nanoscale materials, thin films, and interfaces, providing valuable information about their electronic and atomic structure. It is a powerful technique for understanding the behavior of materials at the nanometer scale and plays a significant role in advancing fields such as materials science, nanotechnology, and semiconductor research. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Spectroscopy + c +
+
+
+
+

Electron Microprobec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ElectronMicroprobe

+
+ An analytical instrument used to determine the chemical composition of materials. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ electron microscope +
+
has sub-classes
+
+ Electron Probe Micro Analyzer + c +
+
+
+
+

Electron Probec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ElectronProbe

+
+ The focused electron beam used for imaging or analysis in an electron microscope. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Beam + c +
+
+
+
+

Electron Probe Micro Analyzerc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ElectronProbeMicroAnalyzer

+
+ An instrument used for elemental analysis of solid materials by bombarding them with a focused electron beam. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Electron Microprobe + c +
+
+
+
+

Electron Tomographc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ElectronTomograph

+
+ An instrument used for tomographic imaging using electrons. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Transmission Electron Microscope + c +
+
+
+
+

Electron Tomographyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ElectronTomography

+
+ Electron Tomography is a technique that involves collecting a series of transmission electron microscopy (TEM) images from different angles to reconstruct a three-dimensional image of a sample. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ transmission electron microscopy + c +
+
has sub-classes
+
+ Cryo Electron Tomography + c +
+
+
+
+

Emission Currentc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/EmissionCurrent

+
+ Der Emissionsstrom wird normalerweise in Mikroampere (μA) oder Milliampere (mA) gemessen. +
+
+ The current of electrons emitted from the electron source. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Current + c +
+
+
+
+

Energyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/Energy

+
+ The energy is usually measured in joules (J) or electron volts (eV). +
+
+ The capacity of a physical system to perform work. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ value object +
+
has sub-classes
+
+ Beam Energy + c, Energy Loss + c +
+
+
+
+

Energy Dispersive X-ray Spectroscopyc + back to ToC or Class ToC + +

+

energiedispersive Röntgenanalysec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/EnergyDispersiveXRaySpectroscopy

+
+ Energy Dispersive X-ray Spectroscopy is a technique used to analyze the elemental composition of a sample by detecting the X-rays emitted when the sample is bombarded with electrons in an electron microscope or other instrument. EDS provides information about the elements present in the sample and their relative concentrations. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ X-ray Microanalysis + c +
+
+
+
+

Energy Lossc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/EnergyLoss

+
+ The loss of energy experienced by a particle as it passes through a medium. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Energy + c +
+
+
+
+

Energy Resolutionc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/EnergyResolution

+
+ The ability of a detector to distinguish between different energy levels of incident radiation. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Resolution + c +
+
+
+
+

Energy-filtered Transmission Electron Microscopec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/EnergyFilteredTransmissionElectronMicroscope

+
+ A transmission electron microscope equipped with an energy filter to select electrons of specific energy levels. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Transmission Electron Microscope + c +
+
+
+
+

Environmental Scanning Electron Microscopec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/EnvironmentalScanningElectronMicroscope

+
+ A type of electron microscope that can image non-conductive samples in their natural state. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Scanning Electron Microscope + c +
+
+
+
+

Environmental Scanning Electron Microscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/EnvironmentalScanningElectronMicroscopy

+
+ Environmental Scanning Electron Microscopy is a technique that allows imaging of samples in a gaseous environment. It is particularly useful for observing hydrated or non-conductive samples without the need for extensive sample preparation. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Scanning Electron Microscopy + c +
+
+
+
+

Environmental Transmission Electron Microscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/EnvironmentalTransmissionElectronMicroscopy

+
+ Environmental Transmission Electron Microscopy allows imaging and analysis of materials in controlled gaseous environments, simulating real-world conditions. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ transmission electron microscopy + c +
+
+
+
+

Extraction Voltagec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ExtractionVoltage

+
+ The voltage applied to the electron source in an electron microscope to extract electrons from the cathode and accelerate them towards the specimen. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Voltage + c +
+
+
+
+

Field Emission Gunc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/FieldEmissionGun

+
+ A Field Emission Gun is an electron gun used in electron microscopes to produce an electron beam with extremely high brightness and coherence. It relies on the phenomenon of field emission, where electrons are emitted from a sharp emitter tip under the influence of a strong electric field. FEGs are capable of producing highly focused electron beams, leading to enhanced imaging resolution and analytical capabilities. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Gun + c +
+
+
+
+

Field Emission Scanning Electron Microscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/FieldEmissionScanningElectronMicroscopy

+
+ Field Emission Scanning Electron Microscopy is an advanced form of SEM that uses a field emitter to produce a highly focused electron beam, enabling high-resolution imaging and surface analysis. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Scanning Electron Microscopy + c +
+
+
+
+

Field Ion Microscopec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/FieldIonMicroscope

+
+ A type of microscope that uses the phenomenon of field ionization to image surfaces with atomic resolution. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Ion Microscope + c +
+
+
+
+

Field Ion Microscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/FieldIonMicroscopy

+
+ Field Ion Microscopy is a specialized microscopy technique that uses a strong electric field to ionize atoms on the surface of a metal sample. These ionized atoms are then repelled from the surface and can be detected to create an image of the sample's surface topography at atomic resolution. FIM is especially powerful for imaging the arrangement of atoms on metallic surfaces. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Ion Microscopy + c +
+
+
+
+

Filament Currentc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/FilamentCurrent

+
+ The current passing through the filament of the electron gun in an electron microscope, which heats up the filament to emit electrons. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Current + c +
+
+
+
+

Fluorescence Microscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/FluorescenceMicroscopy

+
+ Fluorescence Microscopy is an optical imaging technique used to visualize biological structures and molecules that fluoresce when illuminated with specific wavelengths of light. Fluorescent molecules absorb light energy and then emit light of a longer wavelength, allowing the visualization of specific molecules or cellular components. Fluorescence microscopy is widely used in cell biology, molecular biology, and medical research. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Light Microscopy + c +
+
+
+
+

Flyback Timec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/FlybackTime

+
+ The time taken for the electron beam to return to its starting position after scanning a line or frame in an electron microscope. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ duration +
+
+
+
+

Focal Lengthc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/FocalLength

+
+ The distance between the focal point (where the electron beam is focused) and the lens or aperture in an electron microscope. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ length +
+
+
+
+

Focal Planec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/FocalPlane

+
+ The plane perpendicular to the optical axis of an electron microscope where the electron beam is focused to form an image. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ area +
+
+
+
+

Focal Pointc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/FocalPoint

+
+ The point at which the electron beam is focused in an electron microscope to form an image of the specimen. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ digital entity +
+
+
+
+

Focus(ed) Ion Beam - Scanning Electron Microscopec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/FocusedIonBeam-ScanningElectronMicroscope

+
+ A dual-beam microscope that combines a focused ion beam with a scanning electron microscope. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Ion Microscope + c +
+
has sub-classes
+
+ Helium Ion Microscope + c +
+
+
+
+

Focused Beamc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/FocusedBeam

+
+ An electron beam that has been narrowed or focused to a small spot size on the specimen surface. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Beam + c +
+
+
+
+

Focused Ion Beam Scanning Electron Microscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/FocusedIonBeamScanningElectronMicroscopy

+
+ Focused Ion Beam Scanning Electron Microscopy is a combination of two techniques: focused ion beam (FIB) and scanning electron microscopy (SEM). FIB-SEM systems use a focused ion beam to both image and modify a sample's surface. The ion beam can be used for milling, cutting, and deposition processes, making FIB-SEM a versatile tool for materials analysis, sample preparation, and three-dimensional imaging. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Ion Microscopy + c +
+
+
+
+

Fourier Transform Infrared Spectroscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/FourierTransformInfraredSpectroscopy

+
+ Fourier Transform Infrared Spectroscopy (FTIR) is a powerful analytical technique used in various scientific disciplines to study the molecular composition and properties of materials. It is based on the interaction between infrared radiation and a sample, providing information about the vibrational modes of molecules. +In FTIR spectroscopy, an infrared beam is directed through a sample, and the interaction between the radiation and the sample's molecules leads to absorption of specific infrared frequencies. Each type of molecular bond and functional group in the sample absorbs infrared radiation at characteristic frequencies, which correspond to the energies of molecular vibrations. The resulting absorption spectrum represents a fingerprint of the sample's molecular structure. +The Fourier transform technique is used to convert the raw data obtained from the absorption measurements into a Fourier-transformed spectrum. This transformation improves the signal-to-noise ratio and enhances the accuracy of spectral analysis. +FTIR is extensively used in a wide range of fields, including chemistry, biology, materials science, pharmaceuticals, and environmental science. It is employed for qualitative and quantitative analysis, identification of compounds, monitoring chemical reactions, and studying molecular interactions. FTIR spectroscopy provides valuable insights into molecular bonding, functional groups, and the chemical composition of substances, making it an indispensable tool in modern analytical science. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Spectroscopy + c +
+
+
+
+

Frame Timec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/FrameTime

+
+ The time required to capture and display a single frame of an image in an electron microscope. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ duration +
+
+
+
+

Gatan Image Filterc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/GatanImageFilter

+
+ A Gatan Image Filter refers to an image filter manufactured by Gatan, Inc., a company specializing in electron microscopy and related products. Gatan's image filters are designed for electron microscopes and electron energy loss spectroscopy (EELS) applications. These filters allow researchers to control and enhance the acquisition of electron energy loss spectra while obtaining high-resolution images of the sample under investigation. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Image Filter + c +
+
+
+
+

Gunc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/Gun

+
+ In the context of electron microscopy and particle acceleration, a "gun" typically refers to an electron or particle source that generates and emits the particles. In electron microscopy, an electron gun is used to generate a beam of electrons for imaging or analysis. In particle accelerators, a particle gun generates and launches particles at high speeds for various experimental purposes. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ processing node +
+
has sub-classes
+
+ Field Emission Gun + c +
+
+
+
+

Helium Ion Microscopec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/HeliumIonMicroscope

+
+ A type of microscope that uses helium ions to image samples with high resolution. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Focus(ed) Ion Beam - Scanning Electron Microscope + c +
+
+
+
+

Helium Ion Microscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/HeliumIonMicroscopy

+
+ Helium Ion Microscopy is a microscopy technique that uses a beam of helium ions instead of electrons to interact with a sample's surface. The smaller mass of helium ions compared to electrons allows for higher resolution imaging and reduced sample damage. HIM provides high-resolution images and is often used for imaging delicate or sensitive samples. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Ion Microscopy + c +
+
+
+
+

High Resolution Transmission Electron Microscopec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/HighResolutionTransmissionElectronMicroscope

+
+ A transmission electron microscope capable of achieving high-resolution images. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Transmission Electron Microscope + c +
+
+
+
+

High Resolution Transmission Electron Microscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/HighResolutionTransmissionElectronMicroscopy

+
+ High Resolution TEM is a technique that provides exceptionally high-resolution images of a sample's internal structure, revealing atomic-level details. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ transmission electron microscopy + c +
+
+
+
+

High-angle Annular Dark-field Scanning Transmission Electron Microscopec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/HighAngleAnnularDarkFieldScanningTransmissionElectronMicroscope

+
+ A type of scanning transmission electron microscope that detects scattered electrons at high angles. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Scanning Transmission Electron Microscope + c +
+
+
+
+

Image Filterc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ImageFilter

+
+ An image filter is a device or component used in imaging systems, such as microscopy or photography, to modify the appearance of an image by selectively altering certain characteristics. Filters can be used to adjust contrast, brightness, color balance, and other image properties. They are often used to enhance specific features or to correct for distortions caused by lighting conditions or optical imperfections. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ processing node +
+
has sub-classes
+
+ Gatan Image Filter + c +
+
+
+
+

Incident Beamc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/IncidentBeam

+
+ The electron beam that strikes the specimen surface in an electron microscope, causing interactions that produce signals for imaging or analysis. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Beam + c +
+
+
+
+

Inelastic Scatteringc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/InelasticScattering

+
+ Inelastic scattering is a scattering process that involves the transfer of energy and momentum between the incident particle (e.g., photon, electron) and the target particle. During inelastic scattering, the energy of the scattered particle changes, and the interaction may result in various outcomes, such as excitation, emission, or other energy transfers that alter the internal state of the target particle. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Physical Process + c +
+
+
+
+

Interaction Volumec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/InteractionVolume

+
+ The region within a sample where a particle beam interacts with the material. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Volume + c +
+
+
+
+

Ion Beamc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/IonBeam

+
+ A stream of ions used for grinding or analysis, especially in ion microscopy techniques for imaging. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Beam + c +
+
+
+
+

Ion Microscopec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/IonMicroscope

+
+ A microscope that uses ions to create images of samples. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ micropscope +
+
has sub-classes
+
+ Field Ion Microscope + c, Focus(ed) Ion Beam - Scanning Electron Microscope + c +
+
+
+
+

Ion Microscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/IonMicroscopy

+
+ Ion Microscopy refers to a group of microscopy techniques that use focused ion beams to image and analyze samples. These techniques utilize ions, such as protons or heavy ions, instead of electrons or photons to interact with the sample, providing valuable information about its composition and structure. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ microscopy process +
+
has sub-classes
+
+ Field Ion Microscopy + c, Focused Ion Beam Scanning Electron Microscopy + c, Helium Ion Microscopy + c +
+
+
+
+

Light Microscopec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/LightMicroscope

+
+ An optical microscope that uses visible light to illuminate and magnify samples. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Optical Microscope + c +
+
has sub-classes
+
+ Polarized Light Microscope + c +
+
+
+
+

Light Microscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/LightMicroscopy

+
+ The use of visible light to observe and study small objects or structures. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ optical microscopy +
+
has sub-classes
+
+ Confocal Laser Scanning Microscopy + c, Fluorescence Microscopy + c, Polarized Light Microscopy + c +
+
+
+
+

Magnificationc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/Magnification

+
+ The ratio of the size of an image produced by an optical system to the size of the object. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ value object +
+
+
+
+

Mechanical Polishingc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/MechanicalPolishing

+
+ Mechanical polishing is a material preparation technique used to enhance the surface quality and finish of a sample by removing thin layers of material through abrasion. It involves using abrasive materials, such as polishing cloths, diamond suspensions, or abrasive pastes, along with a polishing machine or device. The process typically includes several steps, each using progressively finer abrasives to achieve a smooth and mirror-like surface. + +During mechanical polishing, the sample is pressed against the rotating polishing medium with controlled pressure. The abrasive particles embedded in the medium gradually remove surface irregularities, scratches, and imperfections, resulting in improved flatness, clarity, and reflectivity. The process can be adjusted to target specific levels of surface roughness and precision. + +Mechanical polishing is commonly used in various scientific and industrial applications, such as metallography, materials science, electronics, and optics. It is an essential step before further analyses like microscopy, spectroscopy, or surface profiling, as it provides a pristine surface for accurate characterization and observation of material properties. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ manufacturing process +
+
+
+
+

Monochromatic Beamc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/MonochromaticBeam

+
+ An electron beam consisting of electrons with a narrow range of energies, typically achieved using electron energy filters or monochromators. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Beam + c +
+
+
+
+

Monochromatorc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/Monochromator

+
+ An optical device that transmits a narrow range of wavelengths of light. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ processing node +
+
+
+
+

Optical Microscopec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/OpticalMicroscope

+
+ A microscope that uses visible light and lenses to magnify specimens. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ micropscope +
+
has sub-classes
+
+ Light Microscope + c +
+
+
+
+

Orientation Imaging Microscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/OrientationImagingMicroscopy

+
+ Orientation Imaging Microscopy is a microscopy technique used to map the crystallographic orientations of grains within a material. It is commonly applied in SEM to study the microstructural properties of polycrystalline materials. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Scanning Electron Microscopy + c +
+
+
+
+

Physical Processc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/PhysicalProcess

+
+ A physical process refers to a sequence of events or interactions that occur in the physical world and can be described and analyzed based on the principles of physics. These processes involve the transformation of energy, matter, or both, and they often follow established laws and theories of physics. In particular, a physical process may just occur due to natural circumstances and does not necessarily have to be induced by human activities or interactions. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ process +
+
has sub-classes
+
+ Diffraction + c, Inelastic Scattering + c +
+
+
+
+

Pixel Sizec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/PixelSize

+
+ The size of individual pixels in a digital image or display. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ value object +
+
+
+
+

Polarized Light Microscopec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/PolarizedLightMicroscope

+
+ A microscope that uses polarized light to observe and analyze samples. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Light Microscope + c +
+
+
+
+

Polarized Light Microscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/PolarizedLightMicroscopy

+
+ Polarized Light Microscopy is a technique that uses polarized light to enhance the contrast and reveal structural information in transparent samples. Light waves vibrate in specific directions, and by using polarizers to control the orientation of light waves, polarized light microscopy can highlight birefringent materials, anisotropic structures, and stress patterns within samples. This technique is valuable for studying crystalline structures, fibers, and anisotropic materials. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Light Microscopy + c +
+
+
+
+

Pole Piecec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/PolePiece

+
+ A component of the electron column in an electron microscope that focuses and guides the electron beam onto the specimen. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ processing node +
+
+
+
+

Primary Beamc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/PrimaryBeam

+
+ The main electron beam emitted from the electron source and directed towards the specimen in an electron microscope. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Beam + c +
+
+
+
+

Probe Currentc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ProbeCurrent

+
+ The current of electrons in the focused electron beam used for imaging or analysis in an electron microscope. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Current + c +
+
+
+
+

Probe Sizec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ProbeSize

+
+ The size of the probe or beam used in microscopy or spectroscopy techniques. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ value object +
+
+
+
+

Reconstructionc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/Reconstruction

+
+ The process of creating a three-dimensional image or model from two-dimensional data. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ analysing process +
+
has sub-classes
+
+ Three dimensional reconstruction + c, Tomographic Reconstruction + c +
+
+
+
+

Resolutionc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/Resolution

+
+ In various contexts, resolution refers to the degree of detail that can be discerned in an image, measurement, or other representation of an object or phenomenon. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ value object +
+
has sub-classes
+
+ Atomic Resolution + c, Energy Resolution + c, Spatial Resolution + c +
+
+
+
+

Scanning Electron Microscopec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ScanningElectronMicroscope

+
+ A microscope that produces images of a sample by scanning it with a focused beam of electrons. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ electron microscope +
+
has sub-classes
+
+ Cryo Scanning Electron Microscope + c, Environmental Scanning Electron Microscope + c +
+
+
+
+

Scanning Electron Microscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ScanningElectronMicroscopy

+
+ Scanning Electron Microscopy is a microscopy technique that uses a focused beam of electrons to scan the surface of a sample. The interaction of the electrons with the sample generates signals that provide information about the sample's topography, morphology, and composition. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ electron microscopy +
+
has sub-classes
+
+ Atmospheric Scanning Electron Microscopy + c, Electron Channeling Contrast Imaging + c, Environmental Scanning Electron Microscopy + c, Field Emission Scanning Electron Microscopy + c, Orientation Imaging Microscopy + c +
+
+
+
+

Scanning Probe Microscopec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ScanningProbeMicroscope

+
+ A type of microscope that images surfaces by scanning a probe over the sample. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ electron microscope +
+
has sub-classes
+
+ Scanning Tunneling Microscope + c +
+
+
+
+

Scanning Probe Microscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ScanningProbeMicroscopy

+
+ Scanning Probe Microscopy encompasses various techniques, such as Atomic Force Microscopy (AFM) and Scanning Tunneling Microscopy (STM), that use a sharp probe to scan a sample's surface. These techniques provide high-resolution images and information about surface properties on the nanometer scale. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ electron microscopy +
+
has sub-classes
+
+ Scanning Tunneling Microscopy + c +
+
+
+
+

Scanning Transmission Electron Microscopec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ScanningTransmissionElectronMicroscope

+
+ A type of transmission electron microscope where a focused electron beam is scanned across the sample. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Transmission Electron Microscope + c +
+
has sub-classes
+
+ High-angle Annular Dark-field Scanning Transmission Electron Microscope + c +
+
+
+
+

Scanning Transmission Electron Microscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ScanningTransmissionElectronMicroscopy

+
+ Scanning Transmission Electron Microscopy is a technique that combines the principles of scanning and transmission electron microscopy. It allows imaging and spectroscopy with high spatial resolution. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ transmission electron microscopy + c +
+
has sub-classes
+
+ 4D Scanning Transmission Electron Microscopy + c, Annular Bright Field Scanning Transmission Electron Microscopy + c, Annular Dark Field Scanning Transmission Electron Microscopy + c, Scanning Transmission Electron Microscopy Electron Energy Loss Spectroscopy + c +
+
+
+
+

Scanning Transmission Electron Microscopy Electron Energy Loss Spectroscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ScanningTransmissionElectronMicroscopy-ElectronEnergyLossSpectroscopy

+
+ STEM-EELS combines STEM imaging with electron energy loss spectroscopy to provide information about the elemental composition and electronic structure of a sample at high spatial resolution. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Scanning Transmission Electron Microscopy + c +
+
+
+
+

Scanning Tunneling Microscopec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ScanningTunnelingMicroscope

+
+ A microscope that uses quantum tunneling to image surfaces at the atomic level. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Scanning Probe Microscope + c +
+
+
+
+

Scanning Tunneling Microscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/ScanningTunnelingMicroscopy

+
+ Scanning Tunneling Microscopy is a technique that uses a conducting probe to measure the tunneling current between the probe and the sample's surface. It provides atomic-scale images of surfaces and is often used to study conductive materials. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Scanning Probe Microscopy + c +
+
+
+
+

Scintillatorc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/Scintillator

+
+ A material that emits light when it absorbs ionizing radiation. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ processing node +
+
+
+
+

Secondary Ion Mass Spectrometryc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/SecondaryIonMassSpectrometry

+
+ Secondary Ion Mass Spectrometry (SIMS) is an advanced analytical technique used to determine the elemental and isotopic composition of solid surfaces and thin films at a very high sensitivity and spatial resolution. It is widely employed in various scientific and industrial applications, including materials science, semiconductor research, and surface analysis. +In SIMS, a focused beam of high-energy primary ions is directed at a sample's surface. The impact of these primary ions causes the ejection of secondary ions from the sample's surface. These secondary ions are then extracted, mass-separated, and detected using a mass spectrometer. The mass spectrometer measures the mass-to-charge ratios of the secondary ions, providing information about the elemental and isotopic composition of the sample. +The sensitivity and spatial resolution of SIMS allow researchers to analyze very small areas, often down to the micrometer or nanometer scale. This makes SIMS particularly valuable for investigating surface composition, depth profiling of layered structures, and detecting trace elements in complex materials. The technique is non-destructive in its elemental analysis, which is beneficial for studying delicate samples or preserving valuable materials. +SIMS has applications in diverse fields, including materials characterization, semiconductor device analysis, biological and medical research, and geological studies. It provides essential information about the chemical composition, structure, and distribution of elements in complex samples, contributing to advancements in materials science and various technological developments. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Spectroscopy + c +
+
+
+
+

Selected Area Electron Diffractionc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/SelectedAreaElectronDiffraction

+
+ Selected Area Electron Diffraction is a technique used in transmission electron microscopy (TEM) to study the crystallographic orientation of small regions within a sample. By selecting a specific area of the sample and directing an electron beam onto it, diffraction patterns are generated. These patterns offer insights into the sample's crystal structure and orientation. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Diffraction + c +
+
+
+
+

Silicon Drift Detectorc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/SiliconDriftDetector

+
+ A type of X-ray detector that offers high-speed performance and high energy resolution. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ processing node +
+
+
+
+

Soft X-ray Emission Spectrometerc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/SoftXRayEmissionSpectrometer

+
+ An instrument used to analyze the emission of soft X-rays from a sample. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Spectrometer + c +
+
+
+
+

Sourcec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/Source

+
+ The electron source, such as a tungsten filament or field-emission cathode, that emits electrons in an electron microscope. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ processing node +
+
+
+
+

Spatial Resolutionc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/SpatialResolution

+
+ The ability of an imaging system to discern fine details in an object. It refers to the smallest discernible detail in an image. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Resolution + c +
+
+
+
+

Spectrometerc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/Spectrometer

+
+ An instrument used to measure properties of light over a specific portion of the electromagnetic spectrum. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ processing node +
+
has sub-classes
+
+ Soft X-ray Emission Spectrometer + c +
+
+
+
+

Spectroscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/Spectroscopy

+
+ Spectroscopy is a scientific technique used to study and analyze the interaction of matter with electromagnetic radiation, such as light. It involves measuring the way in which different substances absorb, emit, or scatter light at various wavelengths or frequencies. By examining the spectrum of light emitted, absorbed, or transmitted by a sample, scientists can gain insights into its chemical composition, molecular structure, and physical properties. Spectroscopy is widely utilized in various fields, including chemistry, physics, astronomy, and biochemistry, to investigate the characteristics and behavior of materials at the atomic and molecular level. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ analysing process +
+
has sub-classes
+
+ Auger Electron Spectroscopy + c, Electron Energy Loss Spectroscopy + c, Fourier Transform Infrared Spectroscopy + c, Secondary Ion Mass Spectrometry + c, Time Of Flight Secondary Ion Mass Spectrometry + c, X-ray Absorption Near Edge Spectroscopy + c +
+
+
+
+

Spherical Aberrationc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/SphericalAberration

+
+ A type of optical aberration caused by deviations from the ideal spherical shape in lenses or mirrors. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Aberration + c +
+
+
+
+

Surface Structurec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/SurfaceStructure

+
+ The arrangement and features of the outermost layer of a material. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ object +
+
+
+
+

Three dimensional reconstructionc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/3DReconstruction

+
+ The process of creating a three-dimensional representation of an object or scene from two-dimensional images or data. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Reconstruction + c +
+
+
+
+

Tilt Correctionc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/TiltCorrection

+
+ A correction applied to images obtained from tilted specimens in electron microscopy to compensate for distortions caused by the tilt angle. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ analysing process +
+
+
+
+

Time Of Flight Secondary Ion Mass Spectrometryc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/TimeOfFlightSecondaryIonMassSpectrometry

+
+ Time-of-Flight Secondary Ion Mass Spectrometry (TOF-SIMS) is an advanced surface analysis technique used to determine the elemental and molecular composition of solid surfaces and thin films with high sensitivity and spatial resolution. It is employed in various scientific and industrial fields, including materials science, nanotechnology, biomedicine, and semiconductor research. +TOF-SIMS builds upon the principles of Secondary Ion Mass Spectrometry (SIMS), where a focused beam of high-energy primary ions is directed at a sample's surface, causing the ejection of secondary ions. In TOF-SIMS, the flight time of these secondary ions is measured as they travel through a field-free region and enter a time-of-flight mass spectrometer. The mass spectrometer measures the time taken by the ions to reach the detector, which is directly proportional to their mass-to-charge ratio. +By analyzing the flight times of the secondary ions, TOF-SIMS can determine the elemental, isotopic, and molecular composition of the sample's surface. It provides information about the presence of specific elements, chemical compounds, and molecular fragments, along with their spatial distribution. The high sensitivity of TOF-SIMS allows for the detection of trace elements and molecular species in complex samples. +TOF-SIMS is valuable for characterizing surfaces at the nanoscale, profiling layered structures, investigating organic and inorganic materials, and studying biological specimens. Its ability to provide detailed chemical information while maintaining spatial resolution makes it an essential tool for understanding surface properties and material interactions in a wide range of applications. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Spectroscopy + c +
+
+
+
+

Tomographic Reconstructionc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/TomographicReconstruction

+
+ The process of reconstructing a three-dimensional structure from a series of two-dimensional images taken at different angles. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Reconstruction + c +
+
+
+
+

Transmission Electron Aberration-corrected Microscopec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/TransmissionElectronAberrationCorrectedMicroscope

+
+ A transmission electron microscope equipped with aberration correction to achieve high-resolution imaging. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Transmission Electron Microscope + c +
+
+
+
+

Transmission Electron Microscopec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/TransmissionElectronMicroscope

+
+ A microscope that transmits a beam of electrons through a specimen, forming an image. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ electron microscope +
+
has sub-classes
+
+ Cryo Transmission Electron Microscope + c, Electron Tomograph + c, Energy-filtered Transmission Electron Microscope + c, High Resolution Transmission Electron Microscope + c, Scanning Transmission Electron Microscope + c, Transmission Electron Aberration-corrected Microscope + c +
+
+
+
+

transmission electron microscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/TransmissionElectronMicroscopy

+
+ Transmission Electron Microscopy is a microscopy technique that involves transmitting a beam of electrons through a thin sample to create high-resolution images. It is used to study the internal structure and morphology of materials at the nanometer scale. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ electron microscopy +
+
has sub-classes
+
+ Bright Field Transmission Electron Microscopy + c, Dynamic Transmission Electron Microscopy + c, Electron Tomography + c, Environmental Transmission Electron Microscopy + c, High Resolution Transmission Electron Microscopy + c, Scanning Transmission Electron Microscopy + c +
+
+
+
+

Voltagec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/Voltage

+
+ Voltage, also known as electric potential difference, is a measure of the electric potential energy per unit charge in an electrical circuit. It is the force or pressure that drives electric current through a conductor. + +Note: Voltage is measured in volts (V), and it represents the potential energy difference between two points in a circuit. The higher the voltage, the greater the force pushing the electric charges, and consequently, the higher the potential for current to flow. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ value object +
+
has sub-classes
+
+ Acceleration Voltage + c, Extraction Voltage + c +
+
+
+
+

Volumec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/Volume

+
+ The amount of space that a substance or object occupies. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ value object +
+
has sub-classes
+
+ Interaction Volume + c +
+
+
+
+

Wait Timec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/WaitTime

+
+ The wait time is often used to allow the specimen to stabilize or to minimize sample damage. +
+
+ The time interval between successive measurements or operations in an electron microscope. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ duration +
+
+
+
+

Working Distancec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/WorkingDistance

+
+ The working distance affects the depth of field and the resolution of the image. +
+
+ The distance between the electron microscope objective lens and the specimen surface when the electron beam is focused on the specimen. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ distance +
+
+
+
+

X-ray Absorption Near Edge Spectroscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/XRayAbsorptionNearEdgeSpectroscopy

+
+ X-ray Absorption Near Edge Spectroscopy (XANES) is a specialized technique used in the field of materials science and spectroscopy to study the electronic and structural properties of materials. It focuses on the X-ray absorption spectra of atoms within a sample, particularly the region just above the absorption edge of an element's X-ray absorption spectrum. +In XANES, a sample is irradiated with X-rays, typically generated by a synchrotron radiation source. These X-rays are tuned to specific energy levels corresponding to the absorption edges of the elements of interest in the sample. As the X-rays are absorbed by the sample, the energy levels of the atoms are altered, leading to various transitions in their electron configurations. The resulting X-ray absorption spectrum is measured, specifically targeting the energies just above the absorption edge. +XANES provides information about the electronic structure of the atoms within the sample, including the oxidation state, chemical bonding, and local environment of the absorbing element. The fine details of the XANES spectrum offer insights into the atomic and molecular interactions, as well as the coordination and symmetry of atoms in different chemical environments. +This technique is widely used in various scientific fields, including chemistry, solid-state physics, and materials science. XANES helps researchers understand the properties and behavior of materials at the atomic level, making it an invaluable tool for investigating the characteristics of complex materials, catalysts, minerals, and biomolecules. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Spectroscopy + c +
+
+
+
+

X-ray Absorption Spectroscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/XRayAbsorptionSpectroscopy

+
+ X-ray Absorption Spectroscopy is a technique used to study the electronic and local structural properties of materials by analyzing the absorption of X-rays. It involves measuring how X-rays are absorbed by a sample at various energies, providing insights into the electronic states and chemical environments of specific elements. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ X-ray Mapping + c +
+
+
+
+

X-ray Analysisc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/XRayAnalysis

+
+ X-ray analysis is a technique used to investigate the composition and structure of materials by exposing them to X-rays. When X-rays interact with a material, they can be absorbed, scattered, or diffracted in ways that provide information about the material's internal arrangement of atoms and its elemental composition. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ analysing process +
+
has sub-classes
+
+ X-ray Mapping + c, X-ray Microanalysis + c +
+
+
+
+

X-ray Diffractionc + back to ToC or Class ToC + +

+

Röntgenbeugungc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/XRayDiffraction

+
+ X-ray Diffraction is a technique that utilizes the diffraction of X-rays by crystals to determine their atomic arrangement and lattice structure. X-ray diffraction patterns are produced when X-rays strike a crystalline sample, and the resulting pattern provides information about the arrangement of atoms in the crystal lattice. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ Diffraction + c +
+
+
+
+

X-ray Fluorescencec + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/XRayFluorescence

+
+ X-ray Fluorescence is a method used to determine the elemental composition of a sample by analyzing the X-rays emitted when the sample is exposed to high-energy X-rays. The X-rays emitted are characteristic of the elements present, allowing for quantitative analysis of the sample's elemental composition. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ X-ray Mapping + c +
+
+
+
+

X-ray Mappingc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/XRayMapping

+
+ X-ray mapping is a process that involves generating spatially resolved images of the distribution of specific elements within a sample. By collecting X-ray signals emitted or scattered from a sample at different points, an elemental map can be created, showing the varying concentrations of elements across the sample's surface. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ X-ray Analysis + c +
+
has sub-classes
+
+ X-ray Absorption Spectroscopy + c, X-ray Fluorescence + c, X-ray Photoelectron Spectroscopy + c +
+
+
+
+

X-ray Microanalysisc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/XRayMicroanalysis

+
+ X-ray Microanalysis is a technique that combines microscopy and X-ray analysis to study the elemental composition of small regions within a sample. It involves focusing an electron or X-ray beam on a specific area of the sample and measuring the X-rays emitted from that area to determine the elemental composition. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ X-ray Analysis + c +
+
has sub-classes
+
+ Energy Dispersive X-ray Spectroscopy energiedispersive Röntgenanalyse + c +
+
+
+
+

X-ray Photoelectron Spectroscopyc + back to ToC or Class ToC + +

+

+ IRI: https://w3id.org/pmd/mo/XRayPhotoelectronSpectroscopy

+
+ X-ray Photoelectron Spectroscopy, also known as Electron Spectroscopy for Chemical Analysis (ESCA), is a technique used to study the surface chemistry of materials. XPS involves bombarding a sample's surface with X-rays to emit photoelectrons, which are then analyzed to determine the elemental composition and chemical states of the elements on the surface. +
+
+
Is defined by
+
+ https://w3id.org/pmd/mo +
+
+
+
has super-classes
+
+ X-ray Mapping + c +
+
+
+
+

Annotation Properties

+ +
+

abbreviationap + back to ToC or Annotation Property ToC + +

+

+ IRI: https://w3id.org/pmd/co/abbreviation

+
+
+

abbreviationap + back to ToC or Annotation Property ToC + +

+

+ IRI: https://w3id.org/pmd/mo/abbreviation

+
+
+

Legend back to ToC

+
+c: Classes
+
+
+
+
+

Acknowledgments back to ToC

+

+The authors would like to thank Silvio Peroni for developing LODE, a Live OWL Documentation Environment, which is used for representing the Cross Referencing Section of this document and Daniel Garijo for developing Widoco, the program used to create the template used in this documentation.

+
+ + +
+ + \ No newline at end of file diff --git a/mo/ontology.jsonld b/mo/ontology.jsonld new file mode 100644 index 0000000..d22dd45 --- /dev/null +++ b/mo/ontology.jsonld @@ -0,0 +1,4053 @@ +[ { + "@id" : "https://w3id.org/pmd/co/2.0.7", + "@type" : [ "http://www.w3.org/2002/07/owl#Ontology" ], + "http://purl.org/dc/elements/1.1/creator" : [ { + "@id" : "https://orcid.org/0000-0002-3717-7104" + }, { + "@id" : "https://orcid.org/0000-0002-7094-5371" + } ], + "http://purl.org/dc/elements/1.1/license" : [ { + "@id" : "http://creativecommons.org/licenses/by/4.0" + } ], + "http://purl.org/dc/terms/bibliographicCitation" : [ { + "@language" : "en", + "@value" : "Markus Schilling, Bernd Bayerlein, June Lau. (January 29th, 2024) MO: microscopy ontology. Version 1.0.0, https://w3id.org/pmd/mo/" + } ], + "http://purl.org/dc/terms/title" : [ { + "@language" : "en", + "@value" : "Microscopy Ontology (MO)" + } ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2002/07/owl#imports" : [ { + "@id" : "https://w3id.org/pmd/co/2.0.7" + } ], + "http://www.w3.org/2002/07/owl#versionIRI" : [ { + "@id" : "https://w3id.org/pmd/mo/1.0.0" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Die Mikroskopie-Ontologie (MO) ist ein umfassender Rahmen für die Darstellung von Wissen, der Konzepte aus den Bereichen Mikroskopie und Mikroanalyse umfasst. Die MO basiert semantisch auf der PMD-Kernontologie PMDco (die in MO importiert wird), um eine Verbindung zu anderen MSE-Anwendungsontologien und domänenneutralen Konzepten in etablierten Top-Level-Ontologien zu ermöglichen. Das Hauptziel von MO ist es, ein standardisiertes Vokabular und einen Rahmen für die Beschreibung und Organisation von Konzepten, Entitäten und Beziehungen im Bereich der Mikroskopie und Mikroanalyse bereitzustellen. Diese Standardisierung erleichtert die Kommunikation und Interoperabilität zwischen verschiedenen Systemen, Datenbanken und Forschungsgruppen. Um ein Vokabular zu erhalten, das in diesem Bereich relevant und daher standardisierungswürdig ist, wurde ein NLP-Ansatz angewandt, mit dessen Hilfe häufig verwendete Begriffe ermittelt wurden. Auf der Grundlage dieser Liste von Begriffen wurde dann die MO entwickelt. In der Mikroskopie und Mikroanalytik fallen große Datenmengen aus verschiedenen Techniken und Instrumenten an. Die MO kann dazu beitragen, heterogene Datenquellen zu integrieren und zu verknüpfen, so dass Daten aus verschiedenen Experimenten und Studien effektiver kombiniert und analysiert werden können.\nDarüber hinaus dient die MO als Grundlage für die Annotation von Mikroskopie- und Mikroanalysedaten mit standardisierten Metadaten. Diese erweiterte Metadatenbeschreibung verbessert die Interpretierbarkeit, Durchsuchbarkeit und Wiederverwendbarkeit von Daten und fördert die Transparenz und Reproduzierbarkeit in der Forschung. Darüber hinaus kann die MO durch die Formalisierung des Wissens über Instrumente, Techniken, Materialien und Phänomene die Grundlage für maschinelles Denken zur Unterstützung der Dateninterpretation, Hypothesenbildung und Versuchsplanung bilden.\nInsgesamt soll MO die Forschung voranbringen, die Zusammenarbeit fördern und den Wissensaustausch in diesem interdisziplinären Bereich erleichtern." + }, { + "@language" : "en", + "@value" : "The Microscopy Ontology (MO) is a comprehensive framework for representing knowledge that encompasses concepts from the domains of microscopy and microanalysis. The MO is semantically based on the mid-level PMD Core Ontology PMDco (which is imported in MO) to allow a connection to other MSE application ontologies and domain neutral concepts found in established top-level ontologies. The primary goal of MO is to provide a standardized vocabulary and framework for describing and organizing concepts, entities, and relationships within the field of microscopy and microanalysis. This standardization facilitates communication and interoperability between different systems, databases, and research groups. In order to obtain a vocabulary that is relevant in the field and therefore worth standardizing, an NLP approach was applied, with the help of which commonly used terms were determined. MO was then developed based on the respective list of terms. Microscopy and microanalysis generate vast amounts of data from various techniques and instruments. MO may help to integrate and link heterogeneous data sources, enabling the combination and analysis of data from different experiments and studies more effectively. Furthermore, MO serves as a basis for annotating microscopy and microanalysis data with standardized metadata. This improved metadata description enhances the interpretability, searchability, and reusability of data, promoting transparency and reproducibility in research. Moreover, by formalizing knowledge about instruments, techniques, materials, and phenomena, MO may provide the basis to enable machine reasoning to support data interpretation, hypothesis generation, and experimental design.\nOverall, MO is intended to advance research, promoting collaboration, and facilitating knowledge exchange in this interdisciplinary domain." + } ] +}, { + "@id" : "https://w3id.org/pmd/co/abbreviation", + "@type" : [ "http://www.w3.org/2002/07/owl#AnnotationProperty" ] +}, { + "@id" : "https://w3id.org/pmd/mo/3DReconstruction", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Dreidimensionale Rekonstruktion" + }, { + "@language" : "en", + "@value" : "Three dimensional reconstruction" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/Reconstruction" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Der Prozess der Erstellung einer dreidimensionalen Darstellung eines Objekts oder einer Szene aus zweidimensionalen Bildern oder Daten." + }, { + "@language" : "en", + "@value" : "The process of creating a three-dimensional representation of an object or scene from two-dimensional images or data." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/4D-ScanningTransmissionElectronMicroscopy", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "4D Scanning Transmission Electron Microscopy" + }, { + "@language" : "de", + "@value" : "4D-Rastertransmissionselektronenmikroskopie" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/ScanningTransmissionElectronMicroscopy" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "4D-STEM is a technique that adds an additional dimension of information, time, to STEM imaging, allowing the study of dynamic processes in materials at high spatial and temporal resolutions." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "4D-STEM" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/Aberration", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Aberration" + }, { + "@language" : "en", + "@value" : "Aberration" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/ValueObject" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Abweichung vom idealen oder erwarteten Verhalten, häufig im Zusammenhang mit optischen Systemen verwendet." + }, { + "@language" : "en", + "@value" : "Deviation from the ideal or expected behavior, often used in the context of optical systems." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/AccelerationVoltage", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#comment" : [ { + "@language" : "de", + "@value" : "Die Beschleunigungsspannung bestimmt die kinetische Energie der Elektronen und beeinflusst die Auflösung und die Eindringtiefe in die Probe." + }, { + "@language" : "en", + "@value" : "The acceleration voltage determines the kinetic energy of the electrons and affects the resolution and depth of penetration in the sample." + } ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Acceleration Voltage" + }, { + "@language" : "de", + "@value" : "Beschleunigungsspannung" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/Voltage" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Diese Klasse beschreibt die Spannung, die an ein Elektronenmikroskop angelegt wird, um die von der Elektronenquelle (in der Regel eine Kathode) emittierten Elektronen auf die Probe zu beschleunigen." + }, { + "@language" : "en", + "@value" : "This class decribes the voltage applied to an electron microscope to accelerate the electrons emitted from the electron source (usually a cathode) towards the specimen." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/Angle", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@id" : "https://w3id.org/pmd/mo" + }, { + "@language" : "en", + "@value" : "Angle" + }, { + "@language" : "de", + "@value" : "Winkel" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/ValueObject" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "In der Geometrie und Trigonometrie ist ein Winkel ein Maß für eine Drehung, das erforderlich ist, um eine Linie oder Ebene mit einer anderen zur Deckung zu bringen. Ein Winkel wird durch zwei Strahlen gebildet, die einen gemeinsamen Endpunkt haben, der als Scheitelpunkt des Winkels bezeichnet wird. Die Strahlen werden als die Seiten des Winkels bezeichnet. \n\nHinweis: Das Konzept des Winkels ist in der Geometrie von grundlegender Bedeutung und wird häufig verwendet, um die relative Ausrichtung von Linien, Ebenen oder Flächen zu beschreiben. Winkel werden in der Regel in Grad (°) oder Bogenmaß (rad) gemessen." + }, { + "@language" : "en", + "@value" : "In geometry and trigonometry, an angle is a measure of the amount of rotation needed to bring one line or plane into coincidence with another. An angle is formed by two rays that share a common endpoint, known as the vertex of the angle. The rays are referred to as the sides of the angle. \n\nNote: The concept of an angle is fundamental in geometry and is often used to describe the relative orientation of lines, planes, or surfaces. Angles are typically measured in degrees (°) or radians (rad)." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/AnnularBrightFieldScanningTransmissionElectronMicroscopy", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Annular Bright Field Scanning Transmission Electron Microscopy" + }, { + "@language" : "de", + "@value" : "Ringförmige Hellfeld-Rastertransmissionselektronenmikroskopie" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/ScanningTransmissionElectronMicroscopy" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "ABF STEM is a technique that utilizes a specific arrangement of detectors to enhance contrast in STEM images, particularly for heavy elements." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "ABF-STEM" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/AnnularDarkFieldScanningTransmissionElectronMicroscopy", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Annular Dark Field Scanning Transmission Electron Microscopy" + }, { + "@language" : "de", + "@value" : "Ringförmige Dunkelfeld-Rastertransmissionselektronenmikroskopie" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/ScanningTransmissionElectronMicroscopy" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "ADF STEM is a technique that utilizes a specific arrangement of detectors to create contrast in STEM images based on the scattered electrons." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "ADF-STEM" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/Anode", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Anode" + }, { + "@language" : "en", + "@value" : "Anode" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/Electrode" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "The anode is the positively charged electrode in an electrochemical cell or other electrically driven systems. It serves as the site where oxidation occurs, meaning electrons are released from the anode, typically moving towards the cathode. In devices like batteries, the anode is where electrons are produced during the discharge process." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/AtmosphericScanningElectronMicroscopy", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Atmospheric Scanning Electron Microscopy" + }, { + "@language" : "de", + "@value" : "Atmosphärische Rasterelektronenmikroskopie" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/ScanningElectronMicroscopy" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "Atmospheric Scanning Electron Microscopy is a technique that allows samples to be imaged in their natural, hydrated state at atmospheric pressure. It enables the observation of biological and other hydrated specimens without the need for dehydration or coating." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "ASEM" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/AtomicResolution", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Atomare Auflösung" + }, { + "@language" : "en", + "@value" : "Atomic Resolution" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/Resolution" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Die Fähigkeit, einzelne Atome in einem Bild oder einer Struktur aufzulösen." + }, { + "@language" : "en", + "@value" : "The ability to resolve individual atoms in an image or structure." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/AugerElectronSpectroscopy", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Auger Electron Spectroscopy" + }, { + "@language" : "de", + "@value" : "Auger-Elektronen-Spektroskopie" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/Spectroscopy" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "Auger Electron Spectroscopy (AES) is a surface analysis technique used in the field of materials science and surface chemistry. It involves the study of the interactions between high-energy electrons and atoms on the surface of a material. The process is named after Pierre Auger, who made significant contributions to the understanding of this phenomenon.\nIn AES, a sample's surface is bombarded with a beam of high-energy electrons, which causes inner-shell electrons to be ejected from the atoms in the sample. These vacancies are then filled by higher-energy electrons from outer shells, leading to the emission of Auger electrons. The energy of these emitted Auger electrons is characteristic of the specific elements present in the sample and their chemical states.\nBy analyzing the energy spectrum of the emitted Auger electrons, researchers can identify the elements present on the surface of the material and determine their relative concentrations. Auger Electron Spectroscopy provides valuable information about the elemental composition and chemical bonding of the top few atomic layers of a material, making it a powerful tool for studying surface properties, thin films, and interfaces in various scientific and industrial applications." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "AES" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/Beam", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Beam" + }, { + "@language" : "de", + "@value" : "Strahl" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/Object" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "A stream of electrons emitted from the electron source and directed towards the specimen in an electron microscope." + }, { + "@language" : "de", + "@value" : "Ein Strom von Elektronen, der von der Elektronenquelle emittiert und auf die Probe in einem Elektronenmikroskop gerichtet wird." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/BeamCurrent", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Beam Current" + }, { + "@language" : "de", + "@value" : "Strahlstrom" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/Current" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Die Intensität des Elektronenstrahls, gemessen als Anzahl der Elektronen, die eine bestimmte Fläche pro Zeiteinheit durchdringen." + }, { + "@language" : "en", + "@value" : "The intensity of the electron beam, measured as the number of electrons passing through a given area per unit time." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/BeamEnergy", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Beam Energy" + }, { + "@language" : "de", + "@value" : "Strahlungsenergie" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/Energy" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Die Energie eines Teilchen- oder Photonenstrahls, der in verschiedenen Analyseverfahren verwendet wird." + }, { + "@language" : "en", + "@value" : "The energy of a particle or photon beam used in various analytical techniques." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/BeamPath", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Beam Path" + }, { + "@language" : "de", + "@value" : "Strahlengang" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/Object" + } ], + "http://www.w3.org/2004/02/skos/core#altLabel" : [ { + "@language" : "de", + "@value" : "Strahlenweg" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Die Flugbahn des Elektronenstrahls auf seinem Weg durch das Elektronenmikroskop von der Elektronenquelle zur Probe und dann zum Detektor." + }, { + "@language" : "en", + "@value" : "The trajectory followed by the electron beam as it travels through the electron microscope, from the electron source to the specimen and then to the detector." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/BrightFieldTransmissionElectronMicroscopy", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Bright Field Transmission Electron Microscopy" + }, { + "@language" : "de", + "@value" : "Hellfeld-Transmissionselektronenmikroskopie" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/TransmissionElectronMicroscopy" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "Bright Field TEM is an imaging mode in transmission electron microscopy where regions of the sample that scatter electrons less appear brighter in the resulting image." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "BFTEM" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/CameraLength", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/Length" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Der Abstand zwischen der Probe und der Kamera, die zur Aufnahme von Bildern in einem Elektronenmikroskop verwendet wird." + }, { + "@language" : "en", + "@value" : "The distance between the specimen and the camera used to capture images in an electron microscope." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "Camera Length" + }, { + "@language" : "de", + "@value" : "Kameralänge" + }, { + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/Cathode", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Cathode" + }, { + "@language" : "de", + "@value" : "Kathode" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/Electrode" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "The cathode is the negatively charged electrode in an electrochemical cell or other electrical systems. It is the site where reduction occurs, leading to the acceptance of electrons from the external circuit. In batteries, for instance, the cathode is where electrons are consumed during the discharge process." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/ChromaticAberration", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Chromatic Aberration" + }, { + "@language" : "de", + "@value" : "Chromatische Aberration" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/Aberration" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Die Unfähigkeit eines Objektivs, alle Farben auf denselben Konvergenzpunkt zu fokussieren." + }, { + "@language" : "en", + "@value" : "The failure of a lens to focus all colors to the same convergence point." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/CoherentBeam", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Coherent Beam" + }, { + "@language" : "de", + "@value" : "Kohärenter Strahl" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/Beam" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "An electron beam in which the individual electrons maintain a constant phase relationship with each other, resulting in interference patterns when interacting with a sample." + }, { + "@language" : "de", + "@value" : "Ein Elektronenstrahl, bei dem die einzelnen Elektronen eine konstante Phasenbeziehung zueinander haben, was bei der Wechselwirkung mit einer Probe zu Interferenzmustern führt." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/CollectionEfficiency", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Collection Efficiency" + }, { + "@language" : "de", + "@value" : "Kollektoreffizienz" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/Efficiency" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Die Fähigkeit eines Detektors oder Systems, relevante Signale oder Daten zu erfassen und aufzuzeichnen." + }, { + "@language" : "en", + "@value" : "The ability of a detector or system to capture and record relevant signals or data." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/CondensorLense", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Condensor Lense" + }, { + "@language" : "de", + "@value" : "Kondensorlinse" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/ProcessingNode" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "A condenser lens is an optical element used in microscopy and other optical systems to focus and control the illumination on the sample being observed. It is positioned below the light source and directs light rays onto the specimen, making the illumination uniform and optimizing the quality of the sample's image. The condenser lens helps enhance contrast, resolution, and overall image quality by ensuring that a consistent and concentrated light beam illuminates the specimen." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/ConfocalLaserScanningMicroscopy", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Confocal Laser Scanning Microscopy" + }, { + "@language" : "de", + "@value" : "Konfokale Laser-Scanning-Mikroskopie" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/LightMicroscopy" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "Confocal Laser Scanning Microscopy (CLSM) is an optical imaging technique that enhances resolution and eliminates out-of-focus blur by using a spatial pinhole and laser illumination. A focused laser beam is scanned across the sample's surface or depth, and only the light emitted from the focal plane (or a defined section) passes through the pinhole to form an image. CLSM provides high-resolution three-dimensional images, making it popular for biological imaging and studying fluorescently labeled samples." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "CLSM" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/ConvergenceAngle", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#comment" : [ { + "@language" : "de", + "@value" : "Der Konvergenzwinkel beeinflusst die Schärfentiefe und die Auflösung des Bildes." + }, { + "@language" : "en", + "@value" : "The convergence angle affects the depth of field and resolution of the image." + } ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Convergence Angle" + }, { + "@language" : "de", + "@value" : "Konvergenzwinkel" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/Angle" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Der Winkel, in dem der Elektronenstrahl in einem Elektronenmikroskop auf die Probe trifft." + }, { + "@language" : "en", + "@value" : "The angle at which the electron beam converges onto the specimen in an electron microscope." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/Cryo-ScanningElectronMicroscope", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#comment" : [ { + "@language" : "en", + "@value" : "A cryo-scanning electron microscope is typically used for imaging biological samples." + }, { + "@language" : "de", + "@value" : "Ein Kryo-Rasterelektronenmikroskop wird in der Regel zur Abbildung biologischer Proben verwendet." + }, { + "@language" : "de", + "@value" : "Eine Art Elektronenmikroskop, das bei kryogenen Temperaturen arbeitet." + } ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Cryo Scanning Electron Microscope" + }, { + "@language" : "de", + "@value" : "Kryo-Rasterelektronenmikroskop" + }, { + "@language" : "en", + "@value" : "cryo-SEM" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/ScanningElectronMicroscope" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "A type of electron microscope that operates under cryogenic temperatures." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/CryoElectronTomography", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Cryo Electron Tomography" + }, { + "@language" : "de", + "@value" : "Kryo-Elektronentomographie" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/ElectronTomography" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "Cryo Electron Tomography is a form of electron tomography that is performed at cryogenic temperatures. It is used to study the three-dimensional structure of frozen-hydrated samples." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "cryo-ET" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/CryoTransmissionElectronMicroscope", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Cryo Transmission Electron Microscope" + }, { + "@language" : "de", + "@value" : "Kryo-Transmissionselektronenmikroskop" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/TransmissionElectronMicroscope" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "A transmission electron microscope that operates at cryogenic temperatures." + }, { + "@language" : "de", + "@value" : "Ein Transmissionselektronenmikroskop, das bei kryogenen Temperaturen arbeitet." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "cryo-TEM" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/Current", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#comment" : [ { + "@language" : "de", + "@value" : "Der Strom wird normalerweise in Ampere (A) gemessen." + }, { + "@language" : "en", + "@value" : "The current is typically measured in amperes (A)." + } ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Current" + }, { + "@language" : "de", + "@value" : "Strom" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/ValueObject" + } ], + "http://www.w3.org/2004/02/skos/core#altLabel" : [ { + "@language" : "de", + "@value" : "Stromstärke" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Der Fluss der elektrischen Ladung." + }, { + "@language" : "en", + "@value" : "The flow of electric charge." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/DetectorQuantumEfficiency", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Detector Quantum Efficiency" + }, { + "@language" : "de", + "@value" : "Detektor Quantenausbeute" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/Efficiency" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Die Effizienz, mit der ein Detektor einfallende Strahlung in Nutzsignale umwandelt." + }, { + "@language" : "en", + "@value" : "The efficiency with which a detector converts incident radiation into useful signals." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/Diffraction", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Diffraction" + }, { + "@language" : "de", + "@value" : "Diffraktion" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/PhysicalProcess" + } ], + "http://www.w3.org/2004/02/skos/core#altLabel" : [ { + "@language" : "de", + "@value" : "Beugung" + }, { + "@language" : "en", + "@value" : "Scattering" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Die Biegung von Elektronenwellen beim Durchgang durch eine kristalline Probe, was zur Bildung von Beugungsmustern führt, die Informationen über die Kristallstruktur liefern." + }, { + "@language" : "en", + "@value" : "The bending of electron waves as they pass through a crystalline sample, resulting in the formation of diffraction patterns that provide information about the crystal structure." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/DiffractionPattern", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Beugungsmuster" + }, { + "@language" : "en", + "@value" : "Diffraction Pattern" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/DigitalEntity" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Das Muster von Flecken oder Banden, das auf einem Detektor entsteht, wenn Elektronen nach der Wechselwirkung mit einer kristallinen Probe gebeugt werden." + }, { + "@language" : "en", + "@value" : "The pattern of spots or bands produced on a detector when electrons diffract after interacting with a crystalline sample." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/DiskOfLeastConfusion", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Disk Of Least Confusion" + }, { + "@language" : "de", + "@value" : "Scheibe der geringsten Konfusion" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/CrossSectionArea" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Der Bereich in der Bildebene eines Elektronenmikroskops, in dem der Elektronenstrahl auf die kleinste Punktgröße fokussiert wird, wodurch die durch sphärische Aberration verursachte Unschärfe minimiert wird." + }, { + "@language" : "en", + "@value" : "The region in the image plane of an electron microscope where the electron beam is focused to the smallest spot size, minimizing the blurring effect due to spherical aberration." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/DwellTime", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Dwell Time" + }, { + "@language" : "de", + "@value" : "Verweilzeit" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/Duration" + } ], + "http://www.w3.org/2004/02/skos/core#altLabel" : [ { + "@language" : "de", + "@value" : "Verweildauer" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Die Zeitspanne, in der der Elektronenstrahl während der Bildgebung oder Analyse auf einen bestimmten Punkt oder einen interessierenden Bereich der Probe fokussiert wird." + }, { + "@language" : "en", + "@value" : "The amount of time that the electron beam is focused on a specific point or region of interest on the specimen during imaging or analysis." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/DynamicFocusCorrection", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Dynamic Focus Correction" + }, { + "@language" : "de", + "@value" : "Dynamische Fokuskorrektur" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/AnalysingProcess" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "A technique used in electron microscopy to continuously adjust the focus of the electron beam in real-time to maintain optimal image quality, especially when imaging uneven or rough surfaces." + }, { + "@language" : "de", + "@value" : "Eine Technik, die in der Elektronenmikroskopie eingesetzt wird, um den Fokus des Elektronenstrahls kontinuierlich in Echtzeit anzupassen und so eine optimale Bildqualität zu erhalten, insbesondere bei der Abbildung unebener oder rauer Oberflächen." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/DynamicRefocusing", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Dynamic Refocusing" + }, { + "@language" : "de", + "@value" : "Dynamische Refokussierung" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/AnalysingProcess" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Der Prozess, bei dem der Fokus des Elektronenstrahls während der Bildgebung angepasst wird, um Änderungen der Probenhöhe oder -topografie zu kompensieren und sicherzustellen, dass die gesamte Probe im Fokus bleibt." + }, { + "@language" : "en", + "@value" : "The process of adjusting the focus of the electron beam during imaging to compensate for changes in the specimen height or topography, ensuring that the entire specimen remains in focus." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/DynamicTransmissionElectronMicroscopy", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Dynamic Transmission Electron Microscopy" + }, { + "@language" : "de", + "@value" : "Dynamische Transmissionselektronenmikroskopie" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/TransmissionElectronMicroscopy" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "Dynamic Transmission Electron Microscopy is a technique that uses ultrafast electron pulses to capture rapid processes in materials with nanosecond to picosecond time resolution." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "DTEM" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/Efficiency", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Efficiency" + }, { + "@language" : "de", + "@value" : "Effizienz" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/ValueObject" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Das Verhältnis von nützlichem / nutzbarem Output zum gesamten Input in einem System." + }, { + "@language" : "en", + "@value" : "The ratio of useful output to total input in any system." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/Electrode", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Electrode" + }, { + "@language" : "de", + "@value" : "Elektrode" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/ProcessingNode" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "An electrode is a conductor through which electric current enters or exits a substance. In the context of electrochemical systems, an electrode facilitates the transfer of electrons between a solid material and an electrolyte. Electrodes are essential components in batteries, fuel cells, electroplating, and other electrochemical processes. They play a critical role in facilitating chemical reactions and energy storage or conversion." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/ElectronBackscatterDiffraction", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Electron Backscatter Diffraction" + }, { + "@language" : "de", + "@value" : "Rückstreuelektronenbeugung" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/ElectronDiffraction" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "Electron Backscatter Diffraction is a microscopy technique used to analyze the crystallographic orientation and microstructure of materials. It involves directing an electron beam onto a sample's surface and measuring the backscattered electrons. By analyzing the diffraction patterns of these electrons, researchers can determine the crystallographic orientation of the material's grains." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "EBSD" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/ElectronBeam", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Electron Beam" + }, { + "@language" : "de", + "@value" : "Elektronenstrahl" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/Beam" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "A stream of electrons emitted from an electron source and accelerated towards the specimen in an electron microscope for imaging or analysis." + }, { + "@language" : "de", + "@value" : "Ein Strom von Elektronen, der von einer Elektronenquelle emittiert und in einem Elektronenmikroskop zur Abbildung oder Analyse auf die Probe beschleunigt wird." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/ElectronChannelingContrastImaging", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Electron Channeling Contrast Imaging" + }, { + "@language" : "de", + "@value" : "Elektronenkanal-Kontrastbildgebung" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/ScanningElectronMicroscopy" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "Electron Channeling Contrast Imaging is a technique used in SEM or TEM to study crystallographic defects, such as dislocations, in crystalline materials. It utilizes the contrast resulting from the deviation of electron trajectories due to crystal defects." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "ECCI" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/ElectronDiffraction", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Electron Diffraction" + }, { + "@language" : "de", + "@value" : "Elektronenbeugung" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/Diffraction" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Das Phänomen der Beugung von Elektronenwellen beim Durchgang durch eine kristalline Probe, das Informationen über die Kristallstruktur liefert." + }, { + "@language" : "en", + "@value" : "The phenomenon of electron waves diffracting as they pass through a crystalline sample, providing information about the crystal structure." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/ElectronDiffractionPattern", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Electron Diffraction Pattern" + }, { + "@language" : "de", + "@value" : "Elektronenbeugungsmuster" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/DiffractionPattern" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Das Muster von Flecken oder Ringen, das auf einem Detektor entsteht, wenn Elektronen nach der Wechselwirkung mit einer kristallinen Probe gebeugt werden, und das zur Bestimmung der Kristallstruktur verwendet wird." + }, { + "@language" : "en", + "@value" : "The pattern of spots or rings produced on a detector when electrons diffract after interacting with a crystalline sample, used to determine the crystal structure." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/ElectronEnergyLossSpectroscopy", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Electron Energy Loss Spectroscopy" + }, { + "@language" : "de", + "@value" : "Elektronenenergieverlustspektroskopie" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/Spectroscopy" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "Electron Energy Loss Spectroscopy (EELS) is a specialized analytical technique in the field of materials science and electron microscopy. It involves the measurement of the energy loss of electrons as they interact with a sample. EELS is commonly performed in transmission electron microscopy (TEM) setups.\nIn EELS, a focused beam of high-energy electrons is directed at a sample. As these electrons pass through the material, they can lose energy through various interactions, such as inelastic scattering and excitation of inner-shell electrons. The energy loss is measured and analyzed to gain information about the sample's composition, electronic structure, and bonding characteristics.\nBy studying the energy loss spectrum, researchers can identify the types of atoms present in the sample, determine their chemical states, and gather insights into the electronic properties of the material. EELS is particularly useful for investigating nanoscale materials, thin films, and interfaces, providing valuable information about their electronic and atomic structure. It is a powerful technique for understanding the behavior of materials at the nanometer scale and plays a significant role in advancing fields such as materials science, nanotechnology, and semiconductor research." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "EELS" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/ElectronMicroprobe", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Electron Microprobe" + }, { + "@language" : "de", + "@value" : "Elektronenmikrosonde" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/ElectronMicroscope" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "An analytical instrument used to determine the chemical composition of materials." + }, { + "@language" : "de", + "@value" : "Ein Analyseinstrument zur Bestimmung der chemischen Zusammensetzung von Materialien." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/ElectronProbe", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Electron Probe" + }, { + "@language" : "de", + "@value" : "Elektronensonde" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/Beam" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Der fokussierte Elektronenstrahl, der zur Abbildung oder Analyse in einem Elektronenmikroskop verwendet wird." + }, { + "@language" : "en", + "@value" : "The focused electron beam used for imaging or analysis in an electron microscope." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/ElectronProbeMicroAnalyzer", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Electron Probe Micro Analyzer" + }, { + "@language" : "de", + "@value" : "Elektronensonden-Mikro-Analysator" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/ElectronMicroprobe" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "An instrument used for elemental analysis of solid materials by bombarding them with a focused electron beam." + }, { + "@language" : "de", + "@value" : "Ein Instrument zur Elementaranalyse fester Materialien durch Beschuss mit einem fokussierten Elektronenstrahl." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/ElectronTomograph", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Electron Tomograph" + }, { + "@language" : "de", + "@value" : "Elektronentomograph" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/TransmissionElectronMicroscope" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "An instrument used for tomographic imaging using electrons." + }, { + "@language" : "de", + "@value" : "Ein Instrument für die tomografische Bildgebung mit Elektronen." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "ET" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/ElectronTomography", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Electron Tomography" + }, { + "@language" : "de", + "@value" : "Elektronentomographie" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/TransmissionElectronMicroscopy" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "Electron Tomography is a technique that involves collecting a series of transmission electron microscopy (TEM) images from different angles to reconstruct a three-dimensional image of a sample." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "ET" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/EmissionCurrent", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#comment" : [ { + "@language" : "de", + "@value" : "Der Emissionsstrom wird normalerweise in Mikroampere (μA) oder Milliampere (mA) gemessen." + }, { + "@value" : "The emission current usually measured in microamperes (μA) or milliamperes (mA)." + } ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Emission Current" + }, { + "@language" : "de", + "@value" : "Emissionsstrom" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/Current" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Der Strom der von der Elektronenquelle emittierten Elektronen." + }, { + "@language" : "en", + "@value" : "The current of electrons emitted from the electron source." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/Energy", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#comment" : [ { + "@language" : "de", + "@value" : "Die Energie wird üblicherweise in Joule (J) oder Elektronenvolt (eV) gemessen." + }, { + "@language" : "en", + "@value" : "The energy is usually measured in joules (J) or electron volts (eV)." + } ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Energie" + }, { + "@language" : "en", + "@value" : "Energy" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/ValueObject" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Die Fähigkeit eines physischen Systems, Arbeit zu verrichten." + }, { + "@language" : "en", + "@value" : "The capacity of a physical system to perform work." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/EnergyDispersiveXRaySpectroscopy", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Energy Dispersive X-ray Spectroscopy" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/XRayMicroanalysis" + } ], + "http://www.w3.org/2004/02/skos/core#altLabel" : [ { + "@language" : "de", + "@value" : "energiedispersive Röntgenmikroanalyse" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "Energy Dispersive X-ray Spectroscopy is a technique used to analyze the elemental composition of a sample by detecting the X-rays emitted when the sample is bombarded with electrons in an electron microscope or other instrument. EDS provides information about the elements present in the sample and their relative concentrations." + } ], + "http://www.w3.org/2004/02/skos/core#prefLabel" : [ { + "@language" : "de", + "@value" : "energiedispersive Röntgenanalyse" + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "EDS" + }, { + "@language" : "en", + "@value" : "EDX" + }, { + "@language" : "en", + "@value" : "XEDS" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/EnergyFilteredTransmissionElectronMicroscope", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Energiegefiltertes Transmissionselektronenmikroskop" + }, { + "@language" : "en", + "@value" : "Energy-filtered Transmission Electron Microscope" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/TransmissionElectronMicroscope" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "A transmission electron microscope equipped with an energy filter to select electrons of specific energy levels." + }, { + "@language" : "de", + "@value" : "Ein Transmissionselektronenmikroskop, das mit einem Energiefilter ausgestattet ist, um Elektronen bestimmter Energieniveaus zu selektieren." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/EnergyLoss", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Energieverlust" + }, { + "@language" : "en", + "@value" : "Energy Loss" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/Energy" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Der Energieverlust, den ein Teilchen beim Durchgang durch ein Medium erfährt." + }, { + "@language" : "en", + "@value" : "The loss of energy experienced by a particle as it passes through a medium." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/EnergyResolution", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Energieauflösung" + }, { + "@language" : "en", + "@value" : "Energy Resolution" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/Resolution" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Die Fähigkeit eines Detektors, zwischen verschiedenen Energieniveaus der einfallenden Strahlung zu unterscheiden." + }, { + "@language" : "en", + "@value" : "The ability of a detector to distinguish between different energy levels of incident radiation." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/EnvironmentalScanningElectronMicroscope", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Environmental Scanning Electron Microscope" + }, { + "@language" : "de", + "@value" : "Umwelt-Rasterelektronenmikroskop" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/ScanningElectronMicroscope" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "A type of electron microscope that can image non-conductive samples in their natural state." + }, { + "@language" : "de", + "@value" : "Eine Art Elektronenmikroskop, das nicht leitende Proben in ihrem natürlichen Zustand abbilden kann." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "ESEM" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/EnvironmentalScanningElectronMicroscopy", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Environmental Scanning Electron Microscopy" + }, { + "@language" : "de", + "@value" : "Umgebungs-Rasterelektronenmikroskopie" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/ScanningElectronMicroscopy" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "Environmental Scanning Electron Microscopy is a technique that allows imaging of samples in a gaseous environment. It is particularly useful for observing hydrated or non-conductive samples without the need for extensive sample preparation." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "ESEM" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/EnvironmentalTransmissionElectronMicroscopy", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Environmental Transmission Electron Microscopy" + }, { + "@language" : "de", + "@value" : "Umgebungs-Transmissionselektronenmikroskopie" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/TransmissionElectronMicroscopy" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "Environmental Transmission Electron Microscopy allows imaging and analysis of materials in controlled gaseous environments, simulating real-world conditions." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "ETEM" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/ExtractionVoltage", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Extraction Voltage" + }, { + "@language" : "de", + "@value" : "Extraktionsspannung" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/Voltage" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Die Spannung, die an die Elektronenquelle in einem Elektronenmikroskop angelegt wird, um Elektronen aus der Kathode zu extrahieren und sie auf die Probe zu beschleunigen." + }, { + "@language" : "en", + "@value" : "The voltage applied to the electron source in an electron microscope to extract electrons from the cathode and accelerate them towards the specimen." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/FieldEmissionGun", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Feldemissionskanone" + }, { + "@language" : "en", + "@value" : "Field Emission Gun" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/Gun" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "A Field Emission Gun is an electron gun used in electron microscopes to produce an electron beam with extremely high brightness and coherence. It relies on the phenomenon of field emission, where electrons are emitted from a sharp emitter tip under the influence of a strong electric field. FEGs are capable of producing highly focused electron beams, leading to enhanced imaging resolution and analytical capabilities." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "FEG" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/FieldEmissionScanningElectronMicroscopy", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Feldemissions-Rasterelektronenmikroskopie" + }, { + "@language" : "en", + "@value" : "Field Emission Scanning Electron Microscopy" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/ScanningElectronMicroscopy" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "Field Emission Scanning Electron Microscopy is an advanced form of SEM that uses a field emitter to produce a highly focused electron beam, enabling high-resolution imaging and surface analysis." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "FESEM" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/FieldIonMicroscope", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Feldionenmikroskop" + }, { + "@language" : "en", + "@value" : "Field Ion Microscope" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/IonMicroscope" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "A type of microscope that uses the phenomenon of field ionization to image surfaces with atomic resolution." + }, { + "@language" : "de", + "@value" : "Ein Mikroskoptyp, der das Phänomen der Feldionisation nutzt, um Oberflächen mit atomarer Auflösung abzubilden." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "FIM" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/FieldIonMicroscopy", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Feldionenmikroskopie" + }, { + "@language" : "en", + "@value" : "Field Ion Microscopy" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/IonMicroscopy" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "Field Ion Microscopy is a specialized microscopy technique that uses a strong electric field to ionize atoms on the surface of a metal sample. These ionized atoms are then repelled from the surface and can be detected to create an image of the sample's surface topography at atomic resolution. FIM is especially powerful for imaging the arrangement of atoms on metallic surfaces." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "FIM" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/FilamentCurrent", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Filament Current" + }, { + "@language" : "de", + "@value" : "Glühfadenstrom" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/Current" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Der Strom, der durch den Glühfaden der Elektronenkanone in einem Elektronenmikroskop fließt und den Glühfaden erhitzt, um Elektronen zu emittieren." + }, { + "@language" : "en", + "@value" : "The current passing through the filament of the electron gun in an electron microscope, which heats up the filament to emit electrons." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/FluorescenceMicroscopy", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Fluorescence Microscopy" + }, { + "@language" : "de", + "@value" : "Fluoreszenzmikroskopie" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/LightMicroscopy" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "Fluorescence Microscopy is an optical imaging technique used to visualize biological structures and molecules that fluoresce when illuminated with specific wavelengths of light. Fluorescent molecules absorb light energy and then emit light of a longer wavelength, allowing the visualization of specific molecules or cellular components. Fluorescence microscopy is widely used in cell biology, molecular biology, and medical research." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/FlybackTime", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Flyback Time" + }, { + "@language" : "de", + "@value" : "Rücklaufzeit" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/Duration" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Die Zeit, die der Elektronenstrahl benötigt, um nach dem Abtasten einer Zeile oder eines Bildes in einem Elektronenmikroskop in seine Ausgangsposition zurückzukehren." + }, { + "@language" : "en", + "@value" : "The time taken for the electron beam to return to its starting position after scanning a line or frame in an electron microscope." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/FocalLength", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Brennweite" + }, { + "@language" : "en", + "@value" : "Focal Length" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/Length" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Der Abstand zwischen dem Brennpunkt (wo der Elektronenstrahl fokussiert wird) und der Linse oder Blende in einem Elektronenmikroskop." + }, { + "@language" : "en", + "@value" : "The distance between the focal point (where the electron beam is focused) and the lens or aperture in an electron microscope." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/FocalPlane", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Brennebene" + }, { + "@language" : "en", + "@value" : "Focal Plane" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/Area" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Die Ebene senkrecht zur optischen Achse eines Elektronenmikroskops, in der der Elektronenstrahl fokussiert wird, um ein Bild zu erzeugen." + }, { + "@language" : "en", + "@value" : "The plane perpendicular to the optical axis of an electron microscope where the electron beam is focused to form an image." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/FocalPoint", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Brennpunkt" + }, { + "@language" : "en", + "@value" : "Focal Point" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/DigitalEntity" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Der Punkt, an dem der Elektronenstrahl in einem Elektronenmikroskop fokussiert wird, um ein Bild der Probe zu erzeugen." + }, { + "@language" : "en", + "@value" : "The point at which the electron beam is focused in an electron microscope to form an image of the specimen." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/FocusedBeam", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Focused Beam" + }, { + "@language" : "de", + "@value" : "Fokussierter Strahl" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/Beam" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "An electron beam that has been narrowed or focused to a small spot size on the specimen surface." + }, { + "@language" : "de", + "@value" : "Ein Elektronenstrahl, der auf einen kleinen Punkt auf der Probenoberfläche eingeengt oder fokussiert wurde." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/FocusedIonBeam-ScanningElectronMicroscope", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Focus(ed) Ion Beam - Scanning Electron Microscope" + }, { + "@language" : "de", + "@value" : "Fokussierter Ionenstrahl - Rasterelektronenmikroskop" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/IonMicroscope" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "A dual-beam microscope that combines a focused ion beam with a scanning electron microscope." + }, { + "@language" : "de", + "@value" : "Ein Zweistrahlmikroskop, das einen fokussierten Ionenstrahl mit einem Rasterelektronenmikroskop kombiniert." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "FIB-SEM" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/FocusedIonBeamScanningElectronMicroscopy", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Focused Ion Beam Scanning Electron Microscopy" + }, { + "@language" : "de", + "@value" : "Fokussierte Ionenstrahl-Rasterelektronenmikroskopie" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/IonMicroscopy" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "Focused Ion Beam Scanning Electron Microscopy is a combination of two techniques: focused ion beam (FIB) and scanning electron microscopy (SEM). FIB-SEM systems use a focused ion beam to both image and modify a sample's surface. The ion beam can be used for milling, cutting, and deposition processes, making FIB-SEM a versatile tool for materials analysis, sample preparation, and three-dimensional imaging." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "FIB-SEM" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/FourierTransformInfraredSpectroscopy", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Fourier Transform Infrared Spectroscopy" + }, { + "@language" : "de", + "@value" : "Fourier-Transformations-Infrarotspektroskopie" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/Spectroscopy" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "Fourier Transform Infrared Spectroscopy (FTIR) is a powerful analytical technique used in various scientific disciplines to study the molecular composition and properties of materials. It is based on the interaction between infrared radiation and a sample, providing information about the vibrational modes of molecules.\nIn FTIR spectroscopy, an infrared beam is directed through a sample, and the interaction between the radiation and the sample's molecules leads to absorption of specific infrared frequencies. Each type of molecular bond and functional group in the sample absorbs infrared radiation at characteristic frequencies, which correspond to the energies of molecular vibrations. The resulting absorption spectrum represents a fingerprint of the sample's molecular structure.\nThe Fourier transform technique is used to convert the raw data obtained from the absorption measurements into a Fourier-transformed spectrum. This transformation improves the signal-to-noise ratio and enhances the accuracy of spectral analysis.\nFTIR is extensively used in a wide range of fields, including chemistry, biology, materials science, pharmaceuticals, and environmental science. It is employed for qualitative and quantitative analysis, identification of compounds, monitoring chemical reactions, and studying molecular interactions. FTIR spectroscopy provides valuable insights into molecular bonding, functional groups, and the chemical composition of substances, making it an indispensable tool in modern analytical science." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "FTIR" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/FrameTime", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Frame Time" + }, { + "@language" : "de", + "@value" : "Rahmenscanzeit" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/Duration" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Die Zeit, die benötigt wird, um ein Einzelbild in einem Elektronenmikroskop aufzunehmen und anzuzeigen." + }, { + "@language" : "en", + "@value" : "The time required to capture and display a single frame of an image in an electron microscope." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/GatanImageFilter", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Gatan Abbildungsfilter" + }, { + "@language" : "en", + "@value" : "Gatan Image Filter" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/ImageFilter" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "A Gatan Image Filter refers to an image filter manufactured by Gatan, Inc., a company specializing in electron microscopy and related products. Gatan's image filters are designed for electron microscopes and electron energy loss spectroscopy (EELS) applications. These filters allow researchers to control and enhance the acquisition of electron energy loss spectra while obtaining high-resolution images of the sample under investigation." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/Gun", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Gun" + }, { + "@language" : "de", + "@value" : "Kanone" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/ProcessingNode" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "In the context of electron microscopy and particle acceleration, a \"gun\" typically refers to an electron or particle source that generates and emits the particles. In electron microscopy, an electron gun is used to generate a beam of electrons for imaging or analysis. In particle accelerators, a particle gun generates and launches particles at high speeds for various experimental purposes." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/HeliumIonMicroscope", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Helium Ion Microscope" + }, { + "@language" : "de", + "@value" : "Helium-Ionen-Mikroskop" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/FocusedIonBeam-ScanningElectronMicroscope" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "A type of microscope that uses helium ions to image samples with high resolution." + }, { + "@language" : "de", + "@value" : "Eine Art Mikroskop, das Helium-Ionen verwendet, um Proben mit hoher Auflösung abzubilden." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "HIM" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/HeliumIonMicroscopy", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Helium Ion Microscopy" + }, { + "@language" : "de", + "@value" : "Helium-Ionen-Mikroskopie" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/IonMicroscopy" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "Helium Ion Microscopy is a microscopy technique that uses a beam of helium ions instead of electrons to interact with a sample's surface. The smaller mass of helium ions compared to electrons allows for higher resolution imaging and reduced sample damage. HIM provides high-resolution images and is often used for imaging delicate or sensitive samples." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "HIM" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/HighAngleAnnularDarkFieldScanningTransmissionElectronMicroscope", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "High-angle Annular Dark-field Scanning Transmission Electron Microscope" + }, { + "@language" : "de", + "@value" : "Hochwinkel-Dunkelfeld-Rastertransmissionselektronenmikroskop mit annularem Winkel" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/ScanningTransmissionElectronMicroscope" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "A type of scanning transmission electron microscope that detects scattered electrons at high angles." + }, { + "@language" : "de", + "@value" : "Eine Art Rastertransmissionselektronenmikroskop, das gestreute Elektronen in hohen Winkeln erkennt." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "HAADF-STEM" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/HighResolutionTransmissionElectronMicroscope", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "High Resolution Transmission Electron Microscope" + }, { + "@language" : "de", + "@value" : "Hochauflösendes Transmissionselektronenmikroskop" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/TransmissionElectronMicroscope" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "A transmission electron microscope capable of achieving high-resolution images." + }, { + "@language" : "de", + "@value" : "Ein Transmissionselektronenmikroskop, das hochauflösende Bilder liefert." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "HRTEM" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/HighResolutionTransmissionElectronMicroscopy", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "High Resolution Transmission Electron Microscopy" + }, { + "@language" : "de", + "@value" : "Hochauflösende Transmissionselektronenmikroskopie" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/TransmissionElectronMicroscopy" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "High Resolution TEM is a technique that provides exceptionally high-resolution images of a sample's internal structure, revealing atomic-level details." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "HRTEM" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/ImageFilter", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Abbildungsfilter" + }, { + "@language" : "en", + "@value" : "Image Filter" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/ProcessingNode" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "An image filter is a device or component used in imaging systems, such as microscopy or photography, to modify the appearance of an image by selectively altering certain characteristics. Filters can be used to adjust contrast, brightness, color balance, and other image properties. They are often used to enhance specific features or to correct for distortions caused by lighting conditions or optical imperfections." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/IncidentBeam", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Einfallender Strahl" + }, { + "@language" : "en", + "@value" : "Incident Beam" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/Beam" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Der Elektronenstrahl, der in einem Elektronenmikroskop auf die Probenoberfläche trifft und Wechselwirkungen hervorruft, die Signale für die Abbildung oder Analyse erzeugen." + }, { + "@language" : "en", + "@value" : "The electron beam that strikes the specimen surface in an electron microscope, causing interactions that produce signals for imaging or analysis." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/InelasticScattering", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Inelastic Scattering" + }, { + "@language" : "de", + "@value" : "Inelastische Streuung" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/PhysicalProcess" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "Inelastic scattering is a scattering process that involves the transfer of energy and momentum between the incident particle (e.g., photon, electron) and the target particle. During inelastic scattering, the energy of the scattered particle changes, and the interaction may result in various outcomes, such as excitation, emission, or other energy transfers that alter the internal state of the target particle." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/InteractionVolume", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Interaction Volume" + }, { + "@language" : "de", + "@value" : "Überlagerungsvolumen" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/Volume" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Der Bereich innerhalb einer Probe, in dem ein Teilchenstrahl mit dem Material in Wechselwirkung tritt." + }, { + "@language" : "en", + "@value" : "The region within a sample where a particle beam interacts with the material." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/IonBeam", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Ion Beam" + }, { + "@language" : "de", + "@value" : "Ionenstrahl" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/Beam" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "A stream of ions used for grinding or analysis, especially in ion microscopy techniques for imaging." + }, { + "@language" : "de", + "@value" : "Ein Ionenstrom, der zum Mahlen oder zur Analyse verwendet wird, insbesondere bei Ionenmikroskopietechniken zur Bildgebung." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/IonMicroscope", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Ion Microscope" + }, { + "@language" : "de", + "@value" : "Ionenmikroskop" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/Micropscope" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "A microscope that uses ions to create images of samples." + }, { + "@language" : "de", + "@value" : "Ein Mikroskop, das mit Hilfe von Ionen Bilder von Proben erzeugt." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/IonMicroscopy", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Ion Microscopy" + }, { + "@language" : "de", + "@value" : "Ionenmikroskopie" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/MicroscopyProcess" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "Ion Microscopy refers to a group of microscopy techniques that use focused ion beams to image and analyze samples. These techniques utilize ions, such as protons or heavy ions, instead of electrons or photons to interact with the sample, providing valuable information about its composition and structure." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/LightMicroscope", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Lichtmikroskop" + }, { + "@language" : "en", + "@value" : "Light Microscope" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/OpticalMicroscope" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "An optical microscope that uses visible light to illuminate and magnify samples." + }, { + "@language" : "de", + "@value" : "Ein optisches Mikroskop, das sichtbares Licht verwendet, um Proben zu beleuchten und zu vergrößern." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/LightMicroscopy", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Lichtmikroskopie" + }, { + "@language" : "en", + "@value" : "Light Microscopy" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/OpticalMicroscopy" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Die Verwendung von sichtbarem Licht zur Beobachtung und Untersuchung kleiner Objekte oder Strukturen." + }, { + "@language" : "en", + "@value" : "The use of visible light to observe and study small objects or structures." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/Magnification", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Magnification" + }, { + "@language" : "de", + "@value" : "Vergrößerung" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/ValueObject" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Das Verhältnis zwischen der Größe eines von einem optischen System erzeugten Bildes und der Größe des Objekts." + }, { + "@language" : "en", + "@value" : "The ratio of the size of an image produced by an optical system to the size of the object." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/MechanicalPolishing", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Mechanical Polishing" + }, { + "@language" : "de", + "@value" : "Mechanisches Polieren" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/ManufacturingProcess" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "Mechanical polishing is a material preparation technique used to enhance the surface quality and finish of a sample by removing thin layers of material through abrasion. It involves using abrasive materials, such as polishing cloths, diamond suspensions, or abrasive pastes, along with a polishing machine or device. The process typically includes several steps, each using progressively finer abrasives to achieve a smooth and mirror-like surface.\n\nDuring mechanical polishing, the sample is pressed against the rotating polishing medium with controlled pressure. The abrasive particles embedded in the medium gradually remove surface irregularities, scratches, and imperfections, resulting in improved flatness, clarity, and reflectivity. The process can be adjusted to target specific levels of surface roughness and precision.\n\nMechanical polishing is commonly used in various scientific and industrial applications, such as metallography, materials science, electronics, and optics. It is an essential step before further analyses like microscopy, spectroscopy, or surface profiling, as it provides a pristine surface for accurate characterization and observation of material properties." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/MonochromaticBeam", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Monochromatic Beam" + }, { + "@language" : "de", + "@value" : "Monochromatischer Strahl" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/Beam" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "An electron beam consisting of electrons with a narrow range of energies, typically achieved using electron energy filters or monochromators." + }, { + "@language" : "de", + "@value" : "Ein Elektronenstrahl, der aus Elektronen mit einem engen Energiebereich besteht, der in der Regel durch Elektronenenergiefilter oder Monochromatoren erreicht wird." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/Monochromator", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Monochromator" + }, { + "@language" : "en", + "@value" : "Monochromator" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/ProcessingNode" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "An optical device that transmits a narrow range of wavelengths of light." + }, { + "@language" : "de", + "@value" : "Ein optisches Gerät, das einen engen Wellenlängenbereich von Licht überträgt." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/OpticalMicroscope", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Optical Microscope" + }, { + "@language" : "de", + "@value" : "Optisches Mikroskop" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/Micropscope" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "A microscope that uses visible light and lenses to magnify specimens." + }, { + "@language" : "de", + "@value" : "Ein Mikroskop, das sichtbares Licht und Linsen zur Vergrößerung von Proben verwendet." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/OrientationImagingMicroscopy", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Bildgebende Orientierungsmikroskopie" + }, { + "@language" : "en", + "@value" : "Orientation Imaging Microscopy" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/ScanningElectronMicroscopy" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "Orientation Imaging Microscopy is a microscopy technique used to map the crystallographic orientations of grains within a material. It is commonly applied in SEM to study the microstructural properties of polycrystalline materials." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "OIM" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/PhysicalProcess", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Physical Process" + }, { + "@language" : "de", + "@value" : "Physikalischer Prozess" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/Process" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "A physical process refers to a sequence of events or interactions that occur in the physical world and can be described and analyzed based on the principles of physics. These processes involve the transformation of energy, matter, or both, and they often follow established laws and theories of physics. In particular, a physical process may just occur due to natural circumstances and does not necessarily have to be induced by human activities or interactions." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/PixelSize", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Pixel Size" + }, { + "@language" : "en", + "@value" : "Pixelgröße" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/ValueObject" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Die Größe der einzelnen Pixel in einem digitalen Bild oder einer Anzeige." + }, { + "@language" : "en", + "@value" : "The size of individual pixels in a digital image or display." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/PolarizedLightMicroscope", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Polarisiertes Lichtmikroskop" + }, { + "@language" : "en", + "@value" : "Polarized Light Microscope" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/LightMicroscope" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "A microscope that uses polarized light to observe and analyze samples." + }, { + "@language" : "de", + "@value" : "Ein Mikroskop, das polarisiertes Licht zur Beobachtung und Analyse von Proben verwendet." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "PLM" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/PolarizedLightMicroscopy", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Polarisationslichtmikroskopie" + }, { + "@language" : "en", + "@value" : "Polarized Light Microscopy" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/LightMicroscopy" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "Polarized Light Microscopy is a technique that uses polarized light to enhance the contrast and reveal structural information in transparent samples. Light waves vibrate in specific directions, and by using polarizers to control the orientation of light waves, polarized light microscopy can highlight birefringent materials, anisotropic structures, and stress patterns within samples. This technique is valuable for studying crystalline structures, fibers, and anisotropic materials." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "PLM" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/PolePiece", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Pole Piece" + }, { + "@language" : "de", + "@value" : "Polschuh" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/ProcessingNode" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "A component of the electron column in an electron microscope that focuses and guides the electron beam onto the specimen." + }, { + "@language" : "de", + "@value" : "Eine Komponente der Elektronensäule in einem Elektronenmikroskop, die den Elektronenstrahl fokussiert und auf die Probe lenkt." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/PrimaryBeam", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Primary Beam" + }, { + "@language" : "de", + "@value" : "Primärstrahl" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/Beam" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Der Hauptelektronenstrahl, der von der Elektronenquelle ausgesandt und auf die Probe in einem Elektronenmikroskop gerichtet wird." + }, { + "@language" : "en", + "@value" : "The main electron beam emitted from the electron source and directed towards the specimen in an electron microscope." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/ProbeCurrent", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Probe Current" + }, { + "@language" : "de", + "@value" : "Sondenstrom" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/Current" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Der Strom der Elektronen im fokussierten Elektronenstrahl, der zur Abbildung oder Analyse in einem Elektronenmikroskop verwendet wird." + }, { + "@language" : "en", + "@value" : "The current of electrons in the focused electron beam used for imaging or analysis in an electron microscope." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/ProbeSize", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Probe Size" + }, { + "@language" : "de", + "@value" : "Sensorgröße" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/ValueObject" + } ], + "http://www.w3.org/2004/02/skos/core#altLabel" : [ { + "@language" : "de", + "@value" : "Messfühlergröße" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Die Größe der Sonde oder des Strahls, die bei Mikroskopie- oder Spektroskopieverfahren verwendet werden." + }, { + "@language" : "en", + "@value" : "The size of the probe or beam used in microscopy or spectroscopy techniques." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/Reconstruction", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Reconstruction" + }, { + "@language" : "de", + "@value" : "Rekonstruktion" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/AnalysingProcess" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Der Prozess der Erstellung eines dreidimensionalen Bildes oder Modells aus zweidimensionalen Daten." + }, { + "@language" : "en", + "@value" : "The process of creating a three-dimensional image or model from two-dimensional data." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/Resolution", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Auflösung" + }, { + "@language" : "en", + "@value" : "Resolution" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/ValueObject" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "In various contexts, resolution refers to the degree of detail that can be discerned in an image, measurement, or other representation of an object or phenomenon." + }, { + "@language" : "de", + "@value" : "In verschiedenen Zusammenhängen bezieht sich die Auflösung auf den Grad der Detailgenauigkeit, die in einem Bild, einer Messung oder einer anderen Darstellung eines Objekts oder Phänomens erkennbar ist." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/ScanningElectronMicroscope", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Rasterelektronenmikroskop" + }, { + "@language" : "en", + "@value" : "Scanning Electron Microscope" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/ElectronMicroscope" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "A microscope that produces images of a sample by scanning it with a focused beam of electrons." + }, { + "@language" : "de", + "@value" : "Ein Mikroskop, das Bilder einer Probe erzeugt, indem es diese mit einem fokussierten Elektronenstrahl abtastet." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "de", + "@value" : "REM" + }, { + "@language" : "en", + "@value" : "SEM" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/ScanningElectronMicroscopy", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Rasterelektronenmikroskopie" + }, { + "@language" : "en", + "@value" : "Scanning Electron Microscopy" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/ElectronMicroscopy" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "Scanning Electron Microscopy is a microscopy technique that uses a focused beam of electrons to scan the surface of a sample. The interaction of the electrons with the sample generates signals that provide information about the sample's topography, morphology, and composition." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "SEM" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/ScanningProbeMicroscope", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Rastersondenmikroskop" + }, { + "@language" : "en", + "@value" : "Scanning Probe Microscope" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/ElectronMicroscope" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "A type of microscope that images surfaces by scanning a probe over the sample." + }, { + "@language" : "de", + "@value" : "Ein Mikroskoptyp, der Oberflächen abbildet, indem er eine Sonde über die Probe führt." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/ScanningProbeMicroscopy", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Rastersondenmikroskopie" + }, { + "@language" : "en", + "@value" : "Scanning Probe Microscopy" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/ElectronMicroscopy" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "Scanning Probe Microscopy encompasses various techniques, such as Atomic Force Microscopy (AFM) and Scanning Tunneling Microscopy (STM), that use a sharp probe to scan a sample's surface. These techniques provide high-resolution images and information about surface properties on the nanometer scale." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "SPM" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/ScanningTransmissionElectronMicroscope", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Rastertransmissionselektronenmikroskop" + }, { + "@language" : "en", + "@value" : "Scanning Transmission Electron Microscope" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/TransmissionElectronMicroscope" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "A type of transmission electron microscope where a focused electron beam is scanned across the sample." + }, { + "@language" : "de", + "@value" : "Eine Art von Transmissionselektronenmikroskop, bei dem ein fokussierter Elektronenstrahl über die Probe gescannt wird." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "STEM" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/ScanningTransmissionElectronMicroscopy", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Rastertransmissionselektronenmikroskopie" + }, { + "@language" : "en", + "@value" : "Scanning Transmission Electron Microscopy" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/TransmissionElectronMicroscopy" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "Scanning Transmission Electron Microscopy is a technique that combines the principles of scanning and transmission electron microscopy. It allows imaging and spectroscopy with high spatial resolution." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "STEM" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/ScanningTransmissionElectronMicroscopy-ElectronEnergyLossSpectroscopy", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Rastertransmissionselektronenmikroskopie Elektronen-Energieverlust-Spektroskopie" + }, { + "@language" : "en", + "@value" : "Scanning Transmission Electron Microscopy Electron Energy Loss Spectroscopy" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/ScanningTransmissionElectronMicroscopy" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "STEM-EELS combines STEM imaging with electron energy loss spectroscopy to provide information about the elemental composition and electronic structure of a sample at high spatial resolution." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "STEM-EELS" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/ScanningTunnelingMicroscope", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Rastertunnelmikroskop" + }, { + "@language" : "en", + "@value" : "Scanning Tunneling Microscope" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/ScanningProbeMicroscope" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "A microscope that uses quantum tunneling to image surfaces at the atomic level." + }, { + "@language" : "de", + "@value" : "Ein Mikroskop, das Quanten-Tunneling nutzt, um Oberflächen auf atomarer Ebene abzubilden." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "STM" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/ScanningTunnelingMicroscopy", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Rastertunnelmikroskopie" + }, { + "@language" : "en", + "@value" : "Scanning Tunneling Microscopy" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/ScanningProbeMicroscopy" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "Scanning Tunneling Microscopy is a technique that uses a conducting probe to measure the tunneling current between the probe and the sample's surface. It provides atomic-scale images of surfaces and is often used to study conductive materials." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "STM" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/Scintillator", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Scintillator" + }, { + "@language" : "de", + "@value" : "Szintillator" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/ProcessingNode" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "A material that emits light when it absorbs ionizing radiation." + }, { + "@language" : "de", + "@value" : "Ein Material, das Licht aussendet, wenn es ionisierende Strahlung absorbiert." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/SecondaryIonMassSpectrometry", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Secondary Ion Mass Spectrometry" + }, { + "@language" : "de", + "@value" : "Sekundärionen-Massenspektrometrie" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/Spectroscopy" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "Secondary Ion Mass Spectrometry (SIMS) is an advanced analytical technique used to determine the elemental and isotopic composition of solid surfaces and thin films at a very high sensitivity and spatial resolution. It is widely employed in various scientific and industrial applications, including materials science, semiconductor research, and surface analysis.\nIn SIMS, a focused beam of high-energy primary ions is directed at a sample's surface. The impact of these primary ions causes the ejection of secondary ions from the sample's surface. These secondary ions are then extracted, mass-separated, and detected using a mass spectrometer. The mass spectrometer measures the mass-to-charge ratios of the secondary ions, providing information about the elemental and isotopic composition of the sample.\nThe sensitivity and spatial resolution of SIMS allow researchers to analyze very small areas, often down to the micrometer or nanometer scale. This makes SIMS particularly valuable for investigating surface composition, depth profiling of layered structures, and detecting trace elements in complex materials. The technique is non-destructive in its elemental analysis, which is beneficial for studying delicate samples or preserving valuable materials.\nSIMS has applications in diverse fields, including materials characterization, semiconductor device analysis, biological and medical research, and geological studies. It provides essential information about the chemical composition, structure, and distribution of elements in complex samples, contributing to advancements in materials science and various technological developments." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "SIMS" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/SelectedAreaElectronDiffraction", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Elektronenbeugung ausgewählter Regionen" + }, { + "@language" : "en", + "@value" : "Selected Area Electron Diffraction" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/Diffraction" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "Selected Area Electron Diffraction is a technique used in transmission electron microscopy (TEM) to study the crystallographic orientation of small regions within a sample. By selecting a specific area of the sample and directing an electron beam onto it, diffraction patterns are generated. These patterns offer insights into the sample's crystal structure and orientation." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "SAD" + }, { + "@language" : "en", + "@value" : "SAED" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/SiliconDriftDetector", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Silicon Drift Detector" + }, { + "@language" : "de", + "@value" : "Silizium-Driftdetektor" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/ProcessingNode" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "A type of X-ray detector that offers high-speed performance and high energy resolution." + }, { + "@language" : "de", + "@value" : "Eine Art Röntgendetektor, der Hochgeschwindigkeitsleistung und hohe Energieauflösung bietet." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "SDD" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/SoftXRayEmissionSpectrometer", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Röntgenemissionsspektrometer mit weicher Röntgenstrahlung" + }, { + "@language" : "en", + "@value" : "Soft X-ray Emission Spectrometer" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/Spectrometer" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "An instrument used to analyze the emission of soft X-rays from a sample." + }, { + "@language" : "de", + "@value" : "Ein Instrument zur Analyse der Emission weicher Röntgenstrahlen aus einer Probe." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "SXES" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/Source", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Quelle" + }, { + "@language" : "en", + "@value" : "Source" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/ProcessingNode" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Die Elektronenquelle, z. B. ein Wolframfaden oder eine Feldemissionskathode, die in einem Elektronenmikroskop Elektronen emittiert." + }, { + "@language" : "en", + "@value" : "The electron source, such as a tungsten filament or field-emission cathode, that emits electrons in an electron microscope." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/SpatialResolution", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Ortsauflösung" + }, { + "@language" : "en", + "@value" : "Spatial Resolution" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/Resolution" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Die Fähigkeit eines Bildgebungssystems, feine Details in einem Objekt anzuzeigen. Sie bezieht sich auf das kleinste wahrnehmbare Detail in einem Bild." + }, { + "@language" : "en", + "@value" : "The ability of an imaging system to discern fine details in an object. It refers to the smallest discernible detail in an image." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/Spectrometer", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Spectrometer" + }, { + "@language" : "de", + "@value" : "Spektrometer" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/ProcessingNode" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "An instrument used to measure properties of light over a specific portion of the electromagnetic spectrum." + }, { + "@language" : "de", + "@value" : "Ein Instrument zur Messung der Eigenschaften von Licht in einem bestimmten Teil des elektromagnetischen Spektrums." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/Spectroscopy", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/AnalysingProcess" + } ], + "http://www.w3.org/2004/02/skos/core#altLabel" : [ { + "@language" : "en", + "@value" : "Spectrometry" + }, { + "@language" : "de", + "@value" : "Spektrometrie" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "Spectroscopy is a scientific technique used to study and analyze the interaction of matter with electromagnetic radiation, such as light. It involves measuring the way in which different substances absorb, emit, or scatter light at various wavelengths or frequencies. By examining the spectrum of light emitted, absorbed, or transmitted by a sample, scientists can gain insights into its chemical composition, molecular structure, and physical properties. Spectroscopy is widely utilized in various fields, including chemistry, physics, astronomy, and biochemistry, to investigate the characteristics and behavior of materials at the atomic and molecular level." + } ], + "http://www.w3.org/2004/02/skos/core#prefLabel" : [ { + "@language" : "en", + "@value" : "Spectroscopy" + }, { + "@language" : "de", + "@value" : "Spektroskopie" + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/SphericalAberration", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Spherical Aberration" + }, { + "@language" : "de", + "@value" : "Sphärische Aberration" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/Aberration" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "A type of optical aberration caused by deviations from the ideal spherical shape in lenses or mirrors." + }, { + "@language" : "de", + "@value" : "Eine Art von optischer Aberration, die durch Abweichungen von der idealen sphärischen Form in Linsen oder Spiegeln verursacht wird." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/SurfaceStructure", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Oberflächenstruktur" + }, { + "@language" : "en", + "@value" : "Surface Structure" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/Object" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Die Anordnung und die Merkmale der äußersten Schicht eines Materials." + }, { + "@language" : "en", + "@value" : "The arrangement and features of the outermost layer of a material." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/TiltCorrection", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Neigungskorrektur" + }, { + "@language" : "en", + "@value" : "Tilt Correction" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/AnalysingProcess" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "A correction applied to images obtained from tilted specimens in electron microscopy to compensate for distortions caused by the tilt angle." + }, { + "@language" : "de", + "@value" : "Eine Korrektur, die bei Bildern von gekippten Proben in der Elektronenmikroskopie angewendet wird, um durch den Kippwinkel verursachte Verzerrungen zu kompensieren." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/TimeOfFlightSecondaryIonMassSpectrometry", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Flugzeit-Sekundärionen-Massenspektrometrie" + }, { + "@language" : "en", + "@value" : "Time Of Flight Secondary Ion Mass Spectrometry" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/Spectroscopy" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "Time-of-Flight Secondary Ion Mass Spectrometry (TOF-SIMS) is an advanced surface analysis technique used to determine the elemental and molecular composition of solid surfaces and thin films with high sensitivity and spatial resolution. It is employed in various scientific and industrial fields, including materials science, nanotechnology, biomedicine, and semiconductor research.\nTOF-SIMS builds upon the principles of Secondary Ion Mass Spectrometry (SIMS), where a focused beam of high-energy primary ions is directed at a sample's surface, causing the ejection of secondary ions. In TOF-SIMS, the flight time of these secondary ions is measured as they travel through a field-free region and enter a time-of-flight mass spectrometer. The mass spectrometer measures the time taken by the ions to reach the detector, which is directly proportional to their mass-to-charge ratio.\nBy analyzing the flight times of the secondary ions, TOF-SIMS can determine the elemental, isotopic, and molecular composition of the sample's surface. It provides information about the presence of specific elements, chemical compounds, and molecular fragments, along with their spatial distribution. The high sensitivity of TOF-SIMS allows for the detection of trace elements and molecular species in complex samples.\nTOF-SIMS is valuable for characterizing surfaces at the nanoscale, profiling layered structures, investigating organic and inorganic materials, and studying biological specimens. Its ability to provide detailed chemical information while maintaining spatial resolution makes it an essential tool for understanding surface properties and material interactions in a wide range of applications." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "TOF-SIMS" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/TomographicReconstruction", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Tomographic Reconstruction" + }, { + "@language" : "de", + "@value" : "Tomographische Rekonstruktion" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/Reconstruction" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Der Prozess der Rekonstruktion einer dreidimensionalen Struktur aus einer Reihe von zweidimensionalen Bildern, die aus verschiedenen Winkeln aufgenommen wurden." + }, { + "@language" : "en", + "@value" : "The process of reconstructing a three-dimensional structure from a series of two-dimensional images taken at different angles." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/TransmissionElectronAberrationCorrectedMicroscope", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Transmission Electron Aberration-corrected Microscope" + }, { + "@language" : "de", + "@value" : "Transmissionselektronen-Aberrations-korrigiertes Mikroskop" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/TransmissionElectronMicroscope" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "A transmission electron microscope equipped with aberration correction to achieve high-resolution imaging." + }, { + "@language" : "de", + "@value" : "Ein Transmissions-Elektronenmikroskop mit Aberrationskorrektur zur Erzielung hochauflösender Bilder." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "TEAM" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/TransmissionElectronMicroscope", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Transmission Electron Microscope" + }, { + "@language" : "de", + "@value" : "Transmissionelektronenmikroskop" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/ElectronMicroscope" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "A microscope that transmits a beam of electrons through a specimen, forming an image." + }, { + "@language" : "de", + "@value" : "Ein Mikroskop, das einen Elektronenstrahl durch eine Probe sendet und ein Bild erzeugt." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@value" : "TEM" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/TransmissionElectronMicroscopy", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/ElectronMicroscopy" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "Transmission Electron Microscopy is a microscopy technique that involves transmitting a beam of electrons through a thin sample to create high-resolution images. It is used to study the internal structure and morphology of materials at the nanometer scale." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "TEM" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/Voltage", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Spannung" + }, { + "@language" : "en", + "@value" : "Voltage" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/ValueObject" + } ], + "http://www.w3.org/2004/02/skos/core#altLabel" : [ { + "@language" : "de", + "@value" : "Stromspannung" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Die Spannung, auch elektrische Potentialdifferenz, ist ein Maß für die elektrische potentielle Energie pro Ladungseinheit in einem elektrischen Stromkreis. Sie ist die Kraft, die den elektrischen Strom durch einen Leiter treibt. \n\nHinweis: Die Spannung wird in Volt (V) gemessen und stellt die potenzielle Energiedifferenz zwischen zwei Punkten in einem Stromkreis dar. Je höher die Spannung ist, desto größer ist die Kraft, die die elektrischen Ladungen antreibt, und desto höher ist folglich auch das Potenzial für einen Stromfluss." + }, { + "@language" : "en", + "@value" : "Voltage, also known as electric potential difference, is a measure of the electric potential energy per unit charge in an electrical circuit. It is the force or pressure that drives electric current through a conductor. \n\nNote: Voltage is measured in volts (V), and it represents the potential energy difference between two points in a circuit. The higher the voltage, the greater the force pushing the electric charges, and consequently, the higher the potential for current to flow." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/Volume", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Volume" + }, { + "@language" : "de", + "@value" : "Volumen" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/ValueObject" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Die Menge an Raum, die ein Stoff oder Gegenstand einnimmt." + }, { + "@language" : "en", + "@value" : "The amount of space that a substance or object occupies." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/WaitTime", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#comment" : [ { + "@language" : "de", + "@value" : "Die Wartezeit wird häufig genutzt, um die Probe zu stabilisieren oder um die Beschädigung der Probe zu minimieren." + }, { + "@language" : "en", + "@value" : "The wait time is often used to allow the specimen to stabilize or to minimize sample damage." + } ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Wait Time" + }, { + "@language" : "de", + "@value" : "Wartezeit" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/Duration" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Das Zeitintervall zwischen aufeinander folgenden Messungen oder Operationen in einem Elektronenmikroskop." + }, { + "@language" : "en", + "@value" : "The time interval between successive measurements or operations in an electron microscope." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/WorkingDistance", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#comment" : [ { + "@language" : "de", + "@value" : "Der Arbeitsabstand wirkt sich auf die Tiefenschärfe und die Auflösung des Bildes aus." + }, { + "@language" : "en", + "@value" : "The working distance affects the depth of field and the resolution of the image." + } ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Arbeitsabstand" + }, { + "@language" : "en", + "@value" : "Working Distance" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/Distance" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Der Abstand zwischen der Objektivlinse des Elektronenmikroskops und der Probenoberfläche, wenn der Elektronenstrahl auf die Probe fokussiert wird." + }, { + "@language" : "en", + "@value" : "The distance between the electron microscope objective lens and the specimen surface when the electron beam is focused on the specimen." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/XRayAbsorptionNearEdgeSpectroscopy", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Röntgenabsorptionsspektroskopie im Nahbereich" + }, { + "@language" : "en", + "@value" : "X-ray Absorption Near Edge Spectroscopy" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/Spectroscopy" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "X-ray Absorption Near Edge Spectroscopy (XANES) is a specialized technique used in the field of materials science and spectroscopy to study the electronic and structural properties of materials. It focuses on the X-ray absorption spectra of atoms within a sample, particularly the region just above the absorption edge of an element's X-ray absorption spectrum.\nIn XANES, a sample is irradiated with X-rays, typically generated by a synchrotron radiation source. These X-rays are tuned to specific energy levels corresponding to the absorption edges of the elements of interest in the sample. As the X-rays are absorbed by the sample, the energy levels of the atoms are altered, leading to various transitions in their electron configurations. The resulting X-ray absorption spectrum is measured, specifically targeting the energies just above the absorption edge.\nXANES provides information about the electronic structure of the atoms within the sample, including the oxidation state, chemical bonding, and local environment of the absorbing element. The fine details of the XANES spectrum offer insights into the atomic and molecular interactions, as well as the coordination and symmetry of atoms in different chemical environments.\nThis technique is widely used in various scientific fields, including chemistry, solid-state physics, and materials science. XANES helps researchers understand the properties and behavior of materials at the atomic level, making it an invaluable tool for investigating the characteristics of complex materials, catalysts, minerals, and biomolecules." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "XANES" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/XRayAbsorptionSpectroscopy", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Röntgenabsorptionsspektroskopie" + }, { + "@language" : "en", + "@value" : "X-ray Absorption Spectroscopy" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/XRayMapping" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "X-ray Absorption Spectroscopy is a technique used to study the electronic and local structural properties of materials by analyzing the absorption of X-rays. It involves measuring how X-rays are absorbed by a sample at various energies, providing insights into the electronic states and chemical environments of specific elements." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "XAS" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/XRayAnalysis", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Röntgenanalyse" + }, { + "@language" : "en", + "@value" : "X-ray Analysis" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/AnalysingProcess" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "X-ray analysis is a technique used to investigate the composition and structure of materials by exposing them to X-rays. When X-rays interact with a material, they can be absorbed, scattered, or diffracted in ways that provide information about the material's internal arrangement of atoms and its elemental composition." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/XRayDiffraction", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "X-ray Diffraction" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/Diffraction" + } ], + "http://www.w3.org/2004/02/skos/core#altLabel" : [ { + "@language" : "de", + "@value" : "Röntgenstrahlbeugung" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "X-ray Diffraction is a technique that utilizes the diffraction of X-rays by crystals to determine their atomic arrangement and lattice structure. X-ray diffraction patterns are produced when X-rays strike a crystalline sample, and the resulting pattern provides information about the arrangement of atoms in the crystal lattice." + } ], + "http://www.w3.org/2004/02/skos/core#prefLabel" : [ { + "@language" : "de", + "@value" : "Röntgenbeugung" + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "XRD" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/XRayFluorescence", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Röntgenfluoreszenz" + }, { + "@language" : "en", + "@value" : "X-ray Fluorescence" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/XRayMapping" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "X-ray Fluorescence is a method used to determine the elemental composition of a sample by analyzing the X-rays emitted when the sample is exposed to high-energy X-rays. The X-rays emitted are characteristic of the elements present, allowing for quantitative analysis of the sample's elemental composition." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "XRF" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/XRayMapping", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Röntgen-Mapping" + }, { + "@language" : "en", + "@value" : "X-ray Mapping" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/XRayAnalysis" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "X-ray mapping is a process that involves generating spatially resolved images of the distribution of specific elements within a sample. By collecting X-ray signals emitted or scattered from a sample at different points, an elemental map can be created, showing the varying concentrations of elements across the sample's surface." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/XRayMicroanalysis", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Röntgen-Mikroanalyse" + }, { + "@language" : "en", + "@value" : "X-ray Microanalysis" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/XRayAnalysis" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "X-ray Microanalysis is a technique that combines microscopy and X-ray analysis to study the elemental composition of small regions within a sample. It involves focusing an electron or X-ray beam on a specific area of the sample and measuring the X-rays emitted from that area to determine the elemental composition." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/XRayPhotoelectronSpectroscopy", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/mo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Röntgenphotoelektronenspektroskopie" + }, { + "@language" : "en", + "@value" : "X-ray Photoelectron Spectroscopy" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/mo/XRayMapping" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "X-ray Photoelectron Spectroscopy, also known as Electron Spectroscopy for Chemical Analysis (ESCA), is a technique used to study the surface chemistry of materials. XPS involves bombarding a sample's surface with X-rays to emit photoelectrons, which are then analyzed to determine the elemental composition and chemical states of the elements on the surface." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "ChatGPT 3.5" + } ], + "https://w3id.org/pmd/mo/abbreviation" : [ { + "@language" : "en", + "@value" : "XPS" + } ] +}, { + "@id" : "https://w3id.org/pmd/mo/abbreviation", + "@type" : [ "http://www.w3.org/2002/07/owl#AnnotationProperty" ] +} ] \ No newline at end of file diff --git a/mo/ontology.nt b/mo/ontology.nt new file mode 100644 index 0000000..25f9a75 --- /dev/null +++ b/mo/ontology.nt @@ -0,0 +1,1506 @@ + . + . + . + . + . + . + "Markus Schilling, Bernd Bayerlein, June Lau. (January 29th, 2024) MO: microscopy ontology. Version 1.0.0, https://w3id.org/pmd/mo/"@en . + "Microscopy Ontology (MO)"@en . + . + "Die Mikroskopie-Ontologie (MO) ist ein umfassender Rahmen für die Darstellung von Wissen, der Konzepte aus den Bereichen Mikroskopie und Mikroanalyse umfasst. Die MO basiert semantisch auf der PMD-Kernontologie PMDco (die in MO importiert wird), um eine Verbindung zu anderen MSE-Anwendungsontologien und domänenneutralen Konzepten in etablierten Top-Level-Ontologien zu ermöglichen. Das Hauptziel von MO ist es, ein standardisiertes Vokabular und einen Rahmen für die Beschreibung und Organisation von Konzepten, Entitäten und Beziehungen im Bereich der Mikroskopie und Mikroanalyse bereitzustellen. Diese Standardisierung erleichtert die Kommunikation und Interoperabilität zwischen verschiedenen Systemen, Datenbanken und Forschungsgruppen. Um ein Vokabular zu erhalten, das in diesem Bereich relevant und daher standardisierungswürdig ist, wurde ein NLP-Ansatz angewandt, mit dessen Hilfe häufig verwendete Begriffe ermittelt wurden. Auf der Grundlage dieser Liste von Begriffen wurde dann die MO entwickelt. In der Mikroskopie und Mikroanalytik fallen große Datenmengen aus verschiedenen Techniken und Instrumenten an. Die MO kann dazu beitragen, heterogene Datenquellen zu integrieren und zu verknüpfen, so dass Daten aus verschiedenen Experimenten und Studien effektiver kombiniert und analysiert werden können.\nDarüber hinaus dient die MO als Grundlage für die Annotation von Mikroskopie- und Mikroanalysedaten mit standardisierten Metadaten. Diese erweiterte Metadatenbeschreibung verbessert die Interpretierbarkeit, Durchsuchbarkeit und Wiederverwendbarkeit von Daten und fördert die Transparenz und Reproduzierbarkeit in der Forschung. Darüber hinaus kann die MO durch die Formalisierung des Wissens über Instrumente, Techniken, Materialien und Phänomene die Grundlage für maschinelles Denken zur Unterstützung der Dateninterpretation, Hypothesenbildung und Versuchsplanung bilden.\nInsgesamt soll MO die Forschung voranbringen, die Zusammenarbeit fördern und den Wissensaustausch in diesem interdisziplinären Bereich erleichtern."@de . + "The Microscopy Ontology (MO) is a comprehensive framework for representing knowledge that encompasses concepts from the domains of microscopy and microanalysis. The MO is semantically based on the mid-level PMD Core Ontology PMDco (which is imported in MO) to allow a connection to other MSE application ontologies and domain neutral concepts found in established top-level ontologies. The primary goal of MO is to provide a standardized vocabulary and framework for describing and organizing concepts, entities, and relationships within the field of microscopy and microanalysis. This standardization facilitates communication and interoperability between different systems, databases, and research groups. In order to obtain a vocabulary that is relevant in the field and therefore worth standardizing, an NLP approach was applied, with the help of which commonly used terms were determined. MO was then developed based on the respective list of terms. Microscopy and microanalysis generate vast amounts of data from various techniques and instruments. MO may help to integrate and link heterogeneous data sources, enabling the combination and analysis of data from different experiments and studies more effectively. Furthermore, MO serves as a basis for annotating microscopy and microanalysis data with standardized metadata. This improved metadata description enhances the interpretability, searchability, and reusability of data, promoting transparency and reproducibility in research. Moreover, by formalizing knowledge about instruments, techniques, materials, and phenomena, MO may provide the basis to enable machine reasoning to support data interpretation, hypothesis generation, and experimental design.\nOverall, MO is intended to advance research, promoting collaboration, and facilitating knowledge exchange in this interdisciplinary domain."@en . +# +# +# ################################################################# +# # +# # Annotation properties +# # +# ################################################################# +# +# +# https://w3id.org/pmd/co/abbreviation + . +# +# https://w3id.org/pmd/mo/abbreviation + . +# +# +# +# ################################################################# +# # +# # Classes +# # +# ################################################################# +# +# +# https://w3id.org/pmd/mo/Aberration + . + . + . + "Aberration"@de . + "Aberration"@en . + "Abweichung vom idealen oder erwarteten Verhalten, häufig im Zusammenhang mit optischen Systemen verwendet."@de . + "Deviation from the ideal or expected behavior, often used in the context of optical systems."@en . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/AccelerationVoltage + . + . + "Die Beschleunigungsspannung bestimmt die kinetische Energie der Elektronen und beeinflusst die Auflösung und die Eindringtiefe in die Probe."@de . + "The acceleration voltage determines the kinetic energy of the electrons and affects the resolution and depth of penetration in the sample."@en . + . + "Acceleration Voltage"@en . + "Beschleunigungsspannung"@de . + "Diese Klasse beschreibt die Spannung, die an ein Elektronenmikroskop angelegt wird, um die von der Elektronenquelle (in der Regel eine Kathode) emittierten Elektronen auf die Probe zu beschleunigen."@de . + "This class decribes the voltage applied to an electron microscope to accelerate the electrons emitted from the electron source (usually a cathode) towards the specimen."@en . + "ChatGPT 3.5" . +# +# https://w3id.org/pmd/mo/Angle + . + . + . + "Angle"@en . + "Winkel"@de . + "In der Geometrie und Trigonometrie ist ein Winkel ein Maß für eine Drehung, das erforderlich ist, um eine Linie oder Ebene mit einer anderen zur Deckung zu bringen. Ein Winkel wird durch zwei Strahlen gebildet, die einen gemeinsamen Endpunkt haben, der als Scheitelpunkt des Winkels bezeichnet wird. Die Strahlen werden als die Seiten des Winkels bezeichnet. \n\nHinweis: Das Konzept des Winkels ist in der Geometrie von grundlegender Bedeutung und wird häufig verwendet, um die relative Ausrichtung von Linien, Ebenen oder Flächen zu beschreiben. Winkel werden in der Regel in Grad (°) oder Bogenmaß (rad) gemessen."@de . + "In geometry and trigonometry, an angle is a measure of the amount of rotation needed to bring one line or plane into coincidence with another. An angle is formed by two rays that share a common endpoint, known as the vertex of the angle. The rays are referred to as the sides of the angle. \n\nNote: The concept of an angle is fundamental in geometry and is often used to describe the relative orientation of lines, planes, or surfaces. Angles are typically measured in degrees (°) or radians (rad)."@en . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/AnnularBrightFieldScanningTransmissionElectronMicroscopy + . + . + . + "Annular Bright Field Scanning Transmission Electron Microscopy"@en . + "Ringförmige Hellfeld-Rastertransmissionselektronenmikroskopie"@de . + "ABF STEM is a technique that utilizes a specific arrangement of detectors to enhance contrast in STEM images, particularly for heavy elements."@en . + "ChatGPT 3.5"@en . + "ABF-STEM"@en . +# +# https://w3id.org/pmd/mo/AnnularDarkFieldScanningTransmissionElectronMicroscopy + . + . + . + "Annular Dark Field Scanning Transmission Electron Microscopy"@en . + "Ringförmige Dunkelfeld-Rastertransmissionselektronenmikroskopie"@de . + "ADF STEM is a technique that utilizes a specific arrangement of detectors to create contrast in STEM images based on the scattered electrons."@en . + "ChatGPT 3.5"@en . + "ADF-STEM"@en . +# +# https://w3id.org/pmd/mo/Anode + . + . + . + "Anode"@de . + "Anode"@en . + "The anode is the positively charged electrode in an electrochemical cell or other electrically driven systems. It serves as the site where oxidation occurs, meaning electrons are released from the anode, typically moving towards the cathode. In devices like batteries, the anode is where electrons are produced during the discharge process."@en . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/AtmosphericScanningElectronMicroscopy + . + . + . + "Atmospheric Scanning Electron Microscopy"@en . + "Atmosphärische Rasterelektronenmikroskopie"@de . + "Atmospheric Scanning Electron Microscopy is a technique that allows samples to be imaged in their natural, hydrated state at atmospheric pressure. It enables the observation of biological and other hydrated specimens without the need for dehydration or coating."@en . + "ChatGPT 3.5"@en . + "ASEM"@en . +# +# https://w3id.org/pmd/mo/AtomicResolution + . + . + . + "Atomare Auflösung"@de . + "Atomic Resolution"@en . + "Die Fähigkeit, einzelne Atome in einem Bild oder einer Struktur aufzulösen."@de . + "The ability to resolve individual atoms in an image or structure."@en . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/AugerElectronSpectroscopy + . + . + . + "Auger Electron Spectroscopy"@en . + "Auger-Elektronen-Spektroskopie"@de . + "Auger Electron Spectroscopy (AES) is a surface analysis technique used in the field of materials science and surface chemistry. It involves the study of the interactions between high-energy electrons and atoms on the surface of a material. The process is named after Pierre Auger, who made significant contributions to the understanding of this phenomenon.\nIn AES, a sample's surface is bombarded with a beam of high-energy electrons, which causes inner-shell electrons to be ejected from the atoms in the sample. These vacancies are then filled by higher-energy electrons from outer shells, leading to the emission of Auger electrons. The energy of these emitted Auger electrons is characteristic of the specific elements present in the sample and their chemical states.\nBy analyzing the energy spectrum of the emitted Auger electrons, researchers can identify the elements present on the surface of the material and determine their relative concentrations. Auger Electron Spectroscopy provides valuable information about the elemental composition and chemical bonding of the top few atomic layers of a material, making it a powerful tool for studying surface properties, thin films, and interfaces in various scientific and industrial applications."@en . + "ChatGPT 3.5"@en . + "AES"@en . +# +# https://w3id.org/pmd/mo/Beam + . + . + . + "Beam"@en . + "Strahl"@de . + "A stream of electrons emitted from the electron source and directed towards the specimen in an electron microscope."@en . + "Ein Strom von Elektronen, der von der Elektronenquelle emittiert und auf die Probe in einem Elektronenmikroskop gerichtet wird."@de . + "ChatGPT 3.5" . +# +# https://w3id.org/pmd/mo/BeamCurrent + . + . + . + "Beam Current"@en . + "Strahlstrom"@de . + "Die Intensität des Elektronenstrahls, gemessen als Anzahl der Elektronen, die eine bestimmte Fläche pro Zeiteinheit durchdringen."@de . + "The intensity of the electron beam, measured as the number of electrons passing through a given area per unit time."@en . + "ChatGPT 3.5" . +# +# https://w3id.org/pmd/mo/BeamEnergy + . + . + . + "Beam Energy"@en . + "Strahlungsenergie"@de . + "Die Energie eines Teilchen- oder Photonenstrahls, der in verschiedenen Analyseverfahren verwendet wird."@de . + "The energy of a particle or photon beam used in various analytical techniques."@en . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/BeamPath + . + . + . + "Beam Path"@en . + "Strahlengang"@de . + "Strahlenweg"@de . + "Die Flugbahn des Elektronenstrahls auf seinem Weg durch das Elektronenmikroskop von der Elektronenquelle zur Probe und dann zum Detektor."@de . + "The trajectory followed by the electron beam as it travels through the electron microscope, from the electron source to the specimen and then to the detector."@en . + "ChatGPT 3.5" . +# +# https://w3id.org/pmd/mo/BrightFieldTransmissionElectronMicroscopy + . + . + . + "Bright Field Transmission Electron Microscopy"@en . + "Hellfeld-Transmissionselektronenmikroskopie"@de . + "Bright Field TEM is an imaging mode in transmission electron microscopy where regions of the sample that scatter electrons less appear brighter in the resulting image."@en . + "ChatGPT 3.5"@en . + "BFTEM"@en . +# +# https://w3id.org/pmd/mo/CameraLength + . + . + . + "Der Abstand zwischen der Probe und der Kamera, die zur Aufnahme von Bildern in einem Elektronenmikroskop verwendet wird."@de . + "The distance between the specimen and the camera used to capture images in an electron microscope."@en . + "Camera Length"@en . + "Kameralänge"@de . + "ChatGPT 3.5" . +# +# https://w3id.org/pmd/mo/Cathode + . + . + . + "Cathode"@en . + "Kathode"@de . + "The cathode is the negatively charged electrode in an electrochemical cell or other electrical systems. It is the site where reduction occurs, leading to the acceptance of electrons from the external circuit. In batteries, for instance, the cathode is where electrons are consumed during the discharge process."@en . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/ChromaticAberration + . + . + . + "Chromatic Aberration"@en . + "Chromatische Aberration"@de . + "Die Unfähigkeit eines Objektivs, alle Farben auf denselben Konvergenzpunkt zu fokussieren."@de . + "The failure of a lens to focus all colors to the same convergence point."@en . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/CoherentBeam + . + . + . + "Coherent Beam"@en . + "Kohärenter Strahl"@de . + "An electron beam in which the individual electrons maintain a constant phase relationship with each other, resulting in interference patterns when interacting with a sample."@en . + "Ein Elektronenstrahl, bei dem die einzelnen Elektronen eine konstante Phasenbeziehung zueinander haben, was bei der Wechselwirkung mit einer Probe zu Interferenzmustern führt."@de . + "ChatGPT 3.5" . +# +# https://w3id.org/pmd/mo/CollectionEfficiency + . + . + . + "Collection Efficiency"@en . + "Kollektoreffizienz"@de . + "Die Fähigkeit eines Detektors oder Systems, relevante Signale oder Daten zu erfassen und aufzuzeichnen."@de . + "The ability of a detector or system to capture and record relevant signals or data."@en . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/CondensorLense + . + . + . + "Condensor Lense"@en . + "Kondensorlinse"@de . + "A condenser lens is an optical element used in microscopy and other optical systems to focus and control the illumination on the sample being observed. It is positioned below the light source and directs light rays onto the specimen, making the illumination uniform and optimizing the quality of the sample's image. The condenser lens helps enhance contrast, resolution, and overall image quality by ensuring that a consistent and concentrated light beam illuminates the specimen."@en . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/ConfocalLaserScanningMicroscopy + . + . + . + "Confocal Laser Scanning Microscopy"@en . + "Konfokale Laser-Scanning-Mikroskopie"@de . + "Confocal Laser Scanning Microscopy (CLSM) is an optical imaging technique that enhances resolution and eliminates out-of-focus blur by using a spatial pinhole and laser illumination. A focused laser beam is scanned across the sample's surface or depth, and only the light emitted from the focal plane (or a defined section) passes through the pinhole to form an image. CLSM provides high-resolution three-dimensional images, making it popular for biological imaging and studying fluorescently labeled samples."@en . + "ChatGPT 3.5"@en . + "CLSM"@en . +# +# https://w3id.org/pmd/mo/ConvergenceAngle + . + . + "Der Konvergenzwinkel beeinflusst die Schärfentiefe und die Auflösung des Bildes."@de . + "The convergence angle affects the depth of field and resolution of the image."@en . + . + "Convergence Angle"@en . + "Konvergenzwinkel"@de . + "Der Winkel, in dem der Elektronenstrahl in einem Elektronenmikroskop auf die Probe trifft."@de . + "The angle at which the electron beam converges onto the specimen in an electron microscope."@en . + "ChatGPT 3.5" . +# +# https://w3id.org/pmd/mo/Cryo-ScanningElectronMicroscope + . + . + "A cryo-scanning electron microscope is typically used for imaging biological samples."@en . + "Ein Kryo-Rasterelektronenmikroskop wird in der Regel zur Abbildung biologischer Proben verwendet."@de . + "Eine Art Elektronenmikroskop, das bei kryogenen Temperaturen arbeitet."@de . + . + "Cryo Scanning Electron Microscope"@en . + "Kryo-Rasterelektronenmikroskop"@de . + "cryo-SEM"@en . + "A type of electron microscope that operates under cryogenic temperatures."@en . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/CryoElectronTomography + . + . + . + "Cryo Electron Tomography"@en . + "Kryo-Elektronentomographie"@de . + "Cryo Electron Tomography is a form of electron tomography that is performed at cryogenic temperatures. It is used to study the three-dimensional structure of frozen-hydrated samples."@en . + "ChatGPT 3.5"@en . + "cryo-ET"@en . +# +# https://w3id.org/pmd/mo/CryoTransmissionElectronMicroscope + . + . + . + "Cryo Transmission Electron Microscope"@en . + "Kryo-Transmissionselektronenmikroskop"@de . + "A transmission electron microscope that operates at cryogenic temperatures."@en . + "Ein Transmissionselektronenmikroskop, das bei kryogenen Temperaturen arbeitet."@de . + "ChatGPT 3.5"@en . + "cryo-TEM"@en . +# +# https://w3id.org/pmd/mo/Current + . + . + "Der Strom wird normalerweise in Ampere (A) gemessen."@de . + "The current is typically measured in amperes (A)."@en . + . + "Current"@en . + "Strom"@de . + "Stromstärke"@de . + "Der Fluss der elektrischen Ladung."@de . + "The flow of electric charge."@en . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/DetectorQuantumEfficiency + . + . + . + "Detector Quantum Efficiency"@en . + "Detektor Quantenausbeute"@de . + "Die Effizienz, mit der ein Detektor einfallende Strahlung in Nutzsignale umwandelt."@de . + "The efficiency with which a detector converts incident radiation into useful signals."@en . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/Diffraction + . + . + . + "Diffraction"@en . + "Diffraktion"@de . + "Beugung"@de . + "Scattering"@en . + "Die Biegung von Elektronenwellen beim Durchgang durch eine kristalline Probe, was zur Bildung von Beugungsmustern führt, die Informationen über die Kristallstruktur liefern."@de . + "The bending of electron waves as they pass through a crystalline sample, resulting in the formation of diffraction patterns that provide information about the crystal structure."@en . + "ChatGPT 3.5" . +# +# https://w3id.org/pmd/mo/DiffractionPattern + . + . + . + "Beugungsmuster"@de . + "Diffraction Pattern"@en . + "Das Muster von Flecken oder Banden, das auf einem Detektor entsteht, wenn Elektronen nach der Wechselwirkung mit einer kristallinen Probe gebeugt werden."@de . + "The pattern of spots or bands produced on a detector when electrons diffract after interacting with a crystalline sample."@en . + "ChatGPT 3.5" . +# +# https://w3id.org/pmd/mo/DiskOfLeastConfusion + . + . + . + "Disk Of Least Confusion"@en . + "Scheibe der geringsten Konfusion"@de . + "Der Bereich in der Bildebene eines Elektronenmikroskops, in dem der Elektronenstrahl auf die kleinste Punktgröße fokussiert wird, wodurch die durch sphärische Aberration verursachte Unschärfe minimiert wird."@de . + "The region in the image plane of an electron microscope where the electron beam is focused to the smallest spot size, minimizing the blurring effect due to spherical aberration."@en . + "ChatGPT 3.5" . +# +# https://w3id.org/pmd/mo/DwellTime + . + . + . + "Dwell Time"@en . + "Verweilzeit"@de . + "Verweildauer"@de . + "Die Zeitspanne, in der der Elektronenstrahl während der Bildgebung oder Analyse auf einen bestimmten Punkt oder einen interessierenden Bereich der Probe fokussiert wird."@de . + "The amount of time that the electron beam is focused on a specific point or region of interest on the specimen during imaging or analysis."@en . + "ChatGPT 3.5" . +# +# https://w3id.org/pmd/mo/DynamicFocusCorrection + . + . + . + "Dynamic Focus Correction"@en . + "Dynamische Fokuskorrektur"@de . + "A technique used in electron microscopy to continuously adjust the focus of the electron beam in real-time to maintain optimal image quality, especially when imaging uneven or rough surfaces."@en . + "Eine Technik, die in der Elektronenmikroskopie eingesetzt wird, um den Fokus des Elektronenstrahls kontinuierlich in Echtzeit anzupassen und so eine optimale Bildqualität zu erhalten, insbesondere bei der Abbildung unebener oder rauer Oberflächen."@de . + "ChatGPT 3.5" . +# +# https://w3id.org/pmd/mo/DynamicRefocusing + . + . + . + "Dynamic Refocusing"@en . + "Dynamische Refokussierung"@de . + "Der Prozess, bei dem der Fokus des Elektronenstrahls während der Bildgebung angepasst wird, um Änderungen der Probenhöhe oder -topografie zu kompensieren und sicherzustellen, dass die gesamte Probe im Fokus bleibt."@de . + "The process of adjusting the focus of the electron beam during imaging to compensate for changes in the specimen height or topography, ensuring that the entire specimen remains in focus."@en . + "ChatGPT 3.5" . +# +# https://w3id.org/pmd/mo/DynamicTransmissionElectronMicroscopy + . + . + . + "Dynamic Transmission Electron Microscopy"@en . + "Dynamische Transmissionselektronenmikroskopie"@de . + "Dynamic Transmission Electron Microscopy is a technique that uses ultrafast electron pulses to capture rapid processes in materials with nanosecond to picosecond time resolution."@en . + "ChatGPT 3.5"@en . + "DTEM"@en . +# +# https://w3id.org/pmd/mo/Efficiency + . + . + . + "Efficiency"@en . + "Effizienz"@de . + "Das Verhältnis von nützlichem / nutzbarem Output zum gesamten Input in einem System."@de . + "The ratio of useful output to total input in any system."@en . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/Electrode + . + . + . + "Electrode"@en . + "Elektrode"@de . + "An electrode is a conductor through which electric current enters or exits a substance. In the context of electrochemical systems, an electrode facilitates the transfer of electrons between a solid material and an electrolyte. Electrodes are essential components in batteries, fuel cells, electroplating, and other electrochemical processes. They play a critical role in facilitating chemical reactions and energy storage or conversion."@en . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/ElectronBackscatterDiffraction + . + . + . + "Electron Backscatter Diffraction"@en . + "Rückstreuelektronenbeugung"@de . + "Electron Backscatter Diffraction is a microscopy technique used to analyze the crystallographic orientation and microstructure of materials. It involves directing an electron beam onto a sample's surface and measuring the backscattered electrons. By analyzing the diffraction patterns of these electrons, researchers can determine the crystallographic orientation of the material's grains."@en . + "ChatGPT 3.5"@en . + "EBSD"@en . +# +# https://w3id.org/pmd/mo/ElectronBeam + . + . + . + "Electron Beam"@en . + "Elektronenstrahl"@de . + "A stream of electrons emitted from an electron source and accelerated towards the specimen in an electron microscope for imaging or analysis."@en . + "Ein Strom von Elektronen, der von einer Elektronenquelle emittiert und in einem Elektronenmikroskop zur Abbildung oder Analyse auf die Probe beschleunigt wird."@de . + "ChatGPT 3.5" . +# +# https://w3id.org/pmd/mo/ElectronChannelingContrastImaging + . + . + . + "Electron Channeling Contrast Imaging"@en . + "Elektronenkanal-Kontrastbildgebung"@de . + "Electron Channeling Contrast Imaging is a technique used in SEM or TEM to study crystallographic defects, such as dislocations, in crystalline materials. It utilizes the contrast resulting from the deviation of electron trajectories due to crystal defects."@en . + "ChatGPT 3.5"@en . + "ECCI"@en . +# +# https://w3id.org/pmd/mo/ElectronDiffraction + . + . + . + "Electron Diffraction"@en . + "Elektronenbeugung"@de . + "Das Phänomen der Beugung von Elektronenwellen beim Durchgang durch eine kristalline Probe, das Informationen über die Kristallstruktur liefert."@de . + "The phenomenon of electron waves diffracting as they pass through a crystalline sample, providing information about the crystal structure."@en . + "ChatGPT 3.5" . +# +# https://w3id.org/pmd/mo/ElectronDiffractionPattern + . + . + . + "Electron Diffraction Pattern"@en . + "Elektronenbeugungsmuster"@de . + "Das Muster von Flecken oder Ringen, das auf einem Detektor entsteht, wenn Elektronen nach der Wechselwirkung mit einer kristallinen Probe gebeugt werden, und das zur Bestimmung der Kristallstruktur verwendet wird."@de . + "The pattern of spots or rings produced on a detector when electrons diffract after interacting with a crystalline sample, used to determine the crystal structure."@en . + "ChatGPT 3.5" . +# +# https://w3id.org/pmd/mo/ElectronEnergyLossSpectroscopy + . + . + . + "Electron Energy Loss Spectroscopy"@en . + "Elektronenenergieverlustspektroskopie"@de . + "Electron Energy Loss Spectroscopy (EELS) is a specialized analytical technique in the field of materials science and electron microscopy. It involves the measurement of the energy loss of electrons as they interact with a sample. EELS is commonly performed in transmission electron microscopy (TEM) setups.\nIn EELS, a focused beam of high-energy electrons is directed at a sample. As these electrons pass through the material, they can lose energy through various interactions, such as inelastic scattering and excitation of inner-shell electrons. The energy loss is measured and analyzed to gain information about the sample's composition, electronic structure, and bonding characteristics.\nBy studying the energy loss spectrum, researchers can identify the types of atoms present in the sample, determine their chemical states, and gather insights into the electronic properties of the material. EELS is particularly useful for investigating nanoscale materials, thin films, and interfaces, providing valuable information about their electronic and atomic structure. It is a powerful technique for understanding the behavior of materials at the nanometer scale and plays a significant role in advancing fields such as materials science, nanotechnology, and semiconductor research."@en . + "ChatGPT 3.5"@en . + "EELS"@en . +# +# https://w3id.org/pmd/mo/ElectronMicroprobe + . + . + . + "Electron Microprobe"@en . + "Elektronenmikrosonde"@de . + "An analytical instrument used to determine the chemical composition of materials."@en . + "Ein Analyseinstrument zur Bestimmung der chemischen Zusammensetzung von Materialien."@de . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/ElectronProbe + . + . + . + "Electron Probe"@en . + "Elektronensonde"@de . + "Der fokussierte Elektronenstrahl, der zur Abbildung oder Analyse in einem Elektronenmikroskop verwendet wird."@de . + "The focused electron beam used for imaging or analysis in an electron microscope."@en . + "ChatGPT 3.5" . +# +# https://w3id.org/pmd/mo/ElectronProbeMicroAnalyzer + . + . + . + "Electron Probe Micro Analyzer"@en . + "Elektronensonden-Mikro-Analysator"@de . + "An instrument used for elemental analysis of solid materials by bombarding them with a focused electron beam."@en . + "Ein Instrument zur Elementaranalyse fester Materialien durch Beschuss mit einem fokussierten Elektronenstrahl."@de . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/ElectronTomograph + . + . + . + "Electron Tomograph"@en . + "Elektronentomograph"@de . + "An instrument used for tomographic imaging using electrons."@en . + "Ein Instrument für die tomografische Bildgebung mit Elektronen."@de . + "ChatGPT 3.5"@en . + "ET"@en . +# +# https://w3id.org/pmd/mo/ElectronTomography + . + . + . + "Electron Tomography"@en . + "Elektronentomographie"@de . + "Electron Tomography is a technique that involves collecting a series of transmission electron microscopy (TEM) images from different angles to reconstruct a three-dimensional image of a sample."@en . + "ChatGPT 3.5"@en . + "ET"@en . +# +# https://w3id.org/pmd/mo/EmissionCurrent + . + . + "Der Emissionsstrom wird normalerweise in Mikroampere (μA) oder Milliampere (mA) gemessen."@de . + "The emission current usually measured in microamperes (μA) or milliamperes (mA)." . + . + "Emission Current"@en . + "Emissionsstrom"@de . + "Der Strom der von der Elektronenquelle emittierten Elektronen."@de . + "The current of electrons emitted from the electron source."@en . + "ChatGPT 3.5" . +# +# https://w3id.org/pmd/mo/Energy + . + . + "Die Energie wird üblicherweise in Joule (J) oder Elektronenvolt (eV) gemessen."@de . + "The energy is usually measured in joules (J) or electron volts (eV)."@en . + . + "Energie"@de . + "Energy"@en . + "Die Fähigkeit eines physischen Systems, Arbeit zu verrichten."@de . + "The capacity of a physical system to perform work."@en . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/EnergyDispersiveXRaySpectroscopy + . + . + . + "Energy Dispersive X-ray Spectroscopy"@en . + "energiedispersive Röntgenmikroanalyse"@de . + "Energy Dispersive X-ray Spectroscopy is a technique used to analyze the elemental composition of a sample by detecting the X-rays emitted when the sample is bombarded with electrons in an electron microscope or other instrument. EDS provides information about the elements present in the sample and their relative concentrations."@en . + "energiedispersive Röntgenanalyse"@de . + "ChatGPT 3.5"@en . + "EDS"@en . + "EDX"@en . + "XEDS"@en . +# +# https://w3id.org/pmd/mo/EnergyFilteredTransmissionElectronMicroscope + . + . + . + "Energiegefiltertes Transmissionselektronenmikroskop"@de . + "Energy-filtered Transmission Electron Microscope"@en . + "A transmission electron microscope equipped with an energy filter to select electrons of specific energy levels."@en . + "Ein Transmissionselektronenmikroskop, das mit einem Energiefilter ausgestattet ist, um Elektronen bestimmter Energieniveaus zu selektieren."@de . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/EnergyLoss + . + . + . + "Energieverlust"@de . + "Energy Loss"@en . + "Der Energieverlust, den ein Teilchen beim Durchgang durch ein Medium erfährt."@de . + "The loss of energy experienced by a particle as it passes through a medium."@en . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/EnergyResolution + . + . + . + "Energieauflösung"@de . + "Energy Resolution"@en . + "Die Fähigkeit eines Detektors, zwischen verschiedenen Energieniveaus der einfallenden Strahlung zu unterscheiden."@de . + "The ability of a detector to distinguish between different energy levels of incident radiation."@en . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/EnvironmentalScanningElectronMicroscope + . + . + . + "Environmental Scanning Electron Microscope"@en . + "Umwelt-Rasterelektronenmikroskop"@de . + "A type of electron microscope that can image non-conductive samples in their natural state."@en . + "Eine Art Elektronenmikroskop, das nicht leitende Proben in ihrem natürlichen Zustand abbilden kann."@de . + "ChatGPT 3.5"@en . + "ESEM"@en . +# +# https://w3id.org/pmd/mo/EnvironmentalScanningElectronMicroscopy + . + . + . + "Environmental Scanning Electron Microscopy"@en . + "Umgebungs-Rasterelektronenmikroskopie"@de . + "Environmental Scanning Electron Microscopy is a technique that allows imaging of samples in a gaseous environment. It is particularly useful for observing hydrated or non-conductive samples without the need for extensive sample preparation."@en . + "ChatGPT 3.5"@en . + "ESEM"@en . +# +# https://w3id.org/pmd/mo/EnvironmentalTransmissionElectronMicroscopy + . + . + . + "Environmental Transmission Electron Microscopy"@en . + "Umgebungs-Transmissionselektronenmikroskopie"@de . + "Environmental Transmission Electron Microscopy allows imaging and analysis of materials in controlled gaseous environments, simulating real-world conditions."@en . + "ChatGPT 3.5"@en . + "ETEM"@en . +# +# https://w3id.org/pmd/mo/ExtractionVoltage + . + . + . + "Extraction Voltage"@en . + "Extraktionsspannung"@de . + "Die Spannung, die an die Elektronenquelle in einem Elektronenmikroskop angelegt wird, um Elektronen aus der Kathode zu extrahieren und sie auf die Probe zu beschleunigen."@de . + "The voltage applied to the electron source in an electron microscope to extract electrons from the cathode and accelerate them towards the specimen."@en . + "ChatGPT 3.5" . +# +# https://w3id.org/pmd/mo/FieldEmissionGun + . + . + . + "Feldemissionskanone"@de . + "Field Emission Gun"@en . + "A Field Emission Gun is an electron gun used in electron microscopes to produce an electron beam with extremely high brightness and coherence. It relies on the phenomenon of field emission, where electrons are emitted from a sharp emitter tip under the influence of a strong electric field. FEGs are capable of producing highly focused electron beams, leading to enhanced imaging resolution and analytical capabilities."@en . + "ChatGPT 3.5"@en . + "FEG"@en . +# +# https://w3id.org/pmd/mo/FieldEmissionScanningElectronMicroscopy + . + . + . + "Feldemissions-Rasterelektronenmikroskopie"@de . + "Field Emission Scanning Electron Microscopy"@en . + "Field Emission Scanning Electron Microscopy is an advanced form of SEM that uses a field emitter to produce a highly focused electron beam, enabling high-resolution imaging and surface analysis."@en . + "ChatGPT 3.5"@en . + "FESEM"@en . +# +# https://w3id.org/pmd/mo/FieldIonMicroscope + . + . + . + "Feldionenmikroskop"@de . + "Field Ion Microscope"@en . + "A type of microscope that uses the phenomenon of field ionization to image surfaces with atomic resolution."@en . + "Ein Mikroskoptyp, der das Phänomen der Feldionisation nutzt, um Oberflächen mit atomarer Auflösung abzubilden."@de . + "ChatGPT 3.5"@en . + "FIM"@en . +# +# https://w3id.org/pmd/mo/FieldIonMicroscopy + . + . + . + "Feldionenmikroskopie"@de . + "Field Ion Microscopy"@en . + "Field Ion Microscopy is a specialized microscopy technique that uses a strong electric field to ionize atoms on the surface of a metal sample. These ionized atoms are then repelled from the surface and can be detected to create an image of the sample's surface topography at atomic resolution. FIM is especially powerful for imaging the arrangement of atoms on metallic surfaces."@en . + "ChatGPT 3.5"@en . + "FIM"@en . +# +# https://w3id.org/pmd/mo/FilamentCurrent + . + . + . + "Filament Current"@en . + "Glühfadenstrom"@de . + "Der Strom, der durch den Glühfaden der Elektronenkanone in einem Elektronenmikroskop fließt und den Glühfaden erhitzt, um Elektronen zu emittieren."@de . + "The current passing through the filament of the electron gun in an electron microscope, which heats up the filament to emit electrons."@en . + "ChatGPT 3.5" . +# +# https://w3id.org/pmd/mo/FluorescenceMicroscopy + . + . + . + "Fluorescence Microscopy"@en . + "Fluoreszenzmikroskopie"@de . + "Fluorescence Microscopy is an optical imaging technique used to visualize biological structures and molecules that fluoresce when illuminated with specific wavelengths of light. Fluorescent molecules absorb light energy and then emit light of a longer wavelength, allowing the visualization of specific molecules or cellular components. Fluorescence microscopy is widely used in cell biology, molecular biology, and medical research."@en . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/FlybackTime + . + . + . + "Flyback Time"@en . + "Rücklaufzeit"@de . + "Die Zeit, die der Elektronenstrahl benötigt, um nach dem Abtasten einer Zeile oder eines Bildes in einem Elektronenmikroskop in seine Ausgangsposition zurückzukehren."@de . + "The time taken for the electron beam to return to its starting position after scanning a line or frame in an electron microscope."@en . + "ChatGPT 3.5" . +# +# https://w3id.org/pmd/mo/FocalLength + . + . + . + "Brennweite"@de . + "Focal Length"@en . + "Der Abstand zwischen dem Brennpunkt (wo der Elektronenstrahl fokussiert wird) und der Linse oder Blende in einem Elektronenmikroskop."@de . + "The distance between the focal point (where the electron beam is focused) and the lens or aperture in an electron microscope."@en . + "ChatGPT 3.5" . +# +# https://w3id.org/pmd/mo/FocalPlane + . + . + . + "Brennebene"@de . + "Focal Plane"@en . + "Die Ebene senkrecht zur optischen Achse eines Elektronenmikroskops, in der der Elektronenstrahl fokussiert wird, um ein Bild zu erzeugen."@de . + "The plane perpendicular to the optical axis of an electron microscope where the electron beam is focused to form an image."@en . + "ChatGPT 3.5" . +# +# https://w3id.org/pmd/mo/FocalPoint + . + . + . + "Brennpunkt"@de . + "Focal Point"@en . + "Der Punkt, an dem der Elektronenstrahl in einem Elektronenmikroskop fokussiert wird, um ein Bild der Probe zu erzeugen."@de . + "The point at which the electron beam is focused in an electron microscope to form an image of the specimen."@en . + "ChatGPT 3.5" . +# +# https://w3id.org/pmd/mo/FocusedBeam + . + . + . + "Focused Beam"@en . + "Fokussierter Strahl"@de . + "An electron beam that has been narrowed or focused to a small spot size on the specimen surface."@en . + "Ein Elektronenstrahl, der auf einen kleinen Punkt auf der Probenoberfläche eingeengt oder fokussiert wurde."@de . + "ChatGPT 3.5" . +# +# https://w3id.org/pmd/mo/FocusedIonBeam-ScanningElectronMicroscope + . + . + . + "Focus(ed) Ion Beam - Scanning Electron Microscope"@en . + "Fokussierter Ionenstrahl - Rasterelektronenmikroskop"@de . + "A dual-beam microscope that combines a focused ion beam with a scanning electron microscope."@en . + "Ein Zweistrahlmikroskop, das einen fokussierten Ionenstrahl mit einem Rasterelektronenmikroskop kombiniert."@de . + "ChatGPT 3.5"@en . + "FIB-SEM"@en . +# +# https://w3id.org/pmd/mo/FocusedIonBeamScanningElectronMicroscopy + . + . + . + "Focused Ion Beam Scanning Electron Microscopy"@en . + "Fokussierte Ionenstrahl-Rasterelektronenmikroskopie"@de . + "Focused Ion Beam Scanning Electron Microscopy is a combination of two techniques: focused ion beam (FIB) and scanning electron microscopy (SEM). FIB-SEM systems use a focused ion beam to both image and modify a sample's surface. The ion beam can be used for milling, cutting, and deposition processes, making FIB-SEM a versatile tool for materials analysis, sample preparation, and three-dimensional imaging."@en . + "ChatGPT 3.5"@en . + "FIB-SEM"@en . +# +# https://w3id.org/pmd/mo/FourierTransformInfraredSpectroscopy + . + . + . + "Fourier Transform Infrared Spectroscopy"@en . + "Fourier-Transformations-Infrarotspektroskopie"@de . + "Fourier Transform Infrared Spectroscopy (FTIR) is a powerful analytical technique used in various scientific disciplines to study the molecular composition and properties of materials. It is based on the interaction between infrared radiation and a sample, providing information about the vibrational modes of molecules.\nIn FTIR spectroscopy, an infrared beam is directed through a sample, and the interaction between the radiation and the sample's molecules leads to absorption of specific infrared frequencies. Each type of molecular bond and functional group in the sample absorbs infrared radiation at characteristic frequencies, which correspond to the energies of molecular vibrations. The resulting absorption spectrum represents a fingerprint of the sample's molecular structure.\nThe Fourier transform technique is used to convert the raw data obtained from the absorption measurements into a Fourier-transformed spectrum. This transformation improves the signal-to-noise ratio and enhances the accuracy of spectral analysis.\nFTIR is extensively used in a wide range of fields, including chemistry, biology, materials science, pharmaceuticals, and environmental science. It is employed for qualitative and quantitative analysis, identification of compounds, monitoring chemical reactions, and studying molecular interactions. FTIR spectroscopy provides valuable insights into molecular bonding, functional groups, and the chemical composition of substances, making it an indispensable tool in modern analytical science."@en . + "ChatGPT 3.5"@en . + "FTIR"@en . +# +# https://w3id.org/pmd/mo/FrameTime + . + . + . + "Frame Time"@en . + "Rahmenscanzeit"@de . + "Die Zeit, die benötigt wird, um ein Einzelbild in einem Elektronenmikroskop aufzunehmen und anzuzeigen."@de . + "The time required to capture and display a single frame of an image in an electron microscope."@en . + "ChatGPT 3.5" . +# +# https://w3id.org/pmd/mo/GatanImageFilter + . + . + . + "Gatan Abbildungsfilter"@de . + "Gatan Image Filter"@en . + "A Gatan Image Filter refers to an image filter manufactured by Gatan, Inc., a company specializing in electron microscopy and related products. Gatan's image filters are designed for electron microscopes and electron energy loss spectroscopy (EELS) applications. These filters allow researchers to control and enhance the acquisition of electron energy loss spectra while obtaining high-resolution images of the sample under investigation."@en . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/Gun + . + . + . + "Gun"@en . + "Kanone"@de . + "In the context of electron microscopy and particle acceleration, a \"gun\" typically refers to an electron or particle source that generates and emits the particles. In electron microscopy, an electron gun is used to generate a beam of electrons for imaging or analysis. In particle accelerators, a particle gun generates and launches particles at high speeds for various experimental purposes."@en . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/HeliumIonMicroscope + . + . + . + "Helium Ion Microscope"@en . + "Helium-Ionen-Mikroskop"@de . + "A type of microscope that uses helium ions to image samples with high resolution."@en . + "Eine Art Mikroskop, das Helium-Ionen verwendet, um Proben mit hoher Auflösung abzubilden."@de . + "ChatGPT 3.5"@en . + "HIM"@en . +# +# https://w3id.org/pmd/mo/HeliumIonMicroscopy + . + . + . + "Helium Ion Microscopy"@en . + "Helium-Ionen-Mikroskopie"@de . + "Helium Ion Microscopy is a microscopy technique that uses a beam of helium ions instead of electrons to interact with a sample's surface. The smaller mass of helium ions compared to electrons allows for higher resolution imaging and reduced sample damage. HIM provides high-resolution images and is often used for imaging delicate or sensitive samples."@en . + "ChatGPT 3.5"@en . + "HIM"@en . +# +# https://w3id.org/pmd/mo/HighAngleAnnularDarkFieldScanningTransmissionElectronMicroscope + . + . + . + "High-angle Annular Dark-field Scanning Transmission Electron Microscope"@en . + "Hochwinkel-Dunkelfeld-Rastertransmissionselektronenmikroskop mit annularem Winkel"@de . + "A type of scanning transmission electron microscope that detects scattered electrons at high angles."@en . + "Eine Art Rastertransmissionselektronenmikroskop, das gestreute Elektronen in hohen Winkeln erkennt."@de . + "ChatGPT 3.5"@en . + "HAADF-STEM"@en . +# +# https://w3id.org/pmd/mo/HighResolutionTransmissionElectronMicroscope + . + . + . + "High Resolution Transmission Electron Microscope"@en . + "Hochauflösendes Transmissionselektronenmikroskop"@de . + "A transmission electron microscope capable of achieving high-resolution images."@en . + "Ein Transmissionselektronenmikroskop, das hochauflösende Bilder liefert."@de . + "ChatGPT 3.5"@en . + "HRTEM"@en . +# +# https://w3id.org/pmd/mo/HighResolutionTransmissionElectronMicroscopy + . + . + . + "High Resolution Transmission Electron Microscopy"@en . + "Hochauflösende Transmissionselektronenmikroskopie"@de . + "High Resolution TEM is a technique that provides exceptionally high-resolution images of a sample's internal structure, revealing atomic-level details."@en . + "ChatGPT 3.5"@en . + "HRTEM"@en . +# +# https://w3id.org/pmd/mo/ImageFilter + . + . + . + "Abbildungsfilter"@de . + "Image Filter"@en . + "An image filter is a device or component used in imaging systems, such as microscopy or photography, to modify the appearance of an image by selectively altering certain characteristics. Filters can be used to adjust contrast, brightness, color balance, and other image properties. They are often used to enhance specific features or to correct for distortions caused by lighting conditions or optical imperfections."@en . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/IncidentBeam + . + . + . + "Einfallender Strahl"@de . + "Incident Beam"@en . + "Der Elektronenstrahl, der in einem Elektronenmikroskop auf die Probenoberfläche trifft und Wechselwirkungen hervorruft, die Signale für die Abbildung oder Analyse erzeugen."@de . + "The electron beam that strikes the specimen surface in an electron microscope, causing interactions that produce signals for imaging or analysis."@en . + "ChatGPT 3.5" . +# +# https://w3id.org/pmd/mo/InelasticScattering + . + . + . + "Inelastic Scattering"@en . + "Inelastische Streuung"@de . + "Inelastic scattering is a scattering process that involves the transfer of energy and momentum between the incident particle (e.g., photon, electron) and the target particle. During inelastic scattering, the energy of the scattered particle changes, and the interaction may result in various outcomes, such as excitation, emission, or other energy transfers that alter the internal state of the target particle."@en . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/InteractionVolume + . + . + . + "Interaction Volume"@en . + "Überlagerungsvolumen"@de . + "Der Bereich innerhalb einer Probe, in dem ein Teilchenstrahl mit dem Material in Wechselwirkung tritt."@de . + "The region within a sample where a particle beam interacts with the material."@en . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/IonBeam + . + . + . + "Ion Beam"@en . + "Ionenstrahl"@de . + "A stream of ions used for grinding or analysis, especially in ion microscopy techniques for imaging."@en . + "Ein Ionenstrom, der zum Mahlen oder zur Analyse verwendet wird, insbesondere bei Ionenmikroskopietechniken zur Bildgebung."@de . + "ChatGPT 3.5" . +# +# https://w3id.org/pmd/mo/IonMicroscope + . + . + . + "Ion Microscope"@en . + "Ionenmikroskop"@de . + "A microscope that uses ions to create images of samples."@en . + "Ein Mikroskop, das mit Hilfe von Ionen Bilder von Proben erzeugt."@de . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/IonMicroscopy + . + . + . + "Ion Microscopy"@en . + "Ionenmikroskopie"@de . + "Ion Microscopy refers to a group of microscopy techniques that use focused ion beams to image and analyze samples. These techniques utilize ions, such as protons or heavy ions, instead of electrons or photons to interact with the sample, providing valuable information about its composition and structure."@en . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/LightMicroscope + . + . + . + "Lichtmikroskop"@de . + "Light Microscope"@en . + "An optical microscope that uses visible light to illuminate and magnify samples."@en . + "Ein optisches Mikroskop, das sichtbares Licht verwendet, um Proben zu beleuchten und zu vergrößern."@de . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/LightMicroscopy + . + . + . + "Lichtmikroskopie"@de . + "Light Microscopy"@en . + "Die Verwendung von sichtbarem Licht zur Beobachtung und Untersuchung kleiner Objekte oder Strukturen."@de . + "The use of visible light to observe and study small objects or structures."@en . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/Magnification + . + . + . + "Magnification"@en . + "Vergrößerung"@de . + "Das Verhältnis zwischen der Größe eines von einem optischen System erzeugten Bildes und der Größe des Objekts."@de . + "The ratio of the size of an image produced by an optical system to the size of the object."@en . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/MechanicalPolishing + . + . + . + "Mechanical Polishing"@en . + "Mechanisches Polieren"@de . + "Mechanical polishing is a material preparation technique used to enhance the surface quality and finish of a sample by removing thin layers of material through abrasion. It involves using abrasive materials, such as polishing cloths, diamond suspensions, or abrasive pastes, along with a polishing machine or device. The process typically includes several steps, each using progressively finer abrasives to achieve a smooth and mirror-like surface.\n\nDuring mechanical polishing, the sample is pressed against the rotating polishing medium with controlled pressure. The abrasive particles embedded in the medium gradually remove surface irregularities, scratches, and imperfections, resulting in improved flatness, clarity, and reflectivity. The process can be adjusted to target specific levels of surface roughness and precision.\n\nMechanical polishing is commonly used in various scientific and industrial applications, such as metallography, materials science, electronics, and optics. It is an essential step before further analyses like microscopy, spectroscopy, or surface profiling, as it provides a pristine surface for accurate characterization and observation of material properties."@en . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/MonochromaticBeam + . + . + . + "Monochromatic Beam"@en . + "Monochromatischer Strahl"@de . + "An electron beam consisting of electrons with a narrow range of energies, typically achieved using electron energy filters or monochromators."@en . + "Ein Elektronenstrahl, der aus Elektronen mit einem engen Energiebereich besteht, der in der Regel durch Elektronenenergiefilter oder Monochromatoren erreicht wird."@de . + "ChatGPT 3.5" . +# +# https://w3id.org/pmd/mo/Monochromator + . + . + . + "Monochromator"@de . + "Monochromator"@en . + "An optical device that transmits a narrow range of wavelengths of light."@en . + "Ein optisches Gerät, das einen engen Wellenlängenbereich von Licht überträgt."@de . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/OpticalMicroscope + . + . + . + "Optical Microscope"@en . + "Optisches Mikroskop"@de . + "A microscope that uses visible light and lenses to magnify specimens."@en . + "Ein Mikroskop, das sichtbares Licht und Linsen zur Vergrößerung von Proben verwendet."@de . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/OrientationImagingMicroscopy + . + . + . + "Bildgebende Orientierungsmikroskopie"@de . + "Orientation Imaging Microscopy"@en . + "Orientation Imaging Microscopy is a microscopy technique used to map the crystallographic orientations of grains within a material. It is commonly applied in SEM to study the microstructural properties of polycrystalline materials."@en . + "ChatGPT 3.5"@en . + "OIM"@en . +# +# https://w3id.org/pmd/mo/PhysicalProcess + . + . + . + "Physical Process"@en . + "Physikalischer Prozess"@de . + "A physical process refers to a sequence of events or interactions that occur in the physical world and can be described and analyzed based on the principles of physics. These processes involve the transformation of energy, matter, or both, and they often follow established laws and theories of physics. In particular, a physical process may just occur due to natural circumstances and does not necessarily have to be induced by human activities or interactions."@en . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/PixelSize + . + . + . + "Pixel Size"@en . + "Pixelgröße"@en . + "Die Größe der einzelnen Pixel in einem digitalen Bild oder einer Anzeige."@de . + "The size of individual pixels in a digital image or display."@en . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/PolarizedLightMicroscope + . + . + . + "Polarisiertes Lichtmikroskop"@de . + "Polarized Light Microscope"@en . + "A microscope that uses polarized light to observe and analyze samples."@en . + "Ein Mikroskop, das polarisiertes Licht zur Beobachtung und Analyse von Proben verwendet."@de . + "ChatGPT 3.5"@en . + "PLM"@en . +# +# https://w3id.org/pmd/mo/PolarizedLightMicroscopy + . + . + . + "Polarisationslichtmikroskopie"@de . + "Polarized Light Microscopy"@en . + "Polarized Light Microscopy is a technique that uses polarized light to enhance the contrast and reveal structural information in transparent samples. Light waves vibrate in specific directions, and by using polarizers to control the orientation of light waves, polarized light microscopy can highlight birefringent materials, anisotropic structures, and stress patterns within samples. This technique is valuable for studying crystalline structures, fibers, and anisotropic materials."@en . + "ChatGPT 3.5"@en . + "PLM"@en . +# +# https://w3id.org/pmd/mo/PolePiece + . + . + . + "Pole Piece"@en . + "Polschuh"@de . + "A component of the electron column in an electron microscope that focuses and guides the electron beam onto the specimen."@en . + "Eine Komponente der Elektronensäule in einem Elektronenmikroskop, die den Elektronenstrahl fokussiert und auf die Probe lenkt."@de . + "ChatGPT 3.5" . +# +# https://w3id.org/pmd/mo/PrimaryBeam + . + . + . + "Primary Beam"@en . + "Primärstrahl"@de . + "Der Hauptelektronenstrahl, der von der Elektronenquelle ausgesandt und auf die Probe in einem Elektronenmikroskop gerichtet wird."@de . + "The main electron beam emitted from the electron source and directed towards the specimen in an electron microscope."@en . + "ChatGPT 3.5" . +# +# https://w3id.org/pmd/mo/ProbeCurrent + . + . + . + "Probe Current"@en . + "Sondenstrom"@de . + "Der Strom der Elektronen im fokussierten Elektronenstrahl, der zur Abbildung oder Analyse in einem Elektronenmikroskop verwendet wird."@de . + "The current of electrons in the focused electron beam used for imaging or analysis in an electron microscope."@en . + "ChatGPT 3.5" . +# +# https://w3id.org/pmd/mo/ProbeSize + . + . + . + "Probe Size"@en . + "Sensorgröße"@de . + "Messfühlergröße"@de . + "Die Größe der Sonde oder des Strahls, die bei Mikroskopie- oder Spektroskopieverfahren verwendet werden."@de . + "The size of the probe or beam used in microscopy or spectroscopy techniques."@en . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/Reconstruction + . + . + . + "Reconstruction"@en . + "Rekonstruktion"@de . + "Der Prozess der Erstellung eines dreidimensionalen Bildes oder Modells aus zweidimensionalen Daten."@de . + "The process of creating a three-dimensional image or model from two-dimensional data."@en . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/Resolution + . + . + . + "Auflösung"@de . + "Resolution"@en . + "In various contexts, resolution refers to the degree of detail that can be discerned in an image, measurement, or other representation of an object or phenomenon."@en . + "In verschiedenen Zusammenhängen bezieht sich die Auflösung auf den Grad der Detailgenauigkeit, die in einem Bild, einer Messung oder einer anderen Darstellung eines Objekts oder Phänomens erkennbar ist."@de . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/ScanningElectronMicroscope + . + . + . + "Rasterelektronenmikroskop"@de . + "Scanning Electron Microscope"@en . + "A microscope that produces images of a sample by scanning it with a focused beam of electrons."@en . + "Ein Mikroskop, das Bilder einer Probe erzeugt, indem es diese mit einem fokussierten Elektronenstrahl abtastet."@de . + "ChatGPT 3.5"@en . + "REM"@de . + "SEM"@en . +# +# https://w3id.org/pmd/mo/ScanningElectronMicroscopy + . + . + . + "Rasterelektronenmikroskopie"@de . + "Scanning Electron Microscopy"@en . + "Scanning Electron Microscopy is a microscopy technique that uses a focused beam of electrons to scan the surface of a sample. The interaction of the electrons with the sample generates signals that provide information about the sample's topography, morphology, and composition."@en . + "ChatGPT 3.5"@en . + "SEM"@en . +# +# https://w3id.org/pmd/mo/ScanningProbeMicroscope + . + . + . + "Rastersondenmikroskop"@de . + "Scanning Probe Microscope"@en . + "A type of microscope that images surfaces by scanning a probe over the sample."@en . + "Ein Mikroskoptyp, der Oberflächen abbildet, indem er eine Sonde über die Probe führt."@de . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/ScanningProbeMicroscopy + . + . + . + "Rastersondenmikroskopie"@de . + "Scanning Probe Microscopy"@en . + "Scanning Probe Microscopy encompasses various techniques, such as Atomic Force Microscopy (AFM) and Scanning Tunneling Microscopy (STM), that use a sharp probe to scan a sample's surface. These techniques provide high-resolution images and information about surface properties on the nanometer scale."@en . + "ChatGPT 3.5"@en . + "SPM"@en . +# +# https://w3id.org/pmd/mo/ScanningTransmissionElectronMicroscope + . + . + . + "Rastertransmissionselektronenmikroskop"@de . + "Scanning Transmission Electron Microscope"@en . + "A type of transmission electron microscope where a focused electron beam is scanned across the sample."@en . + "Eine Art von Transmissionselektronenmikroskop, bei dem ein fokussierter Elektronenstrahl über die Probe gescannt wird."@de . + "ChatGPT 3.5"@en . + "STEM"@en . +# +# https://w3id.org/pmd/mo/ScanningTransmissionElectronMicroscopy + . + . + . + "Rastertransmissionselektronenmikroskopie"@de . + "Scanning Transmission Electron Microscopy"@en . + "Scanning Transmission Electron Microscopy is a technique that combines the principles of scanning and transmission electron microscopy. It allows imaging and spectroscopy with high spatial resolution."@en . + "ChatGPT 3.5"@en . + "STEM"@en . +# +# https://w3id.org/pmd/mo/ScanningTransmissionElectronMicroscopy-ElectronEnergyLossSpectroscopy + . + . + . + "Rastertransmissionselektronenmikroskopie Elektronen-Energieverlust-Spektroskopie"@de . + "Scanning Transmission Electron Microscopy Electron Energy Loss Spectroscopy"@en . + "STEM-EELS combines STEM imaging with electron energy loss spectroscopy to provide information about the elemental composition and electronic structure of a sample at high spatial resolution."@en . + "ChatGPT 3.5"@en . + "STEM-EELS"@en . +# +# https://w3id.org/pmd/mo/ScanningTunnelingMicroscope + . + . + . + "Rastertunnelmikroskop"@de . + "Scanning Tunneling Microscope"@en . + "A microscope that uses quantum tunneling to image surfaces at the atomic level."@en . + "Ein Mikroskop, das Quanten-Tunneling nutzt, um Oberflächen auf atomarer Ebene abzubilden."@de . + "ChatGPT 3.5"@en . + "STM"@en . +# +# https://w3id.org/pmd/mo/ScanningTunnelingMicroscopy + . + . + . + "Rastertunnelmikroskopie"@de . + "Scanning Tunneling Microscopy"@en . + "Scanning Tunneling Microscopy is a technique that uses a conducting probe to measure the tunneling current between the probe and the sample's surface. It provides atomic-scale images of surfaces and is often used to study conductive materials."@en . + "ChatGPT 3.5"@en . + "STM"@en . +# +# https://w3id.org/pmd/mo/Scintillator + . + . + . + "Scintillator"@en . + "Szintillator"@de . + "A material that emits light when it absorbs ionizing radiation."@en . + "Ein Material, das Licht aussendet, wenn es ionisierende Strahlung absorbiert."@de . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/SecondaryIonMassSpectrometry + . + . + . + "Secondary Ion Mass Spectrometry"@en . + "Sekundärionen-Massenspektrometrie"@de . + "Secondary Ion Mass Spectrometry (SIMS) is an advanced analytical technique used to determine the elemental and isotopic composition of solid surfaces and thin films at a very high sensitivity and spatial resolution. It is widely employed in various scientific and industrial applications, including materials science, semiconductor research, and surface analysis.\nIn SIMS, a focused beam of high-energy primary ions is directed at a sample's surface. The impact of these primary ions causes the ejection of secondary ions from the sample's surface. These secondary ions are then extracted, mass-separated, and detected using a mass spectrometer. The mass spectrometer measures the mass-to-charge ratios of the secondary ions, providing information about the elemental and isotopic composition of the sample.\nThe sensitivity and spatial resolution of SIMS allow researchers to analyze very small areas, often down to the micrometer or nanometer scale. This makes SIMS particularly valuable for investigating surface composition, depth profiling of layered structures, and detecting trace elements in complex materials. The technique is non-destructive in its elemental analysis, which is beneficial for studying delicate samples or preserving valuable materials.\nSIMS has applications in diverse fields, including materials characterization, semiconductor device analysis, biological and medical research, and geological studies. It provides essential information about the chemical composition, structure, and distribution of elements in complex samples, contributing to advancements in materials science and various technological developments."@en . + "ChatGPT 3.5"@en . + "SIMS"@en . +# +# https://w3id.org/pmd/mo/SelectedAreaElectronDiffraction + . + . + . + "Elektronenbeugung ausgewählter Regionen"@de . + "Selected Area Electron Diffraction"@en . + "Selected Area Electron Diffraction is a technique used in transmission electron microscopy (TEM) to study the crystallographic orientation of small regions within a sample. By selecting a specific area of the sample and directing an electron beam onto it, diffraction patterns are generated. These patterns offer insights into the sample's crystal structure and orientation."@en . + "ChatGPT 3.5"@en . + "SAD"@en . + "SAED"@en . +# +# https://w3id.org/pmd/mo/SiliconDriftDetector + . + . + . + "Silicon Drift Detector"@en . + "Silizium-Driftdetektor"@de . + "A type of X-ray detector that offers high-speed performance and high energy resolution."@en . + "Eine Art Röntgendetektor, der Hochgeschwindigkeitsleistung und hohe Energieauflösung bietet."@de . + "ChatGPT 3.5"@en . + "SDD"@en . +# +# https://w3id.org/pmd/mo/SoftXRayEmissionSpectrometer + . + . + . + "Röntgenemissionsspektrometer mit weicher Röntgenstrahlung"@de . + "Soft X-ray Emission Spectrometer"@en . + "An instrument used to analyze the emission of soft X-rays from a sample."@en . + "Ein Instrument zur Analyse der Emission weicher Röntgenstrahlen aus einer Probe."@de . + "ChatGPT 3.5"@en . + "SXES"@en . +# +# https://w3id.org/pmd/mo/Source + . + . + . + "Quelle"@de . + "Source"@en . + "Die Elektronenquelle, z. B. ein Wolframfaden oder eine Feldemissionskathode, die in einem Elektronenmikroskop Elektronen emittiert."@de . + "The electron source, such as a tungsten filament or field-emission cathode, that emits electrons in an electron microscope."@en . + "ChatGPT 3.5" . +# +# https://w3id.org/pmd/mo/SpatialResolution + . + . + . + "Ortsauflösung"@de . + "Spatial Resolution"@en . + "Die Fähigkeit eines Bildgebungssystems, feine Details in einem Objekt anzuzeigen. Sie bezieht sich auf das kleinste wahrnehmbare Detail in einem Bild."@de . + "The ability of an imaging system to discern fine details in an object. It refers to the smallest discernible detail in an image."@en . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/Spectrometer + . + . + . + "Spectrometer"@en . + "Spektrometer"@de . + "An instrument used to measure properties of light over a specific portion of the electromagnetic spectrum."@en . + "Ein Instrument zur Messung der Eigenschaften von Licht in einem bestimmten Teil des elektromagnetischen Spektrums."@de . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/Spectroscopy + . + . + . + "Spectrometry"@en . + "Spektrometrie"@de . + "Spectroscopy is a scientific technique used to study and analyze the interaction of matter with electromagnetic radiation, such as light. It involves measuring the way in which different substances absorb, emit, or scatter light at various wavelengths or frequencies. By examining the spectrum of light emitted, absorbed, or transmitted by a sample, scientists can gain insights into its chemical composition, molecular structure, and physical properties. Spectroscopy is widely utilized in various fields, including chemistry, physics, astronomy, and biochemistry, to investigate the characteristics and behavior of materials at the atomic and molecular level."@en . + "Spectroscopy"@en . + "Spektroskopie"@de . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/SphericalAberration + . + . + . + "Spherical Aberration"@en . + "Sphärische Aberration"@de . + "A type of optical aberration caused by deviations from the ideal spherical shape in lenses or mirrors."@en . + "Eine Art von optischer Aberration, die durch Abweichungen von der idealen sphärischen Form in Linsen oder Spiegeln verursacht wird."@de . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/SurfaceStructure + . + . + . + "Oberflächenstruktur"@de . + "Surface Structure"@en . + "Die Anordnung und die Merkmale der äußersten Schicht eines Materials."@de . + "The arrangement and features of the outermost layer of a material."@en . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/TiltCorrection + . + . + . + "Neigungskorrektur"@de . + "Tilt Correction"@en . + "A correction applied to images obtained from tilted specimens in electron microscopy to compensate for distortions caused by the tilt angle."@en . + "Eine Korrektur, die bei Bildern von gekippten Proben in der Elektronenmikroskopie angewendet wird, um durch den Kippwinkel verursachte Verzerrungen zu kompensieren."@de . + "ChatGPT 3.5" . +# +# https://w3id.org/pmd/mo/TimeOfFlightSecondaryIonMassSpectrometry + . + . + . + "Flugzeit-Sekundärionen-Massenspektrometrie"@de . + "Time Of Flight Secondary Ion Mass Spectrometry"@en . + "Time-of-Flight Secondary Ion Mass Spectrometry (TOF-SIMS) is an advanced surface analysis technique used to determine the elemental and molecular composition of solid surfaces and thin films with high sensitivity and spatial resolution. It is employed in various scientific and industrial fields, including materials science, nanotechnology, biomedicine, and semiconductor research.\nTOF-SIMS builds upon the principles of Secondary Ion Mass Spectrometry (SIMS), where a focused beam of high-energy primary ions is directed at a sample's surface, causing the ejection of secondary ions. In TOF-SIMS, the flight time of these secondary ions is measured as they travel through a field-free region and enter a time-of-flight mass spectrometer. The mass spectrometer measures the time taken by the ions to reach the detector, which is directly proportional to their mass-to-charge ratio.\nBy analyzing the flight times of the secondary ions, TOF-SIMS can determine the elemental, isotopic, and molecular composition of the sample's surface. It provides information about the presence of specific elements, chemical compounds, and molecular fragments, along with their spatial distribution. The high sensitivity of TOF-SIMS allows for the detection of trace elements and molecular species in complex samples.\nTOF-SIMS is valuable for characterizing surfaces at the nanoscale, profiling layered structures, investigating organic and inorganic materials, and studying biological specimens. Its ability to provide detailed chemical information while maintaining spatial resolution makes it an essential tool for understanding surface properties and material interactions in a wide range of applications."@en . + "ChatGPT 3.5"@en . + "TOF-SIMS"@en . +# +# https://w3id.org/pmd/mo/TomographicReconstruction + . + . + . + "Tomographic Reconstruction"@en . + "Tomographische Rekonstruktion"@de . + "Der Prozess der Rekonstruktion einer dreidimensionalen Struktur aus einer Reihe von zweidimensionalen Bildern, die aus verschiedenen Winkeln aufgenommen wurden."@de . + "The process of reconstructing a three-dimensional structure from a series of two-dimensional images taken at different angles."@en . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/TransmissionElectronAberrationCorrectedMicroscope + . + . + . + "Transmission Electron Aberration-corrected Microscope"@en . + "Transmissionselektronen-Aberrations-korrigiertes Mikroskop"@de . + "A transmission electron microscope equipped with aberration correction to achieve high-resolution imaging."@en . + "Ein Transmissions-Elektronenmikroskop mit Aberrationskorrektur zur Erzielung hochauflösender Bilder."@de . + "ChatGPT 3.5"@en . + "TEAM"@en . +# +# https://w3id.org/pmd/mo/TransmissionElectronMicroscope + . + . + . + "Transmission Electron Microscope"@en . + "Transmissionelektronenmikroskop"@de . + "A microscope that transmits a beam of electrons through a specimen, forming an image."@en . + "Ein Mikroskop, das einen Elektronenstrahl durch eine Probe sendet und ein Bild erzeugt."@de . + "ChatGPT 3.5"@en . + "TEM" . +# +# https://w3id.org/pmd/mo/TransmissionElectronMicroscopy + . + . + . + "Transmission Electron Microscopy is a microscopy technique that involves transmitting a beam of electrons through a thin sample to create high-resolution images. It is used to study the internal structure and morphology of materials at the nanometer scale."@en . + "ChatGPT 3.5"@en . + "TEM"@en . +# +# https://w3id.org/pmd/mo/Voltage + . + . + . + "Spannung"@de . + "Voltage"@en . + "Stromspannung"@de . + "Die Spannung, auch elektrische Potentialdifferenz, ist ein Maß für die elektrische potentielle Energie pro Ladungseinheit in einem elektrischen Stromkreis. Sie ist die Kraft, die den elektrischen Strom durch einen Leiter treibt. \n\nHinweis: Die Spannung wird in Volt (V) gemessen und stellt die potenzielle Energiedifferenz zwischen zwei Punkten in einem Stromkreis dar. Je höher die Spannung ist, desto größer ist die Kraft, die die elektrischen Ladungen antreibt, und desto höher ist folglich auch das Potenzial für einen Stromfluss."@de . + "Voltage, also known as electric potential difference, is a measure of the electric potential energy per unit charge in an electrical circuit. It is the force or pressure that drives electric current through a conductor. \n\nNote: Voltage is measured in volts (V), and it represents the potential energy difference between two points in a circuit. The higher the voltage, the greater the force pushing the electric charges, and consequently, the higher the potential for current to flow."@en . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/Volume + . + . + . + "Volume"@en . + "Volumen"@de . + "Die Menge an Raum, die ein Stoff oder Gegenstand einnimmt."@de . + "The amount of space that a substance or object occupies."@en . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/WaitTime + . + . + "Die Wartezeit wird häufig genutzt, um die Probe zu stabilisieren oder um die Beschädigung der Probe zu minimieren."@de . + "The wait time is often used to allow the specimen to stabilize or to minimize sample damage."@en . + . + "Wait Time"@en . + "Wartezeit"@de . + "Das Zeitintervall zwischen aufeinander folgenden Messungen oder Operationen in einem Elektronenmikroskop."@de . + "The time interval between successive measurements or operations in an electron microscope."@en . + "ChatGPT 3.5" . +# +# https://w3id.org/pmd/mo/WorkingDistance + . + . + "Der Arbeitsabstand wirkt sich auf die Tiefenschärfe und die Auflösung des Bildes aus."@de . + "The working distance affects the depth of field and the resolution of the image."@en . + . + "Arbeitsabstand"@de . + "Working Distance"@en . + "Der Abstand zwischen der Objektivlinse des Elektronenmikroskops und der Probenoberfläche, wenn der Elektronenstrahl auf die Probe fokussiert wird."@de . + "The distance between the electron microscope objective lens and the specimen surface when the electron beam is focused on the specimen."@en . + "ChatGPT 3.5" . +# +# https://w3id.org/pmd/mo/XRayAbsorptionNearEdgeSpectroscopy + . + . + . + "Röntgenabsorptionsspektroskopie im Nahbereich"@de . + "X-ray Absorption Near Edge Spectroscopy"@en . + "X-ray Absorption Near Edge Spectroscopy (XANES) is a specialized technique used in the field of materials science and spectroscopy to study the electronic and structural properties of materials. It focuses on the X-ray absorption spectra of atoms within a sample, particularly the region just above the absorption edge of an element's X-ray absorption spectrum.\nIn XANES, a sample is irradiated with X-rays, typically generated by a synchrotron radiation source. These X-rays are tuned to specific energy levels corresponding to the absorption edges of the elements of interest in the sample. As the X-rays are absorbed by the sample, the energy levels of the atoms are altered, leading to various transitions in their electron configurations. The resulting X-ray absorption spectrum is measured, specifically targeting the energies just above the absorption edge.\nXANES provides information about the electronic structure of the atoms within the sample, including the oxidation state, chemical bonding, and local environment of the absorbing element. The fine details of the XANES spectrum offer insights into the atomic and molecular interactions, as well as the coordination and symmetry of atoms in different chemical environments.\nThis technique is widely used in various scientific fields, including chemistry, solid-state physics, and materials science. XANES helps researchers understand the properties and behavior of materials at the atomic level, making it an invaluable tool for investigating the characteristics of complex materials, catalysts, minerals, and biomolecules."@en . + "ChatGPT 3.5"@en . + "XANES"@en . +# +# https://w3id.org/pmd/mo/XRayAbsorptionSpectroscopy + . + . + . + "Röntgenabsorptionsspektroskopie"@de . + "X-ray Absorption Spectroscopy"@en . + "X-ray Absorption Spectroscopy is a technique used to study the electronic and local structural properties of materials by analyzing the absorption of X-rays. It involves measuring how X-rays are absorbed by a sample at various energies, providing insights into the electronic states and chemical environments of specific elements."@en . + "ChatGPT 3.5"@en . + "XAS"@en . +# +# https://w3id.org/pmd/mo/XRayAnalysis + . + . + . + "Röntgenanalyse"@de . + "X-ray Analysis"@en . + "X-ray analysis is a technique used to investigate the composition and structure of materials by exposing them to X-rays. When X-rays interact with a material, they can be absorbed, scattered, or diffracted in ways that provide information about the material's internal arrangement of atoms and its elemental composition."@en . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/XRayDiffraction + . + . + . + "X-ray Diffraction"@en . + "Röntgenstrahlbeugung"@de . + "X-ray Diffraction is a technique that utilizes the diffraction of X-rays by crystals to determine their atomic arrangement and lattice structure. X-ray diffraction patterns are produced when X-rays strike a crystalline sample, and the resulting pattern provides information about the arrangement of atoms in the crystal lattice."@en . + "Röntgenbeugung"@de . + "ChatGPT 3.5"@en . + "XRD"@en . +# +# https://w3id.org/pmd/mo/XRayFluorescence + . + . + . + "Röntgenfluoreszenz"@de . + "X-ray Fluorescence"@en . + "X-ray Fluorescence is a method used to determine the elemental composition of a sample by analyzing the X-rays emitted when the sample is exposed to high-energy X-rays. The X-rays emitted are characteristic of the elements present, allowing for quantitative analysis of the sample's elemental composition."@en . + "ChatGPT 3.5"@en . + "XRF"@en . +# +# https://w3id.org/pmd/mo/XRayMapping + . + . + . + "Röntgen-Mapping"@de . + "X-ray Mapping"@en . + "X-ray mapping is a process that involves generating spatially resolved images of the distribution of specific elements within a sample. By collecting X-ray signals emitted or scattered from a sample at different points, an elemental map can be created, showing the varying concentrations of elements across the sample's surface."@en . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/XRayMicroanalysis + . + . + . + "Röntgen-Mikroanalyse"@de . + "X-ray Microanalysis"@en . + "X-ray Microanalysis is a technique that combines microscopy and X-ray analysis to study the elemental composition of small regions within a sample. It involves focusing an electron or X-ray beam on a specific area of the sample and measuring the X-rays emitted from that area to determine the elemental composition."@en . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/XRayPhotoelectronSpectroscopy + . + . + . + "Röntgenphotoelektronenspektroskopie"@de . + "X-ray Photoelectron Spectroscopy"@en . + "X-ray Photoelectron Spectroscopy, also known as Electron Spectroscopy for Chemical Analysis (ESCA), is a technique used to study the surface chemistry of materials. XPS involves bombarding a sample's surface with X-rays to emit photoelectrons, which are then analyzed to determine the elemental composition and chemical states of the elements on the surface."@en . + "ChatGPT 3.5"@en . + "XPS"@en . +# +# https://w3id.org/pmd/mo/3DReconstruction + . + . + . + "Dreidimensionale Rekonstruktion"@de . + "Three dimensional reconstruction"@en . + "Der Prozess der Erstellung einer dreidimensionalen Darstellung eines Objekts oder einer Szene aus zweidimensionalen Bildern oder Daten."@de . + "The process of creating a three-dimensional representation of an object or scene from two-dimensional images or data."@en . + "ChatGPT 3.5"@en . +# +# https://w3id.org/pmd/mo/4D-ScanningTransmissionElectronMicroscopy + . + . + . + "4D Scanning Transmission Electron Microscopy"@en . + "4D-Rastertransmissionselektronenmikroskopie"@de . + "4D-STEM is a technique that adds an additional dimension of information, time, to STEM imaging, allowing the study of dynamic processes in materials at high spatial and temporal resolutions."@en . + "ChatGPT 3.5"@en . + "4D-STEM"@en . +# +# Generated by the OWL API (version 5.1.18) https://github.com/owlcs/owlapi/ diff --git a/mo/ontology.rdf b/mo/ontology.rdf new file mode 100644 index 0000000..ff936d2 --- /dev/null +++ b/mo/ontology.rdf @@ -0,0 +1,2294 @@ + + + + + + + + + Markus Schilling, Bernd Bayerlein, June Lau. (January 29th, 2024) MO: microscopy ontology. Version 1.0.0, https://w3id.org/pmd/mo/ + Microscopy Ontology (MO) + + Die Mikroskopie-Ontologie (MO) ist ein umfassender Rahmen für die Darstellung von Wissen, der Konzepte aus den Bereichen Mikroskopie und Mikroanalyse umfasst. Die MO basiert semantisch auf der PMD-Kernontologie PMDco (die in MO importiert wird), um eine Verbindung zu anderen MSE-Anwendungsontologien und domänenneutralen Konzepten in etablierten Top-Level-Ontologien zu ermöglichen. Das Hauptziel von MO ist es, ein standardisiertes Vokabular und einen Rahmen für die Beschreibung und Organisation von Konzepten, Entitäten und Beziehungen im Bereich der Mikroskopie und Mikroanalyse bereitzustellen. Diese Standardisierung erleichtert die Kommunikation und Interoperabilität zwischen verschiedenen Systemen, Datenbanken und Forschungsgruppen. Um ein Vokabular zu erhalten, das in diesem Bereich relevant und daher standardisierungswürdig ist, wurde ein NLP-Ansatz angewandt, mit dessen Hilfe häufig verwendete Begriffe ermittelt wurden. Auf der Grundlage dieser Liste von Begriffen wurde dann die MO entwickelt. In der Mikroskopie und Mikroanalytik fallen große Datenmengen aus verschiedenen Techniken und Instrumenten an. Die MO kann dazu beitragen, heterogene Datenquellen zu integrieren und zu verknüpfen, so dass Daten aus verschiedenen Experimenten und Studien effektiver kombiniert und analysiert werden können. +Darüber hinaus dient die MO als Grundlage für die Annotation von Mikroskopie- und Mikroanalysedaten mit standardisierten Metadaten. Diese erweiterte Metadatenbeschreibung verbessert die Interpretierbarkeit, Durchsuchbarkeit und Wiederverwendbarkeit von Daten und fördert die Transparenz und Reproduzierbarkeit in der Forschung. Darüber hinaus kann die MO durch die Formalisierung des Wissens über Instrumente, Techniken, Materialien und Phänomene die Grundlage für maschinelles Denken zur Unterstützung der Dateninterpretation, Hypothesenbildung und Versuchsplanung bilden. +Insgesamt soll MO die Forschung voranbringen, die Zusammenarbeit fördern und den Wissensaustausch in diesem interdisziplinären Bereich erleichtern. + The Microscopy Ontology (MO) is a comprehensive framework for representing knowledge that encompasses concepts from the domains of microscopy and microanalysis. The MO is semantically based on the mid-level PMD Core Ontology PMDco (which is imported in MO) to allow a connection to other MSE application ontologies and domain neutral concepts found in established top-level ontologies. The primary goal of MO is to provide a standardized vocabulary and framework for describing and organizing concepts, entities, and relationships within the field of microscopy and microanalysis. This standardization facilitates communication and interoperability between different systems, databases, and research groups. In order to obtain a vocabulary that is relevant in the field and therefore worth standardizing, an NLP approach was applied, with the help of which commonly used terms were determined. MO was then developed based on the respective list of terms. Microscopy and microanalysis generate vast amounts of data from various techniques and instruments. MO may help to integrate and link heterogeneous data sources, enabling the combination and analysis of data from different experiments and studies more effectively. Furthermore, MO serves as a basis for annotating microscopy and microanalysis data with standardized metadata. This improved metadata description enhances the interpretability, searchability, and reusability of data, promoting transparency and reproducibility in research. Moreover, by formalizing knowledge about instruments, techniques, materials, and phenomena, MO may provide the basis to enable machine reasoning to support data interpretation, hypothesis generation, and experimental design. +Overall, MO is intended to advance research, promoting collaboration, and facilitating knowledge exchange in this interdisciplinary domain. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Aberration + Aberration + Abweichung vom idealen oder erwarteten Verhalten, häufig im Zusammenhang mit optischen Systemen verwendet. + Deviation from the ideal or expected behavior, often used in the context of optical systems. + ChatGPT 3.5 + + + + + + + + + + Die Beschleunigungsspannung bestimmt die kinetische Energie der Elektronen und beeinflusst die Auflösung und die Eindringtiefe in die Probe. + The acceleration voltage determines the kinetic energy of the electrons and affects the resolution and depth of penetration in the sample. + + Acceleration Voltage + Beschleunigungsspannung + Diese Klasse beschreibt die Spannung, die an ein Elektronenmikroskop angelegt wird, um die von der Elektronenquelle (in der Regel eine Kathode) emittierten Elektronen auf die Probe zu beschleunigen. + This class decribes the voltage applied to an electron microscope to accelerate the electrons emitted from the electron source (usually a cathode) towards the specimen. + ChatGPT 3.5 + + + + + + + + + + + Angle + Winkel + In der Geometrie und Trigonometrie ist ein Winkel ein Maß für eine Drehung, das erforderlich ist, um eine Linie oder Ebene mit einer anderen zur Deckung zu bringen. Ein Winkel wird durch zwei Strahlen gebildet, die einen gemeinsamen Endpunkt haben, der als Scheitelpunkt des Winkels bezeichnet wird. Die Strahlen werden als die Seiten des Winkels bezeichnet. + +Hinweis: Das Konzept des Winkels ist in der Geometrie von grundlegender Bedeutung und wird häufig verwendet, um die relative Ausrichtung von Linien, Ebenen oder Flächen zu beschreiben. Winkel werden in der Regel in Grad (°) oder Bogenmaß (rad) gemessen. + In geometry and trigonometry, an angle is a measure of the amount of rotation needed to bring one line or plane into coincidence with another. An angle is formed by two rays that share a common endpoint, known as the vertex of the angle. The rays are referred to as the sides of the angle. + +Note: The concept of an angle is fundamental in geometry and is often used to describe the relative orientation of lines, planes, or surfaces. Angles are typically measured in degrees (°) or radians (rad). + ChatGPT 3.5 + + + + + + + + + + + Annular Bright Field Scanning Transmission Electron Microscopy + Ringförmige Hellfeld-Rastertransmissionselektronenmikroskopie + ABF STEM is a technique that utilizes a specific arrangement of detectors to enhance contrast in STEM images, particularly for heavy elements. + ChatGPT 3.5 + ABF-STEM + + + + + + + + + + + Annular Dark Field Scanning Transmission Electron Microscopy + Ringförmige Dunkelfeld-Rastertransmissionselektronenmikroskopie + ADF STEM is a technique that utilizes a specific arrangement of detectors to create contrast in STEM images based on the scattered electrons. + ChatGPT 3.5 + ADF-STEM + + + + + + + + + + + Anode + Anode + The anode is the positively charged electrode in an electrochemical cell or other electrically driven systems. It serves as the site where oxidation occurs, meaning electrons are released from the anode, typically moving towards the cathode. In devices like batteries, the anode is where electrons are produced during the discharge process. + ChatGPT 3.5 + + + + + + + + + + + Atmospheric Scanning Electron Microscopy + Atmosphärische Rasterelektronenmikroskopie + Atmospheric Scanning Electron Microscopy is a technique that allows samples to be imaged in their natural, hydrated state at atmospheric pressure. It enables the observation of biological and other hydrated specimens without the need for dehydration or coating. + ChatGPT 3.5 + ASEM + + + + + + + + + + + Atomare Auflösung + Atomic Resolution + Die Fähigkeit, einzelne Atome in einem Bild oder einer Struktur aufzulösen. + The ability to resolve individual atoms in an image or structure. + ChatGPT 3.5 + + + + + + + + + + + Auger Electron Spectroscopy + Auger-Elektronen-Spektroskopie + Auger Electron Spectroscopy (AES) is a surface analysis technique used in the field of materials science and surface chemistry. It involves the study of the interactions between high-energy electrons and atoms on the surface of a material. The process is named after Pierre Auger, who made significant contributions to the understanding of this phenomenon. +In AES, a sample's surface is bombarded with a beam of high-energy electrons, which causes inner-shell electrons to be ejected from the atoms in the sample. These vacancies are then filled by higher-energy electrons from outer shells, leading to the emission of Auger electrons. The energy of these emitted Auger electrons is characteristic of the specific elements present in the sample and their chemical states. +By analyzing the energy spectrum of the emitted Auger electrons, researchers can identify the elements present on the surface of the material and determine their relative concentrations. Auger Electron Spectroscopy provides valuable information about the elemental composition and chemical bonding of the top few atomic layers of a material, making it a powerful tool for studying surface properties, thin films, and interfaces in various scientific and industrial applications. + ChatGPT 3.5 + AES + + + + + + + + + + + Beam + Strahl + A stream of electrons emitted from the electron source and directed towards the specimen in an electron microscope. + Ein Strom von Elektronen, der von der Elektronenquelle emittiert und auf die Probe in einem Elektronenmikroskop gerichtet wird. + ChatGPT 3.5 + + + + + + + + + + + Beam Current + Strahlstrom + Die Intensität des Elektronenstrahls, gemessen als Anzahl der Elektronen, die eine bestimmte Fläche pro Zeiteinheit durchdringen. + The intensity of the electron beam, measured as the number of electrons passing through a given area per unit time. + ChatGPT 3.5 + + + + + + + + + + + Beam Energy + Strahlungsenergie + Die Energie eines Teilchen- oder Photonenstrahls, der in verschiedenen Analyseverfahren verwendet wird. + The energy of a particle or photon beam used in various analytical techniques. + ChatGPT 3.5 + + + + + + + + + + + Beam Path + Strahlengang + Strahlenweg + Die Flugbahn des Elektronenstrahls auf seinem Weg durch das Elektronenmikroskop von der Elektronenquelle zur Probe und dann zum Detektor. + The trajectory followed by the electron beam as it travels through the electron microscope, from the electron source to the specimen and then to the detector. + ChatGPT 3.5 + + + + + + + + + + + Bright Field Transmission Electron Microscopy + Hellfeld-Transmissionselektronenmikroskopie + Bright Field TEM is an imaging mode in transmission electron microscopy where regions of the sample that scatter electrons less appear brighter in the resulting image. + ChatGPT 3.5 + BFTEM + + + + + + + + + + + Der Abstand zwischen der Probe und der Kamera, die zur Aufnahme von Bildern in einem Elektronenmikroskop verwendet wird. + The distance between the specimen and the camera used to capture images in an electron microscope. + Camera Length + Kameralänge + ChatGPT 3.5 + + + + + + + + + + + Cathode + Kathode + The cathode is the negatively charged electrode in an electrochemical cell or other electrical systems. It is the site where reduction occurs, leading to the acceptance of electrons from the external circuit. In batteries, for instance, the cathode is where electrons are consumed during the discharge process. + ChatGPT 3.5 + + + + + + + + + + + Chromatic Aberration + Chromatische Aberration + Die Unfähigkeit eines Objektivs, alle Farben auf denselben Konvergenzpunkt zu fokussieren. + The failure of a lens to focus all colors to the same convergence point. + ChatGPT 3.5 + + + + + + + + + + + Coherent Beam + Kohärenter Strahl + An electron beam in which the individual electrons maintain a constant phase relationship with each other, resulting in interference patterns when interacting with a sample. + Ein Elektronenstrahl, bei dem die einzelnen Elektronen eine konstante Phasenbeziehung zueinander haben, was bei der Wechselwirkung mit einer Probe zu Interferenzmustern führt. + ChatGPT 3.5 + + + + + + + + + + + Collection Efficiency + Kollektoreffizienz + Die Fähigkeit eines Detektors oder Systems, relevante Signale oder Daten zu erfassen und aufzuzeichnen. + The ability of a detector or system to capture and record relevant signals or data. + ChatGPT 3.5 + + + + + + + + + + + Condensor Lense + Kondensorlinse + A condenser lens is an optical element used in microscopy and other optical systems to focus and control the illumination on the sample being observed. It is positioned below the light source and directs light rays onto the specimen, making the illumination uniform and optimizing the quality of the sample's image. The condenser lens helps enhance contrast, resolution, and overall image quality by ensuring that a consistent and concentrated light beam illuminates the specimen. + ChatGPT 3.5 + + + + + + + + + + + Confocal Laser Scanning Microscopy + Konfokale Laser-Scanning-Mikroskopie + Confocal Laser Scanning Microscopy (CLSM) is an optical imaging technique that enhances resolution and eliminates out-of-focus blur by using a spatial pinhole and laser illumination. A focused laser beam is scanned across the sample's surface or depth, and only the light emitted from the focal plane (or a defined section) passes through the pinhole to form an image. CLSM provides high-resolution three-dimensional images, making it popular for biological imaging and studying fluorescently labeled samples. + ChatGPT 3.5 + CLSM + + + + + + + + + + Der Konvergenzwinkel beeinflusst die Schärfentiefe und die Auflösung des Bildes. + The convergence angle affects the depth of field and resolution of the image. + + Convergence Angle + Konvergenzwinkel + Der Winkel, in dem der Elektronenstrahl in einem Elektronenmikroskop auf die Probe trifft. + The angle at which the electron beam converges onto the specimen in an electron microscope. + ChatGPT 3.5 + + + + + + + + + + A cryo-scanning electron microscope is typically used for imaging biological samples. + Ein Kryo-Rasterelektronenmikroskop wird in der Regel zur Abbildung biologischer Proben verwendet. + Eine Art Elektronenmikroskop, das bei kryogenen Temperaturen arbeitet. + + Cryo Scanning Electron Microscope + Kryo-Rasterelektronenmikroskop + cryo-SEM + A type of electron microscope that operates under cryogenic temperatures. + ChatGPT 3.5 + + + + + + + + + + + Cryo Electron Tomography + Kryo-Elektronentomographie + Cryo Electron Tomography is a form of electron tomography that is performed at cryogenic temperatures. It is used to study the three-dimensional structure of frozen-hydrated samples. + ChatGPT 3.5 + cryo-ET + + + + + + + + + + + Cryo Transmission Electron Microscope + Kryo-Transmissionselektronenmikroskop + A transmission electron microscope that operates at cryogenic temperatures. + Ein Transmissionselektronenmikroskop, das bei kryogenen Temperaturen arbeitet. + ChatGPT 3.5 + cryo-TEM + + + + + + + + + + Der Strom wird normalerweise in Ampere (A) gemessen. + The current is typically measured in amperes (A). + + Current + Strom + Stromstärke + Der Fluss der elektrischen Ladung. + The flow of electric charge. + ChatGPT 3.5 + + + + + + + + + + + Detector Quantum Efficiency + Detektor Quantenausbeute + Die Effizienz, mit der ein Detektor einfallende Strahlung in Nutzsignale umwandelt. + The efficiency with which a detector converts incident radiation into useful signals. + ChatGPT 3.5 + + + + + + + + + + + Diffraction + Diffraktion + Beugung + Scattering + Die Biegung von Elektronenwellen beim Durchgang durch eine kristalline Probe, was zur Bildung von Beugungsmustern führt, die Informationen über die Kristallstruktur liefern. + The bending of electron waves as they pass through a crystalline sample, resulting in the formation of diffraction patterns that provide information about the crystal structure. + ChatGPT 3.5 + + + + + + + + + + + Beugungsmuster + Diffraction Pattern + Das Muster von Flecken oder Banden, das auf einem Detektor entsteht, wenn Elektronen nach der Wechselwirkung mit einer kristallinen Probe gebeugt werden. + The pattern of spots or bands produced on a detector when electrons diffract after interacting with a crystalline sample. + ChatGPT 3.5 + + + + + + + + + + + Disk Of Least Confusion + Scheibe der geringsten Konfusion + Der Bereich in der Bildebene eines Elektronenmikroskops, in dem der Elektronenstrahl auf die kleinste Punktgröße fokussiert wird, wodurch die durch sphärische Aberration verursachte Unschärfe minimiert wird. + The region in the image plane of an electron microscope where the electron beam is focused to the smallest spot size, minimizing the blurring effect due to spherical aberration. + ChatGPT 3.5 + + + + + + + + + + + Dwell Time + Verweilzeit + Verweildauer + Die Zeitspanne, in der der Elektronenstrahl während der Bildgebung oder Analyse auf einen bestimmten Punkt oder einen interessierenden Bereich der Probe fokussiert wird. + The amount of time that the electron beam is focused on a specific point or region of interest on the specimen during imaging or analysis. + ChatGPT 3.5 + + + + + + + + + + + Dynamic Focus Correction + Dynamische Fokuskorrektur + A technique used in electron microscopy to continuously adjust the focus of the electron beam in real-time to maintain optimal image quality, especially when imaging uneven or rough surfaces. + Eine Technik, die in der Elektronenmikroskopie eingesetzt wird, um den Fokus des Elektronenstrahls kontinuierlich in Echtzeit anzupassen und so eine optimale Bildqualität zu erhalten, insbesondere bei der Abbildung unebener oder rauer Oberflächen. + ChatGPT 3.5 + + + + + + + + + + + Dynamic Refocusing + Dynamische Refokussierung + Der Prozess, bei dem der Fokus des Elektronenstrahls während der Bildgebung angepasst wird, um Änderungen der Probenhöhe oder -topografie zu kompensieren und sicherzustellen, dass die gesamte Probe im Fokus bleibt. + The process of adjusting the focus of the electron beam during imaging to compensate for changes in the specimen height or topography, ensuring that the entire specimen remains in focus. + ChatGPT 3.5 + + + + + + + + + + + Dynamic Transmission Electron Microscopy + Dynamische Transmissionselektronenmikroskopie + Dynamic Transmission Electron Microscopy is a technique that uses ultrafast electron pulses to capture rapid processes in materials with nanosecond to picosecond time resolution. + ChatGPT 3.5 + DTEM + + + + + + + + + + + Efficiency + Effizienz + Das Verhältnis von nützlichem / nutzbarem Output zum gesamten Input in einem System. + The ratio of useful output to total input in any system. + ChatGPT 3.5 + + + + + + + + + + + Electrode + Elektrode + An electrode is a conductor through which electric current enters or exits a substance. In the context of electrochemical systems, an electrode facilitates the transfer of electrons between a solid material and an electrolyte. Electrodes are essential components in batteries, fuel cells, electroplating, and other electrochemical processes. They play a critical role in facilitating chemical reactions and energy storage or conversion. + ChatGPT 3.5 + + + + + + + + + + + Electron Backscatter Diffraction + Rückstreuelektronenbeugung + Electron Backscatter Diffraction is a microscopy technique used to analyze the crystallographic orientation and microstructure of materials. It involves directing an electron beam onto a sample's surface and measuring the backscattered electrons. By analyzing the diffraction patterns of these electrons, researchers can determine the crystallographic orientation of the material's grains. + ChatGPT 3.5 + EBSD + + + + + + + + + + + Electron Beam + Elektronenstrahl + A stream of electrons emitted from an electron source and accelerated towards the specimen in an electron microscope for imaging or analysis. + Ein Strom von Elektronen, der von einer Elektronenquelle emittiert und in einem Elektronenmikroskop zur Abbildung oder Analyse auf die Probe beschleunigt wird. + ChatGPT 3.5 + + + + + + + + + + + Electron Channeling Contrast Imaging + Elektronenkanal-Kontrastbildgebung + Electron Channeling Contrast Imaging is a technique used in SEM or TEM to study crystallographic defects, such as dislocations, in crystalline materials. It utilizes the contrast resulting from the deviation of electron trajectories due to crystal defects. + ChatGPT 3.5 + ECCI + + + + + + + + + + + Electron Diffraction + Elektronenbeugung + Das Phänomen der Beugung von Elektronenwellen beim Durchgang durch eine kristalline Probe, das Informationen über die Kristallstruktur liefert. + The phenomenon of electron waves diffracting as they pass through a crystalline sample, providing information about the crystal structure. + ChatGPT 3.5 + + + + + + + + + + + Electron Diffraction Pattern + Elektronenbeugungsmuster + Das Muster von Flecken oder Ringen, das auf einem Detektor entsteht, wenn Elektronen nach der Wechselwirkung mit einer kristallinen Probe gebeugt werden, und das zur Bestimmung der Kristallstruktur verwendet wird. + The pattern of spots or rings produced on a detector when electrons diffract after interacting with a crystalline sample, used to determine the crystal structure. + ChatGPT 3.5 + + + + + + + + + + + Electron Energy Loss Spectroscopy + Elektronenenergieverlustspektroskopie + Electron Energy Loss Spectroscopy (EELS) is a specialized analytical technique in the field of materials science and electron microscopy. It involves the measurement of the energy loss of electrons as they interact with a sample. EELS is commonly performed in transmission electron microscopy (TEM) setups. +In EELS, a focused beam of high-energy electrons is directed at a sample. As these electrons pass through the material, they can lose energy through various interactions, such as inelastic scattering and excitation of inner-shell electrons. The energy loss is measured and analyzed to gain information about the sample's composition, electronic structure, and bonding characteristics. +By studying the energy loss spectrum, researchers can identify the types of atoms present in the sample, determine their chemical states, and gather insights into the electronic properties of the material. EELS is particularly useful for investigating nanoscale materials, thin films, and interfaces, providing valuable information about their electronic and atomic structure. It is a powerful technique for understanding the behavior of materials at the nanometer scale and plays a significant role in advancing fields such as materials science, nanotechnology, and semiconductor research. + ChatGPT 3.5 + EELS + + + + + + + + + + + Electron Microprobe + Elektronenmikrosonde + An analytical instrument used to determine the chemical composition of materials. + Ein Analyseinstrument zur Bestimmung der chemischen Zusammensetzung von Materialien. + ChatGPT 3.5 + + + + + + + + + + + Electron Probe + Elektronensonde + Der fokussierte Elektronenstrahl, der zur Abbildung oder Analyse in einem Elektronenmikroskop verwendet wird. + The focused electron beam used for imaging or analysis in an electron microscope. + ChatGPT 3.5 + + + + + + + + + + + Electron Probe Micro Analyzer + Elektronensonden-Mikro-Analysator + An instrument used for elemental analysis of solid materials by bombarding them with a focused electron beam. + Ein Instrument zur Elementaranalyse fester Materialien durch Beschuss mit einem fokussierten Elektronenstrahl. + ChatGPT 3.5 + + + + + + + + + + + Electron Tomograph + Elektronentomograph + An instrument used for tomographic imaging using electrons. + Ein Instrument für die tomografische Bildgebung mit Elektronen. + ChatGPT 3.5 + ET + + + + + + + + + + + Electron Tomography + Elektronentomographie + Electron Tomography is a technique that involves collecting a series of transmission electron microscopy (TEM) images from different angles to reconstruct a three-dimensional image of a sample. + ChatGPT 3.5 + ET + + + + + + + + + + Der Emissionsstrom wird normalerweise in Mikroampere (μA) oder Milliampere (mA) gemessen. + The emission current usually measured in microamperes (μA) or milliamperes (mA). + + Emission Current + Emissionsstrom + Der Strom der von der Elektronenquelle emittierten Elektronen. + The current of electrons emitted from the electron source. + ChatGPT 3.5 + + + + + + + + + + Die Energie wird üblicherweise in Joule (J) oder Elektronenvolt (eV) gemessen. + The energy is usually measured in joules (J) or electron volts (eV). + + Energie + Energy + Die Fähigkeit eines physischen Systems, Arbeit zu verrichten. + The capacity of a physical system to perform work. + ChatGPT 3.5 + + + + + + + + + + + Energy Dispersive X-ray Spectroscopy + energiedispersive Röntgenmikroanalyse + Energy Dispersive X-ray Spectroscopy is a technique used to analyze the elemental composition of a sample by detecting the X-rays emitted when the sample is bombarded with electrons in an electron microscope or other instrument. EDS provides information about the elements present in the sample and their relative concentrations. + energiedispersive Röntgenanalyse + ChatGPT 3.5 + EDS + EDX + XEDS + + + + + + + + + + + Energiegefiltertes Transmissionselektronenmikroskop + Energy-filtered Transmission Electron Microscope + A transmission electron microscope equipped with an energy filter to select electrons of specific energy levels. + Ein Transmissionselektronenmikroskop, das mit einem Energiefilter ausgestattet ist, um Elektronen bestimmter Energieniveaus zu selektieren. + ChatGPT 3.5 + + + + + + + + + + + Energieverlust + Energy Loss + Der Energieverlust, den ein Teilchen beim Durchgang durch ein Medium erfährt. + The loss of energy experienced by a particle as it passes through a medium. + ChatGPT 3.5 + + + + + + + + + + + Energieauflösung + Energy Resolution + Die Fähigkeit eines Detektors, zwischen verschiedenen Energieniveaus der einfallenden Strahlung zu unterscheiden. + The ability of a detector to distinguish between different energy levels of incident radiation. + ChatGPT 3.5 + + + + + + + + + + + Environmental Scanning Electron Microscope + Umwelt-Rasterelektronenmikroskop + A type of electron microscope that can image non-conductive samples in their natural state. + Eine Art Elektronenmikroskop, das nicht leitende Proben in ihrem natürlichen Zustand abbilden kann. + ChatGPT 3.5 + ESEM + + + + + + + + + + + Environmental Scanning Electron Microscopy + Umgebungs-Rasterelektronenmikroskopie + Environmental Scanning Electron Microscopy is a technique that allows imaging of samples in a gaseous environment. It is particularly useful for observing hydrated or non-conductive samples without the need for extensive sample preparation. + ChatGPT 3.5 + ESEM + + + + + + + + + + + Environmental Transmission Electron Microscopy + Umgebungs-Transmissionselektronenmikroskopie + Environmental Transmission Electron Microscopy allows imaging and analysis of materials in controlled gaseous environments, simulating real-world conditions. + ChatGPT 3.5 + ETEM + + + + + + + + + + + Extraction Voltage + Extraktionsspannung + Die Spannung, die an die Elektronenquelle in einem Elektronenmikroskop angelegt wird, um Elektronen aus der Kathode zu extrahieren und sie auf die Probe zu beschleunigen. + The voltage applied to the electron source in an electron microscope to extract electrons from the cathode and accelerate them towards the specimen. + ChatGPT 3.5 + + + + + + + + + + + Feldemissionskanone + Field Emission Gun + A Field Emission Gun is an electron gun used in electron microscopes to produce an electron beam with extremely high brightness and coherence. It relies on the phenomenon of field emission, where electrons are emitted from a sharp emitter tip under the influence of a strong electric field. FEGs are capable of producing highly focused electron beams, leading to enhanced imaging resolution and analytical capabilities. + ChatGPT 3.5 + FEG + + + + + + + + + + + Feldemissions-Rasterelektronenmikroskopie + Field Emission Scanning Electron Microscopy + Field Emission Scanning Electron Microscopy is an advanced form of SEM that uses a field emitter to produce a highly focused electron beam, enabling high-resolution imaging and surface analysis. + ChatGPT 3.5 + FESEM + + + + + + + + + + + Feldionenmikroskop + Field Ion Microscope + A type of microscope that uses the phenomenon of field ionization to image surfaces with atomic resolution. + Ein Mikroskoptyp, der das Phänomen der Feldionisation nutzt, um Oberflächen mit atomarer Auflösung abzubilden. + ChatGPT 3.5 + FIM + + + + + + + + + + + Feldionenmikroskopie + Field Ion Microscopy + Field Ion Microscopy is a specialized microscopy technique that uses a strong electric field to ionize atoms on the surface of a metal sample. These ionized atoms are then repelled from the surface and can be detected to create an image of the sample's surface topography at atomic resolution. FIM is especially powerful for imaging the arrangement of atoms on metallic surfaces. + ChatGPT 3.5 + FIM + + + + + + + + + + + Filament Current + Glühfadenstrom + Der Strom, der durch den Glühfaden der Elektronenkanone in einem Elektronenmikroskop fließt und den Glühfaden erhitzt, um Elektronen zu emittieren. + The current passing through the filament of the electron gun in an electron microscope, which heats up the filament to emit electrons. + ChatGPT 3.5 + + + + + + + + + + + Fluorescence Microscopy + Fluoreszenzmikroskopie + Fluorescence Microscopy is an optical imaging technique used to visualize biological structures and molecules that fluoresce when illuminated with specific wavelengths of light. Fluorescent molecules absorb light energy and then emit light of a longer wavelength, allowing the visualization of specific molecules or cellular components. Fluorescence microscopy is widely used in cell biology, molecular biology, and medical research. + ChatGPT 3.5 + + + + + + + + + + + Flyback Time + Rücklaufzeit + Die Zeit, die der Elektronenstrahl benötigt, um nach dem Abtasten einer Zeile oder eines Bildes in einem Elektronenmikroskop in seine Ausgangsposition zurückzukehren. + The time taken for the electron beam to return to its starting position after scanning a line or frame in an electron microscope. + ChatGPT 3.5 + + + + + + + + + + + Brennweite + Focal Length + Der Abstand zwischen dem Brennpunkt (wo der Elektronenstrahl fokussiert wird) und der Linse oder Blende in einem Elektronenmikroskop. + The distance between the focal point (where the electron beam is focused) and the lens or aperture in an electron microscope. + ChatGPT 3.5 + + + + + + + + + + + Brennebene + Focal Plane + Die Ebene senkrecht zur optischen Achse eines Elektronenmikroskops, in der der Elektronenstrahl fokussiert wird, um ein Bild zu erzeugen. + The plane perpendicular to the optical axis of an electron microscope where the electron beam is focused to form an image. + ChatGPT 3.5 + + + + + + + + + + + Brennpunkt + Focal Point + Der Punkt, an dem der Elektronenstrahl in einem Elektronenmikroskop fokussiert wird, um ein Bild der Probe zu erzeugen. + The point at which the electron beam is focused in an electron microscope to form an image of the specimen. + ChatGPT 3.5 + + + + + + + + + + + Focused Beam + Fokussierter Strahl + An electron beam that has been narrowed or focused to a small spot size on the specimen surface. + Ein Elektronenstrahl, der auf einen kleinen Punkt auf der Probenoberfläche eingeengt oder fokussiert wurde. + ChatGPT 3.5 + + + + + + + + + + + Focus(ed) Ion Beam - Scanning Electron Microscope + Fokussierter Ionenstrahl - Rasterelektronenmikroskop + A dual-beam microscope that combines a focused ion beam with a scanning electron microscope. + Ein Zweistrahlmikroskop, das einen fokussierten Ionenstrahl mit einem Rasterelektronenmikroskop kombiniert. + ChatGPT 3.5 + FIB-SEM + + + + + + + + + + + Focused Ion Beam Scanning Electron Microscopy + Fokussierte Ionenstrahl-Rasterelektronenmikroskopie + Focused Ion Beam Scanning Electron Microscopy is a combination of two techniques: focused ion beam (FIB) and scanning electron microscopy (SEM). FIB-SEM systems use a focused ion beam to both image and modify a sample's surface. The ion beam can be used for milling, cutting, and deposition processes, making FIB-SEM a versatile tool for materials analysis, sample preparation, and three-dimensional imaging. + ChatGPT 3.5 + FIB-SEM + + + + + + + + + + + Fourier Transform Infrared Spectroscopy + Fourier-Transformations-Infrarotspektroskopie + Fourier Transform Infrared Spectroscopy (FTIR) is a powerful analytical technique used in various scientific disciplines to study the molecular composition and properties of materials. It is based on the interaction between infrared radiation and a sample, providing information about the vibrational modes of molecules. +In FTIR spectroscopy, an infrared beam is directed through a sample, and the interaction between the radiation and the sample's molecules leads to absorption of specific infrared frequencies. Each type of molecular bond and functional group in the sample absorbs infrared radiation at characteristic frequencies, which correspond to the energies of molecular vibrations. The resulting absorption spectrum represents a fingerprint of the sample's molecular structure. +The Fourier transform technique is used to convert the raw data obtained from the absorption measurements into a Fourier-transformed spectrum. This transformation improves the signal-to-noise ratio and enhances the accuracy of spectral analysis. +FTIR is extensively used in a wide range of fields, including chemistry, biology, materials science, pharmaceuticals, and environmental science. It is employed for qualitative and quantitative analysis, identification of compounds, monitoring chemical reactions, and studying molecular interactions. FTIR spectroscopy provides valuable insights into molecular bonding, functional groups, and the chemical composition of substances, making it an indispensable tool in modern analytical science. + ChatGPT 3.5 + FTIR + + + + + + + + + + + Frame Time + Rahmenscanzeit + Die Zeit, die benötigt wird, um ein Einzelbild in einem Elektronenmikroskop aufzunehmen und anzuzeigen. + The time required to capture and display a single frame of an image in an electron microscope. + ChatGPT 3.5 + + + + + + + + + + + Gatan Abbildungsfilter + Gatan Image Filter + A Gatan Image Filter refers to an image filter manufactured by Gatan, Inc., a company specializing in electron microscopy and related products. Gatan's image filters are designed for electron microscopes and electron energy loss spectroscopy (EELS) applications. These filters allow researchers to control and enhance the acquisition of electron energy loss spectra while obtaining high-resolution images of the sample under investigation. + ChatGPT 3.5 + + + + + + + + + + + Gun + Kanone + In the context of electron microscopy and particle acceleration, a "gun" typically refers to an electron or particle source that generates and emits the particles. In electron microscopy, an electron gun is used to generate a beam of electrons for imaging or analysis. In particle accelerators, a particle gun generates and launches particles at high speeds for various experimental purposes. + ChatGPT 3.5 + + + + + + + + + + + Helium Ion Microscope + Helium-Ionen-Mikroskop + A type of microscope that uses helium ions to image samples with high resolution. + Eine Art Mikroskop, das Helium-Ionen verwendet, um Proben mit hoher Auflösung abzubilden. + ChatGPT 3.5 + HIM + + + + + + + + + + + Helium Ion Microscopy + Helium-Ionen-Mikroskopie + Helium Ion Microscopy is a microscopy technique that uses a beam of helium ions instead of electrons to interact with a sample's surface. The smaller mass of helium ions compared to electrons allows for higher resolution imaging and reduced sample damage. HIM provides high-resolution images and is often used for imaging delicate or sensitive samples. + ChatGPT 3.5 + HIM + + + + + + + + + + + High-angle Annular Dark-field Scanning Transmission Electron Microscope + Hochwinkel-Dunkelfeld-Rastertransmissionselektronenmikroskop mit annularem Winkel + A type of scanning transmission electron microscope that detects scattered electrons at high angles. + Eine Art Rastertransmissionselektronenmikroskop, das gestreute Elektronen in hohen Winkeln erkennt. + ChatGPT 3.5 + HAADF-STEM + + + + + + + + + + + High Resolution Transmission Electron Microscope + Hochauflösendes Transmissionselektronenmikroskop + A transmission electron microscope capable of achieving high-resolution images. + Ein Transmissionselektronenmikroskop, das hochauflösende Bilder liefert. + ChatGPT 3.5 + HRTEM + + + + + + + + + + + High Resolution Transmission Electron Microscopy + Hochauflösende Transmissionselektronenmikroskopie + High Resolution TEM is a technique that provides exceptionally high-resolution images of a sample's internal structure, revealing atomic-level details. + ChatGPT 3.5 + HRTEM + + + + + + + + + + + Abbildungsfilter + Image Filter + An image filter is a device or component used in imaging systems, such as microscopy or photography, to modify the appearance of an image by selectively altering certain characteristics. Filters can be used to adjust contrast, brightness, color balance, and other image properties. They are often used to enhance specific features or to correct for distortions caused by lighting conditions or optical imperfections. + ChatGPT 3.5 + + + + + + + + + + + Einfallender Strahl + Incident Beam + Der Elektronenstrahl, der in einem Elektronenmikroskop auf die Probenoberfläche trifft und Wechselwirkungen hervorruft, die Signale für die Abbildung oder Analyse erzeugen. + The electron beam that strikes the specimen surface in an electron microscope, causing interactions that produce signals for imaging or analysis. + ChatGPT 3.5 + + + + + + + + + + + Inelastic Scattering + Inelastische Streuung + Inelastic scattering is a scattering process that involves the transfer of energy and momentum between the incident particle (e.g., photon, electron) and the target particle. During inelastic scattering, the energy of the scattered particle changes, and the interaction may result in various outcomes, such as excitation, emission, or other energy transfers that alter the internal state of the target particle. + ChatGPT 3.5 + + + + + + + + + + + Interaction Volume + Überlagerungsvolumen + Der Bereich innerhalb einer Probe, in dem ein Teilchenstrahl mit dem Material in Wechselwirkung tritt. + The region within a sample where a particle beam interacts with the material. + ChatGPT 3.5 + + + + + + + + + + + Ion Beam + Ionenstrahl + A stream of ions used for grinding or analysis, especially in ion microscopy techniques for imaging. + Ein Ionenstrom, der zum Mahlen oder zur Analyse verwendet wird, insbesondere bei Ionenmikroskopietechniken zur Bildgebung. + ChatGPT 3.5 + + + + + + + + + + + Ion Microscope + Ionenmikroskop + A microscope that uses ions to create images of samples. + Ein Mikroskop, das mit Hilfe von Ionen Bilder von Proben erzeugt. + ChatGPT 3.5 + + + + + + + + + + + Ion Microscopy + Ionenmikroskopie + Ion Microscopy refers to a group of microscopy techniques that use focused ion beams to image and analyze samples. These techniques utilize ions, such as protons or heavy ions, instead of electrons or photons to interact with the sample, providing valuable information about its composition and structure. + ChatGPT 3.5 + + + + + + + + + + + Lichtmikroskop + Light Microscope + An optical microscope that uses visible light to illuminate and magnify samples. + Ein optisches Mikroskop, das sichtbares Licht verwendet, um Proben zu beleuchten und zu vergrößern. + ChatGPT 3.5 + + + + + + + + + + + Lichtmikroskopie + Light Microscopy + Die Verwendung von sichtbarem Licht zur Beobachtung und Untersuchung kleiner Objekte oder Strukturen. + The use of visible light to observe and study small objects or structures. + ChatGPT 3.5 + + + + + + + + + + + Magnification + Vergrößerung + Das Verhältnis zwischen der Größe eines von einem optischen System erzeugten Bildes und der Größe des Objekts. + The ratio of the size of an image produced by an optical system to the size of the object. + ChatGPT 3.5 + + + + + + + + + + + Mechanical Polishing + Mechanisches Polieren + Mechanical polishing is a material preparation technique used to enhance the surface quality and finish of a sample by removing thin layers of material through abrasion. It involves using abrasive materials, such as polishing cloths, diamond suspensions, or abrasive pastes, along with a polishing machine or device. The process typically includes several steps, each using progressively finer abrasives to achieve a smooth and mirror-like surface. + +During mechanical polishing, the sample is pressed against the rotating polishing medium with controlled pressure. The abrasive particles embedded in the medium gradually remove surface irregularities, scratches, and imperfections, resulting in improved flatness, clarity, and reflectivity. The process can be adjusted to target specific levels of surface roughness and precision. + +Mechanical polishing is commonly used in various scientific and industrial applications, such as metallography, materials science, electronics, and optics. It is an essential step before further analyses like microscopy, spectroscopy, or surface profiling, as it provides a pristine surface for accurate characterization and observation of material properties. + ChatGPT 3.5 + + + + + + + + + + + Monochromatic Beam + Monochromatischer Strahl + An electron beam consisting of electrons with a narrow range of energies, typically achieved using electron energy filters or monochromators. + Ein Elektronenstrahl, der aus Elektronen mit einem engen Energiebereich besteht, der in der Regel durch Elektronenenergiefilter oder Monochromatoren erreicht wird. + ChatGPT 3.5 + + + + + + + + + + + Monochromator + Monochromator + An optical device that transmits a narrow range of wavelengths of light. + Ein optisches Gerät, das einen engen Wellenlängenbereich von Licht überträgt. + ChatGPT 3.5 + + + + + + + + + + + Optical Microscope + Optisches Mikroskop + A microscope that uses visible light and lenses to magnify specimens. + Ein Mikroskop, das sichtbares Licht und Linsen zur Vergrößerung von Proben verwendet. + ChatGPT 3.5 + + + + + + + + + + + Bildgebende Orientierungsmikroskopie + Orientation Imaging Microscopy + Orientation Imaging Microscopy is a microscopy technique used to map the crystallographic orientations of grains within a material. It is commonly applied in SEM to study the microstructural properties of polycrystalline materials. + ChatGPT 3.5 + OIM + + + + + + + + + + + Physical Process + Physikalischer Prozess + A physical process refers to a sequence of events or interactions that occur in the physical world and can be described and analyzed based on the principles of physics. These processes involve the transformation of energy, matter, or both, and they often follow established laws and theories of physics. In particular, a physical process may just occur due to natural circumstances and does not necessarily have to be induced by human activities or interactions. + ChatGPT 3.5 + + + + + + + + + + + Pixel Size + Pixelgröße + Die Größe der einzelnen Pixel in einem digitalen Bild oder einer Anzeige. + The size of individual pixels in a digital image or display. + ChatGPT 3.5 + + + + + + + + + + + Polarisiertes Lichtmikroskop + Polarized Light Microscope + A microscope that uses polarized light to observe and analyze samples. + Ein Mikroskop, das polarisiertes Licht zur Beobachtung und Analyse von Proben verwendet. + ChatGPT 3.5 + PLM + + + + + + + + + + + Polarisationslichtmikroskopie + Polarized Light Microscopy + Polarized Light Microscopy is a technique that uses polarized light to enhance the contrast and reveal structural information in transparent samples. Light waves vibrate in specific directions, and by using polarizers to control the orientation of light waves, polarized light microscopy can highlight birefringent materials, anisotropic structures, and stress patterns within samples. This technique is valuable for studying crystalline structures, fibers, and anisotropic materials. + ChatGPT 3.5 + PLM + + + + + + + + + + + Pole Piece + Polschuh + A component of the electron column in an electron microscope that focuses and guides the electron beam onto the specimen. + Eine Komponente der Elektronensäule in einem Elektronenmikroskop, die den Elektronenstrahl fokussiert und auf die Probe lenkt. + ChatGPT 3.5 + + + + + + + + + + + Primary Beam + Primärstrahl + Der Hauptelektronenstrahl, der von der Elektronenquelle ausgesandt und auf die Probe in einem Elektronenmikroskop gerichtet wird. + The main electron beam emitted from the electron source and directed towards the specimen in an electron microscope. + ChatGPT 3.5 + + + + + + + + + + + Probe Current + Sondenstrom + Der Strom der Elektronen im fokussierten Elektronenstrahl, der zur Abbildung oder Analyse in einem Elektronenmikroskop verwendet wird. + The current of electrons in the focused electron beam used for imaging or analysis in an electron microscope. + ChatGPT 3.5 + + + + + + + + + + + Probe Size + Sensorgröße + Messfühlergröße + Die Größe der Sonde oder des Strahls, die bei Mikroskopie- oder Spektroskopieverfahren verwendet werden. + The size of the probe or beam used in microscopy or spectroscopy techniques. + ChatGPT 3.5 + + + + + + + + + + + Reconstruction + Rekonstruktion + Der Prozess der Erstellung eines dreidimensionalen Bildes oder Modells aus zweidimensionalen Daten. + The process of creating a three-dimensional image or model from two-dimensional data. + ChatGPT 3.5 + + + + + + + + + + + Auflösung + Resolution + In various contexts, resolution refers to the degree of detail that can be discerned in an image, measurement, or other representation of an object or phenomenon. + In verschiedenen Zusammenhängen bezieht sich die Auflösung auf den Grad der Detailgenauigkeit, die in einem Bild, einer Messung oder einer anderen Darstellung eines Objekts oder Phänomens erkennbar ist. + ChatGPT 3.5 + + + + + + + + + + + Rasterelektronenmikroskop + Scanning Electron Microscope + A microscope that produces images of a sample by scanning it with a focused beam of electrons. + Ein Mikroskop, das Bilder einer Probe erzeugt, indem es diese mit einem fokussierten Elektronenstrahl abtastet. + ChatGPT 3.5 + REM + SEM + + + + + + + + + + + Rasterelektronenmikroskopie + Scanning Electron Microscopy + Scanning Electron Microscopy is a microscopy technique that uses a focused beam of electrons to scan the surface of a sample. The interaction of the electrons with the sample generates signals that provide information about the sample's topography, morphology, and composition. + ChatGPT 3.5 + SEM + + + + + + + + + + + Rastersondenmikroskop + Scanning Probe Microscope + A type of microscope that images surfaces by scanning a probe over the sample. + Ein Mikroskoptyp, der Oberflächen abbildet, indem er eine Sonde über die Probe führt. + ChatGPT 3.5 + + + + + + + + + + + Rastersondenmikroskopie + Scanning Probe Microscopy + Scanning Probe Microscopy encompasses various techniques, such as Atomic Force Microscopy (AFM) and Scanning Tunneling Microscopy (STM), that use a sharp probe to scan a sample's surface. These techniques provide high-resolution images and information about surface properties on the nanometer scale. + ChatGPT 3.5 + SPM + + + + + + + + + + + Rastertransmissionselektronenmikroskop + Scanning Transmission Electron Microscope + A type of transmission electron microscope where a focused electron beam is scanned across the sample. + Eine Art von Transmissionselektronenmikroskop, bei dem ein fokussierter Elektronenstrahl über die Probe gescannt wird. + ChatGPT 3.5 + STEM + + + + + + + + + + + Rastertransmissionselektronenmikroskopie + Scanning Transmission Electron Microscopy + Scanning Transmission Electron Microscopy is a technique that combines the principles of scanning and transmission electron microscopy. It allows imaging and spectroscopy with high spatial resolution. + ChatGPT 3.5 + STEM + + + + + + + + + + + Rastertransmissionselektronenmikroskopie Elektronen-Energieverlust-Spektroskopie + Scanning Transmission Electron Microscopy Electron Energy Loss Spectroscopy + STEM-EELS combines STEM imaging with electron energy loss spectroscopy to provide information about the elemental composition and electronic structure of a sample at high spatial resolution. + ChatGPT 3.5 + STEM-EELS + + + + + + + + + + + Rastertunnelmikroskop + Scanning Tunneling Microscope + A microscope that uses quantum tunneling to image surfaces at the atomic level. + Ein Mikroskop, das Quanten-Tunneling nutzt, um Oberflächen auf atomarer Ebene abzubilden. + ChatGPT 3.5 + STM + + + + + + + + + + + Rastertunnelmikroskopie + Scanning Tunneling Microscopy + Scanning Tunneling Microscopy is a technique that uses a conducting probe to measure the tunneling current between the probe and the sample's surface. It provides atomic-scale images of surfaces and is often used to study conductive materials. + ChatGPT 3.5 + STM + + + + + + + + + + + Scintillator + Szintillator + A material that emits light when it absorbs ionizing radiation. + Ein Material, das Licht aussendet, wenn es ionisierende Strahlung absorbiert. + ChatGPT 3.5 + + + + + + + + + + + Secondary Ion Mass Spectrometry + Sekundärionen-Massenspektrometrie + Secondary Ion Mass Spectrometry (SIMS) is an advanced analytical technique used to determine the elemental and isotopic composition of solid surfaces and thin films at a very high sensitivity and spatial resolution. It is widely employed in various scientific and industrial applications, including materials science, semiconductor research, and surface analysis. +In SIMS, a focused beam of high-energy primary ions is directed at a sample's surface. The impact of these primary ions causes the ejection of secondary ions from the sample's surface. These secondary ions are then extracted, mass-separated, and detected using a mass spectrometer. The mass spectrometer measures the mass-to-charge ratios of the secondary ions, providing information about the elemental and isotopic composition of the sample. +The sensitivity and spatial resolution of SIMS allow researchers to analyze very small areas, often down to the micrometer or nanometer scale. This makes SIMS particularly valuable for investigating surface composition, depth profiling of layered structures, and detecting trace elements in complex materials. The technique is non-destructive in its elemental analysis, which is beneficial for studying delicate samples or preserving valuable materials. +SIMS has applications in diverse fields, including materials characterization, semiconductor device analysis, biological and medical research, and geological studies. It provides essential information about the chemical composition, structure, and distribution of elements in complex samples, contributing to advancements in materials science and various technological developments. + ChatGPT 3.5 + SIMS + + + + + + + + + + + Elektronenbeugung ausgewählter Regionen + Selected Area Electron Diffraction + Selected Area Electron Diffraction is a technique used in transmission electron microscopy (TEM) to study the crystallographic orientation of small regions within a sample. By selecting a specific area of the sample and directing an electron beam onto it, diffraction patterns are generated. These patterns offer insights into the sample's crystal structure and orientation. + ChatGPT 3.5 + SAD + SAED + + + + + + + + + + + Silicon Drift Detector + Silizium-Driftdetektor + A type of X-ray detector that offers high-speed performance and high energy resolution. + Eine Art Röntgendetektor, der Hochgeschwindigkeitsleistung und hohe Energieauflösung bietet. + ChatGPT 3.5 + SDD + + + + + + + + + + + Röntgenemissionsspektrometer mit weicher Röntgenstrahlung + Soft X-ray Emission Spectrometer + An instrument used to analyze the emission of soft X-rays from a sample. + Ein Instrument zur Analyse der Emission weicher Röntgenstrahlen aus einer Probe. + ChatGPT 3.5 + SXES + + + + + + + + + + + Quelle + Source + Die Elektronenquelle, z. B. ein Wolframfaden oder eine Feldemissionskathode, die in einem Elektronenmikroskop Elektronen emittiert. + The electron source, such as a tungsten filament or field-emission cathode, that emits electrons in an electron microscope. + ChatGPT 3.5 + + + + + + + + + + + Ortsauflösung + Spatial Resolution + Die Fähigkeit eines Bildgebungssystems, feine Details in einem Objekt anzuzeigen. Sie bezieht sich auf das kleinste wahrnehmbare Detail in einem Bild. + The ability of an imaging system to discern fine details in an object. It refers to the smallest discernible detail in an image. + ChatGPT 3.5 + + + + + + + + + + + Spectrometer + Spektrometer + An instrument used to measure properties of light over a specific portion of the electromagnetic spectrum. + Ein Instrument zur Messung der Eigenschaften von Licht in einem bestimmten Teil des elektromagnetischen Spektrums. + ChatGPT 3.5 + + + + + + + + + + + Spectrometry + Spektrometrie + Spectroscopy is a scientific technique used to study and analyze the interaction of matter with electromagnetic radiation, such as light. It involves measuring the way in which different substances absorb, emit, or scatter light at various wavelengths or frequencies. By examining the spectrum of light emitted, absorbed, or transmitted by a sample, scientists can gain insights into its chemical composition, molecular structure, and physical properties. Spectroscopy is widely utilized in various fields, including chemistry, physics, astronomy, and biochemistry, to investigate the characteristics and behavior of materials at the atomic and molecular level. + Spectroscopy + Spektroskopie + ChatGPT 3.5 + + + + + + + + + + + Spherical Aberration + Sphärische Aberration + A type of optical aberration caused by deviations from the ideal spherical shape in lenses or mirrors. + Eine Art von optischer Aberration, die durch Abweichungen von der idealen sphärischen Form in Linsen oder Spiegeln verursacht wird. + ChatGPT 3.5 + + + + + + + + + + + Oberflächenstruktur + Surface Structure + Die Anordnung und die Merkmale der äußersten Schicht eines Materials. + The arrangement and features of the outermost layer of a material. + ChatGPT 3.5 + + + + + + + + + + + Neigungskorrektur + Tilt Correction + A correction applied to images obtained from tilted specimens in electron microscopy to compensate for distortions caused by the tilt angle. + Eine Korrektur, die bei Bildern von gekippten Proben in der Elektronenmikroskopie angewendet wird, um durch den Kippwinkel verursachte Verzerrungen zu kompensieren. + ChatGPT 3.5 + + + + + + + + + + + Flugzeit-Sekundärionen-Massenspektrometrie + Time Of Flight Secondary Ion Mass Spectrometry + Time-of-Flight Secondary Ion Mass Spectrometry (TOF-SIMS) is an advanced surface analysis technique used to determine the elemental and molecular composition of solid surfaces and thin films with high sensitivity and spatial resolution. It is employed in various scientific and industrial fields, including materials science, nanotechnology, biomedicine, and semiconductor research. +TOF-SIMS builds upon the principles of Secondary Ion Mass Spectrometry (SIMS), where a focused beam of high-energy primary ions is directed at a sample's surface, causing the ejection of secondary ions. In TOF-SIMS, the flight time of these secondary ions is measured as they travel through a field-free region and enter a time-of-flight mass spectrometer. The mass spectrometer measures the time taken by the ions to reach the detector, which is directly proportional to their mass-to-charge ratio. +By analyzing the flight times of the secondary ions, TOF-SIMS can determine the elemental, isotopic, and molecular composition of the sample's surface. It provides information about the presence of specific elements, chemical compounds, and molecular fragments, along with their spatial distribution. The high sensitivity of TOF-SIMS allows for the detection of trace elements and molecular species in complex samples. +TOF-SIMS is valuable for characterizing surfaces at the nanoscale, profiling layered structures, investigating organic and inorganic materials, and studying biological specimens. Its ability to provide detailed chemical information while maintaining spatial resolution makes it an essential tool for understanding surface properties and material interactions in a wide range of applications. + ChatGPT 3.5 + TOF-SIMS + + + + + + + + + + + Tomographic Reconstruction + Tomographische Rekonstruktion + Der Prozess der Rekonstruktion einer dreidimensionalen Struktur aus einer Reihe von zweidimensionalen Bildern, die aus verschiedenen Winkeln aufgenommen wurden. + The process of reconstructing a three-dimensional structure from a series of two-dimensional images taken at different angles. + ChatGPT 3.5 + + + + + + + + + + + Transmission Electron Aberration-corrected Microscope + Transmissionselektronen-Aberrations-korrigiertes Mikroskop + A transmission electron microscope equipped with aberration correction to achieve high-resolution imaging. + Ein Transmissions-Elektronenmikroskop mit Aberrationskorrektur zur Erzielung hochauflösender Bilder. + ChatGPT 3.5 + TEAM + + + + + + + + + + + Transmission Electron Microscope + Transmissionelektronenmikroskop + A microscope that transmits a beam of electrons through a specimen, forming an image. + Ein Mikroskop, das einen Elektronenstrahl durch eine Probe sendet und ein Bild erzeugt. + ChatGPT 3.5 + TEM + + + + + + + + + + + Transmission Electron Microscopy is a microscopy technique that involves transmitting a beam of electrons through a thin sample to create high-resolution images. It is used to study the internal structure and morphology of materials at the nanometer scale. + ChatGPT 3.5 + TEM + + + + + + + + + + + Spannung + Voltage + Stromspannung + Die Spannung, auch elektrische Potentialdifferenz, ist ein Maß für die elektrische potentielle Energie pro Ladungseinheit in einem elektrischen Stromkreis. Sie ist die Kraft, die den elektrischen Strom durch einen Leiter treibt. + +Hinweis: Die Spannung wird in Volt (V) gemessen und stellt die potenzielle Energiedifferenz zwischen zwei Punkten in einem Stromkreis dar. Je höher die Spannung ist, desto größer ist die Kraft, die die elektrischen Ladungen antreibt, und desto höher ist folglich auch das Potenzial für einen Stromfluss. + Voltage, also known as electric potential difference, is a measure of the electric potential energy per unit charge in an electrical circuit. It is the force or pressure that drives electric current through a conductor. + +Note: Voltage is measured in volts (V), and it represents the potential energy difference between two points in a circuit. The higher the voltage, the greater the force pushing the electric charges, and consequently, the higher the potential for current to flow. + ChatGPT 3.5 + + + + + + + + + + + Volume + Volumen + Die Menge an Raum, die ein Stoff oder Gegenstand einnimmt. + The amount of space that a substance or object occupies. + ChatGPT 3.5 + + + + + + + + + + Die Wartezeit wird häufig genutzt, um die Probe zu stabilisieren oder um die Beschädigung der Probe zu minimieren. + The wait time is often used to allow the specimen to stabilize or to minimize sample damage. + + Wait Time + Wartezeit + Das Zeitintervall zwischen aufeinander folgenden Messungen oder Operationen in einem Elektronenmikroskop. + The time interval between successive measurements or operations in an electron microscope. + ChatGPT 3.5 + + + + + + + + + + Der Arbeitsabstand wirkt sich auf die Tiefenschärfe und die Auflösung des Bildes aus. + The working distance affects the depth of field and the resolution of the image. + + Arbeitsabstand + Working Distance + Der Abstand zwischen der Objektivlinse des Elektronenmikroskops und der Probenoberfläche, wenn der Elektronenstrahl auf die Probe fokussiert wird. + The distance between the electron microscope objective lens and the specimen surface when the electron beam is focused on the specimen. + ChatGPT 3.5 + + + + + + + + + + + Röntgenabsorptionsspektroskopie im Nahbereich + X-ray Absorption Near Edge Spectroscopy + X-ray Absorption Near Edge Spectroscopy (XANES) is a specialized technique used in the field of materials science and spectroscopy to study the electronic and structural properties of materials. It focuses on the X-ray absorption spectra of atoms within a sample, particularly the region just above the absorption edge of an element's X-ray absorption spectrum. +In XANES, a sample is irradiated with X-rays, typically generated by a synchrotron radiation source. These X-rays are tuned to specific energy levels corresponding to the absorption edges of the elements of interest in the sample. As the X-rays are absorbed by the sample, the energy levels of the atoms are altered, leading to various transitions in their electron configurations. The resulting X-ray absorption spectrum is measured, specifically targeting the energies just above the absorption edge. +XANES provides information about the electronic structure of the atoms within the sample, including the oxidation state, chemical bonding, and local environment of the absorbing element. The fine details of the XANES spectrum offer insights into the atomic and molecular interactions, as well as the coordination and symmetry of atoms in different chemical environments. +This technique is widely used in various scientific fields, including chemistry, solid-state physics, and materials science. XANES helps researchers understand the properties and behavior of materials at the atomic level, making it an invaluable tool for investigating the characteristics of complex materials, catalysts, minerals, and biomolecules. + ChatGPT 3.5 + XANES + + + + + + + + + + + Röntgenabsorptionsspektroskopie + X-ray Absorption Spectroscopy + X-ray Absorption Spectroscopy is a technique used to study the electronic and local structural properties of materials by analyzing the absorption of X-rays. It involves measuring how X-rays are absorbed by a sample at various energies, providing insights into the electronic states and chemical environments of specific elements. + ChatGPT 3.5 + XAS + + + + + + + + + + + Röntgenanalyse + X-ray Analysis + X-ray analysis is a technique used to investigate the composition and structure of materials by exposing them to X-rays. When X-rays interact with a material, they can be absorbed, scattered, or diffracted in ways that provide information about the material's internal arrangement of atoms and its elemental composition. + ChatGPT 3.5 + + + + + + + + + + + X-ray Diffraction + Röntgenstrahlbeugung + X-ray Diffraction is a technique that utilizes the diffraction of X-rays by crystals to determine their atomic arrangement and lattice structure. X-ray diffraction patterns are produced when X-rays strike a crystalline sample, and the resulting pattern provides information about the arrangement of atoms in the crystal lattice. + Röntgenbeugung + ChatGPT 3.5 + XRD + + + + + + + + + + + Röntgenfluoreszenz + X-ray Fluorescence + X-ray Fluorescence is a method used to determine the elemental composition of a sample by analyzing the X-rays emitted when the sample is exposed to high-energy X-rays. The X-rays emitted are characteristic of the elements present, allowing for quantitative analysis of the sample's elemental composition. + ChatGPT 3.5 + XRF + + + + + + + + + + + Röntgen-Mapping + X-ray Mapping + X-ray mapping is a process that involves generating spatially resolved images of the distribution of specific elements within a sample. By collecting X-ray signals emitted or scattered from a sample at different points, an elemental map can be created, showing the varying concentrations of elements across the sample's surface. + ChatGPT 3.5 + + + + + + + + + + + Röntgen-Mikroanalyse + X-ray Microanalysis + X-ray Microanalysis is a technique that combines microscopy and X-ray analysis to study the elemental composition of small regions within a sample. It involves focusing an electron or X-ray beam on a specific area of the sample and measuring the X-rays emitted from that area to determine the elemental composition. + ChatGPT 3.5 + + + + + + + + + + + Röntgenphotoelektronenspektroskopie + X-ray Photoelectron Spectroscopy + X-ray Photoelectron Spectroscopy, also known as Electron Spectroscopy for Chemical Analysis (ESCA), is a technique used to study the surface chemistry of materials. XPS involves bombarding a sample's surface with X-rays to emit photoelectrons, which are then analyzed to determine the elemental composition and chemical states of the elements on the surface. + ChatGPT 3.5 + XPS + + + + + + + + + + + Dreidimensionale Rekonstruktion + Three dimensional reconstruction + Der Prozess der Erstellung einer dreidimensionalen Darstellung eines Objekts oder einer Szene aus zweidimensionalen Bildern oder Daten. + The process of creating a three-dimensional representation of an object or scene from two-dimensional images or data. + ChatGPT 3.5 + + + + + + + + + + + 4D Scanning Transmission Electron Microscopy + 4D-Rastertransmissionselektronenmikroskopie + 4D-STEM is a technique that adds an additional dimension of information, time, to STEM imaging, allowing the study of dynamic processes in materials at high spatial and temporal resolutions. + ChatGPT 3.5 + 4D-STEM + + + + + + + + diff --git a/mo/ontology.ttl b/mo/ontology.ttl new file mode 100644 index 0000000..b7426c5 --- /dev/null +++ b/mo/ontology.ttl @@ -0,0 +1,1682 @@ +@prefix : . +@prefix owl: . +@prefix rdf: . +@prefix xml: . +@prefix xsd: . +@prefix rdfs: . +@base . + + rdf:type owl:Ontology ; + owl:versionIRI ; + owl:imports ; + , + ; + ; + "Markus Schilling, Bernd Bayerlein, June Lau. (January 29th, 2024) MO: microscopy ontology. Version 1.0.0, https://w3id.org/pmd/mo/"@en ; + "Microscopy Ontology (MO)"@en ; + rdfs:isDefinedBy ; + """Die Mikroskopie-Ontologie (MO) ist ein umfassender Rahmen für die Darstellung von Wissen, der Konzepte aus den Bereichen Mikroskopie und Mikroanalyse umfasst. Die MO basiert semantisch auf der PMD-Kernontologie PMDco (die in MO importiert wird), um eine Verbindung zu anderen MSE-Anwendungsontologien und domänenneutralen Konzepten in etablierten Top-Level-Ontologien zu ermöglichen. Das Hauptziel von MO ist es, ein standardisiertes Vokabular und einen Rahmen für die Beschreibung und Organisation von Konzepten, Entitäten und Beziehungen im Bereich der Mikroskopie und Mikroanalyse bereitzustellen. Diese Standardisierung erleichtert die Kommunikation und Interoperabilität zwischen verschiedenen Systemen, Datenbanken und Forschungsgruppen. Um ein Vokabular zu erhalten, das in diesem Bereich relevant und daher standardisierungswürdig ist, wurde ein NLP-Ansatz angewandt, mit dessen Hilfe häufig verwendete Begriffe ermittelt wurden. Auf der Grundlage dieser Liste von Begriffen wurde dann die MO entwickelt. In der Mikroskopie und Mikroanalytik fallen große Datenmengen aus verschiedenen Techniken und Instrumenten an. Die MO kann dazu beitragen, heterogene Datenquellen zu integrieren und zu verknüpfen, so dass Daten aus verschiedenen Experimenten und Studien effektiver kombiniert und analysiert werden können. +Darüber hinaus dient die MO als Grundlage für die Annotation von Mikroskopie- und Mikroanalysedaten mit standardisierten Metadaten. Diese erweiterte Metadatenbeschreibung verbessert die Interpretierbarkeit, Durchsuchbarkeit und Wiederverwendbarkeit von Daten und fördert die Transparenz und Reproduzierbarkeit in der Forschung. Darüber hinaus kann die MO durch die Formalisierung des Wissens über Instrumente, Techniken, Materialien und Phänomene die Grundlage für maschinelles Denken zur Unterstützung der Dateninterpretation, Hypothesenbildung und Versuchsplanung bilden. +Insgesamt soll MO die Forschung voranbringen, die Zusammenarbeit fördern und den Wissensaustausch in diesem interdisziplinären Bereich erleichtern."""@de , + """The Microscopy Ontology (MO) is a comprehensive framework for representing knowledge that encompasses concepts from the domains of microscopy and microanalysis. The MO is semantically based on the mid-level PMD Core Ontology PMDco (which is imported in MO) to allow a connection to other MSE application ontologies and domain neutral concepts found in established top-level ontologies. The primary goal of MO is to provide a standardized vocabulary and framework for describing and organizing concepts, entities, and relationships within the field of microscopy and microanalysis. This standardization facilitates communication and interoperability between different systems, databases, and research groups. In order to obtain a vocabulary that is relevant in the field and therefore worth standardizing, an NLP approach was applied, with the help of which commonly used terms were determined. MO was then developed based on the respective list of terms. Microscopy and microanalysis generate vast amounts of data from various techniques and instruments. MO may help to integrate and link heterogeneous data sources, enabling the combination and analysis of data from different experiments and studies more effectively. Furthermore, MO serves as a basis for annotating microscopy and microanalysis data with standardized metadata. This improved metadata description enhances the interpretability, searchability, and reusability of data, promoting transparency and reproducibility in research. Moreover, by formalizing knowledge about instruments, techniques, materials, and phenomena, MO may provide the basis to enable machine reasoning to support data interpretation, hypothesis generation, and experimental design. +Overall, MO is intended to advance research, promoting collaboration, and facilitating knowledge exchange in this interdisciplinary domain."""@en . + +################################################################# +# Annotation properties +################################################################# + +### https://w3id.org/pmd/co/abbreviation + rdf:type owl:AnnotationProperty . + + +### https://w3id.org/pmd/mo/abbreviation + rdf:type owl:AnnotationProperty . + + +################################################################# +# Classes +################################################################# + +### https://w3id.org/pmd/mo/Aberration + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Aberration"@de , + "Aberration"@en ; + "Abweichung vom idealen oder erwarteten Verhalten, häufig im Zusammenhang mit optischen Systemen verwendet."@de , + "Deviation from the ideal or expected behavior, often used in the context of optical systems."@en ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/AccelerationVoltage + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:comment "Die Beschleunigungsspannung bestimmt die kinetische Energie der Elektronen und beeinflusst die Auflösung und die Eindringtiefe in die Probe."@de , + "The acceleration voltage determines the kinetic energy of the electrons and affects the resolution and depth of penetration in the sample."@en ; + rdfs:isDefinedBy ; + rdfs:label "Acceleration Voltage"@en , + "Beschleunigungsspannung"@de ; + "Diese Klasse beschreibt die Spannung, die an ein Elektronenmikroskop angelegt wird, um die von der Elektronenquelle (in der Regel eine Kathode) emittierten Elektronen auf die Probe zu beschleunigen."@de , + "This class decribes the voltage applied to an electron microscope to accelerate the electrons emitted from the electron source (usually a cathode) towards the specimen."@en ; + "ChatGPT 3.5" . + + +### https://w3id.org/pmd/mo/Angle + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:label , + "Angle"@en , + "Winkel"@de ; + """In der Geometrie und Trigonometrie ist ein Winkel ein Maß für eine Drehung, das erforderlich ist, um eine Linie oder Ebene mit einer anderen zur Deckung zu bringen. Ein Winkel wird durch zwei Strahlen gebildet, die einen gemeinsamen Endpunkt haben, der als Scheitelpunkt des Winkels bezeichnet wird. Die Strahlen werden als die Seiten des Winkels bezeichnet. + +Hinweis: Das Konzept des Winkels ist in der Geometrie von grundlegender Bedeutung und wird häufig verwendet, um die relative Ausrichtung von Linien, Ebenen oder Flächen zu beschreiben. Winkel werden in der Regel in Grad (°) oder Bogenmaß (rad) gemessen."""@de , + """In geometry and trigonometry, an angle is a measure of the amount of rotation needed to bring one line or plane into coincidence with another. An angle is formed by two rays that share a common endpoint, known as the vertex of the angle. The rays are referred to as the sides of the angle. + +Note: The concept of an angle is fundamental in geometry and is often used to describe the relative orientation of lines, planes, or surfaces. Angles are typically measured in degrees (°) or radians (rad)."""@en ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/AnnularBrightFieldScanningTransmissionElectronMicroscopy + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Annular Bright Field Scanning Transmission Electron Microscopy"@en , + "Ringförmige Hellfeld-Rastertransmissionselektronenmikroskopie"@de ; + "ABF STEM is a technique that utilizes a specific arrangement of detectors to enhance contrast in STEM images, particularly for heavy elements."@en ; + "ChatGPT 3.5"@en ; + "ABF-STEM"@en . + + +### https://w3id.org/pmd/mo/AnnularDarkFieldScanningTransmissionElectronMicroscopy + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Annular Dark Field Scanning Transmission Electron Microscopy"@en , + "Ringförmige Dunkelfeld-Rastertransmissionselektronenmikroskopie"@de ; + "ADF STEM is a technique that utilizes a specific arrangement of detectors to create contrast in STEM images based on the scattered electrons."@en ; + "ChatGPT 3.5"@en ; + "ADF-STEM"@en . + + +### https://w3id.org/pmd/mo/Anode + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Anode"@de , + "Anode"@en ; + "The anode is the positively charged electrode in an electrochemical cell or other electrically driven systems. It serves as the site where oxidation occurs, meaning electrons are released from the anode, typically moving towards the cathode. In devices like batteries, the anode is where electrons are produced during the discharge process."@en ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/AtmosphericScanningElectronMicroscopy + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Atmospheric Scanning Electron Microscopy"@en , + "Atmosphärische Rasterelektronenmikroskopie"@de ; + "Atmospheric Scanning Electron Microscopy is a technique that allows samples to be imaged in their natural, hydrated state at atmospheric pressure. It enables the observation of biological and other hydrated specimens without the need for dehydration or coating."@en ; + "ChatGPT 3.5"@en ; + "ASEM"@en . + + +### https://w3id.org/pmd/mo/AtomicResolution + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Atomare Auflösung"@de , + "Atomic Resolution"@en ; + "Die Fähigkeit, einzelne Atome in einem Bild oder einer Struktur aufzulösen."@de , + "The ability to resolve individual atoms in an image or structure."@en ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/AugerElectronSpectroscopy + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Auger Electron Spectroscopy"@en , + "Auger-Elektronen-Spektroskopie"@de ; + """Auger Electron Spectroscopy (AES) is a surface analysis technique used in the field of materials science and surface chemistry. It involves the study of the interactions between high-energy electrons and atoms on the surface of a material. The process is named after Pierre Auger, who made significant contributions to the understanding of this phenomenon. +In AES, a sample's surface is bombarded with a beam of high-energy electrons, which causes inner-shell electrons to be ejected from the atoms in the sample. These vacancies are then filled by higher-energy electrons from outer shells, leading to the emission of Auger electrons. The energy of these emitted Auger electrons is characteristic of the specific elements present in the sample and their chemical states. +By analyzing the energy spectrum of the emitted Auger electrons, researchers can identify the elements present on the surface of the material and determine their relative concentrations. Auger Electron Spectroscopy provides valuable information about the elemental composition and chemical bonding of the top few atomic layers of a material, making it a powerful tool for studying surface properties, thin films, and interfaces in various scientific and industrial applications."""@en ; + "ChatGPT 3.5"@en ; + "AES"@en . + + +### https://w3id.org/pmd/mo/Beam + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Beam"@en , + "Strahl"@de ; + "A stream of electrons emitted from the electron source and directed towards the specimen in an electron microscope."@en , + "Ein Strom von Elektronen, der von der Elektronenquelle emittiert und auf die Probe in einem Elektronenmikroskop gerichtet wird."@de ; + "ChatGPT 3.5" . + + +### https://w3id.org/pmd/mo/BeamCurrent + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Beam Current"@en , + "Strahlstrom"@de ; + "Die Intensität des Elektronenstrahls, gemessen als Anzahl der Elektronen, die eine bestimmte Fläche pro Zeiteinheit durchdringen."@de , + "The intensity of the electron beam, measured as the number of electrons passing through a given area per unit time."@en ; + "ChatGPT 3.5" . + + +### https://w3id.org/pmd/mo/BeamEnergy + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Beam Energy"@en , + "Strahlungsenergie"@de ; + "Die Energie eines Teilchen- oder Photonenstrahls, der in verschiedenen Analyseverfahren verwendet wird."@de , + "The energy of a particle or photon beam used in various analytical techniques."@en ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/BeamPath + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Beam Path"@en , + "Strahlengang"@de ; + "Strahlenweg"@de ; + "Die Flugbahn des Elektronenstrahls auf seinem Weg durch das Elektronenmikroskop von der Elektronenquelle zur Probe und dann zum Detektor."@de , + "The trajectory followed by the electron beam as it travels through the electron microscope, from the electron source to the specimen and then to the detector."@en ; + "ChatGPT 3.5" . + + +### https://w3id.org/pmd/mo/BrightFieldTransmissionElectronMicroscopy + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Bright Field Transmission Electron Microscopy"@en , + "Hellfeld-Transmissionselektronenmikroskopie"@de ; + "Bright Field TEM is an imaging mode in transmission electron microscopy where regions of the sample that scatter electrons less appear brighter in the resulting image."@en ; + "ChatGPT 3.5"@en ; + "BFTEM"@en . + + +### https://w3id.org/pmd/mo/CameraLength + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + "Der Abstand zwischen der Probe und der Kamera, die zur Aufnahme von Bildern in einem Elektronenmikroskop verwendet wird."@de , + "The distance between the specimen and the camera used to capture images in an electron microscope."@en ; + "Camera Length"@en , + "Kameralänge"@de , + "ChatGPT 3.5" . + + +### https://w3id.org/pmd/mo/Cathode + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Cathode"@en , + "Kathode"@de ; + "The cathode is the negatively charged electrode in an electrochemical cell or other electrical systems. It is the site where reduction occurs, leading to the acceptance of electrons from the external circuit. In batteries, for instance, the cathode is where electrons are consumed during the discharge process."@en ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/ChromaticAberration + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Chromatic Aberration"@en , + "Chromatische Aberration"@de ; + "Die Unfähigkeit eines Objektivs, alle Farben auf denselben Konvergenzpunkt zu fokussieren."@de , + "The failure of a lens to focus all colors to the same convergence point."@en ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/CoherentBeam + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Coherent Beam"@en , + "Kohärenter Strahl"@de ; + "An electron beam in which the individual electrons maintain a constant phase relationship with each other, resulting in interference patterns when interacting with a sample."@en , + "Ein Elektronenstrahl, bei dem die einzelnen Elektronen eine konstante Phasenbeziehung zueinander haben, was bei der Wechselwirkung mit einer Probe zu Interferenzmustern führt."@de ; + "ChatGPT 3.5" . + + +### https://w3id.org/pmd/mo/CollectionEfficiency + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Collection Efficiency"@en , + "Kollektoreffizienz"@de ; + "Die Fähigkeit eines Detektors oder Systems, relevante Signale oder Daten zu erfassen und aufzuzeichnen."@de , + "The ability of a detector or system to capture and record relevant signals or data."@en ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/CondensorLense + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Condensor Lense"@en , + "Kondensorlinse"@de ; + "A condenser lens is an optical element used in microscopy and other optical systems to focus and control the illumination on the sample being observed. It is positioned below the light source and directs light rays onto the specimen, making the illumination uniform and optimizing the quality of the sample's image. The condenser lens helps enhance contrast, resolution, and overall image quality by ensuring that a consistent and concentrated light beam illuminates the specimen."@en ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/ConfocalLaserScanningMicroscopy + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Confocal Laser Scanning Microscopy"@en , + "Konfokale Laser-Scanning-Mikroskopie"@de ; + "Confocal Laser Scanning Microscopy (CLSM) is an optical imaging technique that enhances resolution and eliminates out-of-focus blur by using a spatial pinhole and laser illumination. A focused laser beam is scanned across the sample's surface or depth, and only the light emitted from the focal plane (or a defined section) passes through the pinhole to form an image. CLSM provides high-resolution three-dimensional images, making it popular for biological imaging and studying fluorescently labeled samples."@en ; + "ChatGPT 3.5"@en ; + "CLSM"@en . + + +### https://w3id.org/pmd/mo/ConvergenceAngle + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:comment "Der Konvergenzwinkel beeinflusst die Schärfentiefe und die Auflösung des Bildes."@de , + "The convergence angle affects the depth of field and resolution of the image."@en ; + rdfs:isDefinedBy ; + rdfs:label "Convergence Angle"@en , + "Konvergenzwinkel"@de ; + "Der Winkel, in dem der Elektronenstrahl in einem Elektronenmikroskop auf die Probe trifft."@de , + "The angle at which the electron beam converges onto the specimen in an electron microscope."@en ; + "ChatGPT 3.5" . + + +### https://w3id.org/pmd/mo/Cryo-ScanningElectronMicroscope + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:comment "A cryo-scanning electron microscope is typically used for imaging biological samples."@en , + "Ein Kryo-Rasterelektronenmikroskop wird in der Regel zur Abbildung biologischer Proben verwendet."@de , + "Eine Art Elektronenmikroskop, das bei kryogenen Temperaturen arbeitet."@de ; + rdfs:isDefinedBy ; + rdfs:label "Cryo Scanning Electron Microscope"@en , + "Kryo-Rasterelektronenmikroskop"@de , + "cryo-SEM"@en ; + "A type of electron microscope that operates under cryogenic temperatures."@en ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/CryoElectronTomography + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Cryo Electron Tomography"@en , + "Kryo-Elektronentomographie"@de ; + "Cryo Electron Tomography is a form of electron tomography that is performed at cryogenic temperatures. It is used to study the three-dimensional structure of frozen-hydrated samples."@en ; + "ChatGPT 3.5"@en ; + "cryo-ET"@en . + + +### https://w3id.org/pmd/mo/CryoTransmissionElectronMicroscope + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Cryo Transmission Electron Microscope"@en , + "Kryo-Transmissionselektronenmikroskop"@de ; + "A transmission electron microscope that operates at cryogenic temperatures."@en , + "Ein Transmissionselektronenmikroskop, das bei kryogenen Temperaturen arbeitet."@de ; + "ChatGPT 3.5"@en ; + "cryo-TEM"@en . + + +### https://w3id.org/pmd/mo/Current + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:comment "Der Strom wird normalerweise in Ampere (A) gemessen."@de , + "The current is typically measured in amperes (A)."@en ; + rdfs:isDefinedBy ; + rdfs:label "Current"@en , + "Strom"@de ; + "Stromstärke"@de ; + "Der Fluss der elektrischen Ladung."@de , + "The flow of electric charge."@en ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/DetectorQuantumEfficiency + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Detector Quantum Efficiency"@en , + "Detektor Quantenausbeute"@de ; + "Die Effizienz, mit der ein Detektor einfallende Strahlung in Nutzsignale umwandelt."@de , + "The efficiency with which a detector converts incident radiation into useful signals."@en ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/Diffraction + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Diffraction"@en , + "Diffraktion"@de ; + "Beugung"@de , + "Scattering"@en ; + "Die Biegung von Elektronenwellen beim Durchgang durch eine kristalline Probe, was zur Bildung von Beugungsmustern führt, die Informationen über die Kristallstruktur liefern."@de , + "The bending of electron waves as they pass through a crystalline sample, resulting in the formation of diffraction patterns that provide information about the crystal structure."@en ; + "ChatGPT 3.5" . + + +### https://w3id.org/pmd/mo/DiffractionPattern + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Beugungsmuster"@de , + "Diffraction Pattern"@en ; + "Das Muster von Flecken oder Banden, das auf einem Detektor entsteht, wenn Elektronen nach der Wechselwirkung mit einer kristallinen Probe gebeugt werden."@de , + "The pattern of spots or bands produced on a detector when electrons diffract after interacting with a crystalline sample."@en ; + "ChatGPT 3.5" . + + +### https://w3id.org/pmd/mo/DiskOfLeastConfusion + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Disk Of Least Confusion"@en , + "Scheibe der geringsten Konfusion"@de ; + "Der Bereich in der Bildebene eines Elektronenmikroskops, in dem der Elektronenstrahl auf die kleinste Punktgröße fokussiert wird, wodurch die durch sphärische Aberration verursachte Unschärfe minimiert wird."@de , + "The region in the image plane of an electron microscope where the electron beam is focused to the smallest spot size, minimizing the blurring effect due to spherical aberration."@en ; + "ChatGPT 3.5" . + + +### https://w3id.org/pmd/mo/DwellTime + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Dwell Time"@en , + "Verweilzeit"@de ; + "Verweildauer"@de ; + "Die Zeitspanne, in der der Elektronenstrahl während der Bildgebung oder Analyse auf einen bestimmten Punkt oder einen interessierenden Bereich der Probe fokussiert wird."@de , + "The amount of time that the electron beam is focused on a specific point or region of interest on the specimen during imaging or analysis."@en ; + "ChatGPT 3.5" . + + +### https://w3id.org/pmd/mo/DynamicFocusCorrection + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Dynamic Focus Correction"@en , + "Dynamische Fokuskorrektur"@de ; + "A technique used in electron microscopy to continuously adjust the focus of the electron beam in real-time to maintain optimal image quality, especially when imaging uneven or rough surfaces."@en , + "Eine Technik, die in der Elektronenmikroskopie eingesetzt wird, um den Fokus des Elektronenstrahls kontinuierlich in Echtzeit anzupassen und so eine optimale Bildqualität zu erhalten, insbesondere bei der Abbildung unebener oder rauer Oberflächen."@de ; + "ChatGPT 3.5" . + + +### https://w3id.org/pmd/mo/DynamicRefocusing + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Dynamic Refocusing"@en , + "Dynamische Refokussierung"@de ; + "Der Prozess, bei dem der Fokus des Elektronenstrahls während der Bildgebung angepasst wird, um Änderungen der Probenhöhe oder -topografie zu kompensieren und sicherzustellen, dass die gesamte Probe im Fokus bleibt."@de , + "The process of adjusting the focus of the electron beam during imaging to compensate for changes in the specimen height or topography, ensuring that the entire specimen remains in focus."@en ; + "ChatGPT 3.5" . + + +### https://w3id.org/pmd/mo/DynamicTransmissionElectronMicroscopy + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Dynamic Transmission Electron Microscopy"@en , + "Dynamische Transmissionselektronenmikroskopie"@de ; + "Dynamic Transmission Electron Microscopy is a technique that uses ultrafast electron pulses to capture rapid processes in materials with nanosecond to picosecond time resolution."@en ; + "ChatGPT 3.5"@en ; + "DTEM"@en . + + +### https://w3id.org/pmd/mo/Efficiency + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Efficiency"@en , + "Effizienz"@de ; + "Das Verhältnis von nützlichem / nutzbarem Output zum gesamten Input in einem System."@de , + "The ratio of useful output to total input in any system."@en ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/Electrode + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Electrode"@en , + "Elektrode"@de ; + "An electrode is a conductor through which electric current enters or exits a substance. In the context of electrochemical systems, an electrode facilitates the transfer of electrons between a solid material and an electrolyte. Electrodes are essential components in batteries, fuel cells, electroplating, and other electrochemical processes. They play a critical role in facilitating chemical reactions and energy storage or conversion."@en ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/ElectronBackscatterDiffraction + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Electron Backscatter Diffraction"@en , + "Rückstreuelektronenbeugung"@de ; + "Electron Backscatter Diffraction is a microscopy technique used to analyze the crystallographic orientation and microstructure of materials. It involves directing an electron beam onto a sample's surface and measuring the backscattered electrons. By analyzing the diffraction patterns of these electrons, researchers can determine the crystallographic orientation of the material's grains."@en ; + "ChatGPT 3.5"@en ; + "EBSD"@en . + + +### https://w3id.org/pmd/mo/ElectronBeam + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Electron Beam"@en , + "Elektronenstrahl"@de ; + "A stream of electrons emitted from an electron source and accelerated towards the specimen in an electron microscope for imaging or analysis."@en , + "Ein Strom von Elektronen, der von einer Elektronenquelle emittiert und in einem Elektronenmikroskop zur Abbildung oder Analyse auf die Probe beschleunigt wird."@de ; + "ChatGPT 3.5" . + + +### https://w3id.org/pmd/mo/ElectronChannelingContrastImaging + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Electron Channeling Contrast Imaging"@en , + "Elektronenkanal-Kontrastbildgebung"@de ; + "Electron Channeling Contrast Imaging is a technique used in SEM or TEM to study crystallographic defects, such as dislocations, in crystalline materials. It utilizes the contrast resulting from the deviation of electron trajectories due to crystal defects."@en ; + "ChatGPT 3.5"@en ; + "ECCI"@en . + + +### https://w3id.org/pmd/mo/ElectronDiffraction + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Electron Diffraction"@en , + "Elektronenbeugung"@de ; + "Das Phänomen der Beugung von Elektronenwellen beim Durchgang durch eine kristalline Probe, das Informationen über die Kristallstruktur liefert."@de , + "The phenomenon of electron waves diffracting as they pass through a crystalline sample, providing information about the crystal structure."@en ; + "ChatGPT 3.5" . + + +### https://w3id.org/pmd/mo/ElectronDiffractionPattern + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Electron Diffraction Pattern"@en , + "Elektronenbeugungsmuster"@de ; + "Das Muster von Flecken oder Ringen, das auf einem Detektor entsteht, wenn Elektronen nach der Wechselwirkung mit einer kristallinen Probe gebeugt werden, und das zur Bestimmung der Kristallstruktur verwendet wird."@de , + "The pattern of spots or rings produced on a detector when electrons diffract after interacting with a crystalline sample, used to determine the crystal structure."@en ; + "ChatGPT 3.5" . + + +### https://w3id.org/pmd/mo/ElectronEnergyLossSpectroscopy + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Electron Energy Loss Spectroscopy"@en , + "Elektronenenergieverlustspektroskopie"@de ; + """Electron Energy Loss Spectroscopy (EELS) is a specialized analytical technique in the field of materials science and electron microscopy. It involves the measurement of the energy loss of electrons as they interact with a sample. EELS is commonly performed in transmission electron microscopy (TEM) setups. +In EELS, a focused beam of high-energy electrons is directed at a sample. As these electrons pass through the material, they can lose energy through various interactions, such as inelastic scattering and excitation of inner-shell electrons. The energy loss is measured and analyzed to gain information about the sample's composition, electronic structure, and bonding characteristics. +By studying the energy loss spectrum, researchers can identify the types of atoms present in the sample, determine their chemical states, and gather insights into the electronic properties of the material. EELS is particularly useful for investigating nanoscale materials, thin films, and interfaces, providing valuable information about their electronic and atomic structure. It is a powerful technique for understanding the behavior of materials at the nanometer scale and plays a significant role in advancing fields such as materials science, nanotechnology, and semiconductor research."""@en ; + "ChatGPT 3.5"@en ; + "EELS"@en . + + +### https://w3id.org/pmd/mo/ElectronMicroprobe + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Electron Microprobe"@en , + "Elektronenmikrosonde"@de ; + "An analytical instrument used to determine the chemical composition of materials."@en , + "Ein Analyseinstrument zur Bestimmung der chemischen Zusammensetzung von Materialien."@de ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/ElectronProbe + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Electron Probe"@en , + "Elektronensonde"@de ; + "Der fokussierte Elektronenstrahl, der zur Abbildung oder Analyse in einem Elektronenmikroskop verwendet wird."@de , + "The focused electron beam used for imaging or analysis in an electron microscope."@en ; + "ChatGPT 3.5" . + + +### https://w3id.org/pmd/mo/ElectronProbeMicroAnalyzer + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Electron Probe Micro Analyzer"@en , + "Elektronensonden-Mikro-Analysator"@de ; + "An instrument used for elemental analysis of solid materials by bombarding them with a focused electron beam."@en , + "Ein Instrument zur Elementaranalyse fester Materialien durch Beschuss mit einem fokussierten Elektronenstrahl."@de ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/ElectronTomograph + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Electron Tomograph"@en , + "Elektronentomograph"@de ; + "An instrument used for tomographic imaging using electrons."@en , + "Ein Instrument für die tomografische Bildgebung mit Elektronen."@de ; + "ChatGPT 3.5"@en ; + "ET"@en . + + +### https://w3id.org/pmd/mo/ElectronTomography + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Electron Tomography"@en , + "Elektronentomographie"@de ; + "Electron Tomography is a technique that involves collecting a series of transmission electron microscopy (TEM) images from different angles to reconstruct a three-dimensional image of a sample."@en ; + "ChatGPT 3.5"@en ; + "ET"@en . + + +### https://w3id.org/pmd/mo/EmissionCurrent + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:comment "Der Emissionsstrom wird normalerweise in Mikroampere (μA) oder Milliampere (mA) gemessen."@de , + "The emission current usually measured in microamperes (μA) or milliamperes (mA)." ; + rdfs:isDefinedBy ; + rdfs:label "Emission Current"@en , + "Emissionsstrom"@de ; + "Der Strom der von der Elektronenquelle emittierten Elektronen."@de , + "The current of electrons emitted from the electron source."@en ; + "ChatGPT 3.5" . + + +### https://w3id.org/pmd/mo/Energy + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:comment "Die Energie wird üblicherweise in Joule (J) oder Elektronenvolt (eV) gemessen."@de , + "The energy is usually measured in joules (J) or electron volts (eV)."@en ; + rdfs:isDefinedBy ; + rdfs:label "Energie"@de , + "Energy"@en ; + "Die Fähigkeit eines physischen Systems, Arbeit zu verrichten."@de , + "The capacity of a physical system to perform work."@en ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/EnergyDispersiveXRaySpectroscopy + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Energy Dispersive X-ray Spectroscopy"@en ; + "energiedispersive Röntgenmikroanalyse"@de ; + "Energy Dispersive X-ray Spectroscopy is a technique used to analyze the elemental composition of a sample by detecting the X-rays emitted when the sample is bombarded with electrons in an electron microscope or other instrument. EDS provides information about the elements present in the sample and their relative concentrations."@en ; + "energiedispersive Röntgenanalyse"@de ; + "ChatGPT 3.5"@en ; + "EDS"@en , + "EDX"@en , + "XEDS"@en . + + +### https://w3id.org/pmd/mo/EnergyFilteredTransmissionElectronMicroscope + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Energiegefiltertes Transmissionselektronenmikroskop"@de , + "Energy-filtered Transmission Electron Microscope"@en ; + "A transmission electron microscope equipped with an energy filter to select electrons of specific energy levels."@en , + "Ein Transmissionselektronenmikroskop, das mit einem Energiefilter ausgestattet ist, um Elektronen bestimmter Energieniveaus zu selektieren."@de ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/EnergyLoss + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Energieverlust"@de , + "Energy Loss"@en ; + "Der Energieverlust, den ein Teilchen beim Durchgang durch ein Medium erfährt."@de , + "The loss of energy experienced by a particle as it passes through a medium."@en ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/EnergyResolution + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Energieauflösung"@de , + "Energy Resolution"@en ; + "Die Fähigkeit eines Detektors, zwischen verschiedenen Energieniveaus der einfallenden Strahlung zu unterscheiden."@de , + "The ability of a detector to distinguish between different energy levels of incident radiation."@en ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/EnvironmentalScanningElectronMicroscope + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Environmental Scanning Electron Microscope"@en , + "Umwelt-Rasterelektronenmikroskop"@de ; + "A type of electron microscope that can image non-conductive samples in their natural state."@en , + "Eine Art Elektronenmikroskop, das nicht leitende Proben in ihrem natürlichen Zustand abbilden kann."@de ; + "ChatGPT 3.5"@en ; + "ESEM"@en . + + +### https://w3id.org/pmd/mo/EnvironmentalScanningElectronMicroscopy + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Environmental Scanning Electron Microscopy"@en , + "Umgebungs-Rasterelektronenmikroskopie"@de ; + "Environmental Scanning Electron Microscopy is a technique that allows imaging of samples in a gaseous environment. It is particularly useful for observing hydrated or non-conductive samples without the need for extensive sample preparation."@en ; + "ChatGPT 3.5"@en ; + "ESEM"@en . + + +### https://w3id.org/pmd/mo/EnvironmentalTransmissionElectronMicroscopy + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Environmental Transmission Electron Microscopy"@en , + "Umgebungs-Transmissionselektronenmikroskopie"@de ; + "Environmental Transmission Electron Microscopy allows imaging and analysis of materials in controlled gaseous environments, simulating real-world conditions."@en ; + "ChatGPT 3.5"@en ; + "ETEM"@en . + + +### https://w3id.org/pmd/mo/ExtractionVoltage + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Extraction Voltage"@en , + "Extraktionsspannung"@de ; + "Die Spannung, die an die Elektronenquelle in einem Elektronenmikroskop angelegt wird, um Elektronen aus der Kathode zu extrahieren und sie auf die Probe zu beschleunigen."@de , + "The voltage applied to the electron source in an electron microscope to extract electrons from the cathode and accelerate them towards the specimen."@en ; + "ChatGPT 3.5" . + + +### https://w3id.org/pmd/mo/FieldEmissionGun + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Feldemissionskanone"@de , + "Field Emission Gun"@en ; + "A Field Emission Gun is an electron gun used in electron microscopes to produce an electron beam with extremely high brightness and coherence. It relies on the phenomenon of field emission, where electrons are emitted from a sharp emitter tip under the influence of a strong electric field. FEGs are capable of producing highly focused electron beams, leading to enhanced imaging resolution and analytical capabilities."@en ; + "ChatGPT 3.5"@en ; + "FEG"@en . + + +### https://w3id.org/pmd/mo/FieldEmissionScanningElectronMicroscopy + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Feldemissions-Rasterelektronenmikroskopie"@de , + "Field Emission Scanning Electron Microscopy"@en ; + "Field Emission Scanning Electron Microscopy is an advanced form of SEM that uses a field emitter to produce a highly focused electron beam, enabling high-resolution imaging and surface analysis."@en ; + "ChatGPT 3.5"@en ; + "FESEM"@en . + + +### https://w3id.org/pmd/mo/FieldIonMicroscope + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Feldionenmikroskop"@de , + "Field Ion Microscope"@en ; + "A type of microscope that uses the phenomenon of field ionization to image surfaces with atomic resolution."@en , + "Ein Mikroskoptyp, der das Phänomen der Feldionisation nutzt, um Oberflächen mit atomarer Auflösung abzubilden."@de ; + "ChatGPT 3.5"@en ; + "FIM"@en . + + +### https://w3id.org/pmd/mo/FieldIonMicroscopy + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Feldionenmikroskopie"@de , + "Field Ion Microscopy"@en ; + "Field Ion Microscopy is a specialized microscopy technique that uses a strong electric field to ionize atoms on the surface of a metal sample. These ionized atoms are then repelled from the surface and can be detected to create an image of the sample's surface topography at atomic resolution. FIM is especially powerful for imaging the arrangement of atoms on metallic surfaces."@en ; + "ChatGPT 3.5"@en ; + "FIM"@en . + + +### https://w3id.org/pmd/mo/FilamentCurrent + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Filament Current"@en , + "Glühfadenstrom"@de ; + "Der Strom, der durch den Glühfaden der Elektronenkanone in einem Elektronenmikroskop fließt und den Glühfaden erhitzt, um Elektronen zu emittieren."@de , + "The current passing through the filament of the electron gun in an electron microscope, which heats up the filament to emit electrons."@en ; + "ChatGPT 3.5" . + + +### https://w3id.org/pmd/mo/FluorescenceMicroscopy + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Fluorescence Microscopy"@en , + "Fluoreszenzmikroskopie"@de ; + "Fluorescence Microscopy is an optical imaging technique used to visualize biological structures and molecules that fluoresce when illuminated with specific wavelengths of light. Fluorescent molecules absorb light energy and then emit light of a longer wavelength, allowing the visualization of specific molecules or cellular components. Fluorescence microscopy is widely used in cell biology, molecular biology, and medical research."@en ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/FlybackTime + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Flyback Time"@en , + "Rücklaufzeit"@de ; + "Die Zeit, die der Elektronenstrahl benötigt, um nach dem Abtasten einer Zeile oder eines Bildes in einem Elektronenmikroskop in seine Ausgangsposition zurückzukehren."@de , + "The time taken for the electron beam to return to its starting position after scanning a line or frame in an electron microscope."@en ; + "ChatGPT 3.5" . + + +### https://w3id.org/pmd/mo/FocalLength + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Brennweite"@de , + "Focal Length"@en ; + "Der Abstand zwischen dem Brennpunkt (wo der Elektronenstrahl fokussiert wird) und der Linse oder Blende in einem Elektronenmikroskop."@de , + "The distance between the focal point (where the electron beam is focused) and the lens or aperture in an electron microscope."@en ; + "ChatGPT 3.5" . + + +### https://w3id.org/pmd/mo/FocalPlane + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Brennebene"@de , + "Focal Plane"@en ; + "Die Ebene senkrecht zur optischen Achse eines Elektronenmikroskops, in der der Elektronenstrahl fokussiert wird, um ein Bild zu erzeugen."@de , + "The plane perpendicular to the optical axis of an electron microscope where the electron beam is focused to form an image."@en ; + "ChatGPT 3.5" . + + +### https://w3id.org/pmd/mo/FocalPoint + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Brennpunkt"@de , + "Focal Point"@en ; + "Der Punkt, an dem der Elektronenstrahl in einem Elektronenmikroskop fokussiert wird, um ein Bild der Probe zu erzeugen."@de , + "The point at which the electron beam is focused in an electron microscope to form an image of the specimen."@en ; + "ChatGPT 3.5" . + + +### https://w3id.org/pmd/mo/FocusedBeam + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Focused Beam"@en , + "Fokussierter Strahl"@de ; + "An electron beam that has been narrowed or focused to a small spot size on the specimen surface."@en , + "Ein Elektronenstrahl, der auf einen kleinen Punkt auf der Probenoberfläche eingeengt oder fokussiert wurde."@de ; + "ChatGPT 3.5" . + + +### https://w3id.org/pmd/mo/FocusedIonBeam-ScanningElectronMicroscope + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Focus(ed) Ion Beam - Scanning Electron Microscope"@en , + "Fokussierter Ionenstrahl - Rasterelektronenmikroskop"@de ; + "A dual-beam microscope that combines a focused ion beam with a scanning electron microscope."@en , + "Ein Zweistrahlmikroskop, das einen fokussierten Ionenstrahl mit einem Rasterelektronenmikroskop kombiniert."@de ; + "ChatGPT 3.5"@en ; + "FIB-SEM"@en . + + +### https://w3id.org/pmd/mo/FocusedIonBeamScanningElectronMicroscopy + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Focused Ion Beam Scanning Electron Microscopy"@en , + "Fokussierte Ionenstrahl-Rasterelektronenmikroskopie"@de ; + "Focused Ion Beam Scanning Electron Microscopy is a combination of two techniques: focused ion beam (FIB) and scanning electron microscopy (SEM). FIB-SEM systems use a focused ion beam to both image and modify a sample's surface. The ion beam can be used for milling, cutting, and deposition processes, making FIB-SEM a versatile tool for materials analysis, sample preparation, and three-dimensional imaging."@en ; + "ChatGPT 3.5"@en ; + "FIB-SEM"@en . + + +### https://w3id.org/pmd/mo/FourierTransformInfraredSpectroscopy + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Fourier Transform Infrared Spectroscopy"@en , + "Fourier-Transformations-Infrarotspektroskopie"@de ; + """Fourier Transform Infrared Spectroscopy (FTIR) is a powerful analytical technique used in various scientific disciplines to study the molecular composition and properties of materials. It is based on the interaction between infrared radiation and a sample, providing information about the vibrational modes of molecules. +In FTIR spectroscopy, an infrared beam is directed through a sample, and the interaction between the radiation and the sample's molecules leads to absorption of specific infrared frequencies. Each type of molecular bond and functional group in the sample absorbs infrared radiation at characteristic frequencies, which correspond to the energies of molecular vibrations. The resulting absorption spectrum represents a fingerprint of the sample's molecular structure. +The Fourier transform technique is used to convert the raw data obtained from the absorption measurements into a Fourier-transformed spectrum. This transformation improves the signal-to-noise ratio and enhances the accuracy of spectral analysis. +FTIR is extensively used in a wide range of fields, including chemistry, biology, materials science, pharmaceuticals, and environmental science. It is employed for qualitative and quantitative analysis, identification of compounds, monitoring chemical reactions, and studying molecular interactions. FTIR spectroscopy provides valuable insights into molecular bonding, functional groups, and the chemical composition of substances, making it an indispensable tool in modern analytical science."""@en ; + "ChatGPT 3.5"@en ; + "FTIR"@en . + + +### https://w3id.org/pmd/mo/FrameTime + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Frame Time"@en , + "Rahmenscanzeit"@de ; + "Die Zeit, die benötigt wird, um ein Einzelbild in einem Elektronenmikroskop aufzunehmen und anzuzeigen."@de , + "The time required to capture and display a single frame of an image in an electron microscope."@en ; + "ChatGPT 3.5" . + + +### https://w3id.org/pmd/mo/GatanImageFilter + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Gatan Abbildungsfilter"@de , + "Gatan Image Filter"@en ; + "A Gatan Image Filter refers to an image filter manufactured by Gatan, Inc., a company specializing in electron microscopy and related products. Gatan's image filters are designed for electron microscopes and electron energy loss spectroscopy (EELS) applications. These filters allow researchers to control and enhance the acquisition of electron energy loss spectra while obtaining high-resolution images of the sample under investigation."@en ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/Gun + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Gun"@en , + "Kanone"@de ; + "In the context of electron microscopy and particle acceleration, a \"gun\" typically refers to an electron or particle source that generates and emits the particles. In electron microscopy, an electron gun is used to generate a beam of electrons for imaging or analysis. In particle accelerators, a particle gun generates and launches particles at high speeds for various experimental purposes."@en ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/HeliumIonMicroscope + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Helium Ion Microscope"@en , + "Helium-Ionen-Mikroskop"@de ; + "A type of microscope that uses helium ions to image samples with high resolution."@en , + "Eine Art Mikroskop, das Helium-Ionen verwendet, um Proben mit hoher Auflösung abzubilden."@de ; + "ChatGPT 3.5"@en ; + "HIM"@en . + + +### https://w3id.org/pmd/mo/HeliumIonMicroscopy + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Helium Ion Microscopy"@en , + "Helium-Ionen-Mikroskopie"@de ; + "Helium Ion Microscopy is a microscopy technique that uses a beam of helium ions instead of electrons to interact with a sample's surface. The smaller mass of helium ions compared to electrons allows for higher resolution imaging and reduced sample damage. HIM provides high-resolution images and is often used for imaging delicate or sensitive samples."@en ; + "ChatGPT 3.5"@en ; + "HIM"@en . + + +### https://w3id.org/pmd/mo/HighAngleAnnularDarkFieldScanningTransmissionElectronMicroscope + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "High-angle Annular Dark-field Scanning Transmission Electron Microscope"@en , + "Hochwinkel-Dunkelfeld-Rastertransmissionselektronenmikroskop mit annularem Winkel"@de ; + "A type of scanning transmission electron microscope that detects scattered electrons at high angles."@en , + "Eine Art Rastertransmissionselektronenmikroskop, das gestreute Elektronen in hohen Winkeln erkennt."@de ; + "ChatGPT 3.5"@en ; + "HAADF-STEM"@en . + + +### https://w3id.org/pmd/mo/HighResolutionTransmissionElectronMicroscope + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "High Resolution Transmission Electron Microscope"@en , + "Hochauflösendes Transmissionselektronenmikroskop"@de ; + "A transmission electron microscope capable of achieving high-resolution images."@en , + "Ein Transmissionselektronenmikroskop, das hochauflösende Bilder liefert."@de ; + "ChatGPT 3.5"@en ; + "HRTEM"@en . + + +### https://w3id.org/pmd/mo/HighResolutionTransmissionElectronMicroscopy + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "High Resolution Transmission Electron Microscopy"@en , + "Hochauflösende Transmissionselektronenmikroskopie"@de ; + "High Resolution TEM is a technique that provides exceptionally high-resolution images of a sample's internal structure, revealing atomic-level details."@en ; + "ChatGPT 3.5"@en ; + "HRTEM"@en . + + +### https://w3id.org/pmd/mo/ImageFilter + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Abbildungsfilter"@de , + "Image Filter"@en ; + "An image filter is a device or component used in imaging systems, such as microscopy or photography, to modify the appearance of an image by selectively altering certain characteristics. Filters can be used to adjust contrast, brightness, color balance, and other image properties. They are often used to enhance specific features or to correct for distortions caused by lighting conditions or optical imperfections."@en ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/IncidentBeam + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Einfallender Strahl"@de , + "Incident Beam"@en ; + "Der Elektronenstrahl, der in einem Elektronenmikroskop auf die Probenoberfläche trifft und Wechselwirkungen hervorruft, die Signale für die Abbildung oder Analyse erzeugen."@de , + "The electron beam that strikes the specimen surface in an electron microscope, causing interactions that produce signals for imaging or analysis."@en ; + "ChatGPT 3.5" . + + +### https://w3id.org/pmd/mo/InelasticScattering + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Inelastic Scattering"@en , + "Inelastische Streuung"@de ; + "Inelastic scattering is a scattering process that involves the transfer of energy and momentum between the incident particle (e.g., photon, electron) and the target particle. During inelastic scattering, the energy of the scattered particle changes, and the interaction may result in various outcomes, such as excitation, emission, or other energy transfers that alter the internal state of the target particle."@en ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/InteractionVolume + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Interaction Volume"@en , + "Überlagerungsvolumen"@de ; + "Der Bereich innerhalb einer Probe, in dem ein Teilchenstrahl mit dem Material in Wechselwirkung tritt."@de , + "The region within a sample where a particle beam interacts with the material."@en ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/IonBeam + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Ion Beam"@en , + "Ionenstrahl"@de ; + "A stream of ions used for grinding or analysis, especially in ion microscopy techniques for imaging."@en , + "Ein Ionenstrom, der zum Mahlen oder zur Analyse verwendet wird, insbesondere bei Ionenmikroskopietechniken zur Bildgebung."@de ; + "ChatGPT 3.5" . + + +### https://w3id.org/pmd/mo/IonMicroscope + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Ion Microscope"@en , + "Ionenmikroskop"@de ; + "A microscope that uses ions to create images of samples."@en , + "Ein Mikroskop, das mit Hilfe von Ionen Bilder von Proben erzeugt."@de ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/IonMicroscopy + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Ion Microscopy"@en , + "Ionenmikroskopie"@de ; + "Ion Microscopy refers to a group of microscopy techniques that use focused ion beams to image and analyze samples. These techniques utilize ions, such as protons or heavy ions, instead of electrons or photons to interact with the sample, providing valuable information about its composition and structure."@en ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/LightMicroscope + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Lichtmikroskop"@de , + "Light Microscope"@en ; + "An optical microscope that uses visible light to illuminate and magnify samples."@en , + "Ein optisches Mikroskop, das sichtbares Licht verwendet, um Proben zu beleuchten und zu vergrößern."@de ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/LightMicroscopy + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Lichtmikroskopie"@de , + "Light Microscopy"@en ; + "Die Verwendung von sichtbarem Licht zur Beobachtung und Untersuchung kleiner Objekte oder Strukturen."@de , + "The use of visible light to observe and study small objects or structures."@en ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/Magnification + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Magnification"@en , + "Vergrößerung"@de ; + "Das Verhältnis zwischen der Größe eines von einem optischen System erzeugten Bildes und der Größe des Objekts."@de , + "The ratio of the size of an image produced by an optical system to the size of the object."@en ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/MechanicalPolishing + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Mechanical Polishing"@en , + "Mechanisches Polieren"@de ; + """Mechanical polishing is a material preparation technique used to enhance the surface quality and finish of a sample by removing thin layers of material through abrasion. It involves using abrasive materials, such as polishing cloths, diamond suspensions, or abrasive pastes, along with a polishing machine or device. The process typically includes several steps, each using progressively finer abrasives to achieve a smooth and mirror-like surface. + +During mechanical polishing, the sample is pressed against the rotating polishing medium with controlled pressure. The abrasive particles embedded in the medium gradually remove surface irregularities, scratches, and imperfections, resulting in improved flatness, clarity, and reflectivity. The process can be adjusted to target specific levels of surface roughness and precision. + +Mechanical polishing is commonly used in various scientific and industrial applications, such as metallography, materials science, electronics, and optics. It is an essential step before further analyses like microscopy, spectroscopy, or surface profiling, as it provides a pristine surface for accurate characterization and observation of material properties."""@en ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/MonochromaticBeam + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Monochromatic Beam"@en , + "Monochromatischer Strahl"@de ; + "An electron beam consisting of electrons with a narrow range of energies, typically achieved using electron energy filters or monochromators."@en , + "Ein Elektronenstrahl, der aus Elektronen mit einem engen Energiebereich besteht, der in der Regel durch Elektronenenergiefilter oder Monochromatoren erreicht wird."@de ; + "ChatGPT 3.5" . + + +### https://w3id.org/pmd/mo/Monochromator + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Monochromator"@de , + "Monochromator"@en ; + "An optical device that transmits a narrow range of wavelengths of light."@en , + "Ein optisches Gerät, das einen engen Wellenlängenbereich von Licht überträgt."@de ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/OpticalMicroscope + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Optical Microscope"@en , + "Optisches Mikroskop"@de ; + "A microscope that uses visible light and lenses to magnify specimens."@en , + "Ein Mikroskop, das sichtbares Licht und Linsen zur Vergrößerung von Proben verwendet."@de ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/OrientationImagingMicroscopy + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Bildgebende Orientierungsmikroskopie"@de , + "Orientation Imaging Microscopy"@en ; + "Orientation Imaging Microscopy is a microscopy technique used to map the crystallographic orientations of grains within a material. It is commonly applied in SEM to study the microstructural properties of polycrystalline materials."@en ; + "ChatGPT 3.5"@en ; + "OIM"@en . + + +### https://w3id.org/pmd/mo/PhysicalProcess + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Physical Process"@en , + "Physikalischer Prozess"@de ; + "A physical process refers to a sequence of events or interactions that occur in the physical world and can be described and analyzed based on the principles of physics. These processes involve the transformation of energy, matter, or both, and they often follow established laws and theories of physics. In particular, a physical process may just occur due to natural circumstances and does not necessarily have to be induced by human activities or interactions."@en ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/PixelSize + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Pixel Size"@en , + "Pixelgröße"@en ; + "Die Größe der einzelnen Pixel in einem digitalen Bild oder einer Anzeige."@de , + "The size of individual pixels in a digital image or display."@en ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/PolarizedLightMicroscope + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Polarisiertes Lichtmikroskop"@de , + "Polarized Light Microscope"@en ; + "A microscope that uses polarized light to observe and analyze samples."@en , + "Ein Mikroskop, das polarisiertes Licht zur Beobachtung und Analyse von Proben verwendet."@de ; + "ChatGPT 3.5"@en ; + "PLM"@en . + + +### https://w3id.org/pmd/mo/PolarizedLightMicroscopy + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Polarisationslichtmikroskopie"@de , + "Polarized Light Microscopy"@en ; + "Polarized Light Microscopy is a technique that uses polarized light to enhance the contrast and reveal structural information in transparent samples. Light waves vibrate in specific directions, and by using polarizers to control the orientation of light waves, polarized light microscopy can highlight birefringent materials, anisotropic structures, and stress patterns within samples. This technique is valuable for studying crystalline structures, fibers, and anisotropic materials."@en ; + "ChatGPT 3.5"@en ; + "PLM"@en . + + +### https://w3id.org/pmd/mo/PolePiece + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Pole Piece"@en , + "Polschuh"@de ; + "A component of the electron column in an electron microscope that focuses and guides the electron beam onto the specimen."@en , + "Eine Komponente der Elektronensäule in einem Elektronenmikroskop, die den Elektronenstrahl fokussiert und auf die Probe lenkt."@de ; + "ChatGPT 3.5" . + + +### https://w3id.org/pmd/mo/PrimaryBeam + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Primary Beam"@en , + "Primärstrahl"@de ; + "Der Hauptelektronenstrahl, der von der Elektronenquelle ausgesandt und auf die Probe in einem Elektronenmikroskop gerichtet wird."@de , + "The main electron beam emitted from the electron source and directed towards the specimen in an electron microscope."@en ; + "ChatGPT 3.5" . + + +### https://w3id.org/pmd/mo/ProbeCurrent + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Probe Current"@en , + "Sondenstrom"@de ; + "Der Strom der Elektronen im fokussierten Elektronenstrahl, der zur Abbildung oder Analyse in einem Elektronenmikroskop verwendet wird."@de , + "The current of electrons in the focused electron beam used for imaging or analysis in an electron microscope."@en ; + "ChatGPT 3.5" . + + +### https://w3id.org/pmd/mo/ProbeSize + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Probe Size"@en , + "Sensorgröße"@de ; + "Messfühlergröße"@de ; + "Die Größe der Sonde oder des Strahls, die bei Mikroskopie- oder Spektroskopieverfahren verwendet werden."@de , + "The size of the probe or beam used in microscopy or spectroscopy techniques."@en ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/Reconstruction + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Reconstruction"@en , + "Rekonstruktion"@de ; + "Der Prozess der Erstellung eines dreidimensionalen Bildes oder Modells aus zweidimensionalen Daten."@de , + "The process of creating a three-dimensional image or model from two-dimensional data."@en ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/Resolution + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Auflösung"@de , + "Resolution"@en ; + "In various contexts, resolution refers to the degree of detail that can be discerned in an image, measurement, or other representation of an object or phenomenon."@en , + "In verschiedenen Zusammenhängen bezieht sich die Auflösung auf den Grad der Detailgenauigkeit, die in einem Bild, einer Messung oder einer anderen Darstellung eines Objekts oder Phänomens erkennbar ist."@de ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/ScanningElectronMicroscope + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Rasterelektronenmikroskop"@de , + "Scanning Electron Microscope"@en ; + "A microscope that produces images of a sample by scanning it with a focused beam of electrons."@en , + "Ein Mikroskop, das Bilder einer Probe erzeugt, indem es diese mit einem fokussierten Elektronenstrahl abtastet."@de ; + "ChatGPT 3.5"@en ; + "REM"@de , + "SEM"@en . + + +### https://w3id.org/pmd/mo/ScanningElectronMicroscopy + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Rasterelektronenmikroskopie"@de , + "Scanning Electron Microscopy"@en ; + "Scanning Electron Microscopy is a microscopy technique that uses a focused beam of electrons to scan the surface of a sample. The interaction of the electrons with the sample generates signals that provide information about the sample's topography, morphology, and composition."@en ; + "ChatGPT 3.5"@en ; + "SEM"@en . + + +### https://w3id.org/pmd/mo/ScanningProbeMicroscope + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Rastersondenmikroskop"@de , + "Scanning Probe Microscope"@en ; + "A type of microscope that images surfaces by scanning a probe over the sample."@en , + "Ein Mikroskoptyp, der Oberflächen abbildet, indem er eine Sonde über die Probe führt."@de ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/ScanningProbeMicroscopy + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Rastersondenmikroskopie"@de , + "Scanning Probe Microscopy"@en ; + "Scanning Probe Microscopy encompasses various techniques, such as Atomic Force Microscopy (AFM) and Scanning Tunneling Microscopy (STM), that use a sharp probe to scan a sample's surface. These techniques provide high-resolution images and information about surface properties on the nanometer scale."@en ; + "ChatGPT 3.5"@en ; + "SPM"@en . + + +### https://w3id.org/pmd/mo/ScanningTransmissionElectronMicroscope + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Rastertransmissionselektronenmikroskop"@de , + "Scanning Transmission Electron Microscope"@en ; + "A type of transmission electron microscope where a focused electron beam is scanned across the sample."@en , + "Eine Art von Transmissionselektronenmikroskop, bei dem ein fokussierter Elektronenstrahl über die Probe gescannt wird."@de ; + "ChatGPT 3.5"@en ; + "STEM"@en . + + +### https://w3id.org/pmd/mo/ScanningTransmissionElectronMicroscopy + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Rastertransmissionselektronenmikroskopie"@de , + "Scanning Transmission Electron Microscopy"@en ; + "Scanning Transmission Electron Microscopy is a technique that combines the principles of scanning and transmission electron microscopy. It allows imaging and spectroscopy with high spatial resolution."@en ; + "ChatGPT 3.5"@en ; + "STEM"@en . + + +### https://w3id.org/pmd/mo/ScanningTransmissionElectronMicroscopy-ElectronEnergyLossSpectroscopy + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Rastertransmissionselektronenmikroskopie Elektronen-Energieverlust-Spektroskopie"@de , + "Scanning Transmission Electron Microscopy Electron Energy Loss Spectroscopy"@en ; + "STEM-EELS combines STEM imaging with electron energy loss spectroscopy to provide information about the elemental composition and electronic structure of a sample at high spatial resolution."@en ; + "ChatGPT 3.5"@en ; + "STEM-EELS"@en . + + +### https://w3id.org/pmd/mo/ScanningTunnelingMicroscope + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Rastertunnelmikroskop"@de , + "Scanning Tunneling Microscope"@en ; + "A microscope that uses quantum tunneling to image surfaces at the atomic level."@en , + "Ein Mikroskop, das Quanten-Tunneling nutzt, um Oberflächen auf atomarer Ebene abzubilden."@de ; + "ChatGPT 3.5"@en ; + "STM"@en . + + +### https://w3id.org/pmd/mo/ScanningTunnelingMicroscopy + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Rastertunnelmikroskopie"@de , + "Scanning Tunneling Microscopy"@en ; + "Scanning Tunneling Microscopy is a technique that uses a conducting probe to measure the tunneling current between the probe and the sample's surface. It provides atomic-scale images of surfaces and is often used to study conductive materials."@en ; + "ChatGPT 3.5"@en ; + "STM"@en . + + +### https://w3id.org/pmd/mo/Scintillator + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Scintillator"@en , + "Szintillator"@de ; + "A material that emits light when it absorbs ionizing radiation."@en , + "Ein Material, das Licht aussendet, wenn es ionisierende Strahlung absorbiert."@de ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/SecondaryIonMassSpectrometry + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Secondary Ion Mass Spectrometry"@en , + "Sekundärionen-Massenspektrometrie"@de ; + """Secondary Ion Mass Spectrometry (SIMS) is an advanced analytical technique used to determine the elemental and isotopic composition of solid surfaces and thin films at a very high sensitivity and spatial resolution. It is widely employed in various scientific and industrial applications, including materials science, semiconductor research, and surface analysis. +In SIMS, a focused beam of high-energy primary ions is directed at a sample's surface. The impact of these primary ions causes the ejection of secondary ions from the sample's surface. These secondary ions are then extracted, mass-separated, and detected using a mass spectrometer. The mass spectrometer measures the mass-to-charge ratios of the secondary ions, providing information about the elemental and isotopic composition of the sample. +The sensitivity and spatial resolution of SIMS allow researchers to analyze very small areas, often down to the micrometer or nanometer scale. This makes SIMS particularly valuable for investigating surface composition, depth profiling of layered structures, and detecting trace elements in complex materials. The technique is non-destructive in its elemental analysis, which is beneficial for studying delicate samples or preserving valuable materials. +SIMS has applications in diverse fields, including materials characterization, semiconductor device analysis, biological and medical research, and geological studies. It provides essential information about the chemical composition, structure, and distribution of elements in complex samples, contributing to advancements in materials science and various technological developments."""@en ; + "ChatGPT 3.5"@en ; + "SIMS"@en . + + +### https://w3id.org/pmd/mo/SelectedAreaElectronDiffraction + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Elektronenbeugung ausgewählter Regionen"@de , + "Selected Area Electron Diffraction"@en ; + "Selected Area Electron Diffraction is a technique used in transmission electron microscopy (TEM) to study the crystallographic orientation of small regions within a sample. By selecting a specific area of the sample and directing an electron beam onto it, diffraction patterns are generated. These patterns offer insights into the sample's crystal structure and orientation."@en ; + "ChatGPT 3.5"@en ; + "SAD"@en , + "SAED"@en . + + +### https://w3id.org/pmd/mo/SiliconDriftDetector + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Silicon Drift Detector"@en , + "Silizium-Driftdetektor"@de ; + "A type of X-ray detector that offers high-speed performance and high energy resolution."@en , + "Eine Art Röntgendetektor, der Hochgeschwindigkeitsleistung und hohe Energieauflösung bietet."@de ; + "ChatGPT 3.5"@en ; + "SDD"@en . + + +### https://w3id.org/pmd/mo/SoftXRayEmissionSpectrometer + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Röntgenemissionsspektrometer mit weicher Röntgenstrahlung"@de , + "Soft X-ray Emission Spectrometer"@en ; + "An instrument used to analyze the emission of soft X-rays from a sample."@en , + "Ein Instrument zur Analyse der Emission weicher Röntgenstrahlen aus einer Probe."@de ; + "ChatGPT 3.5"@en ; + "SXES"@en . + + +### https://w3id.org/pmd/mo/Source + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Quelle"@de , + "Source"@en ; + "Die Elektronenquelle, z. B. ein Wolframfaden oder eine Feldemissionskathode, die in einem Elektronenmikroskop Elektronen emittiert."@de , + "The electron source, such as a tungsten filament or field-emission cathode, that emits electrons in an electron microscope."@en ; + "ChatGPT 3.5" . + + +### https://w3id.org/pmd/mo/SpatialResolution + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Ortsauflösung"@de , + "Spatial Resolution"@en ; + "Die Fähigkeit eines Bildgebungssystems, feine Details in einem Objekt anzuzeigen. Sie bezieht sich auf das kleinste wahrnehmbare Detail in einem Bild."@de , + "The ability of an imaging system to discern fine details in an object. It refers to the smallest discernible detail in an image."@en ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/Spectrometer + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Spectrometer"@en , + "Spektrometer"@de ; + "An instrument used to measure properties of light over a specific portion of the electromagnetic spectrum."@en , + "Ein Instrument zur Messung der Eigenschaften von Licht in einem bestimmten Teil des elektromagnetischen Spektrums."@de ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/Spectroscopy + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + "Spectrometry"@en , + "Spektrometrie"@de ; + "Spectroscopy is a scientific technique used to study and analyze the interaction of matter with electromagnetic radiation, such as light. It involves measuring the way in which different substances absorb, emit, or scatter light at various wavelengths or frequencies. By examining the spectrum of light emitted, absorbed, or transmitted by a sample, scientists can gain insights into its chemical composition, molecular structure, and physical properties. Spectroscopy is widely utilized in various fields, including chemistry, physics, astronomy, and biochemistry, to investigate the characteristics and behavior of materials at the atomic and molecular level."@en ; + "Spectroscopy"@en , + "Spektroskopie"@de ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/SphericalAberration + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Spherical Aberration"@en , + "Sphärische Aberration"@de ; + "A type of optical aberration caused by deviations from the ideal spherical shape in lenses or mirrors."@en , + "Eine Art von optischer Aberration, die durch Abweichungen von der idealen sphärischen Form in Linsen oder Spiegeln verursacht wird."@de ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/SurfaceStructure + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Oberflächenstruktur"@de , + "Surface Structure"@en ; + "Die Anordnung und die Merkmale der äußersten Schicht eines Materials."@de , + "The arrangement and features of the outermost layer of a material."@en ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/TiltCorrection + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Neigungskorrektur"@de , + "Tilt Correction"@en ; + "A correction applied to images obtained from tilted specimens in electron microscopy to compensate for distortions caused by the tilt angle."@en , + "Eine Korrektur, die bei Bildern von gekippten Proben in der Elektronenmikroskopie angewendet wird, um durch den Kippwinkel verursachte Verzerrungen zu kompensieren."@de ; + "ChatGPT 3.5" . + + +### https://w3id.org/pmd/mo/TimeOfFlightSecondaryIonMassSpectrometry + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Flugzeit-Sekundärionen-Massenspektrometrie"@de , + "Time Of Flight Secondary Ion Mass Spectrometry"@en ; + """Time-of-Flight Secondary Ion Mass Spectrometry (TOF-SIMS) is an advanced surface analysis technique used to determine the elemental and molecular composition of solid surfaces and thin films with high sensitivity and spatial resolution. It is employed in various scientific and industrial fields, including materials science, nanotechnology, biomedicine, and semiconductor research. +TOF-SIMS builds upon the principles of Secondary Ion Mass Spectrometry (SIMS), where a focused beam of high-energy primary ions is directed at a sample's surface, causing the ejection of secondary ions. In TOF-SIMS, the flight time of these secondary ions is measured as they travel through a field-free region and enter a time-of-flight mass spectrometer. The mass spectrometer measures the time taken by the ions to reach the detector, which is directly proportional to their mass-to-charge ratio. +By analyzing the flight times of the secondary ions, TOF-SIMS can determine the elemental, isotopic, and molecular composition of the sample's surface. It provides information about the presence of specific elements, chemical compounds, and molecular fragments, along with their spatial distribution. The high sensitivity of TOF-SIMS allows for the detection of trace elements and molecular species in complex samples. +TOF-SIMS is valuable for characterizing surfaces at the nanoscale, profiling layered structures, investigating organic and inorganic materials, and studying biological specimens. Its ability to provide detailed chemical information while maintaining spatial resolution makes it an essential tool for understanding surface properties and material interactions in a wide range of applications."""@en ; + "ChatGPT 3.5"@en ; + "TOF-SIMS"@en . + + +### https://w3id.org/pmd/mo/TomographicReconstruction + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Tomographic Reconstruction"@en , + "Tomographische Rekonstruktion"@de ; + "Der Prozess der Rekonstruktion einer dreidimensionalen Struktur aus einer Reihe von zweidimensionalen Bildern, die aus verschiedenen Winkeln aufgenommen wurden."@de , + "The process of reconstructing a three-dimensional structure from a series of two-dimensional images taken at different angles."@en ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/TransmissionElectronAberrationCorrectedMicroscope + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Transmission Electron Aberration-corrected Microscope"@en , + "Transmissionselektronen-Aberrations-korrigiertes Mikroskop"@de ; + "A transmission electron microscope equipped with aberration correction to achieve high-resolution imaging."@en , + "Ein Transmissions-Elektronenmikroskop mit Aberrationskorrektur zur Erzielung hochauflösender Bilder."@de ; + "ChatGPT 3.5"@en ; + "TEAM"@en . + + +### https://w3id.org/pmd/mo/TransmissionElectronMicroscope + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Transmission Electron Microscope"@en , + "Transmissionelektronenmikroskop"@de ; + "A microscope that transmits a beam of electrons through a specimen, forming an image."@en , + "Ein Mikroskop, das einen Elektronenstrahl durch eine Probe sendet und ein Bild erzeugt."@de ; + "ChatGPT 3.5"@en ; + "TEM" . + + +### https://w3id.org/pmd/mo/TransmissionElectronMicroscopy + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + "Transmission Electron Microscopy is a microscopy technique that involves transmitting a beam of electrons through a thin sample to create high-resolution images. It is used to study the internal structure and morphology of materials at the nanometer scale."@en ; + "ChatGPT 3.5"@en ; + "TEM"@en . + + +### https://w3id.org/pmd/mo/Voltage + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Spannung"@de , + "Voltage"@en ; + "Stromspannung"@de ; + """Die Spannung, auch elektrische Potentialdifferenz, ist ein Maß für die elektrische potentielle Energie pro Ladungseinheit in einem elektrischen Stromkreis. Sie ist die Kraft, die den elektrischen Strom durch einen Leiter treibt. + +Hinweis: Die Spannung wird in Volt (V) gemessen und stellt die potenzielle Energiedifferenz zwischen zwei Punkten in einem Stromkreis dar. Je höher die Spannung ist, desto größer ist die Kraft, die die elektrischen Ladungen antreibt, und desto höher ist folglich auch das Potenzial für einen Stromfluss."""@de , + """Voltage, also known as electric potential difference, is a measure of the electric potential energy per unit charge in an electrical circuit. It is the force or pressure that drives electric current through a conductor. + +Note: Voltage is measured in volts (V), and it represents the potential energy difference between two points in a circuit. The higher the voltage, the greater the force pushing the electric charges, and consequently, the higher the potential for current to flow."""@en ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/Volume + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Volume"@en , + "Volumen"@de ; + "Die Menge an Raum, die ein Stoff oder Gegenstand einnimmt."@de , + "The amount of space that a substance or object occupies."@en ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/WaitTime + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:comment "Die Wartezeit wird häufig genutzt, um die Probe zu stabilisieren oder um die Beschädigung der Probe zu minimieren."@de , + "The wait time is often used to allow the specimen to stabilize or to minimize sample damage."@en ; + rdfs:isDefinedBy ; + rdfs:label "Wait Time"@en , + "Wartezeit"@de ; + "Das Zeitintervall zwischen aufeinander folgenden Messungen oder Operationen in einem Elektronenmikroskop."@de , + "The time interval between successive measurements or operations in an electron microscope."@en ; + "ChatGPT 3.5" . + + +### https://w3id.org/pmd/mo/WorkingDistance + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:comment "Der Arbeitsabstand wirkt sich auf die Tiefenschärfe und die Auflösung des Bildes aus."@de , + "The working distance affects the depth of field and the resolution of the image."@en ; + rdfs:isDefinedBy ; + rdfs:label "Arbeitsabstand"@de , + "Working Distance"@en ; + "Der Abstand zwischen der Objektivlinse des Elektronenmikroskops und der Probenoberfläche, wenn der Elektronenstrahl auf die Probe fokussiert wird."@de , + "The distance between the electron microscope objective lens and the specimen surface when the electron beam is focused on the specimen."@en ; + "ChatGPT 3.5" . + + +### https://w3id.org/pmd/mo/XRayAbsorptionNearEdgeSpectroscopy + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Röntgenabsorptionsspektroskopie im Nahbereich"@de , + "X-ray Absorption Near Edge Spectroscopy"@en ; + """X-ray Absorption Near Edge Spectroscopy (XANES) is a specialized technique used in the field of materials science and spectroscopy to study the electronic and structural properties of materials. It focuses on the X-ray absorption spectra of atoms within a sample, particularly the region just above the absorption edge of an element's X-ray absorption spectrum. +In XANES, a sample is irradiated with X-rays, typically generated by a synchrotron radiation source. These X-rays are tuned to specific energy levels corresponding to the absorption edges of the elements of interest in the sample. As the X-rays are absorbed by the sample, the energy levels of the atoms are altered, leading to various transitions in their electron configurations. The resulting X-ray absorption spectrum is measured, specifically targeting the energies just above the absorption edge. +XANES provides information about the electronic structure of the atoms within the sample, including the oxidation state, chemical bonding, and local environment of the absorbing element. The fine details of the XANES spectrum offer insights into the atomic and molecular interactions, as well as the coordination and symmetry of atoms in different chemical environments. +This technique is widely used in various scientific fields, including chemistry, solid-state physics, and materials science. XANES helps researchers understand the properties and behavior of materials at the atomic level, making it an invaluable tool for investigating the characteristics of complex materials, catalysts, minerals, and biomolecules."""@en ; + "ChatGPT 3.5"@en ; + "XANES"@en . + + +### https://w3id.org/pmd/mo/XRayAbsorptionSpectroscopy + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Röntgenabsorptionsspektroskopie"@de , + "X-ray Absorption Spectroscopy"@en ; + "X-ray Absorption Spectroscopy is a technique used to study the electronic and local structural properties of materials by analyzing the absorption of X-rays. It involves measuring how X-rays are absorbed by a sample at various energies, providing insights into the electronic states and chemical environments of specific elements."@en ; + "ChatGPT 3.5"@en ; + "XAS"@en . + + +### https://w3id.org/pmd/mo/XRayAnalysis + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Röntgenanalyse"@de , + "X-ray Analysis"@en ; + "X-ray analysis is a technique used to investigate the composition and structure of materials by exposing them to X-rays. When X-rays interact with a material, they can be absorbed, scattered, or diffracted in ways that provide information about the material's internal arrangement of atoms and its elemental composition."@en ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/XRayDiffraction + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "X-ray Diffraction"@en ; + "Röntgenstrahlbeugung"@de ; + "X-ray Diffraction is a technique that utilizes the diffraction of X-rays by crystals to determine their atomic arrangement and lattice structure. X-ray diffraction patterns are produced when X-rays strike a crystalline sample, and the resulting pattern provides information about the arrangement of atoms in the crystal lattice."@en ; + "Röntgenbeugung"@de ; + "ChatGPT 3.5"@en ; + "XRD"@en . + + +### https://w3id.org/pmd/mo/XRayFluorescence + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Röntgenfluoreszenz"@de , + "X-ray Fluorescence"@en ; + "X-ray Fluorescence is a method used to determine the elemental composition of a sample by analyzing the X-rays emitted when the sample is exposed to high-energy X-rays. The X-rays emitted are characteristic of the elements present, allowing for quantitative analysis of the sample's elemental composition."@en ; + "ChatGPT 3.5"@en ; + "XRF"@en . + + +### https://w3id.org/pmd/mo/XRayMapping + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Röntgen-Mapping"@de , + "X-ray Mapping"@en ; + "X-ray mapping is a process that involves generating spatially resolved images of the distribution of specific elements within a sample. By collecting X-ray signals emitted or scattered from a sample at different points, an elemental map can be created, showing the varying concentrations of elements across the sample's surface."@en ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/XRayMicroanalysis + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Röntgen-Mikroanalyse"@de , + "X-ray Microanalysis"@en ; + "X-ray Microanalysis is a technique that combines microscopy and X-ray analysis to study the elemental composition of small regions within a sample. It involves focusing an electron or X-ray beam on a specific area of the sample and measuring the X-rays emitted from that area to determine the elemental composition."@en ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/XRayPhotoelectronSpectroscopy + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Röntgenphotoelektronenspektroskopie"@de , + "X-ray Photoelectron Spectroscopy"@en ; + "X-ray Photoelectron Spectroscopy, also known as Electron Spectroscopy for Chemical Analysis (ESCA), is a technique used to study the surface chemistry of materials. XPS involves bombarding a sample's surface with X-rays to emit photoelectrons, which are then analyzed to determine the elemental composition and chemical states of the elements on the surface."@en ; + "ChatGPT 3.5"@en ; + "XPS"@en . + + +### https://w3id.org/pmd/mo/3DReconstruction + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Dreidimensionale Rekonstruktion"@de , + "Three dimensional reconstruction"@en ; + "Der Prozess der Erstellung einer dreidimensionalen Darstellung eines Objekts oder einer Szene aus zweidimensionalen Bildern oder Daten."@de , + "The process of creating a three-dimensional representation of an object or scene from two-dimensional images or data."@en ; + "ChatGPT 3.5"@en . + + +### https://w3id.org/pmd/mo/4D-ScanningTransmissionElectronMicroscopy + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "4D Scanning Transmission Electron Microscopy"@en , + "4D-Rastertransmissionselektronenmikroskopie"@de ; + "4D-STEM is a technique that adds an additional dimension of information, time, to STEM imaging, allowing the study of dynamic processes in materials at high spatial and temporal resolutions."@en ; + "ChatGPT 3.5"@en ; + "4D-STEM"@en . + + +### Generated by the OWL API (version 5.1.18) https://github.com/owlcs/owlapi/ diff --git a/mo/provenance/provenance-de.html b/mo/provenance/provenance-de.html new file mode 100644 index 0000000..9891840 --- /dev/null +++ b/mo/provenance/provenance-de.html @@ -0,0 +1,17 @@ + + + + + + + + +
+

Herkunft von Microscopy Ontology (MO) Dokumentation (https://w3id.org/pmd/mo/1.0.0)

+
    +
  • Entwickler der Ontologie: https://orcid.org/0000-0002-3717-7104, https://orcid.org/0000-0002-7094-5371
  • Die Ontologie-Dokumentation ist Ergebnis der Anwendung vom Widoco Tool (das wiederum LODE zur Generierung der Querverweise verwendet.
  • +
+
+

zurück zu Dokumentation. TTL Format

+ + \ No newline at end of file diff --git a/mo/provenance/provenance-de.ttl b/mo/provenance/provenance-de.ttl new file mode 100644 index 0000000..36766f1 --- /dev/null +++ b/mo/provenance/provenance-de.ttl @@ -0,0 +1,12 @@ +@prefix prov: . +@prefix dc: . +@prefix foaf: . +@prefix : <> . + a prov:Entity; + dc:title "Microscopy Ontology (MO)"; + prov:wasAttributedTo ; + dc:creator ; + prov:wasAttributedTo ; + dc:creator ; + prov:wasAttributedTo ,; +. diff --git a/mo/provenance/provenance-en.html b/mo/provenance/provenance-en.html new file mode 100644 index 0000000..5ffb99c --- /dev/null +++ b/mo/provenance/provenance-en.html @@ -0,0 +1,17 @@ + + + + + + + + +
+

Provenance for Microscopy Ontology (MO) Documentation (https://w3id.org/pmd/mo/1.0.0)

+
    +
  • Ontology created by: https://orcid.org/0000-0002-3717-7104, https://orcid.org/0000-0002-7094-5371
  • The ontology documentation was the result of using the Widoco tool (which itself uses LODE for generating the crossreference section).
  • +
+
+

back to documentation. TTL format

+ + \ No newline at end of file diff --git a/mo/provenance/provenance-en.ttl b/mo/provenance/provenance-en.ttl new file mode 100644 index 0000000..36766f1 --- /dev/null +++ b/mo/provenance/provenance-en.ttl @@ -0,0 +1,12 @@ +@prefix prov: . +@prefix dc: . +@prefix foaf: . +@prefix : <> . + a prov:Entity; + dc:title "Microscopy Ontology (MO)"; + prov:wasAttributedTo ; + dc:creator ; + prov:wasAttributedTo ; + dc:creator ; + prov:wasAttributedTo ,; +. diff --git a/mo/readme.md b/mo/readme.md new file mode 100644 index 0000000..246eeba --- /dev/null +++ b/mo/readme.md @@ -0,0 +1,34 @@ +About Widoco output +=================== +The purpose of Widoco is to reuse and integrate existing tools for documentation, plus the set of features listed below: +* Separation of the sections of your html page so you can write them independently and replace only those needed. +* Automatic annotation in RDF-a of the html produced. +* Association of a provenance page which includes the history of your vocabulary (W3C PROV-O compliant). +* Metadata extraction from the ontology plus the means to complete it on the fly when generating your ontology. +* Guidelines on the main sections that your document should have and how to complete them. + +Widoco will create 3 different folders: +| +|-provenance (a folder including an html and RDF serialization of how the documentation page was created) +|-resources (folder with the different resources) +|-sections (folder with the different sections of the documentation, separated for easy editing. Just edit one and the main page will be updated) + +Completing ontology metadata. +=================== +Widoco uses the ontology metadata to update a configuration file. If you complete that configuration file (ended up widoco.conf), the tool will enhance your html with additional details, such as how to cite the document, previous revisions, icons with the licence, etc. + +Browser issues +========== +The result of executing Widoco is an html file. We have tested it in Mozilla, IE and Chrome, and when the page is stored in a server all the browsers work correctly. If you view the file locally, we recommend you to use Mozilla Firefox (or Internet Explorer, if you must). Google Chrome will not show the contents correctly, as it doesn't allow XMLHttpRequest without HTTP. If you want to view the page locally with Google Chrome you have two possibilities: + +a) Place the file in a server and access it via its URL (for example, put it in dropbox and access through its public url). + +b) Execute Chrome with the following commands : + +(WIN) chrome.exe --allow-file-access-from-files, + +(OSX) open /Applications/Google\ Chrome.app/ --args --allow-file-access-from-files + +(UNX) /usr/bin/google-chrome --allow-file-access-from-files + +Do you have a problem? open an issue at https://github.com/dgarijo/Widoco \ No newline at end of file diff --git a/mo/resources/extra.css b/mo/resources/extra.css new file mode 100644 index 0000000..16689d3 --- /dev/null +++ b/mo/resources/extra.css @@ -0,0 +1,124 @@ +body { + text-align: justify; +} + +h1 { + line-height: 110%; +} + +.hlist { + border: 1px solid navy; + padding:5px; + background-color: #F4FFFF; +} + +.hlist li { + display: inline; + display: inline-table; + list-style-type: none; + padding-right: 20px; + +} + +.entity { + border: 1px solid navy; + margin:5px 0px 5px 0px; + padding: 5px; +} + +.type-c { + cursor:help; + color:orange; +} + +.type-op { + cursor:help; + color:navy; +} + +.type-dp { + cursor:help; + color:green; +} + +.type-ap { + cursor:help; + color:maroon; +} + +.type-ni { + cursor:help; + color:brown; +} + +.logic { + color:purple; + font-weight:bold; +} + +h3 { + margin-top: 3px; + padding-bottom: 5px; + border-bottom: 1px solid navy; +} + +h2 { + margin-top:40px; +} + +.dotted { + border-bottom: 1px dotted gray; +} + +dt { + margin-top:5px; +} + +.description { + border-top: 1px dashed gray; + border-bottom: 1px dashed gray; + background-color: rgb(242, 243, 244); + margin-top:5px; + padding-bottom:5px; +} + +.description dl { + background-color: rgb(242, 243, 244); +} + +.description ul { + padding-left: 12px; + margin-top: 0px; +} + +.backlink { + font-size:10pt; + text-align:right; + float:right; + color:black; + padding: 2px; + border: 1px dotted navy; + background-color: #F4FFFF; +} + +.imageblock { + text-align: center; +} + +.imageblock img { + border:1px solid gray; +} + +.endnote { + margin-top: 40px; + border-top: 1px solid gray; + padding-top: 10px; + text-align: center; + color:gray; + font-size:70%; +} + +.literal { + color:green; + font-style:italic; +} \ No newline at end of file diff --git a/mo/resources/jquery.js b/mo/resources/jquery.js new file mode 100644 index 0000000..48590ec --- /dev/null +++ b/mo/resources/jquery.js @@ -0,0 +1,18 @@ +/*! + * jQuery JavaScript Library v1.6.2 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Thu Jun 30 14:16:56 2011 -0400 + */ +(function(a,b){function cv(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cs(a){if(!cg[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ch||(ch=c.createElement("iframe"),ch.frameBorder=ch.width=ch.height=0),b.appendChild(ch);if(!ci||!ch.createElement)ci=(ch.contentWindow||ch.contentDocument).document,ci.write((c.compatMode==="CSS1Compat"?"":"")+""),ci.close();d=ci.createElement(a),ci.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ch)}cg[a]=e}return cg[a]}function cr(a,b){var c={};f.each(cm.concat.apply([],cm.slice(0,b)),function(){c[this]=a});return c}function cq(){cn=b}function cp(){setTimeout(cq,0);return cn=f.now()}function cf(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ce(){try{return new a.XMLHttpRequest}catch(b){}}function b$(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bx(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function bm(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(be,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bl(a){f.nodeName(a,"input")?bk(a):"getElementsByTagName"in a&&f.grep(a.getElementsByTagName("input"),bk)}function bk(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bj(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bi(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bh(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i=0===c})}function V(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function N(a,b){return(a&&a!=="*"?a+".":"")+b.replace(z,"`").replace(A,"&")}function M(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;ic)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function K(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function E(){return!0}function D(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"$1-$2").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z])/ig,x=function(a,b){return b.toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.2",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!A){A=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a);return c===b||D.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(b,c,d){a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),d=c.documentElement,(!d||!d.nodeName||d.nodeName==="parsererror")&&e.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c
a",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.firstChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0},m&&f.extend(p,{position:"absolute",left:-1e3,top:-1e3});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="
",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="
t
",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0),o.innerHTML="",n.removeChild(o);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([a-z])([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g=f.expando,h=typeof c=="string",i,j=a.nodeType,k=j?f.cache:a,l=j?a[f.expando]:a[f.expando]&&f.expando;if((!l||e&&l&&!k[l][g])&&h&&d===b)return;l||(j?a[f.expando]=l=++f.uuid:l=f.expando),k[l]||(k[l]={},j||(k[l].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?k[l][g]=f.extend(k[l][g],c):k[l]=f.extend(k[l],c);i=k[l],e&&(i[g]||(i[g]={}),i=i[g]),d!==b&&(i[f.camelCase(c)]=d);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[f.camelCase(c)]||i[c]:i}},removeData:function(b,c,d){if(!!f.acceptData(b)){var e=f.expando,g=b.nodeType,h=g?f.cache:b,i=g?b[f.expando]:f.expando;if(!h[i])return;if(c){var j=d?h[i][e]:h[i];if(j){delete j[c];if(!l(j))return}}if(d){delete h[i][e];if(!l(h[i]))return}var k=h[i][e];f.support.deleteExpando||h!=a?delete h[i]:h[i]=null,k?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=k):g&&(f.support.deleteExpando?delete b[f.expando]:b.removeAttribute?b.removeAttribute(f.expando):b[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;d=e.value;return typeof d=="string"?d.replace(p,""):d==null?"":d}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);j&&(c=f.attrFix[c]||c,i=f.attrHooks[c],i||(t.test(c)?i=w:v&&c!=="className"&&(f.nodeName(a,"form")||u.test(c))&&(i=v)));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j&&(h=i.get(a,c))!==null)return h;h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.support.getSetAttribute?a.removeAttribute(b):(f.attr(a,b,""),a.removeAttributeNode(a.getAttributeNode(b))),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},tabIndex:{get:function(a){var c=a.getAttributeNode("tabIndex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}},value:{get:function(a,b){if(v&&f.nodeName(a,"button"))return v.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(v&&f.nodeName(a,"button"))return v.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);i&&(c=f.propFix[c]||c,h=f.propHooks[c]);return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==b?g:a[c]},propHooks:{}}),w={get:function(a,c){return f.prop(a,c)?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},f.support.getSetAttribute||(f.attrFix=f.propFix,v=f.attrHooks.name=f.attrHooks.title=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,c){var d=a.getAttributeNode(c);if(d){d.nodeValue=b;return b}}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var x=/\.(.*)$/,y=/^(?:textarea|input|select)$/i,z=/\./g,A=/ /g,B=/[^\w\s.|`]/g,C=function(a){return a.replace(B,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=D;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=D);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),C).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i. +shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d!=null?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},J=function(c){var d=c.target,e,g;if(!!y.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=I(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:J,beforedeactivate:J,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&J.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&J.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",I(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in H)f.event.add(this,c+".specialChange",H[c]);return y.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return y.test(this.nodeName)}},H=f.event.special.change.filters,H.focus=H.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g0)for(h=g;h0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=T.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a=="string")return f.inArray(this[0],a?f(a):this.parent().children());return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(V(c[0])||V(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=S.call(arguments);O.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!U[a]?f.unique(e):e,(this.length>1||Q.test(d))&&P.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var X=/ jQuery\d+="(?:\d+|null)"/g,Y=/^\s+/,Z=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,$=/<([\w:]+)/,_=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]};bf.optgroup=bf.option,bf.tbody=bf.tfoot=bf.colgroup=bf.caption=bf.thead,bf.th=bf.td,f.support.htmlSerialize||(bf._default=[1,"div
","
"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(X,""):null;if(typeof a=="string"&&!bb.test(a)&&(f.support.leadingWhitespace||!Y.test(a))&&!bf[($.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Z,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j +)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bi(a,d),e=bj(a),g=bj(d);for(h=0;e[h];++h)bi(e[h],g[h])}if(b){bh(a,d);if(c){e=bj(a),g=bj(d);for(h=0;e[h];++h)bh(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!ba.test(k))k=b.createTextNode(k);else{k=k.replace(Z,"<$1>");var l=($.exec(k)||["",""])[1].toLowerCase(),m=bf[l]||bf._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=_.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&Y.test(k)&&o.insertBefore(b.createTextNode(Y.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bo.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle;c.zoom=1;var e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.filter=bn.test(g)?g.replace(bn,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bx(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(by=function(a,c){var d,e,g;c=c.replace(bp,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bz=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bq.test(d)&&br.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bx=by||bz,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bB=/%20/g,bC=/\[\]$/,bD=/\r?\n/g,bE=/#.*$/,bF=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bG=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bH=/^(?:about|app|app\-storage|.+\-extension|file|widget):$/,bI=/^(?:GET|HEAD)$/,bJ=/^\/\//,bK=/\?/,bL=/)<[^<]*)*<\/script>/gi,bM=/^(?:select|textarea)/i,bN=/\s+/,bO=/([?&])_=[^&]*/,bP=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bQ=f.fn.load,bR={},bS={},bT,bU;try{bT=e.href}catch(bV){bT=c.createElement("a"),bT.href="",bT=bT.href}bU=bP.exec(bT.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bQ)return bQ.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
").append(c.replace(bL,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bM.test(this.nodeName)||bG.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bD,"\r\n")}}):{name:b.name,value:c.replace(bD,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?f.extend(!0,a,f.ajaxSettings,b):(b=a,a=f.extend(!0,f.ajaxSettings,b));for(var c in{context:1,url:1})c in b?a[c]=b[c]:c in f.ajaxSettings&&(a[c]=f.ajaxSettings[c]);return a},ajaxSettings:{url:bT,isLocal:bH.test(bU[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":"*/*"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML}},ajaxPrefilter:bW(bR),ajaxTransport:bW(bS),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a?4:0;var o,r,u,w=l?bZ(d,v,l):b,x,y;if(a>=200&&a<300||a===304){if(d.ifModified){if(x=v.getResponseHeader("Last-Modified"))f.lastModified[k]=x;if(y=v.getResponseHeader("Etag"))f.etag[k]=y}if(a===304)c="notmodified",o=!0;else try{r=b$(d,w),c="success",o=!0}catch(z){c="parsererror",u=z}}else{u=c;if(!c||a)c="error",a<0&&(a=0)}v.status=a,v.statusText=c,o?h.resolveWith(e,[r,c,v]):h.rejectWith(e,[v,c,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,c]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bF.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bE,"").replace(bJ,bU[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bN),d.crossDomain==null&&(r=bP.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bU[1]&&r[2]==bU[2]&&(r[3]||(r[1]==="http:"?80:443))==(bU[3]||(bU[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bX(bR,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bI.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bK.test(d.url)?"&":"?")+d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bO,"$1_="+x);d.url=y+(y===d.url?(bK.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", */*; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bX(bS,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){status<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)bY(g,a[g],c,e);return d.join("&").replace(bB,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var b_=f.now(),ca=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+b_++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ca.test(b.url)||e&&ca.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ca,l),b.url===j&&(e&&(k=k.replace(ca,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cb=a.ActiveXObject?function(){for(var a in cd)cd[a](0,1)}:!1,cc=0,cd;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ce()||cf()}:ce,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cb&&delete cd[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cc,cb&&(cd||(cd={},f(a).unload(cb)),cd[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cg={},ch,ci,cj=/^(?:toggle|show|hide)$/,ck=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cl,cm=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cn,co=a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||a.oRequestAnimationFrame;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cr("show",3),a,b,c);for(var g=0,h=this.length;g=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b
";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cu.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cu.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cv(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cv(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a&&a.style?parseFloat(f.css(a,d,"padding")):null},f.fn["outer"+c]=function(a){var b=this[0];return b&&b.style?parseFloat(f.css(b,d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c];return e.document.compatMode==="CSS1Compat"&&g||e.document.body["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var h=f.css(e,d),i=parseFloat(h);return f.isNaN(i)?h:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window); \ No newline at end of file diff --git a/mo/resources/marked.min.js b/mo/resources/marked.min.js new file mode 100644 index 0000000..17021ae --- /dev/null +++ b/mo/resources/marked.min.js @@ -0,0 +1,6 @@ +/** + * marked - a markdown parser + * Copyright (c) 2011-2014, Christopher Jeffrey. (MIT Licensed) + * https://github.com/chjj/marked + */ +(function(){var block={newline:/^\n+/,code:/^( {4}[^\n]+\n*)+/,fences:noop,hr:/^( *[-*_]){3,} *(?:\n+|$)/,heading:/^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/,nptable:noop,lheading:/^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,blockquote:/^( *>[^\n]+(\n(?!def)[^\n]+)*\n*)+/,list:/^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:/^ *(?:comment|closed|closing) *(?:\n{2,}|\s*$)/,def:/^ *\[([^\]]+)\]: *]+)>?(?: +["(]([^\n]+)[")])? *(?:\n+|$)/,table:noop,paragraph:/^((?:[^\n]+\n?(?!hr|heading|lheading|blockquote|tag|def))+)\n*/,text:/^[^\n]+/};block.bullet=/(?:[*+-]|\d+\.)/;block.item=/^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/;block.item=replace(block.item,"gm")(/bull/g,block.bullet)();block.list=replace(block.list)(/bull/g,block.bullet)("hr","\\n+(?=\\1?(?:[-*_] *){3,}(?:\\n+|$))")("def","\\n+(?="+block.def.source+")")();block.blockquote=replace(block.blockquote)("def",block.def)();block._tag="(?!(?:"+"a|em|strong|small|s|cite|q|dfn|abbr|data|time|code"+"|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo"+"|span|br|wbr|ins|del|img)\\b)\\w+(?!:/|[^\\w\\s@]*@)\\b";block.html=replace(block.html)("comment",//)("closed",/<(tag)[\s\S]+?<\/\1>/)("closing",/])*?>/)(/tag/g,block._tag)();block.paragraph=replace(block.paragraph)("hr",block.hr)("heading",block.heading)("lheading",block.lheading)("blockquote",block.blockquote)("tag","<"+block._tag)("def",block.def)();block.normal=merge({},block);block.gfm=merge({},block.normal,{fences:/^ *(`{3,}|~{3,}) *(\S+)? *\n([\s\S]+?)\s*\1 *(?:\n+|$)/,paragraph:/^/});block.gfm.paragraph=replace(block.paragraph)("(?!","(?!"+block.gfm.fences.source.replace("\\1","\\2")+"|"+block.list.source.replace("\\1","\\3")+"|")();block.tables=merge({},block.gfm,{nptable:/^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/,table:/^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/});function Lexer(options){this.tokens=[];this.tokens.links={};this.options=options||marked.defaults;this.rules=block.normal;if(this.options.gfm){if(this.options.tables){this.rules=block.tables}else{this.rules=block.gfm}}}Lexer.rules=block;Lexer.lex=function(src,options){var lexer=new Lexer(options);return lexer.lex(src)};Lexer.prototype.lex=function(src){src=src.replace(/\r\n|\r/g,"\n").replace(/\t/g," ").replace(/\u00a0/g," ").replace(/\u2424/g,"\n");return this.token(src,true)};Lexer.prototype.token=function(src,top,bq){var src=src.replace(/^ +$/gm,""),next,loose,cap,bull,b,item,space,i,l;while(src){if(cap=this.rules.newline.exec(src)){src=src.substring(cap[0].length);if(cap[0].length>1){this.tokens.push({type:"space"})}}if(cap=this.rules.code.exec(src)){src=src.substring(cap[0].length);cap=cap[0].replace(/^ {4}/gm,"");this.tokens.push({type:"code",text:!this.options.pedantic?cap.replace(/\n+$/,""):cap});continue}if(cap=this.rules.fences.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"code",lang:cap[2],text:cap[3]});continue}if(cap=this.rules.heading.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"heading",depth:cap[1].length,text:cap[2]});continue}if(top&&(cap=this.rules.nptable.exec(src))){src=src.substring(cap[0].length);item={type:"table",header:cap[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:cap[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:cap[3].replace(/\n$/,"").split("\n")};for(i=0;i ?/gm,"");this.token(cap,top,true);this.tokens.push({type:"blockquote_end"});continue}if(cap=this.rules.list.exec(src)){src=src.substring(cap[0].length);bull=cap[2];this.tokens.push({type:"list_start",ordered:bull.length>1});cap=cap[0].match(this.rules.item);next=false;l=cap.length;i=0;for(;i1&&b.length>1)){src=cap.slice(i+1).join("\n")+src;i=l-1}}loose=next||/\n\n(?!\s*$)/.test(item);if(i!==l-1){next=item.charAt(item.length-1)==="\n";if(!loose)loose=next}this.tokens.push({type:loose?"loose_item_start":"list_item_start"});this.token(item,false,bq);this.tokens.push({type:"list_item_end"})}this.tokens.push({type:"list_end"});continue}if(cap=this.rules.html.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:this.options.sanitize?"paragraph":"html",pre:cap[1]==="pre"||cap[1]==="script"||cap[1]==="style",text:cap[0]});continue}if(!bq&&top&&(cap=this.rules.def.exec(src))){src=src.substring(cap[0].length);this.tokens.links[cap[1].toLowerCase()]={href:cap[2],title:cap[3]};continue}if(top&&(cap=this.rules.table.exec(src))){src=src.substring(cap[0].length);item={type:"table",header:cap[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:cap[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:cap[3].replace(/(?: *\| *)?\n$/,"").split("\n")};for(i=0;i])/,autolink:/^<([^ >]+(@|:\/)[^ >]+)>/,url:noop,tag:/^|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/,link:/^!?\[(inside)\]\(href\)/,reflink:/^!?\[(inside)\]\s*\[([^\]]*)\]/,nolink:/^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/,strong:/^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/,em:/^\b_((?:__|[\s\S])+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,code:/^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/,br:/^ {2,}\n(?!\s*$)/,del:noop,text:/^[\s\S]+?(?=[\\?(?:\s+['"]([\s\S]*?)['"])?\s*/;inline.link=replace(inline.link)("inside",inline._inside)("href",inline._href)();inline.reflink=replace(inline.reflink)("inside",inline._inside)();inline.normal=merge({},inline);inline.pedantic=merge({},inline.normal,{strong:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,em:/^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/});inline.gfm=merge({},inline.normal,{escape:replace(inline.escape)("])","~|])")(),url:/^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/,del:/^~~(?=\S)([\s\S]*?\S)~~/,text:replace(inline.text)("]|","~]|")("|","|https?://|")()});inline.breaks=merge({},inline.gfm,{br:replace(inline.br)("{2,}","*")(),text:replace(inline.gfm.text)("{2,}","*")()});function InlineLexer(links,options){this.options=options||marked.defaults;this.links=links;this.rules=inline.normal;this.renderer=this.options.renderer||new Renderer;this.renderer.options=this.options;if(!this.links){throw new Error("Tokens array requires a `links` property.")}if(this.options.gfm){if(this.options.breaks){this.rules=inline.breaks}else{this.rules=inline.gfm}}else if(this.options.pedantic){this.rules=inline.pedantic}}InlineLexer.rules=inline;InlineLexer.output=function(src,links,options){var inline=new InlineLexer(links,options);return inline.output(src)};InlineLexer.prototype.output=function(src){var out="",link,text,href,cap;while(src){if(cap=this.rules.escape.exec(src)){src=src.substring(cap[0].length);out+=cap[1];continue}if(cap=this.rules.autolink.exec(src)){src=src.substring(cap[0].length);if(cap[2]==="@"){text=cap[1].charAt(6)===":"?this.mangle(cap[1].substring(7)):this.mangle(cap[1]);href=this.mangle("mailto:")+text}else{text=escape(cap[1]);href=text}out+=this.renderer.link(href,null,text);continue}if(!this.inLink&&(cap=this.rules.url.exec(src))){src=src.substring(cap[0].length);text=escape(cap[1]);href=text;out+=this.renderer.link(href,null,text);continue}if(cap=this.rules.tag.exec(src)){if(!this.inLink&&/^/i.test(cap[0])){this.inLink=false}src=src.substring(cap[0].length);out+=this.options.sanitize?escape(cap[0]):cap[0];continue}if(cap=this.rules.link.exec(src)){src=src.substring(cap[0].length);this.inLink=true;out+=this.outputLink(cap,{href:cap[2],title:cap[3]});this.inLink=false;continue}if((cap=this.rules.reflink.exec(src))||(cap=this.rules.nolink.exec(src))){src=src.substring(cap[0].length);link=(cap[2]||cap[1]).replace(/\s+/g," ");link=this.links[link.toLowerCase()];if(!link||!link.href){out+=cap[0].charAt(0);src=cap[0].substring(1)+src;continue}this.inLink=true;out+=this.outputLink(cap,link);this.inLink=false;continue}if(cap=this.rules.strong.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.strong(this.output(cap[2]||cap[1]));continue}if(cap=this.rules.em.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.em(this.output(cap[2]||cap[1]));continue}if(cap=this.rules.code.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.codespan(escape(cap[2],true));continue}if(cap=this.rules.br.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.br();continue}if(cap=this.rules.del.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.del(this.output(cap[1]));continue}if(cap=this.rules.text.exec(src)){src=src.substring(cap[0].length);out+=escape(this.smartypants(cap[0]));continue}if(src){throw new Error("Infinite loop on byte: "+src.charCodeAt(0))}}return out};InlineLexer.prototype.outputLink=function(cap,link){var href=escape(link.href),title=link.title?escape(link.title):null;return cap[0].charAt(0)!=="!"?this.renderer.link(href,title,this.output(cap[1])):this.renderer.image(href,title,escape(cap[1]))};InlineLexer.prototype.smartypants=function(text){if(!this.options.smartypants)return text;return text.replace(/--/g,"").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1").replace(/'/g,"").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1").replace(/"/g,"").replace(/\.{3}/g,"")};InlineLexer.prototype.mangle=function(text){var out="",l=text.length,i=0,ch;for(;i.5){ch="x"+ch.toString(16)}out+="&#"+ch+";"}return out};function Renderer(options){this.options=options||{}}Renderer.prototype.code=function(code,lang,escaped){if(this.options.highlight){var out=this.options.highlight(code,lang);if(out!=null&&out!==code){escaped=true;code=out}}if(!lang){return"
"+(escaped?code:escape(code,true))+"\n
"}return'
'+(escaped?code:escape(code,true))+"\n
\n"};Renderer.prototype.blockquote=function(quote){return"
\n"+quote+"
\n"};Renderer.prototype.html=function(html){return html};Renderer.prototype.heading=function(text,level,raw){return"'+text+"\n"};Renderer.prototype.hr=function(){return this.options.xhtml?"
\n":"
\n"};Renderer.prototype.list=function(body,ordered){var type=ordered?"ol":"ul";return"<"+type+">\n"+body+"\n"};Renderer.prototype.listitem=function(text){return"
  • "+text+"
  • \n"};Renderer.prototype.paragraph=function(text){return"

    "+text+"

    \n"};Renderer.prototype.table=function(header,body){return"\n"+"\n"+header+"\n"+"\n"+body+"\n"+"
    \n"};Renderer.prototype.tablerow=function(content){return"\n"+content+"\n"};Renderer.prototype.tablecell=function(content,flags){var type=flags.header?"th":"td";var tag=flags.align?"<"+type+' style="text-align:'+flags.align+'">':"<"+type+">";return tag+content+"\n"};Renderer.prototype.strong=function(text){return""+text+""};Renderer.prototype.em=function(text){return""+text+""};Renderer.prototype.codespan=function(text){return""+text+""};Renderer.prototype.br=function(){return this.options.xhtml?"
    ":"
    "};Renderer.prototype.del=function(text){return""+text+""};Renderer.prototype.link=function(href,title,text){if(this.options.sanitize){try{var prot=decodeURIComponent(unescape(href)).replace(/[^\w:]/g,"").toLowerCase()}catch(e){return""}if(prot.indexOf("javascript:")===0){return""}}var out='
    ";return out};Renderer.prototype.image=function(href,title,text){var out=''+text+'":">";return out};function Parser(options){this.tokens=[];this.token=null;this.options=options||marked.defaults;this.options.renderer=this.options.renderer||new Renderer;this.renderer=this.options.renderer;this.renderer.options=this.options}Parser.parse=function(src,options,renderer){var parser=new Parser(options,renderer);return parser.parse(src)};Parser.prototype.parse=function(src){this.inline=new InlineLexer(src.links,this.options,this.renderer);this.tokens=src.reverse();var out="";while(this.next()){out+=this.tok()}return out};Parser.prototype.next=function(){return this.token=this.tokens.pop()};Parser.prototype.peek=function(){return this.tokens[this.tokens.length-1]||0};Parser.prototype.parseText=function(){var body=this.token.text;while(this.peek().type==="text"){body+="\n"+this.next().text}return this.inline.output(body)};Parser.prototype.tok=function(){switch(this.token.type){case"space":{return""}case"hr":{return this.renderer.hr()}case"heading":{return this.renderer.heading(this.inline.output(this.token.text),this.token.depth,this.token.text)}case"code":{return this.renderer.code(this.token.text,this.token.lang,this.token.escaped)}case"table":{var header="",body="",i,row,cell,flags,j;cell="";for(i=0;i/g,">").replace(/"/g,""").replace(/'/g,"'")}function unescape(html){return html.replace(/&([#\w]+);/g,function(_,n){n=n.toLowerCase();if(n==="colon")return":";if(n.charAt(0)==="#"){return n.charAt(1)==="x"?String.fromCharCode(parseInt(n.substring(2),16)):String.fromCharCode(+n.substring(1))}return""})}function replace(regex,opt){regex=regex.source;opt=opt||"";return function self(name,val){if(!name)return new RegExp(regex,opt);val=val.source||val;val=val.replace(/(^|[^\[])\^/g,"$1");regex=regex.replace(name,val);return self}}function noop(){}noop.exec=noop;function merge(obj){var i=1,target,key;for(;iAn error occured:

    "+escape(e.message+"",true)+"
    "}throw e}}marked.options=marked.setOptions=function(opt){merge(marked.defaults,opt);return marked};marked.defaults={gfm:true,tables:true,breaks:false,pedantic:false,sanitize:false,smartLists:false,silent:false,highlight:null,langPrefix:"lang-",smartypants:false,headerPrefix:"",renderer:new Renderer,xhtml:false};marked.Parser=Parser;marked.parser=Parser.parse;marked.Renderer=Renderer;marked.Lexer=Lexer;marked.lexer=Lexer.lex;marked.InlineLexer=InlineLexer;marked.inlineLexer=InlineLexer.output;marked.parse=marked;if(typeof module!=="undefined"&&typeof exports==="object"){module.exports=marked}else if(typeof define==="function"&&define.amd){define(function(){return marked})}else{this.marked=marked}}).call(function(){return this||(typeof window!=="undefined"?window:global)}()); \ No newline at end of file diff --git a/mo/resources/owl.css b/mo/resources/owl.css new file mode 100644 index 0000000..9c00876 --- /dev/null +++ b/mo/resources/owl.css @@ -0,0 +1,248 @@ +.RFC2119 { + text-transform: lowercase; + font-style: italic; +} +.nonterminal { + font-weight: bold; + font-family: sans-serif; + font-size: 95%; +} +#abstract br { + /* doesn't work right SOMETIMES + margin-bottom: 1em; */ +} +.name { + font-family: monospace; +} +.buttonpanel { + margin-top: 1ex; + margin-bottom: 1ex; + padding-left: 1ex; + padding-right: 1ex; + padding-top: 1ex; + padding-bottom: 0.6ex; + border: 1px dotted black; +} +.grammar { + margin-top: 1ex; + margin-bottom: 1ex; + padding-left: 1ex; + padding-right: 1ex; + padding-top: 1ex; + padding-bottom: 0.6ex; + border: 1px dashed #2f6fab; + font-family: monospace; +} +.image { + text-align: center; +} +.centered { + text-align: center; + padding-top: 4ex; + padding-bottom: 4ex; +} +.centered table { + margin: 0 auto; + text-align: left; +} +.caption { + font-weight: bold; +} +.indent { + margin-left: 20px; +} +.atrisknote { + padding: 5px; + margin-top: 10px; + margin-bottom: 10px; + border: solid 2px blue; + background-color: #FFA; +} +.atrisknotehead { + font-style: italic; +} + +/* Stying the examples. */ + +.anexample:before { + content: "Example:"; + font-family: sans-serif; + font-size: 1.6ex; + font-weight: bold; +} +.anexample { + margin-top: 1ex; + margin-bottom: 1ex; + padding-left: 1ex; + padding-right: 1ex; + padding-top: 1ex; + padding-bottom: 0.6ex; + border: 1px dashed #2f6fab; + background-color: #f9f9f9; +} +.anexample table { + background-color: #f9f9f9; +} + +/* Styling the parts in the functional-style syntax. */ + +div.fss { + margin-top: 10px; + margin-bottom: 10px; + margin-left: 20px; + margin-right: 20px; + font-family: monospace; +} +table.fss { + margin: 0px 0px 0px 0px; + padding: 0px 0px 0px 0px; + width: 100%; +} +table.fss caption.fss { + font-size: 1.5ex; + font-weight: bold; + text-align: left; + padding-left: 10px; +} +table.fss td:first-child { + font-family: monospace; + padding-left: 20px; + padding-right: 20px; + width: 60%; +} +table{ + background-color: #f4ffff; + border: 1px solid navy; + margin: 20px; + vertical-align: middle; +} +table td { + padding: 5px 15px; + text-align: left; +} + +/* Styling the parts in the RDF syntax. */ + +div.rdf{ + margin-top: 10px; + margin-bottom: 10px; + margin-left: 20px; + margin-right: 20px; + font-family: monospace; +} +table.rdf { + margin: 0px 0px 0px 0px; + padding: 0px 0px 0px 0px; + width: 100%; +} +table.rdf caption.rdf { + font-size: 1.5ex; + font-weight: bold; + text-align: left; + padding-left: 10px; +} +table.rdf td:first-child { + font-family: monospace; + padding-left: 20px; + padding-right: 20px; + width: 60%; +} + +/* Styling the XML syntax. */ + +div.xmlsyn { + margin-top: 10px; + margin-bottom: 10px; + margin-left: 20px; + margin-right: 20px; + font-family: monospace; +} +div.axioms { + margin-top: 10px; + margin-bottom: 10px; + margin-left: 20px; + margin-right: 20px; +} + +/* Other styles. */ + +table.complexity td { + text-align: center; +} +table.allname td { + font-family: monospace; +} +table.canonicalparsing { + margin-left: 20px; + border-style: none; +} +table.canonicalparsing td { + vertical-align: top; + padding: 2px 2px 2px 2px; +} +table.canonicalparsing td.two { + padding-left: 30px; +} + +/* The following are classes for templates used in the editing process. */ + +.review { + padding: 5px; + border: solid 1px black; + margin-left: 10%; + margin-top: 10px; + margin-bottom: 10px; + background-color: #FFA; + font-size: smaller; +} +.reviewauthor { + font-size: smaller; + font-style: italic; +} +.ednote { + padding: 5px; + border: solid 1px black; + margin-top: 10px; + margin-bottom: 10px; +} +.ednotehead { + font-weight: bold; +} + +/* override mediawiki's beautiful DL styling... */ +dl { + background: white; + width: 100%; + border: none; + margin-top: 0; + margin-bottom: 0; + padding-top: 0; + padding-bottom: 0; +} + +div { + margin-top: 0; + margin-bottom: 0; +} +#fulltitle { + font-size: 140%; + font-weight: bold; +} + +.xml { + color: red +} + +.rdbms{ +color: red +} + +/* just copying from wiki, so it stays through TR. Currently + affects Primer, at least */ +pre { + background-color:#F9F9F9; + border:1px dashed #2F6FAB; + color:black; + line-height:1.1em; + padding:1em; +} \ No newline at end of file diff --git a/mo/resources/primer.css b/mo/resources/primer.css new file mode 100644 index 0000000..3136dac --- /dev/null +++ b/mo/resources/primer.css @@ -0,0 +1,103 @@ +/* define a class "noprint" for sections which don't get printed */ +.noprint { display: none; } + +/* our syntax menu for switching */ +div.syntaxmenu { + border: 1px dotted black; + padding:0.5em; + margin: 1em; +} + +.container { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; +} + +@media print { + div.syntaxmenu { display:none; } +} + +/* use tab-like headers for syntax examples */ +div.exampleheader { + font-size: 90%; + float: left; + background: #F9F9F9; + color: #2F6FAB; + border: 1px dashed #2F6FAB; + border-bottom: 0px; + padding-top: 2px; +} + +div.exampleheader span.exampleheader { + background: #F9F9F9; + padding-top: 0px; + padding-right: 10px; + padding-left: 10px; + padding-bottom: 3px; + padding-top: 0px; +} + +/* Also copy MediaWiki style here, so it will not look different when exported */ +div.fssyntax pre, div.rdfxml pre, div.owlxml pre, div.turtle pre, div.manchester pre { + background-color: #F9F9F9; + border: 1px dashed #2F6FAB; + color: black; + line-height: 1.1em; + padding: 1em; + clear: both; + margin-left: 0em; +} +/* Expansion to add the status*/ +.status { + position: fixed; + left: 0em; + top: 0em; + text-align: right; + vertical-align: middle; + /* Square version of the inside span. Slightly larger */ + width: 26em; + height: 26em; + z-index: -1; + opacity: 0.8; + + /** From http://stackoverflow.com/questions/1080792/how-to-draw-vertical-text-with-css-cross-browser */ + + -webkit-transform: rotate(-90deg); + -moz-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + -o-transform: rotate(-90deg); + transform: rotate(-90deg); + /* also accepts left, right, top, bottom coordinates; not + * required, but a good idea for styling */ + -webkit-transform-origin: 50% 50%; + -moz-transform-origin: 50% 50%; + -ms-transform-origin: 50% 50%; + -o-transform-origin: 50% 50%; + transform-origin: 50% 50%; + + /* Should be unset in IE9+ I think. */ + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); +} + +/* The actual status box */ + .status div { + display: block; + background: rgb(0, 90, 156); + color: white; + width: 24em; + padding-top: 0.3em; + padding-left: 0em; + padding-right: 5em; + padding-bottom: 0.3em; + /* Enable for debugging + border: red thin solid; + */ +} + +/* And text inside, don't confuse fonts as it breaks em above */ +.status div span { + font-family: "Tauri"; + font-size: larger; +} \ No newline at end of file diff --git a/mo/resources/rec.css b/mo/resources/rec.css new file mode 100644 index 0000000..d8a1ff2 --- /dev/null +++ b/mo/resources/rec.css @@ -0,0 +1,88 @@ +/* Style for a "Recommendation" */ + +/* + Copyright 1997-2003 W3C (MIT, ERCIM, Keio). All Rights Reserved. + The following software licensing rules apply: + http://www.w3.org/Consortium/Legal/copyright-software */ + +/* $Id: base.css,v 1.25 2006/04/18 08:42:53 bbos Exp $ */ + +body { + padding: 2em 1em 2em 70px; + margin: 0; + font-family: sans-serif; + color: black; + background: white; + background-position: top left; + background-attachment: fixed; + background-repeat: no-repeat; + counter-reset:section; +} +:link { color: #00C; background: transparent } +:visited { color: #609; background: transparent } +a:active { color: #C00; background: transparent } + +a:link img, a:visited img { border-style: none } /* no border on img links */ + +a img { color: white; } /* trick to hide the border in Netscape 4 */ +@media all { /* hide the next rule from Netscape 4 */ + a img { color: inherit; } /* undo the color change above */ +} + +th, td { /* ns 4 */ + font-family: sans-serif; +} + +h1, h2, h3, h4, h5, h6 { text-align: left } +h2.list{counter-reset:subsection } +h2.list:before{counter-increment:section;content: counter(section) ". ";} +h3.list:before{counter-increment:subsection;content: counter(section) "." counter(subsection) ". "; + } +h3.list{margin-top: 20px; + border-bottom: 0px; } +/* background should be transparent, but WebTV has a bug */ +h1, h2, h3 { color: #005A9C; background: white } +h1 { font: 170% sans-serif } +h2 { font: 140% sans-serif } +h3 { font: 120% sans-serif } +h4 { font: bold 100% sans-serif } +h5 { font: italic 100% sans-serif } +h6 { font: small-caps 100% sans-serif } + +.hide { display: none } + +div.head { margin-bottom: 1em } +div.head h1 { margin-top: 2em; clear: both } +div.head table { margin-left: 2em; margin-top: 2em } + +p.copyright { font-size: small } +p.copyright small { font-size: small } + +@media screen { /* hide from IE3 */ +a[href]:hover { background: #ffa } +} + +pre { margin-left: 2em } +/* +p { + margin-top: 0.6em; + margin-bottom: 0.6em; +} +*/ +dt, dd { margin-top: 0; margin-bottom: 0 } /* opera 3.50 */ +dt { font-weight: bold } + +pre, code { font-family: monospace } /* navigator 4 requires this */ + +ul.toc, ol.toc { + list-style: disc; /* Mac NS has problem with 'none' */ + list-style: none; +} + +@media aural { + h1, h2, h3 { stress: 20; richness: 90 } + .hide { speak: none } + p.copyright { volume: x-soft; speech-rate: x-fast } + dt { pause-before: 20% } + pre { speak-punctuation: code } +} diff --git a/mo/webvowl/css/webvowl.app.css b/mo/webvowl/css/webvowl.app.css new file mode 100644 index 0000000..45526ce --- /dev/null +++ b/mo/webvowl/css/webvowl.app.css @@ -0,0 +1,2477 @@ +@import url(http://fonts.googleapis.com/css?family=Open+Sans);/*---------------------------------------------- + WebVOWL page +----------------------------------------------*/ +html { + -ms-content-zooming: none; +} + + + +#loading-progress { + width: 50%; + margin: 10px 0; +} + +#drag_dropOverlay{ + width: 100%; + height:100%; + position:absolute; + top:0; + opacity: 0.5; + background-color: #3071a9; + pointer-events: none; + +} + +#dragDropContainer{ + width: 100%; + height:100%; + position:absolute; + top:0; + pointer-events: none; +} +#drag_icon_group{ + + +} + +#drag_msg{ + width: 50%; + background-color: #fefefe; + height: 50%; + border: black 2px solid; + border-radius: 20px; + left: 25%; + position: absolute; + top: 25%; + vertical-align: middle; + line-height: 10px; + text-align: center; + pointer-events: none; + padding: 10px; + font-size: 1.5em; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + + +#layoutLoadingProgressBarContainer { + height: 50px; + text-align: left; + line-height: 1.5; +} + +#FPS_Statistics { + /*position : absolute;*/ + /*top : 10px;*/ + /*right: 50px;*/ + padding-left: 60px; + padding-top: 60px; +} + +#reloadCachedOntology { + /*position : absolute;*/ + /*top : 10px;*/ + /*right: 50px;*/ +} + +#additionalInformationContainer { + position: absolute; + top: 10px; + right: 50px; +} + +#modeOfOperationString { + /*position: absolute;*/ + /*right: 50px;*/ + /*top : 60px;*/ + padding-left: 34px; +} + +#direct-text-input { + border: 1px solid #34495e; + width: 100%; + margin-top: 5px; + cursor: pointer; +} + +#directUploadBtn, #close_directUploadBtn { + border: 1px solid #34495e; + width: 100%; + margin-top: 5px; + cursor: pointer +} + +#di_controls { + +} + +#di_controls > ul { + list-style: none; + margin: 0; + padding: 5px 0 0 5px; + +} + +#progressBarContext { + border-radius: 10px; + background-color: #bdc3c7; + height: 25px; + border: solid 1px black; + + margin: auto; + +} + +#progressBarValue { + border-radius: 9px; + width: 0%; + background-color: #2980b9; + height: 25px; + line-height: 1.5; + text-align: center; +} + +/** adding searching Styles **/ +.dbEntry { + background-color: #ffffff; + color: #2980b9; + padding: 10px; + font-size: 14px; + border: none; + cursor: pointer; +} + +.debugOption { + +} + +.dbEntrySelected { + background-color: #bdc3c7; + color: #2980b9; + padding: 10px; + font-size: 14px; + border: none; + cursor: pointer; +} + +.dbEntry:hover, .dbEntry:focus { + background-color: #bdc3c7; +} + +.searchMenuEntry { + background-color: #ffffff; + bottom: 0; + font-size: 14px; + min-width: 50px; + margin: 0; + padding: 0; + z-index: 99; + border-radius: 4px 4px 0 0; + border: 1px solid rgba(0, 0, 0, 0.15); + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + box-sizing: border-box; + border-bottom: none; + display: none; + position: absolute; + list-style: none; +} + +.searchInputText { + background-color: #ffffff; + color: black; + border: black; + text-decoration: none; + max-width: 150px; + overflow: hidden; + text-overflow: ellipsis; + /*height: 20px;*/ + margin: 0; +} + +img, iframe { + border: none; +} + +.hidden { + display: none !important; +} + +.clear { + clear: both; +} + +a { + color: #69c; + text-decoration: none; +} + +a:hover { + color: #3498db; +} + +#optionsArea a { + color: #2980b9; +} + +#optionsArea a.highlighted { + background-color: #d90; +} + +.toolTipMenu li.highlighted { + background-color: #feb; +} + +#browserCheck { + /* checking for IE where WebVOWL is not working */ + background-color: #f00; + padding: 5px 0; + position: absolute; + text-align: center; + width: 100%; +} + +#browserCheck a { + color: #fff; +} + +#browserCheck a:hover { + text-decoration: underline; +} + +/*---------------------------------------------- + SideBar Animation Class; +----------------------------------------------- */ +@-webkit-keyframes sbExpandAnimation { + 0% { + width: 78%; + } + 100% { + width: 100%; + } +} + +@-moz-keyframes sbExpandAnimation { + 0% { + width: 78%; + } + 100% { + width: 100%; + } +} + +@-o-keyframes sbExpandAnimation { + 0% { + width: 78%; + } + 100% { + width: 100%; + } +} + +@keyframes sbExpandAnimation { + 0% { + width: 78%; + } + 100% { + width: 100%; + } +} + +/*Collapse Animation*/ +@-webkit-keyframes sbCollapseAnimation { + 0% { + width: 100%; + } + 100% { + width: 78%; + } +} + +@-moz-keyframes sbCollapseAnimation { + 0% { + width: 100%; + } + 100% { + width: 78%; + } +} + +@-o-keyframes sbCollapseAnimation { + 0% { + width: 100%; + } + 100% { + width: 78%; + } +} + +@keyframes sbCollapseAnimation { + 0% { + width: 100%; + } + 100% { + width: 78%; + } +} + +/*---------------------------------------------- + SideBar Animation Class; +----------------------------------------------- */ +@-webkit-keyframes l_sbExpandAnimation { + 0% { + width: 0px; + } + 100% { + width: 200px; + } +} + +@-moz-keyframes l_sbExpandAnimation { + 0% { + width: 0px; + } + 100% { + width: 200px; + } +} + +@-o-keyframes l_sbExpandAnimation { + 0% { + width: 0px; + } + 100% { + width: 200px; + } +} + +@keyframes l_sbExpandAnimation { + 0% { + width: 0px; + } + 100% { + width: 200px; + } +} + +/*Collapse Animation*/ +@-webkit-keyframes l_sbCollapseAnimation { + 0% { + width: 200px; + } + 100% { + width: 0px; + } +} + +@-moz-keyframes l_sbCollapseAnimation { + 0% { + width: 200px; + } + 100% { + width: 0px; + } +} + +@-o-keyframes l_sbCollapseAnimation { + 0% { + width: 200px; + } + 100% { + width: 0px; + } +} + +@keyframes l_sbCollapseAnimation { + 0% { + width: 200px; + } + 100% { + width: 0px; + } +} + +/*----------------- WARNING ANIMATIONS-------------*/ + +/*---------------------------------------------- + SideBar Animation Class; +----------------------------------------------- */ +@-webkit-keyframes warn_ExpandAnimation { + 0% { + top: -500px; + } + 100% { + top: 0; + } +} + +@-moz-keyframes warn_ExpandAnimation { + 0% { + top: -500px; + } + 100% { + top: 0; + } +} + +@-o-keyframes warn_ExpandAnimation { + 0% { + top: -500px; + } + 100% { + top: 0; + } +} + +@keyframes warn_ExpandAnimation { + 0% { + top: -500px; + } + 100% { + top: 0; + } +} + +/*Collapse Animation*/ +@-webkit-keyframes warn_CollapseAnimation { + 0% { + top: 0; + } + 100% { + top: -400px; + } +} + +@-moz-keyframes warn_CollapseAnimation { + 0% { + top: 0; + } + 100% { + top: -400px; + } +} + +@-o-keyframes warn_CollapseAnimation { + 0% { + top: 0; + } + 100% { + top: -400px; + } +} + +@keyframes warn_CollapseAnimation { + 0% { + top: 0; + } + 100% { + top: -400px; + } +} + +@keyframes msg_CollapseAnimation { + 0% { + top: 0; + } + 100% { + top: -400px; + } +} + +/*// add expand and collaps width for the warn module*/ +@-webkit-keyframes warn_ExpandLeftBarAnimation { + 0% { + left: 0; + } + 100% { + left: 100px; + } +} + +@-moz-keyframes warn_ExpandLeftBarAnimation { + 0% { + left: 0; + } + 100% { + left: 100px; + } +} + +@-o-keyframes warn_ExpandLeftBarAnimation { + 0% { + left: 0; + } + 100% { + left: 100px; + } +} + +@keyframes warn_ExpandLeftBarAnimation { + 0% { + left: 0; + } + 100% { + left: 100px; + } +} + +/*Collapse Animation*/ +@-webkit-keyframes warn_CollapseLeftBarAnimation { + 0% { + left: 100px; + } + 100% { + left: 0; + } +} + +@-moz-keyframes warn_CollapseLeftBarAnimation { + 0% { + left: 100px; + } + 100% { + left: 0; + } +} + +@-o-keyframes warn_CollapseLeftBarAnimation { + 0% { + left: 100px; + } + 100% { + left: 0; + } +} + +@keyframes warn_CollapseLeftBarAnimation { + 0% { + left: 100px; + } + 100% { + left: 0; + } +} + +/*// same for the right side expansion*/ + +/*// add expand and collaps width for the warn module*/ +@-webkit-keyframes warn_ExpandRightBarAnimation { + 0% { + width: 100%; + } + 100% { + width: 78%; + } +} + +@-moz-keyframes warn_ExpandRightBarAnimation { + 0% { + width: 100%; + } + 100% { + width: 78%; + } +} + +@-o-keyframes warn_ExpandRightBarAnimation { + 0% { + width: 100%; + } + 100% { + width: 78%; + } +} + +@keyframes warn_ExpandRightBarAnimation { + 0% { + width: 100%; + } + 100% { + width: 78%; + } + +} + +/*Collapse Animation*/ +@-webkit-keyframes warn_CollapseRightBarAnimation { + 0% { + width: 78%; + } + 100% { + width: 100%; + } +} + +@-moz-keyframes warn_CollapseRightBarAnimation { + 0% { + width: 78%; + } + 100% { + width: 100%; + } +} + +@-o-keyframes warn_CollapseRightBarAnimation { + 0% { + width: 78%; + } + 100% { + width: 100%; + } +} + +@keyframes warn_CollapseRightBarAnimation { + 0% { + width: 78%; + } + 100% { + width: 100%; + } +} + +/*---------------------------------------------- + LAYOUT +----------------------------------------------*/ +body { + background: rgb(24, 32, 42); + height: 100%; + font-size: 14px; + font-family: 'Open Sans', Helvetica, Arial, sans-serif; + line-height: 1; + margin: 0; + overflow: hidden; + padding: 0; + position: fixed; + width: 100%; +} + +main { + height: 100%; + margin: 0; + padding: 0; + position: relative; + width: 100%; +} + +#canvasArea { + position: relative; + margin: 0; + padding: 0; + width: 78%; +} + +#canvasArea #graph { + box-sizing: border-box; + margin: 0 0 2px 0; + background-color: #ecf0f1; + overflow: hidden; + padding: 0; + width: 100%; +} + +#canvasArea svg { + box-sizing: border-box; + margin: 0; + overflow: hidden; + padding: 0; +} + +#logo { + position: fixed; + /*padding: 10px;*/ + pointer-events: none; + /*border: solid 1px red;*/ +} + +#logo h2 { + color: #3498db; + margin: 0; + line-height: 0.7; + text-align: center; + font-size: 24px; +} + +#logo h2 span { + color: #34495E; + /*font-size: min(2vmin, 24px);*/ + font-size: 16px; +} + +@media screen and (max-device-height: 800px) { + #logo h2 { + font-size: calc(8px + 1.0vmin); + } + + #logo h2 span { + font-size: calc(3px + 1.0vmin); + } +} + +@media screen and (max-height: 800px) { + #logo h2 { + font-size: calc(8px + 1.0vmin); + } + + #logo h2 span { + font-size: calc(3px + 1.0vmin); + } +} + +@media screen and (max-device-width: 1200px) { + #logo h2 { + font-size: calc(8px + 1.0vmin); + } + + #logo h2 span { + font-size: calc(3px + 1.0vmin); + } +} + +@media screen and (max-width: 1200px) { + #logo h2 { + font-size: calc(8px + 1.0vmin); + } + + #logo h2 span { + font-size: calc(3px + 1.0vmin); + } +} + +.checkboxContainer input, .checkboxContainer label { + vertical-align: middle; +} + +.selected-ontology { + background-color: #eee; +} + +#credits { + border-top: solid 1px #bdc3c7; + font-size: 0.9em; +} + +.slideOption { + position: relative; + padding: 8px 5px; + outline: none; +} + +.slideOption .value { + float: right; + outline: none; +} + +.slideOption input[type="range"] { + box-sizing: border-box; + margin: 0; + outline: none; + -webkit-appearance: none; + -moz-appearance: none; + border-radius: 3px; + height: 12px; + width: 100%; + box-shadow: none; + left: 0; + position: relative; + transition: all 0.5s ease; + background-color: #eee; +} + +/*TRACK*/ +.slideOption input[type=range]::-webkit-slider-runnable-track { + -webkit-appearance: none; + background-color: #3071a9; + height: 3px; +} + +.slideOption input[type=range]::-moz-range-track { + -webkit-appearance: none; + background-color: #3071a9; + height: 3px; +} + +.slideOption input[type="range"]:hover { + outline: none; +} + +/*THUMB*/ +.slideOption input[type="range"]::-webkit-slider-thumb { + -webkit-appearance: none; + background-color: white; + border-radius: 3px; + border: solid 1px black; + transition: all 0.5s ease; + height: 10px; + width: 30px; + outline: none; + margin-top: -3px; +} + +.slideOption input[type="range"]::-moz-range-thumb { + -webkit-appearance: none; + background-color: white; + border-radius: 3px; + border: solid 1px black; + transition: all 0.5s ease; + height: 10px; + width: 30px; + outline: none; +} + +.slideOption input[type="range"]::-moz-range-thumb:hover { + background-color: #d90; + outline: none; +} + +.slideOption input[type="range"]::-webkit-slider-thumb:hover { + background-color: #d90; + /*color: #d90;*/ + outline: none; +} + +/*focus : remove border*/ +.slideOption input[type="range"]:focus { + outline: none; +} + +.slideOption input[type="range"]:active { + outline: none; +} + +.slideOption input[type="range"]::-moz-range-thumb:focus { + outline: none; +} + +.slideOption input[type="range"]::-moz-range-thumb:active { + outline: none; +} + +.slideOption input[type="range"]::-webkit-slider-thumb:focus { + outline: none; +} + +.slideOption input[type="range"]::-webkit-slider-thumb:active { + outline: none; +} + +.slideOption input[type="range"]:disabled { + box-sizing: border-box; + margin: 0; + outline: none; + -webkit-appearance: none; + -moz-appearance: none; + border-radius: 3px; + height: 12px; + width: 100%; + box-shadow: none; + left: 0; + position: relative; + transition: all 0.5s ease; + background-color: #787878; +} + +/*TRACK*/ +.slideOption input[type=range]:disabled::-webkit-slider-runnable-track { + -webkit-appearance: none; + background-color: #373737; + height: 3px; +} + +.slideOption input[type=range]:disabled::-moz-range-track { + -webkit-appearance: none; + background-color: #373737; + height: 3px; +} + +.slideOption input[type="range"]:disabled { + outline: none; +} + +/*THUMB*/ +.slideOption input[type="range"]:disabled::-webkit-slider-thumb { + -webkit-appearance: none; + background-color: #363636; + border-radius: 3px; + border: solid 1px #aaaaaa; + transition: all 0.5s ease; + height: 10px; + width: 30px; + outline: none; + margin-top: -3px; +} + +.slideOption input[type="range"]:disabled::-moz-range-thumb { + -webkit-appearance: none; + background-color: #aaaaaa; + border-radius: 3px; + border: solid 1px black; + transition: all 0.5s ease; + height: 10px; + width: 30px; + outline: none; +} + +.slideOption input[type="range"]:disabled::-moz-range-thumb { + background-color: #aaaaaa; + outline: none; +} + +.slideOption input[type="range"]:disabled::-webkit-slider-thumb { + background-color: #aaaaaa; + /*color: #d90;*/ + outline: none; +} + +.slideOption input[type="range"]:disabled:hover::-moz-range-thumb { + background-color: #404040; + outline: none; +} + +.slideOption input[type="range"]:disabled:hover::-webkit-slider-thumb { + background-color: #404040; + /*color: #d90;*/ + outline: none; +} + +#detailsArea { + top: 0; + right: 0; + bottom: 0; + color: #bdc3c7; + height: 100%; + width: 22%; + overflow-y: auto; + overflow-x: hidden; + position: fixed; + border-left: 1px solid #34495E; +} + +#detailsArea h1 { + border-bottom: solid 1px #34495e; + color: #ecf0f1; + display: block; + font-weight: 100; + font-size: 1.5em; + margin: 0; + padding: 10px 0; + text-align: center; +} + +#generalDetails { + width: auto; + box-sizing: border-box; + height: 100%; +} + +#generalDetails span #about { + border-bottom: solid 1px #34495e; + display: block; + padding: 10px; + text-align: center; + word-wrap: break-word; + color: #69c; +} + +#generalDetails h4 { + background: rgb(27, 37, 46); + color: #ecf0f1; + display: block; + font-size: 1.1em; + font-weight: 100; + margin: 0; + padding: 10px 0; + text-align: center; +} + +#detailsArea #generalDetails h5 { + border-bottom: solid 1px #34495e; + font-size: 0.9em; + font-weight: 100; + margin: 0; + padding: 5px; + text-align: center; +} + +#description { + text-align: justify; +} + +.accordion-container p { + font-size: 0.9em; + line-height: 1.3; + margin: 5px 10px; +} + +.statisticDetails span { + font-weight: 100; + font-style: italic; + margin: 10px 0; + padding: 10px; +} + +.statisticDetails div { + font-weight: 100; + font-style: italic; + margin: 10px 0; + padding: 0 10px; + display: inline; +} + +#selection-details .propDetails a { + color: #69c; +} + +#selection-details .propDetails > span { + font-weight: 100; + font-style: italic; + padding: 0 10px; +} + +#selection-details #classEquivUri span, #selection-details #disjointNodes span { + padding: 0; +} + +#selection-details .propDetails div { + font-weight: 100; + font-style: italic; + margin: 10px 0; + padding: 0 10px; + display: inline; +} + +#selection-details .propDetails div span { + padding: 0; +} + +/* give subclass property the same background color as the canvas */ +.subclass { + fill: #ecf0f1; +} + +.accordion-trigger { + background: #24323e; + cursor: pointer; + padding: .5em; +} + +.accordion-trigger.accordion-trigger-active:before { + padding-right: 4px; + content: "\25BC" +} + +.accordion-trigger:not(.accordion-trigger-active):before { + padding-right: 4px; + content: "\25BA" +} + +.accordion-container.scrollable { + max-height: 40%; + overflow: auto; +} + +.small-whitespace-separator { + height: 3px; +} + +#language { + background: transparent; + border: 1px solid #34495E; + color: #ecf0f1; +} + +#language option { + background-color: #24323e; +} + +.converter-form:not(:first-child) { + margin-top: 5px; +} + +.converter-form label { + display: inline-block; + line-height: normal; +} + +.converter-form input { + box-sizing: border-box; + height: 20px; + width: 74%; + border: 1px solid #34495E; +} + +.converter-form button { + cursor: pointer; + float: right; + height: 20px; + padding: 0; + width: 25%; + border: 1px solid #34495E; + background-color: #ecf0f1; +} + +#file-converter-label { + border: 1px solid #34495E; + box-sizing: border-box; + cursor: pointer; + height: 20px; + width: 74%; +} + +#killWarning { + cursor: pointer; + color: #ffffff; + font-weight: bold; +} + +/*#copyBt{*/ +/*box-sizing: border-box;*/ +/*color: #000000;*/ +/*float:right;*/ +/*position:absolute;*/ +/*right:2px;*/ +/*padding: 2px 7px 3px 7px;*/ +/*border: 1px solid #000000;*/ +/*background-color: #ecf0f1;*/ +/*cursor: pointer;*/ +/*}*/ + +#copyBt { + box-sizing: border-box; + height: 20px; + width: 31%; + border: 1px solid #34495E; +} + +#sidebarExpandButton { + height: 24px; + width: 24px; + /*background-color: white;*/ + /*box-shadow: 0px 1px 1px grey;*/ + box-sizing: border-box; + top: 10px; + color: #000000; + float: right; + position: absolute; + right: 0; + border: 1px solid #000000; + + text-align: center; + font-size: 1.5em; + cursor: pointer; +} + +.dropdownMenuClass { + height: 20px; + /*width: 69%;*/ + float: right; + border: 1px solid #34495E; + background-color: #34495E; + color: white; + /*border-bottom: 1px solid #d90;*/ + text-align: left; + width: auto; +} + +#typeEditForm_datatype { + padding-top: 5px; +} + +#typeEditor { + width: 165px; +} + +#typeEditor_datatype { + width: 165px; +} + +#leftSideBarCollapseButton { + box-sizing: border-box; + top: 50px; + /*padding:5px;*/ + color: #000000; + position: absolute; + left: 200px; + border: 1px solid #000000; + /*background-color: #ecf0f1;*/ + cursor: pointer; + width: 24px; + height: 24px; + font-size: 1.5em; + text-align: center; +} + +#leftSideBarCollapseButton:hover { + background-color: #d90; +} + +#sidebarExpandButton:hover { + background-color: #d90; +} + +.spanForCharSelection { + padding-left: 25px; +} + +.nodeEditSpan { + color: #000; + background-color: #fff; + text-align: center; + /*overflow: auto;*/ + border: none; + padding-top: 6px; +} + +.nodeEditSpan:focus { + outline: none; + border: none; +} + +.foreignelements { + /*width: 80px;*/ + /*height: 3px;*/ + border: none; +} + +.foreignelements:focus { + outline: none; + border: none; +} + +#leftSideBarContent { + color: #000000; + float: left; + position: absolute; + left: 0; + /*border: 1px solid #000000;*/ + background-color: rgb(24, 32, 42); + width: 100%; + height: 100%; +} + +#leftSideBarContent > h3 { + color: #ecf0f1; + display: block; + font-size: 1.1em; + font-weight: 100; + margin: 0 0 5px 0; + padding: 10px 0; + text-align: left; +} + +#generalDetailsEdit { + /*color: #ecf0f1;*/ + color: #ecf0f1; +} + +#generalDetailsEdit > div { + padding: 5px; +} + +#generalDetailsEdit > h3 { + color: #ecf0f1; + display: block; + font-size: 1.1em; + font-weight: 100; + margin: 0 0 5px 0; + padding: 10px 0; + text-align: left; +} + +.subAccordion { + color: #ecf0f1; + display: block; + font-size: 0.8em; + font-weight: 100; + margin: 0; + padding: 5px; + text-align: left; +} + +.subAccordionDescription { + padding: 0 5px; +} + +.boxed { + padding: 0 5px; +} + +.separatorLineRight { + border-right: 1px solid #f00; +} + +.editPrefixButton:hover { + color: #ff972d; + cursor: pointer; +} + +.editPrefixIcon:hover { + stroke: #ff972d; + stroke-width: 1px; + cursor: pointer; +} + +.editPrefixIcon { + stroke: #fffff; + stroke-width: 1px; + cursor: pointer; +} + +.deletePrefixButton:hover { + color: #ff972d; + cursor: pointer; +} + +.deletePrefixButton { + color: #ff0000; + cursor: pointer; +} + +.invisiblePrefixButton { + cursor: default; + color: rgb(24, 32, 42); +} + +#containerForAddPrefixButton { + width: 100%; + margin-top: 5px; +} + +.roundedButton { + border: 1px solid #000000; + border-radius: 20px; + padding: 0 5px; + background: #fff; + cursor: pointer; + color: black; + outline: none; +} + +.roundedButton:hover { + background: #318638; + cursor: pointer; + color: #fff; + outline: none; +} + +#prefixURL_Description { + padding: 5px 0 0 0; +} + +.prefixIRIElements { + display: inline-block; + padding: 3px; + border-bottom: 1px solid #34495E; + width: 100% +} + +.prefixInput { + width: 30px; + display: inline-block; + margin-right: 5px; +} + +.prefixURL { + width: 100px; + display: inline-block; + paddig-left: 5px; +} + +.selectedDefaultElement { + text-align: left; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + display: inline-block; + max-width: 200px; +} + +#editHeader { + color: #ecf0f1; + background-color: #394f5a; + display: block; + font-size: 1.1em; + font-weight: 100; + text-align: center; +} + +#leftHeader { + color: #ecf0f1; + background-color: #394f5a; + display: block; + font-size: 1.1em; + font-weight: 100; + text-align: center; + padding: 10px 0; + margin: 0; +} + +.containerForDefaultSelection { + color: #ecf0f1; + display: block; + font-size: 1.1em; + font-weight: 100; + margin: 0; + padding: 10px 20px; + text-align: left; +} + +.defaultSelected { + color: #a15d05; + background-color: #283943; +} + +.containerForDefaultSelection:hover { + color: #f19505; + background-color: #394f5a; + display: block; + cursor: pointer; +} + +#containerForLeftSideBar { + top: 50px; + float: left; + position: absolute; + background-color: #1b252e; + left: 0; + width: 200px; + height: 200px; + overflow-y: auto; + overflow-x: hidden; +} + +#leftSideBar { + width: 100%; + background-color: rgb(24, 32, 42); +} + +#loading-info { + box-sizing: border-box; + position: absolute; + text-align: center; + + width: 100%; + height: 80%; + top: 0; +} + +#loading-info > div { + display: inline-block; + color: #ffffff; + background-color: #18202A; + border-bottom-left-radius: 2px; + border-bottom-right-radius: 2px; +} + +#loading-info > * > * { + padding: 5px; +} + +#loading-info { + pointer-events: none; +} + +#loading-progress { + pointer-events: auto; + min-width: 220px; + border-radius: 10px; +} + +#show-loadingInfo-button { + font-size: 12px; + color: #fff; + cursor: pointer; + text-align: center; +} + +#loadingIndicator_closeButton:hover { + color: #ff972d; + cursor: pointer; + +} + +#loadingIndicator_closeButton { + color: #ffe30f; + cursor: pointer; + padding-bottom: 5px; + float: right; +} + +.busyProgressBar { + background-color: #000; + height: 25px; + position: relative; + animation: busy 2s linear infinite; +} + +@-webkit-keyframes busy { + 0% { + left: 0%; + } + 50% { + left: 80%; + } + 100% { + left: 0%; + } +} + +#bulletPoint_container { + padding-left: 15px; + margin-top: 0px; + margin-bottom: 0px; +} + +#bulletPoint_container > div { + margin-left: -15px; +} + +#loadingInfo-container { + box-sizing: border-box; + text-align: left; + line-height: 1.2; + padding-top: 5px; + overflow: auto; + /*white-space: nowrap;*/ + /*min-width: 250px;*/ + height: 120px; + min-height: 40px; + background-color: #3c3c3c; + +} + +#error-description-button { + margin: 5px 0 0 0; + font-size: 12px; + color: #69c; + cursor: pointer; + text-align: center; +} + +#error-description-container { + box-sizing: border-box; + text-align: left; +} + +#error-description-container pre { + background-color: #34495E; + padding: 2px; + margin: 0; + white-space: pre-wrap; + max-height: calc(100vh - 125px); + max-width: 75vw; + overflow: auto; +} + +.spin { + display: inline-block; + -webkit-animation: spin 2s infinite linear; + animation: spin 2s infinite linear; +} + +@-webkit-keyframes spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} + +@keyframes spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} + +.truncate { + max-width: 250px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.color-mode-switch { + float: right; + width: 90px; + cursor: pointer; + height: 20px; + padding: 0; + border: 0; + color: #555; + background-color: #ECEEEF; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2), inset 0 0 3px rgba(0, 0, 0, 0.1); +} + +.color-mode-switch:focus { + outline-width: 0; +} + +.color-mode-switch.active { + color: #FFF; + background-color: #32CD32; + box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.2), inset 0 0 3px rgba(0, 0, 0, 0.1); +} + +/* adding button pulse animation*/ +.filterMenuButtonHighlight { + background-color: #d90; +} + +@-webkit-keyframes buttonAnimation { + 0% { + background-color: unset; + } + 100% { + background-color: #d90; + } +} + +@-moz-keyframes buttonAnimation { + 0% { + background-color: unset; + } + 100% { + background-color: #d90; + } +} + +@-o-keyframes buttonAnimation { + 0% { + background-color: unset; + } + 100% { + background-color: #d90; + } +} + +@keyframes buttonAnimation { + 0% { + background-color: unset; + } + 100% { + background-color: #d90; + } +} + +.buttonPulse { + -webkit-animation-name: buttonAnimation; + -moz-animation-name: buttonAnimation; + -o-animation-name: buttonAnimation; + animation-name: buttonAnimation; + + -webkit-animation-duration: 0.5s; + -moz-animation-duration: 0.5s; + -o-animation-duration: 0.5s; + animation-duration: 0.5s; + + -webkit-animation-iteration-count: 3; + -moz-animation-iteration-count: 3; + -o-animation-iteration-count: 3; + animation-iteration-count: 3; + + -webkit-animation-timing-function: linear; + -moz-animation-timing-function: linear; + -o-animation-timing-function: linear; + animation-timing-function: linear; + + +} + +/*swipe bar definition*/ + +/*Overwriting individual menu widths*/ +#m_about { + max-width: 200px; + width: 200px; + position: absolute; + +} + +#m_modes { + max-width: 160px; + width: 160px; + position: absolute; +} + +#m_filter { + max-width: 170px; + width: 170px; + position: absolute; +} + +#m_gravity { + max-width: 180px; + width: 180px; + position: absolute; +} + +#m_export { + max-width: 160px; + width: 160px; + position: absolute; + +} + +#exportedUrl { + width: 100px; +} + +#m_select { + max-width: 300px; + width: 300px; + position: absolute; +} + +#m_config { + max-width: 240px; + width: 240px; + position: absolute; +} + +#m_search { + max-width: 250px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +/***************** REWRITING MENU ELEMENT CONTAINERS ***********************/ +/*Container which holds the swipeBar*/ +#swipeBarContainer { + position: fixed; + width: 77.8%; + height: 40px; + margin: 0; + padding: 0; + bottom: 0; +} + +/*Scroll-able container for the menu entries */ +#menuElementContainer { + margin: 0; + padding: 0; + overflow-x: auto; + overflow-y: hidden; + white-space: nowrap; + text-align: right; + list-style-type: none; +} + +/*Style for the individual menu entries*/ +#menuElementContainer > li { + display: inline-block; + box-sizing: border-box; + text-align: left; + position: relative; + height: 40px; + font-size: 14px; + color: #ffffff; + padding: 12px 0 0; + margin-left: -4px; +} + +/*Font-color Style for menu entries */ +#menuElementContainer > li > a { + color: #fff; + padding: 9px 12px 12px 30px; +} + +.menuElementSvgElement { + height: 20px; + width: 20px; + display: block; + position: absolute; + top: 10px; + left: 8px; +} + +.btn_shadowed { + background-color: #fefefe; + box-shadow: 1px 1px 1px gray; +} + +.reloadCachedOntologyIcon { + height: 20px; + width: 108px; + display: block; + position: absolute; + top: 20px; + left: 3px; + /*background: #ecf0f1;;*/ + border: solid 1px black; + border-radius: 10px; + cursor: pointer; +} + +.reloadCachedOntologyIcon:disabled { + background: #f4f4f4; + cursor: auto; + border: solid 1px darkgray; + +} + +.reloadCachedOntologyIcon:hover { + background: #d90; + cursor: pointer; +} + +.disabledReloadElement { + cursor: auto; + background: #F4F4F4; + pointer-events: auto; + border: solid 1px darkgray; + color: #bbbbbb; +} + +.disabledReloadElement:hover { + cursor: auto; + background: #EEEEEE; + pointer-events: auto; +} + +#menuElementContainer > li > input { + color: #000; + /*padding : 0 0.3em 0 1.5em;*/ + padding: 0.1em .3em 0.1em 1.5em; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + width: 120px; +} + +/*Hovered behavior for the menu entries*/ +#menuElementContainer > li > a:hover { + box-sizing: border-box; + background: #1B252E; + /*background : #d90;*/ + color: #bdc3c7; + +} + +#empty:hover { + box-sizing: border-box; + background: #e1e1e1; + /*background : #d90;*/ + color: #2980b9; +} + +#empty.disabled { + pointer-events: none; + cursor: default; + color: #979797; +} + +.disabled { + pointer-events: none; + cursor: default; + color: #979797; +} + +/*ToolTip Menu Definition*/ +.toolTipMenu { + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + box-sizing: border-box; + background-color: #ffffff; + border: 1px solid rgba(0, 0, 0, 0.15); + border-bottom: none; + border-radius: 4px 4px 0 0; + bottom: 0; + display: none; + font-size: 14px; + list-style: none; + /*max-width: 300px;*/ + margin: 0; + padding: 0; + white-space: normal; + position: absolute; + z-index: 99; +} + +.toolTipMenu > li:first-of-type { + border: none; +} + +.toolTipMenu a { + color: #2980b9; +} + +.toolTipMenu > li { + border-top: solid 1px #bdc3c7; +} + +.toolTipMenu li { + color: #2980b9; + display: block; +} + +/*MenuElement hovering enables the toolTip of the corresponding menu*/ +#menuElementContainer > li:hover .toolTipMenu { + display: block; +} + +#menuElementContainer li > ul.toolTipMenu li a:hover { + background: #e1e1e1; +} + +/****************************************************************************/ +/*ScrollButton behavior*/ +#scrollLeftButton { + height: 30px; + width: 30px; + padding: 5px 0 5px 10px; + color: #fff; + cursor: pointer; + position: absolute; + margin-top: -2px; + font-size: 2em; + background-color: #24323e; + left: 0; +} + +#scrollLeftButton:focus { + outline: none; +} + +#scrollLeftButton:before { + content: "<"; +} + +/*Right Scroll Button*/ +#scrollRightButton { + height: 30px; + width: 30px; + padding: 5px 0 5px 10px; + color: #fff; + cursor: pointer; + position: absolute; + margin-top: -2px; + font-size: 2em; + background-color: #24323e; + right: 0; +} + +#scrollRightButton:focus { + outline: none; +} + +#scrollRightButton:hover { + color: #bdc3c7; +} + +#scrollLeftButton:hover { + color: #bdc3c7; +} + +#scrollRightButton:before { + content: ">"; +} + +#centerGraphButton, #zoomInButton, #zoomOutButton { + border: 1px solid #000000; + text-align: center; + margin: -1px 0 0 0; + font-size: 1.5em; + padding: 0; + height: 28px; +} + +.noselect { + -webkit-touch-callout: none; /* iOS Safari */ + -webkit-user-select: none; /* Safari */ + -khtml-user-select: none; /* Konqueror HTML */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* Internet Explorer/Edge */ + user-select: none; + /* Non-prefixed version, currently + supported by Chrome and Opera */ +} + +#zoomOutButton { + line-height: 22px; +} + +#centerGraphButton { + line-height: 25px; +} + +#zoomInButton { + line-height: 25px; +} + +#zoomSlider > p:hover { + background-color: #d90; +} + +#zoomSliderParagraph { + color: #000000; + padding-top: 5px; + margin: -1px 0 0 0; + border: 1px solid #000000; + /*background-color: #ecf0f1;*/ + /*width: 28px;*/ + height: 150px; +} + +p#zoomSliderParagraph:hover { + background-color: #fff; +} + +/*todo put this in a proper position*/ +#zoomSlider { + width: 28px; + margin-top: -2px; + padding: 0; + font-size: 1.5em; + cursor: pointer; + position: absolute; + right: 20px; + bottom: 20px; + color: #000; + /*background-color: #ecf0f1;*/ + box-sizing: border-box; +} + +/****************************************************************************/ +/*Definition for the Icons before*/ +#menuElementContainer > li > a::before { + font-size: 1em; + margin: 0; + padding: 0 6px 0 0; +} + +#menuElementContainer a.highlighted { + background-color: #d90; +} + +/*#search-input-text.searchInputText {*/ +/*!*padding: 0 0.2em;*!*/ +/*color: black;*/ +/*}*/ + +.inner-addon { + position: relative; +} + +.searchIcon { + position: absolute; + /*padding: 0.15em 0;*/ + width: 17px; + height: 17px; + + pointer-events: none; +} + +.gearIcon { + position: absolute; + width: 17px; + height: 17px; + pointer-events: none; + left: -5px; +} + +/*#search-input-text::before {*/ +/*!*padding: 0 0.2em;*!*/ +/*!*color: black;*!*/ +/*font-size: 1.4em; !* todo : test this *!*/ +/*!*content: "\2315";*!*/ +/*content: "⚲";*/ +/*color: white;*/ +/*padding: 0;*/ +/*-webkit-transform: rotate(-45deg);*/ +/*!*content: "\2315" or "\1F50D"*!;*/ +/*display: inline-block;*/ +/*position: relative;*/ +/*top: 2px;*/ +/*left:-5px;*/ +/*}*/ + +li#c_search { + padding: 0 5px; + margin-left: 5px; + height: 20px; +} + +/*Menu icons before the links selection */ +/*#c_select > a::before { content: "\2263"; }*/ +/*#c_export > a::before { content: "\21E4"; }*/ +/*#c_gravity > a::before { content: "\2299"; }*/ +/*#c_filter > a::before { content: "\25BD"; }*/ +/*#c_modes > a::before { content: "\2606"; }*/ +/*#c_reset > a::before { content: "\21BB"; }*/ +/*#c_about > a::before { content: "\00A9"; }*/ + +li#c_locate { + padding: 0; +} + +#c_locate > a { + font-size: 2em; + padding: 0; +} + +a#pause-button { + padding: 12px 12px; +} + +/*Pause Button has a different behavior*/ +a#pause-button.paused::before { + content: "\25BA"; +} + +a#pause-button.paused:hover { + background-color: #d90; + color: #fff; +} + +a#pause-button:not(.paused)::before { + content: "II"; +} + +.toolTipMenu li:hover { + background-color: #e1e1e1; +} + +#emptyLiHover { + background-color: #FFFFFF; +} + +#emptyLiHover:hover { + background-color: #FFFFFF; +} + +.toggleOption li:hover { + background-color: #e1e1e1; +} + +.toggleOption { + padding: 8px 5px; +} + +#converter-option:hover { + background-color: #ffffff; +} + +.toolTipMenu li a:only-child, .option { + display: block; + float: none; + padding: 8px 5px; +} + +.customLocate { + padding: 0; + background-color: #32CD32; +} + +a#locateSearchResult { + padding-bottom: 0; + padding-top: 50px; + position: relative; + top: 5px; +} + +/*#sliderRange{*/ +/*padding: 0;*/ +/*margin: 7px 0 0 0;*/ +/*width:100%;*/ +/*height:5px;*/ +/*-webkit-appearance: none;*/ +/*outline: none;*/ +/*}*/ + +#zoomSliderElement { + color: #000; + position: relative; + padding-top: 0; + width: 155px; + height: 24px; + background-color: transparent; + -webkit-transform-origin-x: 73px; + -webkit-transform-origin-y: 73px; + -webkit-transform: rotate(-90deg); + -moz-transform-origin: 73px 73px; + transform: rotate(-90deg); + transform-origin: 73px 73px; + -webkit-appearance: none; + outline: none; + margin: 4px 0; +} + +/* ------------------ Zoom Slider styles --------------------------*/ +#zoomSliderElement::-webkit-scrollbar { + height: 0; +} + +#zoomSliderElement:hover { + cursor: crosshair; +} + +/*TRACK*/ +#zoomSliderElement::-webkit-slider-runnable-track { + width: 100%; + height: 5px; + cursor: pointer; + background: #3071a9; +} + +#zoomSliderElement::-moz-range-track { + width: 100%; + height: 5px; + cursor: pointer; + background: #3071a9; +} + +/*Thumb*/ +#zoomSliderElement::-webkit-slider-thumb { + -webkit-appearance: none; + border: 1px solid #000000; + height: 10px; + width: 30px; + margin-right: 50px; + border-radius: 3px; + background: #fff; + cursor: pointer; + outline: none; + margin-top: -3px; +} + +#zoomSliderElement::-ms-thumb { + -webkit-appearance: none; + border: 1px solid #000000; + height: 10px; + width: 30px; + margin-right: 50px; + border-radius: 3px; + background: #fff; + cursor: pointer; + outline: none; + margin-top: -3px; +} + +#zoomSliderElement::-ms-thumb:hover { + -webkit-appearance: none; + border: 1px solid #000000; + height: 10px; + width: 30px; + margin-right: 50px; + border-radius: 3px; + background: #d90; + cursor: pointer; + outline: none; + margin-top: -3px; +} + +#zoomSliderElement::-webkit-slider-thumb:hover { + -webkit-appearance: none; + border: 1px solid #000000; + height: 10px; + width: 30px; + margin-right: 50px; + border-radius: 3px; + background: #d90; + cursor: pointer; + outline: none; + margin-top: -3px; +} + +#zoomSliderElement::-moz-range-thumb { + border: 1px solid #000000; + height: 10px; + width: 30px; + border-radius: 3px; + /*background: #ffffff;*/ + cursor: pointer; + outline: none; +} + +#zoomSliderElement::-moz-range-thumb:hover { + border: 1px solid #000000; + height: 10px; + width: 30px; + border-radius: 3px; + background: #d90; + cursor: pointer; + outline: none; +} + +#zoomSliderElement::-moz-focus-outer { + border: 0; +} + +#locateSearchResult:focus { + outline: none; + +} + +a#locateSearchResult.highlighted:hover { + background-color: #d90; + color: red; +} + +a#locateSearchResult { + outline: none; + padding-bottom: 0; + padding-top: 0; + position: relative; + top: 5px; +} + +/*Editor hints*/ +#editorHint { + padding: 5px 5px; + position: absolute; + text-align: center; + width: 100%; + pointer-events: none; +} + +#editorHint label { + pointer-events: auto; + float: right; + padding: 5px 5px; + color: #ffdd00; +} + +#editorHint label:hover { + text-decoration: underline; + cursor: pointer; +} + +#editorHint > div { + pointer-events: auto; + text-align: left; + display: inline-block; + color: #ffffff; + font-size: 0.8em; + background-color: #18202A; + padding: 5px 5px; + border-radius: 5px; + +} + +#WarningErrorMessagesContainer { + position: absolute; + text-align: center; + top: 0; + pointer-events: none; +} + +/*Editor hints*/ +#WarningErrorMessages { + position: relative; + /*text-align: center;*/ + width: 50%; + pointer-events: auto; + margin: 10px 0; + padding-right: 12px; + overflow-y: auto; + overflow-x: hidden; +} + +#WarningErrorMessages label { + pointer-events: auto; + float: right; + padding: 5px 5px; + color: #ffdd00; +} + +#WarningErrorMessages span { + pointer-events: auto; + float: right; + padding: 5px 5px; +} + +#WarningErrorMessages label:hover { + text-decoration: underline; + cursor: pointer; +} + +#WarningErrorMessages > div { + pointer-events: auto; + text-align: left; + display: inline-block; + color: #ffffff; + font-size: 0.8em; + background-color: #18202A; + padding: 5px 5px; + border-radius: 10px; + border: solid 1px #ecf0f1; + width: 70%; + +} + +#WarningErrorMessagesContent > ul { + -webkit-padding-start: 20px; + padding: 0 16px; + +} + +#WarningErrorMessagesContent > ul > li { + padding: 5px; +} + +.converter-form-Editor { + /*display: inline-block;*/ +} + +.textLineEditWithLabel { + display: inline-block; + width: 100%; + border-bottom: 1px solid #34495E; + padding: 2px 0; + +} + +.converter-form-Editor label { + /*//display: inline-block;*/ + line-height: normal; +} + +.descriptionTextClass { + background-color: #34495E; + color: white; +} + +.prefixIRIElements input { + border: 1px solid #34495E; + background-color: #34495E; + color: white; +} + +.prefixIRIElements input:disabled { + background-color: rgb(24, 32, 42); + border: 1px solid rgb(24, 32, 42); + color: white; +} + +.converter-form-Editor input { + /*box-sizing: border-box;*/ + /*height: 18px;*/ + /*width: 69%;*/ + float: right; + border: 1px solid #34495E; + background-color: #34495E; + color: white; + /*border-bottom: 1px solid #d90;*/ + /*text-align: center;*/ + /*display: inline-block;*/ +} + +.converter-form-Editor input:disabled { + background-color: #545350; + border: 1px solid #34495E; + color: #939798; +} + +.disabledLabelForSlider { + color: #808080; +} diff --git a/mo/webvowl/css/webvowl.css b/mo/webvowl/css/webvowl.css new file mode 100644 index 0000000..bd06623 --- /dev/null +++ b/mo/webvowl/css/webvowl.css @@ -0,0 +1,296 @@ +/*----------------------------------------------------------------- + VOWL graphical elements (part of spec) - mixed CSS and SVG styles +-----------------------------------------------------------------*/ + +/*-------- Text --------*/ +.text { + font-family: Helvetica, Arial, sans-serif; + font-size: 12px; +} + +.subtext { + font-size: 9px; +} + +.text.instance-count { + fill: #666; +} + +.external + text .instance-count { + fill: #aaa; +} + +.cardinality { + font-size: 10px; +} + +.text, .embedded { + pointer-events: none; +} + +/*------- Colors ------*/ +.class, .object, .disjoint, .objectproperty, .disjointwith, .equivalentproperty, .transitiveproperty, .functionalproperty, .inversefunctionalproperty, .symmetricproperty, .allvaluesfromproperty, .somevaluesfromproperty { + fill: #acf; +} + +.label .datatype, .datatypeproperty { + fill: #9c6; +} + +.rdf, .rdfproperty { + fill: #c9c; +} + +.literal, .node .datatype { + fill: #fc3; +} + +.deprecated, .deprecatedproperty { + fill: #ccc; +} + +.external, .externalproperty { + /*fill: #36c;*/ +} + +path, .nofill { + fill: none; +} + +marker path { + fill: #000; +} + +.class, path, line, .fineline { + stroke: #000; +} + +.white, .subclass, .subclassproperty, .external + text { + fill: #fff; +} + +.class.hovered, .property.hovered, .cardinality.hovered, .cardinality.focused, .filled.hovered, .filled.focused, .values-from.filled.hovered { + fill: #f00 !important; + cursor: pointer; +} + +.hoveredForEditing { + fill: #f00 !important; + cursor: pointer; +} + +.feature { + fill: #f00; + cursor: pointer; +} + +@-webkit-keyframes pulseAnimation { + 0% { + -webkit-transform: scale(1.5); + stroke-width: 3.33; + } + 50% { + stroke-width: 4; + } + 100% { + -webkit-transform: scale(1.0); + stroke-width: 5; + } +} + +@-moz-keyframes pulseAnimation { + 0% { + -webkit-transform: scale(1.5); + stroke-width: 3.33; + } + 50% { + stroke-width: 4; + } + 100% { + -webkit-transform: scale(1.0); + stroke-width: 5; + } +} + +@-o-keyframes pulseAnimation { + 0% { + -webkit-transform: scale(1.5); + stroke-width: 3.33; + } + 50% { + stroke-width: 4; + } + 100% { + -webkit-transform: scale(1.0); + stroke-width: 5; + } +} + +@keyframes pulseAnimation { + 0% { + -webkit-transform: scale(1.5); + stroke-width: 3.33; + } + 50% { + stroke-width: 4; + } + 100% { + -webkit-transform: scale(1.0); + stroke-width: 5; + } +} + +.searchResultA { + fill: none; + stroke-width: 5; + stroke: #f00; + -webkit-animation-name: pulseAnimation; + -moz-animation-name: pulseAnimation; + -o-animation-name: pulseAnimation; + animation-name: pulseAnimation; + + -webkit-animation-duration: 0.8s; + -moz-animation-duration: 0.8s; + -o-animation-duration: 0.8s; + animation-duration: 0.8s; + + -webkit-transform: translateZ(0); + -o-transform: translateZ(0); + -webkit-animation-iteration-count: 3; + -moz-animation-iteration-count: 3; + -o-animation-iteration-count: 3; + animation-iteration-count: 3; + + -webkit-animation-timing-function: linear; + -moz-animation-timing-function: linear; + -o-animation-timing-function: linear; + animation-timing-function: linear; + +} + +/* a class for not animated search results (hovered over node)*/ +.searchResultB { + fill: none; + stroke-width: 5; + stroke: #f00; +} + +.hovered-MathSymbol { + fill: none; + stroke: #f00 !important; +} + +.focused, path.hovered { + stroke: #f00 !important; +} + +.indirect-highlighting, .feature:hover { + fill: #f90; + cursor: pointer; +} + +.feature_hover { + fill: #f90; + cursor: pointer; +} + +.values-from { + stroke: #69c; +} + +.symbol, .values-from.filled { + fill: #69c; +} + +/*------- Strokes ------*/ +.class, path, line { + stroke-width: 2; +} + +.fineline { + stroke-width: 1; +} + +.dashed, .anonymous { + stroke-dasharray: 8; +} + +.dotted { + stroke-dasharray: 3; +} + +rect.focused, circle.focused { + stroke-width: 4px; +} + +.nostroke { + stroke: none; +} + +/*----------------------------------------------------------------- + Additional elements for the WebVOWL demo (NOT part of spec) +-----------------------------------------------------------------*/ + +.addDataPropertyElement { + fill: #9c6 !important; + cursor: pointer; + stroke-width: 2; + stroke: black; +} + +.addDataPropertyElement:hover { + fill: #f90 !important; + cursor: pointer; + stroke-width: 2; + stroke: black; +} + +.superHiddenElement { + fill: rgba(255, 153, 0, 0.4); + cursor: pointer; + stroke-width: 0; + stroke: black; + /*opacity:0;*/ +} + +.superOpacityElement { + opacity: 0; +} + +.deleteParentElement:hover { + fill: #f90; + cursor: pointer; + stroke-width: 2; + stroke: black; +} + +.deleteParentElement { + fill: #f00; + cursor: pointer; + stroke-width: 2; + stroke: black; +} + +.classNodeDragPath { + stroke: black; + stroke-width: 2px; +} + +.classDraggerNodeHovered { + fill: #f90; + stroke: black; + stroke-width: 2px; + cursor: pointer; +} + +.classDraggerNode { + fill: #acf; + stroke: black; + stroke-width: 2px; +} + +marker path { + /* Safari and Chrome workaround for inheriting the style of its link. + Use any value that is larger than the length of the marker path. */ + stroke-dasharray: 100; +} diff --git a/mo/webvowl/data/foaf.json b/mo/webvowl/data/foaf.json new file mode 100644 index 0000000..4897985 --- /dev/null +++ b/mo/webvowl/data/foaf.json @@ -0,0 +1,2894 @@ +{ + "_comment" : "Created with OWL2VOWL (version 0.3.7), http://vowl.visualdataweb.org", + "header" : { + "languages" : [ "undefined" ], + "baseIris" : [ "http://schema.org", "http://www.w3.org/2000/01/rdf-schema", "http://www.w3.org/2003/01/geo/wgs84_pos", "http://purl.org/dc/terms", "http://www.w3.org/2001/XMLSchema", "http://xmlns.com/foaf/0.1", "http://www.w3.org/2000/10/swap/pim/contact", "http://www.w3.org/2004/02/skos/core" ], + "prefixList" : { + "owl" : "http://www.w3.org/2002/07/owl#", + "rdf" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#", + "wot" : "http://xmlns.com/wot/0.1/", + "xsd" : "http://www.w3.org/2001/XMLSchema#", + "dc" : "http://purl.org/dc/elements/1.1/", + "xml" : "http://www.w3.org/XML/1998/namespace", + "vs" : "http://www.w3.org/2003/06/sw-vocab-status/ns#", + "foaf" : "http://xmlns.com/foaf/0.1/", + "rdfs" : "http://www.w3.org/2000/01/rdf-schema#" + }, + "title" : { + "undefined" : "Friend of a Friend (FOAF) vocabulary" + }, + "iri" : "http://xmlns.com/foaf/0.1/", + "description" : { + "undefined" : "The Friend of a Friend (FOAF) RDF vocabulary, described using W3C RDF Schema and the Web Ontology Language." + }, + "other" : { + "title" : [ { + "identifier" : "title", + "language" : "undefined", + "value" : "Friend of a Friend (FOAF) vocabulary", + "type" : "label" + } ] + } + }, + "namespace" : [ ], + "class" : [ { + "id" : "3", + "type" : "owl:Thing" + }, { + "id" : "9", + "type" : "owl:Class" + }, { + "id" : "1", + "type" : "owl:equivalentClass" + }, { + "id" : "18", + "type" : "owl:Thing" + }, { + "id" : "19", + "type" : "owl:Thing" + }, { + "id" : "5", + "type" : "owl:Thing" + }, { + "id" : "20", + "type" : "rdfs:Literal" + }, { + "id" : "8", + "type" : "rdfs:Literal" + }, { + "id" : "11", + "type" : "owl:Class" + }, { + "id" : "21", + "type" : "owl:Thing" + }, { + "id" : "22", + "type" : "rdfs:Literal" + }, { + "id" : "24", + "type" : "rdfs:Literal" + }, { + "id" : "26", + "type" : "rdfs:Literal" + }, { + "id" : "27", + "type" : "rdfs:Literal" + }, { + "id" : "37", + "type" : "owl:equivalentClass" + }, { + "id" : "45", + "type" : "rdfs:Literal" + }, { + "id" : "46", + "type" : "rdfs:Literal" + }, { + "id" : "53", + "type" : "rdfs:Literal" + }, { + "id" : "56", + "type" : "rdfs:Literal" + }, { + "id" : "59", + "type" : "rdfs:Literal" + }, { + "id" : "60", + "type" : "owl:Class" + }, { + "id" : "61", + "type" : "rdfs:Literal" + }, { + "id" : "6", + "type" : "rdfs:Literal" + }, { + "id" : "62", + "type" : "rdfs:Literal" + }, { + "id" : "12", + "type" : "owl:equivalentClass" + }, { + "id" : "55", + "type" : "rdfs:Literal" + }, { + "id" : "69", + "type" : "rdfs:Literal" + }, { + "id" : "71", + "type" : "owl:Class" + }, { + "id" : "36", + "type" : "owl:Class" + }, { + "id" : "86", + "type" : "owl:Class" + }, { + "id" : "83", + "type" : "owl:Class" + }, { + "id" : "94", + "type" : "owl:Class" + }, { + "id" : "73", + "type" : "rdfs:Literal" + }, { + "id" : "68", + "type" : "rdfs:Literal" + }, { + "id" : "93", + "type" : "rdfs:Literal" + }, { + "id" : "33", + "type" : "owl:Thing" + }, { + "id" : "49", + "type" : "rdfs:Literal" + }, { + "id" : "29", + "type" : "owl:Thing" + }, { + "id" : "101", + "type" : "rdfs:Literal" + }, { + "id" : "39", + "type" : "owl:Thing" + }, { + "id" : "63", + "type" : "owl:equivalentClass" + }, { + "id" : "64", + "type" : "owl:equivalentClass" + }, { + "id" : "102", + "type" : "owl:equivalentClass" + }, { + "id" : "78", + "type" : "owl:Class" + }, { + "id" : "77", + "type" : "owl:Class" + }, { + "id" : "13", + "type" : "owl:equivalentClass" + }, { + "id" : "58", + "type" : "rdfs:Literal" + }, { + "id" : "100", + "type" : "rdfs:Literal" + }, { + "id" : "106", + "type" : "rdfs:Literal" + }, { + "id" : "52", + "type" : "rdfs:Literal" + }, { + "id" : "88", + "type" : "rdfs:Literal" + }, { + "id" : "118", + "type" : "rdfs:Literal" + }, { + "id" : "126", + "type" : "owl:Class" + }, { + "id" : "2", + "type" : "owl:equivalentClass" + }, { + "id" : "32", + "type" : "owl:equivalentClass" + }, { + "id" : "10", + "type" : "owl:Class" + } ], + "classAttribute" : [ { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "3", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2004/02/skos/core#Concept", + "baseIri" : "http://www.w3.org/2004/02/skos/core", + "instances" : 0, + "label" : { + "IRI-based" : "Concept", + "undefined" : "Concept" + }, + "attributes" : [ "external" ], + "id" : "9" + }, { + "iri" : "http://xmlns.com/foaf/0.1/Agent", + "equivalent" : [ "13" ], + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Agent", + "undefined" : "Agent" + }, + "subClasses" : [ "10", "11", "12" ], + "comment" : { + "undefined" : "An agent (eg. person, group, software or physical artifact)." + }, + "attributes" : [ "equivalent" ], + "id" : "1" + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "18", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "19", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "5", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "20", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "id" : "8", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://xmlns.com/foaf/0.1/Organization", + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Organization", + "undefined" : "Organization" + }, + "comment" : { + "undefined" : "An organization." + }, + "id" : "11", + "superClasses" : [ "1" ] + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "21", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "22", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "24", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "26", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "27", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://schema.org/CreativeWork", + "baseIri" : "http://schema.org", + "instances" : 0, + "label" : { + "IRI-based" : "CreativeWork" + }, + "attributes" : [ "external", "equivalent" ], + "id" : "37" + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "45", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "46", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "53", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "56", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "59", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://xmlns.com/foaf/0.1/Project", + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Project", + "undefined" : "Project" + }, + "comment" : { + "undefined" : "A project (a collective endeavour of some kind)." + }, + "id" : "60" + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "61", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "6", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "62", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://xmlns.com/foaf/0.1/Person", + "equivalent" : [ "63", "64" ], + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Person", + "undefined" : "Person" + }, + "comment" : { + "undefined" : "A person." + }, + "attributes" : [ "equivalent" ], + "id" : "12", + "superClasses" : [ "1", "36" ] + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "55", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "69", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://xmlns.com/foaf/0.1/PersonalProfileDocument", + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "PersonalProfileDocument", + "undefined" : "PersonalProfileDocument" + }, + "comment" : { + "undefined" : "A personal profile RDF document." + }, + "id" : "71", + "superClasses" : [ "2" ] + }, { + "iri" : "http://www.w3.org/2003/01/geo/wgs84_pos#SpatialThing", + "baseIri" : "http://www.w3.org/2003/01/geo/wgs84_pos", + "instances" : 0, + "label" : { + "IRI-based" : "SpatialThing", + "undefined" : "Spatial Thing" + }, + "subClasses" : [ "12" ], + "attributes" : [ "external" ], + "id" : "36" + }, { + "iri" : "http://xmlns.com/foaf/0.1/OnlineChatAccount", + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "OnlineChatAccount", + "undefined" : "Online Chat Account" + }, + "comment" : { + "undefined" : "An online chat account." + }, + "id" : "86", + "superClasses" : [ "78" ] + }, { + "iri" : "http://xmlns.com/foaf/0.1/OnlineGamingAccount", + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "OnlineGamingAccount", + "undefined" : "Online Gaming Account" + }, + "comment" : { + "undefined" : "An online gaming account." + }, + "id" : "83", + "superClasses" : [ "78" ] + }, { + "iri" : "http://xmlns.com/foaf/0.1/LabelProperty", + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "LabelProperty", + "undefined" : "Label Property" + }, + "comment" : { + "undefined" : "A foaf:LabelProperty is any RDF property with texual values that serve as labels." + }, + "id" : "94" + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "id" : "73", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "id" : "68", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "id" : "93", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "33", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "id" : "49", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "29", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "id" : "101", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "39", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2000/10/swap/pim/contact#Person", + "baseIri" : "http://www.w3.org/2000/10/swap/pim/contact", + "instances" : 0, + "label" : { + "IRI-based" : "Person" + }, + "attributes" : [ "external", "equivalent" ], + "id" : "63" + }, { + "iri" : "http://schema.org/Person", + "baseIri" : "http://schema.org", + "instances" : 0, + "label" : { + "IRI-based" : "Person" + }, + "attributes" : [ "external", "equivalent" ], + "id" : "64" + }, { + "iri" : "http://schema.org/ImageObject", + "baseIri" : "http://schema.org", + "instances" : 0, + "label" : { + "IRI-based" : "ImageObject" + }, + "attributes" : [ "external", "equivalent" ], + "id" : "102" + }, { + "iri" : "http://xmlns.com/foaf/0.1/OnlineAccount", + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "OnlineAccount", + "undefined" : "Online Account" + }, + "subClasses" : [ "77", "86", "83" ], + "comment" : { + "undefined" : "An online account." + }, + "id" : "78" + }, { + "iri" : "http://xmlns.com/foaf/0.1/OnlineEcommerceAccount", + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "OnlineEcommerceAccount", + "undefined" : "Online E-commerce Account" + }, + "comment" : { + "undefined" : "An online e-commerce account." + }, + "id" : "77", + "superClasses" : [ "78" ] + }, { + "iri" : "http://purl.org/dc/terms/Agent", + "baseIri" : "http://purl.org/dc/terms", + "instances" : 0, + "label" : { + "IRI-based" : "Agent" + }, + "attributes" : [ "external", "equivalent" ], + "id" : "13" + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "58", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "100", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "106", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "52", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "88", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "118", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Class", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "instances" : 0, + "label" : { + "IRI-based" : "Class" + }, + "attributes" : [ "external" ], + "id" : "126" + }, { + "iri" : "http://xmlns.com/foaf/0.1/Document", + "equivalent" : [ "37" ], + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Document", + "undefined" : "Document" + }, + "subClasses" : [ "71", "32" ], + "comment" : { + "undefined" : "A document." + }, + "attributes" : [ "equivalent" ], + "id" : "2" + }, { + "iri" : "http://xmlns.com/foaf/0.1/Image", + "equivalent" : [ "102" ], + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Image", + "undefined" : "Image" + }, + "comment" : { + "undefined" : "An image." + }, + "attributes" : [ "equivalent" ], + "id" : "32", + "superClasses" : [ "2" ] + }, { + "iri" : "http://xmlns.com/foaf/0.1/Group", + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Group", + "undefined" : "Group" + }, + "comment" : { + "undefined" : "A class of Agents." + }, + "id" : "10", + "superClasses" : [ "1" ] + } ], + "property" : [ { + "id" : "0", + "type" : "owl:objectProperty" + }, { + "id" : "4", + "type" : "owl:datatypeProperty" + }, { + "id" : "7", + "type" : "owl:datatypeProperty" + }, { + "id" : "14", + "type" : "owl:objectProperty" + }, { + "id" : "16", + "type" : "owl:objectProperty" + }, { + "id" : "17", + "type" : "owl:objectProperty" + }, { + "id" : "23", + "type" : "owl:objectProperty" + }, { + "id" : "25", + "type" : "owl:objectProperty" + }, { + "id" : "28", + "type" : "owl:objectProperty" + }, { + "id" : "30", + "type" : "owl:objectProperty" + }, { + "id" : "31", + "type" : "owl:objectProperty" + }, { + "id" : "35", + "type" : "owl:objectProperty" + }, { + "id" : "38", + "type" : "owl:objectProperty" + }, { + "id" : "44", + "type" : "owl:datatypeProperty" + }, { + "id" : "47", + "type" : "owl:objectProperty" + }, { + "id" : "48", + "type" : "owl:datatypeProperty" + }, { + "id" : "50", + "type" : "owl:objectProperty" + }, { + "id" : "51", + "type" : "owl:datatypeProperty" + }, { + "id" : "54", + "type" : "owl:datatypeProperty" + }, { + "id" : "57", + "type" : "owl:datatypeProperty" + }, { + "id" : "65", + "type" : "owl:datatypeProperty" + }, { + "id" : "66", + "type" : "owl:datatypeProperty" + }, { + "id" : "67", + "type" : "owl:datatypeProperty" + }, { + "id" : "70", + "type" : "owl:datatypeProperty" + }, { + "id" : "72", + "type" : "owl:datatypeProperty" + }, { + "id" : "15", + "type" : "owl:objectProperty" + }, { + "id" : "74", + "type" : "rdfs:SubClassOf" + }, { + "id" : "75", + "type" : "rdfs:SubClassOf" + }, { + "id" : "76", + "type" : "rdfs:SubClassOf" + }, { + "id" : "79", + "type" : "rdfs:SubClassOf" + }, { + "id" : "80", + "type" : "owl:objectProperty" + }, { + "id" : "81", + "type" : "owl:objectProperty" + }, { + "id" : "82", + "type" : "rdfs:SubClassOf" + }, { + "id" : "34", + "type" : "owl:objectProperty" + }, { + "id" : "85", + "type" : "rdfs:SubClassOf" + }, { + "id" : "87", + "type" : "owl:datatypeProperty" + }, { + "id" : "89", + "type" : "rdfs:SubClassOf" + }, { + "id" : "90", + "type" : "rdfs:SubClassOf" + }, { + "id" : "91", + "type" : "owl:objectProperty" + }, { + "id" : "92", + "type" : "owl:datatypeProperty" + }, { + "id" : "95", + "type" : "owl:datatypeProperty" + }, { + "id" : "96", + "type" : "owl:objectProperty" + }, { + "id" : "97", + "type" : "owl:datatypeProperty" + }, { + "id" : "98", + "type" : "rdfs:SubClassOf" + }, { + "id" : "99", + "type" : "owl:datatypeProperty" + }, { + "id" : "43", + "type" : "owl:objectProperty" + }, { + "id" : "42", + "type" : "owl:objectProperty" + }, { + "id" : "103", + "type" : "owl:datatypeProperty" + }, { + "id" : "104", + "type" : "owl:objectProperty" + }, { + "id" : "105", + "type" : "owl:datatypeProperty" + }, { + "id" : "107", + "type" : "owl:objectProperty" + }, { + "id" : "108", + "type" : "owl:datatypeProperty" + }, { + "id" : "109", + "type" : "owl:objectProperty" + }, { + "id" : "110", + "type" : "owl:objectProperty" + }, { + "id" : "40", + "type" : "owl:objectProperty" + }, { + "id" : "41", + "type" : "owl:objectProperty" + }, { + "id" : "84", + "type" : "owl:objectProperty" + }, { + "id" : "111", + "type" : "owl:datatypeProperty" + }, { + "id" : "112", + "type" : "owl:datatypeProperty" + }, { + "id" : "113", + "type" : "owl:datatypeProperty" + }, { + "id" : "114", + "type" : "owl:objectProperty" + }, { + "id" : "116", + "type" : "owl:disjointWith" + }, { + "id" : "117", + "type" : "owl:disjointWith" + }, { + "id" : "119", + "type" : "owl:datatypeProperty" + }, { + "id" : "120", + "type" : "owl:disjointWith" + }, { + "id" : "121", + "type" : "owl:disjointWith" + }, { + "id" : "122", + "type" : "owl:objectProperty" + }, { + "id" : "123", + "type" : "owl:datatypeProperty" + }, { + "id" : "124", + "type" : "owl:objectProperty" + }, { + "id" : "125", + "type" : "owl:datatypeProperty" + }, { + "id" : "127", + "type" : "owl:datatypeProperty" + }, { + "id" : "115", + "type" : "owl:objectProperty" + }, { + "id" : "128", + "type" : "owl:objectProperty" + }, { + "id" : "129", + "type" : "owl:objectProperty" + } ], + "propertyAttribute" : [ { + "iri" : "http://xmlns.com/foaf/0.1/interest", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "interest", + "undefined" : "interest" + }, + "domain" : "1", + "comment" : { + "undefined" : "A page about a topic of interest to this person." + }, + "attributes" : [ "object" ], + "id" : "0" + }, { + "iri" : "http://xmlns.com/foaf/0.1/mbox_sha1sum", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "6", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "mbox_sha1sum", + "undefined" : "sha1sum of a personal mailbox URI name" + }, + "domain" : "5", + "comment" : { + "undefined" : "The sha1sum of the URI of an Internet mailbox associated with exactly one owner, the first owner of the mailbox." + }, + "attributes" : [ "datatype" ], + "id" : "4" + }, { + "iri" : "http://xmlns.com/foaf/0.1/nick", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "8", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "nick", + "undefined" : "nickname" + }, + "domain" : "5", + "comment" : { + "undefined" : "A short informal nickname characterising an agent (includes login identifiers, IRC and other chat nicknames)." + }, + "attributes" : [ "datatype" ], + "id" : "7" + }, { + "iri" : "http://xmlns.com/foaf/0.1/openid", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "openid", + "undefined" : "openid" + }, + "superproperty" : [ "15" ], + "domain" : "1", + "comment" : { + "undefined" : "An OpenID for an Agent." + }, + "attributes" : [ "inverse functional", "object" ], + "id" : "14" + }, { + "iri" : "http://xmlns.com/foaf/0.1/workInfoHomepage", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "workInfoHomepage", + "undefined" : "work info homepage" + }, + "domain" : "12", + "comment" : { + "undefined" : "A work info homepage of some person; a page about their work for some organization." + }, + "attributes" : [ "object" ], + "id" : "16" + }, { + "iri" : "http://xmlns.com/foaf/0.1/pastProject", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "3", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "pastProject", + "undefined" : "past project" + }, + "domain" : "12", + "comment" : { + "undefined" : "A project this person has previously worked on." + }, + "attributes" : [ "object" ], + "id" : "17" + }, { + "iri" : "http://xmlns.com/foaf/0.1/theme", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "19", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "archaic", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "theme", + "undefined" : "theme" + }, + "domain" : "19", + "comment" : { + "undefined" : "A theme." + }, + "attributes" : [ "object" ], + "id" : "23" + }, { + "iri" : "http://xmlns.com/foaf/0.1/knows", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "12", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "knows", + "undefined" : "knows" + }, + "domain" : "12", + "comment" : { + "undefined" : "A person known by this person (indicating some level of reciprocated interaction between the parties)." + }, + "attributes" : [ "object" ], + "id" : "25" + }, { + "iri" : "http://xmlns.com/foaf/0.1/focus", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "29", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "focus", + "undefined" : "focus" + }, + "domain" : "9", + "comment" : { + "undefined" : "The underlying or 'focal' entity associated with some SKOS-described concept." + }, + "attributes" : [ "object" ], + "id" : "28" + }, { + "iri" : "http://xmlns.com/foaf/0.1/phone", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "19", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "phone", + "undefined" : "phone" + }, + "domain" : "19", + "comment" : { + "undefined" : "A phone, specified using fully qualified tel: URI scheme (refs: http://www.w3.org/Addressing/schemes.html#tel)." + }, + "attributes" : [ "object" ], + "id" : "30" + }, { + "iri" : "http://xmlns.com/foaf/0.1/depicts", + "inverse" : "34", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "33", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "depicts", + "undefined" : "depicts" + }, + "domain" : "32", + "comment" : { + "undefined" : "A thing depicted in this representation." + }, + "attributes" : [ "object" ], + "id" : "31" + }, { + "iri" : "http://xmlns.com/foaf/0.1/based_near", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "36", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "based_near", + "undefined" : "based near" + }, + "domain" : "36", + "comment" : { + "undefined" : "A location that something is based near, for some broadly human notion of near." + }, + "attributes" : [ "object" ], + "id" : "35" + }, { + "iri" : "http://xmlns.com/foaf/0.1/page", + "inverse" : "40", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "page", + "undefined" : "page" + }, + "domain" : "39", + "subproperty" : [ "15", "41", "42", "43" ], + "comment" : { + "undefined" : "A page or document about this thing." + }, + "attributes" : [ "object" ], + "id" : "38" + }, { + "iri" : "http://xmlns.com/foaf/0.1/geekcode", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "26", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "archaic", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "geekcode", + "undefined" : "geekcode" + }, + "domain" : "12", + "comment" : { + "undefined" : "A textual geekcode for this person, see http://www.geekcode.com/geek.html" + }, + "attributes" : [ "datatype" ], + "id" : "44" + }, { + "iri" : "http://xmlns.com/foaf/0.1/primaryTopic", + "inverse" : "15", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "39", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "primaryTopic", + "undefined" : "primary topic" + }, + "domain" : "2", + "comment" : { + "undefined" : "The primary topic of some page or document." + }, + "attributes" : [ "object", "functional" ], + "id" : "47" + }, { + "iri" : "http://xmlns.com/foaf/0.1/givenName", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "49", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "givenName", + "undefined" : "Given name" + }, + "domain" : "19", + "comment" : { + "undefined" : "The given name of some person." + }, + "attributes" : [ "datatype" ], + "id" : "48" + }, { + "iri" : "http://xmlns.com/foaf/0.1/schoolHomepage", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "schoolHomepage", + "undefined" : "schoolHomepage" + }, + "domain" : "12", + "comment" : { + "undefined" : "A homepage of a school attended by the person." + }, + "attributes" : [ "object" ], + "id" : "50" + }, { + "iri" : "http://xmlns.com/foaf/0.1/gender", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "52", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "gender", + "undefined" : "gender" + }, + "domain" : "1", + "comment" : { + "undefined" : "The gender of this Agent (typically but not necessarily 'male' or 'female')." + }, + "attributes" : [ "datatype", "functional" ], + "id" : "51" + }, { + "iri" : "http://xmlns.com/foaf/0.1/dnaChecksum", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "55", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "archaic", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "dnaChecksum", + "undefined" : "DNA checksum" + }, + "domain" : "19", + "comment" : { + "undefined" : "A checksum for the DNA of some thing. Joke." + }, + "attributes" : [ "datatype" ], + "id" : "54" + }, { + "iri" : "http://xmlns.com/foaf/0.1/lastName", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "58", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "lastName", + "undefined" : "lastName" + }, + "domain" : "12", + "comment" : { + "undefined" : "The last name of a person." + }, + "attributes" : [ "datatype" ], + "id" : "57" + }, { + "iri" : "http://xmlns.com/foaf/0.1/status", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "45", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "status", + "undefined" : "status" + }, + "domain" : "1", + "comment" : { + "undefined" : "A string expressing what the user is happy for the general public (normally) to know about their current activity." + }, + "attributes" : [ "datatype" ], + "id" : "65" + }, { + "iri" : "http://xmlns.com/foaf/0.1/yahooChatID", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "46", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "yahooChatID", + "undefined" : "Yahoo chat ID" + }, + "domain" : "19", + "comment" : { + "undefined" : "A Yahoo chat ID" + }, + "attributes" : [ "datatype" ], + "id" : "66" + }, { + "iri" : "http://xmlns.com/foaf/0.1/name", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "68", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "name", + "undefined" : "name" + }, + "domain" : "19", + "comment" : { + "undefined" : "A name for some thing." + }, + "attributes" : [ "datatype" ], + "id" : "67" + }, { + "iri" : "http://xmlns.com/foaf/0.1/icqChatID", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "53", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "icqChatID", + "undefined" : "ICQ chat ID" + }, + "domain" : "19", + "comment" : { + "undefined" : "An ICQ chat ID" + }, + "attributes" : [ "datatype" ], + "id" : "70" + }, { + "iri" : "http://xmlns.com/foaf/0.1/givenname", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "73", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "archaic", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "givenname", + "undefined" : "Given name" + }, + "domain" : "19", + "comment" : { + "undefined" : "The given name of some person." + }, + "attributes" : [ "datatype" ], + "id" : "72" + }, { + "iri" : "http://xmlns.com/foaf/0.1/isPrimaryTopicOf", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "isPrimaryTopicOf", + "undefined" : "is primary topic of" + }, + "superproperty" : [ "38" ], + "domain" : "39", + "subproperty" : [ "14", "43" ], + "comment" : { + "undefined" : "A document that this thing is the primary topic of." + }, + "attributes" : [ "inverse functional", "object" ], + "id" : "15" + }, { + "range" : "2", + "domain" : "32", + "attributes" : [ "anonymous", "object" ], + "id" : "74" + }, { + "range" : "2", + "domain" : "71", + "attributes" : [ "anonymous", "object" ], + "id" : "75" + }, { + "range" : "78", + "domain" : "77", + "attributes" : [ "anonymous", "object" ], + "id" : "76" + }, { + "range" : "36", + "domain" : "12", + "attributes" : [ "anonymous", "object" ], + "id" : "79" + }, { + "iri" : "http://xmlns.com/foaf/0.1/accountServiceHomepage", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "accountServiceHomepage", + "undefined" : "account service homepage" + }, + "domain" : "78", + "comment" : { + "undefined" : "Indicates a homepage of the service provide for this online account." + }, + "attributes" : [ "object" ], + "id" : "80" + }, { + "iri" : "http://xmlns.com/foaf/0.1/logo", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "19", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "logo", + "undefined" : "logo" + }, + "domain" : "19", + "comment" : { + "undefined" : "A logo representing some thing." + }, + "attributes" : [ "inverse functional", "object" ], + "id" : "81" + }, { + "range" : "78", + "domain" : "83", + "attributes" : [ "anonymous", "object" ], + "id" : "82" + }, { + "iri" : "http://xmlns.com/foaf/0.1/depiction", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "32", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "depiction", + "undefined" : "depiction" + }, + "domain" : "33", + "subproperty" : [ "84" ], + "comment" : { + "undefined" : "A depiction of some thing." + }, + "attributes" : [ "object" ], + "id" : "34" + }, { + "range" : "78", + "domain" : "86", + "attributes" : [ "anonymous", "object" ], + "id" : "85" + }, { + "iri" : "http://xmlns.com/foaf/0.1/family_name", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "88", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "archaic", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "family_name", + "undefined" : "family_name" + }, + "domain" : "12", + "comment" : { + "undefined" : "The family name of some person." + }, + "attributes" : [ "datatype" ], + "id" : "87" + }, { + "range" : "1", + "domain" : "12", + "attributes" : [ "anonymous", "object" ], + "id" : "89" + }, { + "range" : "1", + "domain" : "11", + "attributes" : [ "anonymous", "object" ], + "id" : "90" + }, { + "iri" : "http://xmlns.com/foaf/0.1/fundedBy", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "19", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "archaic", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "fundedBy", + "undefined" : "funded by" + }, + "domain" : "19", + "comment" : { + "undefined" : "An organization funding a project or person." + }, + "attributes" : [ "object" ], + "id" : "91" + }, { + "iri" : "http://xmlns.com/foaf/0.1/title", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "93", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "title", + "undefined" : "title" + }, + "domain" : "19", + "comment" : { + "undefined" : "Title (Mr, Mrs, Ms, Dr. etc)" + }, + "attributes" : [ "datatype" ], + "id" : "92" + }, { + "iri" : "http://xmlns.com/foaf/0.1/accountName", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "59", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "accountName", + "undefined" : "account name" + }, + "domain" : "78", + "comment" : { + "undefined" : "Indicates the name (identifier) associated with this online account." + }, + "attributes" : [ "datatype" ], + "id" : "95" + }, { + "iri" : "http://xmlns.com/foaf/0.1/account", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "78", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "account", + "undefined" : "account" + }, + "domain" : "1", + "comment" : { + "undefined" : "Indicates an account held by this agent." + }, + "attributes" : [ "object" ], + "id" : "96" + }, { + "iri" : "http://xmlns.com/foaf/0.1/jabberID", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "69", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "jabberID", + "undefined" : "jabber ID" + }, + "domain" : "19", + "comment" : { + "undefined" : "A jabber ID for something." + }, + "attributes" : [ "datatype" ], + "id" : "97" + }, { + "range" : "1", + "domain" : "10", + "attributes" : [ "anonymous", "object" ], + "id" : "98" + }, { + "iri" : "http://xmlns.com/foaf/0.1/age", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "100", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "age", + "undefined" : "age" + }, + "domain" : "1", + "comment" : { + "undefined" : "The age in years of some agent." + }, + "attributes" : [ "datatype", "functional" ], + "id" : "99" + }, { + "iri" : "http://xmlns.com/foaf/0.1/homepage", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "homepage", + "undefined" : "homepage" + }, + "superproperty" : [ "15", "38" ], + "domain" : "39", + "comment" : { + "undefined" : "A homepage for some thing." + }, + "attributes" : [ "inverse functional", "object" ], + "id" : "43" + }, { + "iri" : "http://xmlns.com/foaf/0.1/tipjar", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "tipjar", + "undefined" : "tipjar" + }, + "superproperty" : [ "38" ], + "domain" : "1", + "comment" : { + "undefined" : "A tipjar document for this agent, describing means for payment and reward." + }, + "attributes" : [ "object" ], + "id" : "42" + }, { + "iri" : "http://xmlns.com/foaf/0.1/msnChatID", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "61", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "msnChatID", + "undefined" : "MSN chat ID" + }, + "domain" : "5", + "comment" : { + "undefined" : "An MSN chat ID" + }, + "attributes" : [ "datatype" ], + "id" : "103" + }, { + "iri" : "http://xmlns.com/foaf/0.1/topic_interest", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "18", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "topic_interest", + "undefined" : "topic_interest" + }, + "domain" : "1", + "comment" : { + "undefined" : "A thing of interest to this person." + }, + "attributes" : [ "object" ], + "id" : "104" + }, { + "iri" : "http://xmlns.com/foaf/0.1/aimChatID", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "106", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "aimChatID", + "undefined" : "AIM chat ID" + }, + "domain" : "19", + "comment" : { + "undefined" : "An AIM chat ID" + }, + "attributes" : [ "datatype" ], + "id" : "105" + }, { + "iri" : "http://xmlns.com/foaf/0.1/currentProject", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "3", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "currentProject", + "undefined" : "current project" + }, + "domain" : "12", + "comment" : { + "undefined" : "A current project this person works on." + }, + "attributes" : [ "object" ], + "id" : "107" + }, { + "iri" : "http://xmlns.com/foaf/0.1/skypeID", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "20", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "skypeID", + "undefined" : "Skype ID" + }, + "domain" : "1", + "comment" : { + "undefined" : "A Skype ID" + }, + "attributes" : [ "datatype" ], + "id" : "108" + }, { + "iri" : "http://xmlns.com/foaf/0.1/holdsAccount", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "78", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "archaic", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "holdsAccount", + "undefined" : "account" + }, + "domain" : "1", + "comment" : { + "undefined" : "Indicates an account held by this agent." + }, + "attributes" : [ "object" ], + "id" : "109" + }, { + "iri" : "http://xmlns.com/foaf/0.1/thumbnail", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "32", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "thumbnail", + "undefined" : "thumbnail" + }, + "domain" : "32", + "comment" : { + "undefined" : "A derived thumbnail image." + }, + "attributes" : [ "object" ], + "id" : "110" + }, { + "iri" : "http://xmlns.com/foaf/0.1/topic", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "39", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "topic", + "undefined" : "topic" + }, + "domain" : "2", + "comment" : { + "undefined" : "A topic of some page or document." + }, + "attributes" : [ "object" ], + "id" : "40" + }, { + "iri" : "http://xmlns.com/foaf/0.1/weblog", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "weblog", + "undefined" : "weblog" + }, + "superproperty" : [ "38" ], + "domain" : "1", + "comment" : { + "undefined" : "A weblog of some thing (whether person, group, company etc.)." + }, + "attributes" : [ "inverse functional", "object" ], + "id" : "41" + }, { + "iri" : "http://xmlns.com/foaf/0.1/img", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "32", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "img", + "undefined" : "image" + }, + "superproperty" : [ "34" ], + "domain" : "12", + "comment" : { + "undefined" : "An image that can be used to represent some thing (ie. those depictions which are particularly representative of something, eg. one's photo on a homepage)." + }, + "attributes" : [ "object" ], + "id" : "84" + }, { + "iri" : "http://xmlns.com/foaf/0.1/birthday", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "56", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "birthday", + "undefined" : "birthday" + }, + "domain" : "1", + "comment" : { + "undefined" : "The birthday of this Agent, represented in mm-dd string form, eg. '12-31'." + }, + "attributes" : [ "datatype", "functional" ], + "id" : "111" + }, { + "iri" : "http://xmlns.com/foaf/0.1/sha1", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "101", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "sha1", + "undefined" : "sha1sum (hex)" + }, + "domain" : "2", + "comment" : { + "undefined" : "A sha1sum hash, in hex." + }, + "attributes" : [ "datatype" ], + "id" : "112" + }, { + "iri" : "http://xmlns.com/foaf/0.1/firstName", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "24", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "firstName", + "undefined" : "firstName" + }, + "domain" : "12", + "comment" : { + "undefined" : "The first name of a person." + }, + "attributes" : [ "datatype" ], + "id" : "113" + }, { + "iri" : "http://xmlns.com/foaf/0.1/made", + "inverse" : "115", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "18", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "made", + "undefined" : "made" + }, + "domain" : "1", + "comment" : { + "undefined" : "Something that was made by this agent." + }, + "attributes" : [ "object" ], + "id" : "114" + }, { + "range" : "60", + "domain" : "2", + "attributes" : [ "anonymous", "object" ], + "id" : "116" + }, { + "range" : "12", + "domain" : "60", + "attributes" : [ "anonymous", "object" ], + "id" : "117" + }, { + "iri" : "http://xmlns.com/foaf/0.1/familyName", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "62", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "familyName", + "undefined" : "familyName" + }, + "domain" : "12", + "comment" : { + "undefined" : "The family name of some person." + }, + "attributes" : [ "datatype" ], + "id" : "119" + }, { + "range" : "2", + "domain" : "11", + "attributes" : [ "anonymous", "object" ], + "id" : "120" + }, { + "range" : "12", + "domain" : "11", + "attributes" : [ "anonymous", "object" ], + "id" : "121" + }, { + "iri" : "http://xmlns.com/foaf/0.1/member", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "1", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "member", + "undefined" : "member" + }, + "domain" : "10", + "comment" : { + "undefined" : "Indicates a member of a Group" + }, + "attributes" : [ "object" ], + "id" : "122" + }, { + "iri" : "http://xmlns.com/foaf/0.1/plan", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "27", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "plan", + "undefined" : "plan" + }, + "domain" : "12", + "comment" : { + "undefined" : "A .plan comment, in the tradition of finger and '.plan' files." + }, + "attributes" : [ "datatype" ], + "id" : "123" + }, { + "iri" : "http://xmlns.com/foaf/0.1/mbox", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "18", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "mbox", + "undefined" : "personal mailbox" + }, + "domain" : "1", + "comment" : { + "undefined" : "A personal mailbox, ie. an Internet mailbox associated with exactly one owner, the first owner of this mailbox. This is a 'static inverse functional property', in that there is (across time and change) at most one individual that ever has any particular value for foaf:mbox." + }, + "attributes" : [ "inverse functional", "object" ], + "id" : "124" + }, { + "iri" : "http://xmlns.com/foaf/0.1/surname", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "118", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "archaic", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "surname", + "undefined" : "Surname" + }, + "domain" : "12", + "comment" : { + "undefined" : "The surname of some person." + }, + "attributes" : [ "datatype" ], + "id" : "125" + }, { + "iri" : "http://xmlns.com/foaf/0.1/myersBriggs", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "22", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "myersBriggs", + "undefined" : "myersBriggs" + }, + "domain" : "12", + "comment" : { + "undefined" : "A Myers Briggs (MBTI) personality classification." + }, + "attributes" : [ "datatype" ], + "id" : "127" + }, { + "iri" : "http://xmlns.com/foaf/0.1/maker", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "1", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "maker", + "undefined" : "maker" + }, + "domain" : "18", + "comment" : { + "undefined" : "An agent that made this thing." + }, + "attributes" : [ "object" ], + "id" : "115" + }, { + "iri" : "http://xmlns.com/foaf/0.1/publications", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "publications", + "undefined" : "publications" + }, + "domain" : "12", + "comment" : { + "undefined" : "A link to the publications of this person." + }, + "attributes" : [ "object" ], + "id" : "128" + }, { + "iri" : "http://xmlns.com/foaf/0.1/workplaceHomepage", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "workplaceHomepage", + "undefined" : "workplace homepage" + }, + "domain" : "12", + "comment" : { + "undefined" : "A workplace homepage of some person; the homepage of an organization they work for." + }, + "attributes" : [ "object" ], + "id" : "129" + } ] +} \ No newline at end of file diff --git a/mo/webvowl/data/ontology.json b/mo/webvowl/data/ontology.json new file mode 100644 index 0000000..71fbbd0 --- /dev/null +++ b/mo/webvowl/data/ontology.json @@ -0,0 +1,23628 @@ +{ + "_comment" : "Created with OWL2VOWL (version 0.3.5), http://vowl.visualdataweb.org", + "header" : { + "languages" : [ "de", "en", "undefined" ], + "baseIris" : [ "http://www.w3.org/1999/02/22-rdf-syntax-ns", "http://qudt.org/schema/qudt", "http://purl.obolibrary.org/obo", "http://www.w3.org/2002/07/owl", "https://w3id.org/pmd/co", "http://www.w3.org/2001/XMLSchema", "http://purl.org/spar/datacite", "https://w3id.org/pmd/mo", "http://www.w3.org/2000/01/rdf-schema", "http://www.w3.org/ns/prov", "http://www.w3.org/ns/oa", "http://purl.org/dc/terms", "http://w3id.org/DMI" ], + "title" : { + "en" : "Microscopy Ontology (MO)" + }, + "iri" : "https://w3id.org/pmd/co/2.0.7", + "author" : [ "https://orcid.org/0000-0002-3717-7104", "https://orcid.org/0000-0002-7094-5371" ], + "other" : { + "license" : [ { + "identifier" : "license", + "language" : "undefined", + "value" : "http://creativecommons.org/licenses/by/4.0", + "type" : "iri" + } ], + "creator" : [ { + "identifier" : "creator", + "language" : "undefined", + "value" : "https://orcid.org/0000-0002-3717-7104", + "type" : "iri" + }, { + "identifier" : "creator", + "language" : "undefined", + "value" : "https://orcid.org/0000-0002-7094-5371", + "type" : "iri" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Die Mikroskopie-Ontologie (MO) ist ein umfassender Rahmen für die Darstellung von Wissen, der Konzepte aus den Bereichen Mikroskopie und Mikroanalyse umfasst. Die MO basiert semantisch auf der PMD-Kernontologie PMDco (die in MO importiert wird), um eine Verbindung zu anderen MSE-Anwendungsontologien und domänenneutralen Konzepten in etablierten Top-Level-Ontologien zu ermöglichen. Das Hauptziel von MO ist es, ein standardisiertes Vokabular und einen Rahmen für die Beschreibung und Organisation von Konzepten, Entitäten und Beziehungen im Bereich der Mikroskopie und Mikroanalyse bereitzustellen. Diese Standardisierung erleichtert die Kommunikation und Interoperabilität zwischen verschiedenen Systemen, Datenbanken und Forschungsgruppen. Um ein Vokabular zu erhalten, das in diesem Bereich relevant und daher standardisierungswürdig ist, wurde ein NLP-Ansatz angewandt, mit dessen Hilfe häufig verwendete Begriffe ermittelt wurden. Auf der Grundlage dieser Liste von Begriffen wurde dann die MO entwickelt. In der Mikroskopie und Mikroanalytik fallen große Datenmengen aus verschiedenen Techniken und Instrumenten an. Die MO kann dazu beitragen, heterogene Datenquellen zu integrieren und zu verknüpfen, so dass Daten aus verschiedenen Experimenten und Studien effektiver kombiniert und analysiert werden können.\nDarüber hinaus dient die MO als Grundlage für die Annotation von Mikroskopie- und Mikroanalysedaten mit standardisierten Metadaten. Diese erweiterte Metadatenbeschreibung verbessert die Interpretierbarkeit, Durchsuchbarkeit und Wiederverwendbarkeit von Daten und fördert die Transparenz und Reproduzierbarkeit in der Forschung. Darüber hinaus kann die MO durch die Formalisierung des Wissens über Instrumente, Techniken, Materialien und Phänomene die Grundlage für maschinelles Denken zur Unterstützung der Dateninterpretation, Hypothesenbildung und Versuchsplanung bilden.\nInsgesamt soll MO die Forschung voranbringen, die Zusammenarbeit fördern und den Wissensaustausch in diesem interdisziplinären Bereich erleichtern.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "The Microscopy Ontology (MO) is a comprehensive framework for representing knowledge that encompasses concepts from the domains of microscopy and microanalysis. The MO is semantically based on the mid-level PMD Core Ontology PMDco (which is imported in MO) to allow a connection to other MSE application ontologies and domain neutral concepts found in established top-level ontologies. The primary goal of MO is to provide a standardized vocabulary and framework for describing and organizing concepts, entities, and relationships within the field of microscopy and microanalysis. This standardization facilitates communication and interoperability between different systems, databases, and research groups. In order to obtain a vocabulary that is relevant in the field and therefore worth standardizing, an NLP approach was applied, with the help of which commonly used terms were determined. MO was then developed based on the respective list of terms. Microscopy and microanalysis generate vast amounts of data from various techniques and instruments. MO may help to integrate and link heterogeneous data sources, enabling the combination and analysis of data from different experiments and studies more effectively. Furthermore, MO serves as a basis for annotating microscopy and microanalysis data with standardized metadata. This improved metadata description enhances the interpretability, searchability, and reusability of data, promoting transparency and reproducibility in research. Moreover, by formalizing knowledge about instruments, techniques, materials, and phenomena, MO may provide the basis to enable machine reasoning to support data interpretation, hypothesis generation, and experimental design.\nOverall, MO is intended to advance research, promoting collaboration, and facilitating knowledge exchange in this interdisciplinary domain.", + "type" : "label" + } ], + "bibliographicCitation" : [ { + "identifier" : "bibliographicCitation", + "language" : "en", + "value" : "Markus Schilling, Bernd Bayerlein, June Lau. (January 29th, 2024) MO: microscopy ontology. Version 1.0.0, https://w3id.org/pmd/mo/", + "type" : "label" + } ], + "title" : [ { + "identifier" : "title", + "language" : "en", + "value" : "Microscopy Ontology (MO)", + "type" : "label" + } ] + } + }, + "namespace" : [ ], + "class" : [ { + "id" : "41", + "type" : "owl:Class" + }, { + "id" : "43", + "type" : "owl:Class" + }, { + "id" : "44", + "type" : "owl:Class" + }, { + "id" : "47", + "type" : "owl:Class" + }, { + "id" : "67", + "type" : "owl:Class" + }, { + "id" : "75", + "type" : "owl:Class" + }, { + "id" : "83", + "type" : "owl:Class" + }, { + "id" : "109", + "type" : "owl:Class" + }, { + "id" : "4", + "type" : "owl:Class" + }, { + "id" : "117", + "type" : "owl:Class" + }, { + "id" : "128", + "type" : "owl:Class" + }, { + "id" : "154", + "type" : "owl:Class" + }, { + "id" : "155", + "type" : "owl:Class" + }, { + "id" : "156", + "type" : "owl:Class" + }, { + "id" : "157", + "type" : "owl:Class" + }, { + "id" : "159", + "type" : "owl:Class" + }, { + "id" : "161", + "type" : "owl:Class" + }, { + "id" : "175", + "type" : "owl:Class" + }, { + "id" : "177", + "type" : "owl:Class" + }, { + "id" : "84", + "type" : "owl:Class" + }, { + "id" : "201", + "type" : "owl:Class" + }, { + "id" : "202", + "type" : "owl:Class" + }, { + "id" : "204", + "type" : "owl:Class" + }, { + "id" : "206", + "type" : "owl:Class" + }, { + "id" : "205", + "type" : "owl:Class" + }, { + "id" : "224", + "type" : "owl:Class" + }, { + "id" : "226", + "type" : "owl:Class" + }, { + "id" : "245", + "type" : "owl:Class" + }, { + "id" : "82", + "type" : "owl:Class" + }, { + "id" : "27", + "type" : "owl:Class" + }, { + "id" : "77", + "type" : "owl:Class" + }, { + "id" : "234", + "type" : "owl:Class" + }, { + "id" : "301", + "type" : "owl:Class" + }, { + "id" : "317", + "type" : "owl:Class" + }, { + "id" : "320", + "type" : "owl:Class" + }, { + "id" : "321", + "type" : "owl:Class" + }, { + "id" : "324", + "type" : "owl:Class" + }, { + "id" : "314", + "type" : "owl:Class" + }, { + "id" : "71", + "type" : "owl:Class" + }, { + "id" : "193", + "type" : "owl:Class" + }, { + "id" : "249", + "type" : "owl:Class" + }, { + "id" : "15", + "type" : "owl:Class" + }, { + "id" : "25", + "type" : "owl:Class" + }, { + "id" : "379", + "type" : "owl:Class" + }, { + "id" : "60", + "type" : "owl:Class" + }, { + "id" : "398", + "type" : "owl:unionOf" + }, { + "id" : "397", + "type" : "owl:Class" + }, { + "id" : "213", + "type" : "owl:Class" + }, { + "id" : "174", + "type" : "owl:Class" + }, { + "id" : "401", + "type" : "owl:intersectionOf" + }, { + "id" : "402", + "type" : "owl:Class" + }, { + "id" : "403", + "type" : "owl:unionOf" + }, { + "id" : "131", + "type" : "owl:unionOf" + }, { + "id" : "404", + "type" : "owl:Class" + }, { + "id" : "405", + "type" : "owl:Class" + }, { + "id" : "407", + "type" : "owl:Class" + }, { + "id" : "257", + "type" : "owl:Class" + }, { + "id" : "408", + "type" : "owl:unionOf" + }, { + "id" : "8", + "type" : "owl:unionOf" + }, { + "id" : "409", + "type" : "owl:unionOf" + }, { + "id" : "410", + "type" : "owl:unionOf" + }, { + "id" : "53", + "type" : "owl:unionOf" + }, { + "id" : "412", + "type" : "owl:Class" + }, { + "id" : "415", + "type" : "owl:unionOf" + }, { + "id" : "350", + "type" : "owl:Class" + }, { + "id" : "417", + "type" : "owl:unionOf" + }, { + "id" : "223", + "type" : "owl:Class" + }, { + "id" : "7", + "type" : "owl:Class" + }, { + "id" : "418", + "type" : "owl:Class" + }, { + "id" : "178", + "type" : "owl:Class" + }, { + "id" : "187", + "type" : "owl:Class" + }, { + "id" : "421", + "type" : "owl:Class" + }, { + "id" : "11", + "type" : "owl:unionOf" + }, { + "id" : "452", + "type" : "rdfs:Literal" + }, { + "id" : "451", + "type" : "rdfs:Literal" + }, { + "id" : "436", + "type" : "owl:Class" + }, { + "id" : "462", + "type" : "owl:Class" + }, { + "id" : "464", + "type" : "owl:Class" + }, { + "id" : "465", + "type" : "owl:Class" + }, { + "id" : "466", + "type" : "owl:Class" + }, { + "id" : "80", + "type" : "owl:Class" + }, { + "id" : "467", + "type" : "owl:Thing" + }, { + "id" : "468", + "type" : "rdfs:Literal" + }, { + "id" : "319", + "type" : "rdfs:Literal" + }, { + "id" : "469", + "type" : "rdfs:Literal" + }, { + "id" : "470", + "type" : "rdfs:Literal" + }, { + "id" : "471", + "type" : "owl:Thing" + }, { + "id" : "472", + "type" : "rdfs:Literal" + }, { + "id" : "473", + "type" : "owl:Thing" + }, { + "id" : "474", + "type" : "rdfs:Literal" + }, { + "id" : "63", + "type" : "rdfs:Literal" + }, { + "id" : "304", + "type" : "owl:Class" + }, { + "id" : "62", + "type" : "owl:Thing" + }, { + "id" : "475", + "type" : "rdfs:Literal" + }, { + "id" : "476", + "type" : "rdfs:Datatype" + }, { + "id" : "477", + "type" : "owl:Thing" + }, { + "id" : "12", + "type" : "owl:Thing" + }, { + "id" : "116", + "type" : "rdfs:Datatype" + }, { + "id" : "478", + "type" : "rdfs:Datatype" + }, { + "id" : "479", + "type" : "rdfs:Datatype" + }, { + "id" : "480", + "type" : "rdfs:Datatype" + }, { + "id" : "113", + "type" : "owl:Class" + }, { + "id" : "513", + "type" : "owl:Class" + }, { + "id" : "514", + "type" : "owl:Class" + }, { + "id" : "515", + "type" : "owl:intersectionOf" + }, { + "id" : "327", + "type" : "owl:Class" + }, { + "id" : "432", + "type" : "owl:Class" + }, { + "id" : "126", + "type" : "owl:Class" + }, { + "id" : "335", + "type" : "owl:Class" + }, { + "id" : "283", + "type" : "owl:Class" + }, { + "id" : "508", + "type" : "owl:Class" + }, { + "id" : "169", + "type" : "owl:Class" + }, { + "id" : "31", + "type" : "owl:Class" + }, { + "id" : "373", + "type" : "owl:Class" + }, { + "id" : "541", + "type" : "owl:Class" + }, { + "id" : "594", + "type" : "owl:Class" + }, { + "id" : "207", + "type" : "owl:Class" + }, { + "id" : "600", + "type" : "owl:intersectionOf" + }, { + "id" : "497", + "type" : "owl:Class" + }, { + "id" : "112", + "type" : "owl:Class" + }, { + "id" : "601", + "type" : "owl:Class" + }, { + "id" : "483", + "type" : "owl:Class" + }, { + "id" : "602", + "type" : "owl:Class" + }, { + "id" : "309", + "type" : "owl:Class" + }, { + "id" : "604", + "type" : "owl:Class" + }, { + "id" : "605", + "type" : "owl:Class" + }, { + "id" : "76", + "type" : "owl:Class" + }, { + "id" : "399", + "type" : "owl:Class" + }, { + "id" : "270", + "type" : "owl:Class" + }, { + "id" : "612", + "type" : "owl:Class" + }, { + "id" : "17", + "type" : "owl:Class" + }, { + "id" : "560", + "type" : "owl:Class" + }, { + "id" : "176", + "type" : "owl:Class" + }, { + "id" : "293", + "type" : "owl:Class" + }, { + "id" : "523", + "type" : "owl:Class" + }, { + "id" : "73", + "type" : "owl:Class" + }, { + "id" : "238", + "type" : "owl:Class" + }, { + "id" : "101", + "type" : "owl:Class" + }, { + "id" : "611", + "type" : "owl:Class" + }, { + "id" : "14", + "type" : "owl:Class" + }, { + "id" : "48", + "type" : "owl:Class" + }, { + "id" : "443", + "type" : "owl:Class" + }, { + "id" : "196", + "type" : "owl:Class" + }, { + "id" : "42", + "type" : "owl:Class" + }, { + "id" : "54", + "type" : "owl:Class" + }, { + "id" : "548", + "type" : "owl:Class" + }, { + "id" : "446", + "type" : "owl:Class" + }, { + "id" : "331", + "type" : "owl:Class" + }, { + "id" : "105", + "type" : "owl:Class" + }, { + "id" : "33", + "type" : "owl:Class" + }, { + "id" : "492", + "type" : "owl:Class" + }, { + "id" : "631", + "type" : "owl:Class" + }, { + "id" : "339", + "type" : "owl:Class" + }, { + "id" : "129", + "type" : "owl:Class" + }, { + "id" : "503", + "type" : "owl:Class" + }, { + "id" : "633", + "type" : "owl:Class" + }, { + "id" : "170", + "type" : "owl:Class" + }, { + "id" : "91", + "type" : "owl:Class" + }, { + "id" : "634", + "type" : "owl:Class" + }, { + "id" : "86", + "type" : "owl:Class" + }, { + "id" : "501", + "type" : "owl:Class" + }, { + "id" : "194", + "type" : "owl:Class" + }, { + "id" : "145", + "type" : "owl:Class" + }, { + "id" : "364", + "type" : "owl:Class" + }, { + "id" : "641", + "type" : "owl:Class" + }, { + "id" : "165", + "type" : "owl:Class" + }, { + "id" : "642", + "type" : "owl:Class" + }, { + "id" : "139", + "type" : "owl:Class" + }, { + "id" : "352", + "type" : "owl:Class" + }, { + "id" : "127", + "type" : "owl:Class" + }, { + "id" : "136", + "type" : "owl:Class" + }, { + "id" : "644", + "type" : "owl:Class" + }, { + "id" : "648", + "type" : "owl:Class" + }, { + "id" : "650", + "type" : "owl:Class" + }, { + "id" : "89", + "type" : "owl:Class" + }, { + "id" : "367", + "type" : "owl:Class" + }, { + "id" : "5", + "type" : "owl:Class" + }, { + "id" : "22", + "type" : "owl:Class" + }, { + "id" : "357", + "type" : "owl:Class" + }, { + "id" : "182", + "type" : "owl:Class" + }, { + "id" : "655", + "type" : "owl:Class" + }, { + "id" : "277", + "type" : "owl:Class" + }, { + "id" : "607", + "type" : "owl:intersectionOf" + }, { + "id" : "660", + "type" : "owl:Class" + }, { + "id" : "239", + "type" : "owl:Class" + }, { + "id" : "114", + "type" : "owl:Class" + }, { + "id" : "244", + "type" : "owl:Class" + }, { + "id" : "505", + "type" : "owl:Class" + }, { + "id" : "673", + "type" : "owl:Class" + }, { + "id" : "323", + "type" : "owl:Class" + }, { + "id" : "676", + "type" : "owl:Class" + }, { + "id" : "371", + "type" : "owl:Class" + }, { + "id" : "1", + "type" : "owl:Class" + }, { + "id" : "49", + "type" : "owl:Class" + }, { + "id" : "259", + "type" : "owl:Class" + }, { + "id" : "160", + "type" : "owl:Class" + }, { + "id" : "299", + "type" : "owl:Class" + }, { + "id" : "420", + "type" : "owl:Class" + }, { + "id" : "429", + "type" : "owl:Class" + }, { + "id" : "692", + "type" : "owl:Class" + }, { + "id" : "539", + "type" : "owl:Class" + }, { + "id" : "434", + "type" : "owl:Class" + }, { + "id" : "46", + "type" : "owl:Class" + }, { + "id" : "279", + "type" : "owl:Class" + }, { + "id" : "705", + "type" : "owl:Class" + }, { + "id" : "267", + "type" : "owl:Class" + }, { + "id" : "562", + "type" : "owl:Class" + }, { + "id" : "712", + "type" : "owl:Class" + }, { + "id" : "675", + "type" : "owl:Class" + }, { + "id" : "386", + "type" : "owl:Class" + }, { + "id" : "708", + "type" : "owl:Class" + }, { + "id" : "329", + "type" : "owl:Class" + }, { + "id" : "188", + "type" : "owl:Class" + }, { + "id" : "714", + "type" : "owl:Class" + }, { + "id" : "78", + "type" : "owl:Class" + }, { + "id" : "389", + "type" : "owl:Class" + }, { + "id" : "138", + "type" : "owl:Class" + }, { + "id" : "255", + "type" : "owl:Class" + }, { + "id" : "179", + "type" : "owl:Class" + }, { + "id" : "510", + "type" : "owl:Class" + }, { + "id" : "566", + "type" : "owl:Class" + }, { + "id" : "427", + "type" : "owl:Class" + }, { + "id" : "554", + "type" : "owl:Class" + }, { + "id" : "167", + "type" : "owl:Class" + }, { + "id" : "735", + "type" : "owl:Class" + }, { + "id" : "575", + "type" : "owl:Class" + }, { + "id" : "70", + "type" : "owl:Class" + }, { + "id" : "184", + "type" : "owl:Class" + }, { + "id" : "495", + "type" : "owl:Class" + }, { + "id" : "95", + "type" : "owl:Class" + }, { + "id" : "742", + "type" : "owl:Class" + }, { + "id" : "311", + "type" : "owl:Class" + }, { + "id" : "527", + "type" : "owl:Class" + }, { + "id" : "439", + "type" : "owl:Class" + }, { + "id" : "141", + "type" : "owl:Class" + }, { + "id" : "487", + "type" : "owl:Class" + }, { + "id" : "442", + "type" : "owl:Class" + }, { + "id" : "393", + "type" : "owl:Class" + }, { + "id" : "444", + "type" : "owl:Class" + }, { + "id" : "747", + "type" : "owl:Class" + }, { + "id" : "750", + "type" : "owl:Class" + }, { + "id" : "93", + "type" : "owl:Class" + }, { + "id" : "568", + "type" : "owl:Class" + }, { + "id" : "517", + "type" : "owl:Class" + }, { + "id" : "354", + "type" : "owl:Class" + }, { + "id" : "406", + "type" : "owl:Class" + }, { + "id" : "771", + "type" : "owl:Class" + }, { + "id" : "416", + "type" : "owl:Class" + }, { + "id" : "21", + "type" : "owl:Class" + }, { + "id" : "158", + "type" : "owl:Class" + }, { + "id" : "216", + "type" : "owl:Class" + }, { + "id" : "135", + "type" : "owl:Class" + }, { + "id" : "349", + "type" : "owl:Class" + }, { + "id" : "231", + "type" : "owl:Class" + }, { + "id" : "424", + "type" : "owl:Class" + }, { + "id" : "606", + "type" : "owl:intersectionOf" + }, { + "id" : "425", + "type" : "owl:Class" + }, { + "id" : "149", + "type" : "owl:Class" + }, { + "id" : "58", + "type" : "owl:Class" + }, { + "id" : "356", + "type" : "owl:Class" + }, { + "id" : "430", + "type" : "owl:Class" + }, { + "id" : "783", + "type" : "owl:Class" + }, { + "id" : "433", + "type" : "owl:Class" + }, { + "id" : "583", + "type" : "owl:Class" + }, { + "id" : "564", + "type" : "owl:Class" + }, { + "id" : "789", + "type" : "owl:Class" + }, { + "id" : "122", + "type" : "owl:Class" + }, { + "id" : "192", + "type" : "owl:Class" + }, { + "id" : "190", + "type" : "owl:Class" + }, { + "id" : "241", + "type" : "owl:Class" + }, { + "id" : "2", + "type" : "owl:Class" + }, { + "id" : "816", + "type" : "owl:intersectionOf" + }, { + "id" : "608", + "type" : "owl:intersectionOf" + }, { + "id" : "103", + "type" : "owl:Class" + }, { + "id" : "721", + "type" : "owl:Class" + }, { + "id" : "360", + "type" : "owl:intersectionOf" + }, { + "id" : "34", + "type" : "owl:Class" + }, { + "id" : "693", + "type" : "owl:Class" + }, { + "id" : "19", + "type" : "owl:Class" + }, { + "id" : "628", + "type" : "owl:Class" + }, { + "id" : "824", + "type" : "owl:Class" + }, { + "id" : "220", + "type" : "owl:Class" + }, { + "id" : "291", + "type" : "owl:Class" + }, { + "id" : "66", + "type" : "owl:Class" + }, { + "id" : "211", + "type" : "owl:Class" + }, { + "id" : "38", + "type" : "owl:Class" + }, { + "id" : "243", + "type" : "owl:Class" + }, { + "id" : "537", + "type" : "owl:Class" + }, { + "id" : "550", + "type" : "owl:Class" + }, { + "id" : "530", + "type" : "owl:Class" + }, { + "id" : "419", + "type" : "owl:Class" + }, { + "id" : "325", + "type" : "owl:Class" + }, { + "id" : "485", + "type" : "owl:Class" + }, { + "id" : "617", + "type" : "owl:Class" + }, { + "id" : "489", + "type" : "owl:Class" + }, { + "id" : "830", + "type" : "owl:Class" + }, { + "id" : "295", + "type" : "owl:Class" + }, { + "id" : "542", + "type" : "owl:Class" + }, { + "id" : "622", + "type" : "owl:Class" + }, { + "id" : "603", + "type" : "owl:Class" + }, { + "id" : "186", + "type" : "owl:Class" + }, { + "id" : "609", + "type" : "owl:intersectionOf" + }, { + "id" : "343", + "type" : "owl:Class" + }, { + "id" : "228", + "type" : "owl:Class" + }, { + "id" : "341", + "type" : "owl:Class" + }, { + "id" : "110", + "type" : "owl:Class" + }, { + "id" : "40", + "type" : "owl:Class" + }, { + "id" : "460", + "type" : "owl:Class" + }, { + "id" : "544", + "type" : "owl:Class" + }, { + "id" : "391", + "type" : "owl:Class" + }, { + "id" : "540", + "type" : "owl:Class" + }, { + "id" : "29", + "type" : "owl:intersectionOf" + }, { + "id" : "426", + "type" : "owl:Class" + }, { + "id" : "225", + "type" : "owl:Class" + }, { + "id" : "143", + "type" : "owl:Class" + }, { + "id" : "111", + "type" : "owl:Class" + }, { + "id" : "281", + "type" : "owl:Class" + }, { + "id" : "236", + "type" : "owl:Class" + }, { + "id" : "414", + "type" : "owl:Class" + }, { + "id" : "289", + "type" : "owl:Class" + }, { + "id" : "616", + "type" : "owl:Class" + }, { + "id" : "845", + "type" : "owl:Class" + }, { + "id" : "706", + "type" : "owl:Class" + }, { + "id" : "274", + "type" : "owl:Class" + }, { + "id" : "172", + "type" : "owl:Class" + }, { + "id" : "793", + "type" : "owl:Class" + }, { + "id" : "440", + "type" : "owl:Class" + }, { + "id" : "851", + "type" : "owl:Class" + }, { + "id" : "147", + "type" : "owl:Class" + }, { + "id" : "812", + "type" : "owl:Class" + }, { + "id" : "333", + "type" : "owl:Class" + }, { + "id" : "287", + "type" : "owl:Class" + }, { + "id" : "261", + "type" : "owl:Class" + }, { + "id" : "276", + "type" : "owl:Class" + }, { + "id" : "701", + "type" : "owl:Class" + }, { + "id" : "627", + "type" : "owl:Class" + }, { + "id" : "411", + "type" : "owl:Class" + }, { + "id" : "512", + "type" : "owl:Class" + }, { + "id" : "189", + "type" : "owl:Class" + }, { + "id" : "458", + "type" : "owl:Class" + }, { + "id" : "654", + "type" : "owl:Class" + }, { + "id" : "717", + "type" : "owl:Class" + }, { + "id" : "704", + "type" : "owl:Class" + }, { + "id" : "285", + "type" : "owl:Class" + }, { + "id" : "435", + "type" : "owl:Class" + }, { + "id" : "68", + "type" : "owl:Class" + }, { + "id" : "438", + "type" : "owl:Class" + }, { + "id" : "578", + "type" : "owl:Class" + }, { + "id" : "441", + "type" : "owl:Class" + }, { + "id" : "36", + "type" : "owl:Class" + }, { + "id" : "875", + "type" : "owl:intersectionOf" + }, { + "id" : "24", + "type" : "owl:intersectionOf" + }, { + "id" : "449", + "type" : "owl:Class" + }, { + "id" : "619", + "type" : "owl:Class" + }, { + "id" : "218", + "type" : "owl:Class" + }, { + "id" : "247", + "type" : "owl:Class" + }, { + "id" : "423", + "type" : "owl:Class" + }, { + "id" : "384", + "type" : "owl:Class" + }, { + "id" : "428", + "type" : "owl:Class" + }, { + "id" : "164", + "type" : "owl:Class" + }, { + "id" : "97", + "type" : "owl:Class" + }, { + "id" : "45", + "type" : "owl:Class" + }, { + "id" : "610", + "type" : "owl:Class" + }, { + "id" : "99", + "type" : "owl:Class" + }, { + "id" : "759", + "type" : "owl:Class" + }, { + "id" : "802", + "type" : "owl:Class" + }, { + "id" : "253", + "type" : "owl:Class" + }, { + "id" : "337", + "type" : "owl:Class" + }, { + "id" : "369", + "type" : "owl:Class" + }, { + "id" : "108", + "type" : "owl:Class" + }, { + "id" : "841", + "type" : "owl:Class" + }, { + "id" : "88", + "type" : "owl:Class" + }, { + "id" : "74", + "type" : "owl:Class" + }, { + "id" : "888", + "type" : "owl:Class" + }, { + "id" : "431", + "type" : "owl:Class" + }, { + "id" : "552", + "type" : "owl:Class" + }, { + "id" : "361", + "type" : "owl:Class" + }, { + "id" : "133", + "type" : "owl:Class" + }, { + "id" : "119", + "type" : "owl:Class" + }, { + "id" : "306", + "type" : "owl:Class" + }, { + "id" : "344", + "type" : "owl:Class" + }, { + "id" : "668", + "type" : "owl:Class" + }, { + "id" : "696", + "type" : "owl:Class" + }, { + "id" : "232", + "type" : "owl:Class" + }, { + "id" : "400", + "type" : "owl:Class" + }, { + "id" : "191", + "type" : "owl:Class" + }, { + "id" : "198", + "type" : "owl:Class" + }, { + "id" : "757", + "type" : "owl:Class" + }, { + "id" : "153", + "type" : "owl:Class" + }, { + "id" : "56", + "type" : "owl:Class" + }, { + "id" : "818", + "type" : "owl:Class" + }, { + "id" : "447", + "type" : "owl:Class" + }, { + "id" : "250", + "type" : "owl:Class" + }, { + "id" : "262", + "type" : "owl:Class" + }, { + "id" : "576", + "type" : "owl:Class" + }, { + "id" : "203", + "type" : "owl:Class" + }, { + "id" : "618", + "type" : "owl:Class" + }, { + "id" : "162", + "type" : "owl:Class" + }, { + "id" : "380", + "type" : "owl:Class" + }, { + "id" : "422", + "type" : "owl:intersectionOf" + }, { + "id" : "265", + "type" : "owl:Class" + }, { + "id" : "858", + "type" : "owl:Class" + }, { + "id" : "535", + "type" : "owl:Class" + }, { + "id" : "437", + "type" : "owl:Class" + }, { + "id" : "51", + "type" : "owl:Class" + }, { + "id" : "322", + "type" : "owl:Class" + }, { + "id" : "297", + "type" : "owl:Class" + }, { + "id" : "445", + "type" : "owl:Class" + }, { + "id" : "124", + "type" : "owl:Class" + }, { + "id" : "395", + "type" : "owl:Class" + }, { + "id" : "448", + "type" : "owl:Class" + }, { + "id" : "151", + "type" : "owl:Class" + }, { + "id" : "808", + "type" : "owl:Class" + }, { + "id" : "820", + "type" : "owl:Class" + }, { + "id" : "620", + "type" : "owl:Class" + } ], + "classAttribute" : [ { + "iri" : "https://w3id.org/pmd/mo/FieldEmissionGun", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A Field Emission Gun is an electron gun used in electron microscopes to produce an electron beam with extremely high brightness and coherence. It relies on the phenomenon of field emission, where electrons are emitted from a sharp emitter tip under the influence of a strong electric field. FEGs are capable of producing highly focused electron beams, leading to enhanced imaging resolution and analytical capabilities.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "FEG", + "type" : "label" + } ] + }, + "label" : { + "de" : "Feldemissionskanone", + "IRI-based" : "FieldEmissionGun", + "en" : "Field Emission Gun" + }, + "attributes" : [ "external" ], + "id" : "41", + "superClasses" : [ "42" ] + }, { + "iri" : "https://w3id.org/pmd/mo/XRayDiffraction", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "prefLabel" : [ { + "identifier" : "prefLabel", + "language" : "de", + "value" : "Röntgenbeugung", + "type" : "label" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "X-ray Diffraction is a technique that utilizes the diffraction of X-rays by crystals to determine their atomic arrangement and lattice structure. X-ray diffraction patterns are produced when X-rays strike a crystalline sample, and the resulting pattern provides information about the arrangement of atoms in the crystal lattice.", + "type" : "label" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "de", + "value" : "Röntgenstrahlbeugung", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "XRD", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "XRayDiffraction", + "en" : "X-ray Diffraction" + }, + "attributes" : [ "external" ], + "id" : "43", + "superClasses" : [ "19" ] + }, { + "iri" : "https://w3id.org/pmd/co/OpticalMicroscopy", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Optical microscope.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/optical%20microscope. Accessed 24 Nov. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A microscopy process in which light rays are seen directly by the observer as distinguished from one (as an electron microscope) in which some transformation or system of indirect viewing is use.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Optische Mikroskopie", + "IRI-based" : "OpticalMicroscopy", + "en" : "Optical Microscopy" + }, + "subClasses" : [ "46" ], + "attributes" : [ "external" ], + "id" : "44", + "superClasses" : [ "45" ] + }, { + "iri" : "https://w3id.org/pmd/mo/Reconstruction", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The process of creating a three-dimensional image or model from two-dimensional data.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Der Prozess der Erstellung eines dreidimensionalen Bildes oder Modells aus zweidimensionalen Daten.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Rekonstruktion", + "IRI-based" : "Reconstruction", + "en" : "Reconstruction" + }, + "subClasses" : [ "48", "49" ], + "attributes" : [ "external" ], + "id" : "47", + "superClasses" : [ "2" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Person", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-agent", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Person agents are people.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-types", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Person", + "undefined" : "Person" + }, + "attributes" : [ "external" ], + "id" : "67", + "superClasses" : [ "68" ] + }, { + "iri" : "https://w3id.org/pmd/co/ProvidedIdentifier", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A colloquial, human-generated descriptor.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Bereitgestellter Identifikator", + "IRI-based" : "ProvidedIdentifier", + "en" : "Provided Identifier" + }, + "subClasses" : [ "77", "78" ], + "attributes" : [ "external" ], + "id" : "75", + "superClasses" : [ "76" ] + }, { + "iri" : "https://w3id.org/pmd/co/Acoustical", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Acoustic.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/acoustic. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Akustisch bezieht sich auf den Hörsinn oder die Hörorgane, auf Schall oder auf die Wissenschaft vom Schall. Hier spezifisch auf die akustischen Eigenschaften eines Materials.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Acoustical is relating to the sense or organs of hearing, to sound, or to the science of sounds. Here specifically on the acoustic properties of a material.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Akustisch", + "IRI-based" : "Acoustical", + "en" : "Acoustical" + }, + "attributes" : [ "external" ], + "id" : "83", + "superClasses" : [ "84" ] + }, { + "iri" : "https://w3id.org/pmd/mo/Scintillator", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A material that emits light when it absorbs ionizing radiation.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Ein Material, das Licht aussendet, wenn es ionisierende Strahlung absorbiert.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Szintillator", + "IRI-based" : "Scintillator", + "en" : "Scintillator" + }, + "attributes" : [ "external" ], + "id" : "109", + "superClasses" : [ "110" ] + }, { + "iri" : "https://w3id.org/pmd/mo/ScanningTransmissionElectronMicroscopy", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Scanning Transmission Electron Microscopy is a technique that combines the principles of scanning and transmission electron microscopy. It allows imaging and spectroscopy with high spatial resolution.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "STEM", + "type" : "label" + } ] + }, + "label" : { + "de" : "Rastertransmissionselektronenmikroskopie", + "IRI-based" : "ScanningTransmissionElectronMicroscopy", + "en" : "Scanning Transmission Electron Microscopy" + }, + "subClasses" : [ "111", "112", "113", "114" ], + "attributes" : [ "external" ], + "id" : "4", + "superClasses" : [ "5" ] + }, { + "iri" : "https://w3id.org/pmd/co/Electrical", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Electric.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/electric. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Electrical is relating to electricity or something that is powered by electricity. Here specifically to the electrical properties of a material.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Elektrisch bezieht sich auf Elektrizität oder etwas, das mit Elektrizität betrieben wird. Hier speziell auf die elektrischen Eigenschaften eines Materials.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Elektrisch", + "IRI-based" : "Electrical", + "en" : "Electrical" + }, + "attributes" : [ "external" ], + "id" : "117", + "superClasses" : [ "84" ] + }, { + "iri" : "https://w3id.org/pmd/co/CalibrationDocument", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "https://www.merriam-webster.com/dictionary/calibration", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This entity describes a document used to state that a set of graduations to indicate values or positions has been performed. Typically, the calibration operator is included.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Entität beschreibt ein Dokument, welches Abweichungen eines Messgerätes oder einer Maßverkörperung gegenüber einem anderen Gerät oder einer anderen Maßverkörperung feststellt und dokumentiert. Typischerweise ist die Person, welche die Kalibrierung durchführte, angegeben.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Kalibrierschein", + "IRI-based" : "CalibrationDocument", + "en" : "Calibration Document" + }, + "attributes" : [ "external" ], + "id" : "128", + "superClasses" : [ "129" ] + }, { + "iri" : "https://w3id.org/pmd/co/Width", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "https://www.merriam-webster.com/dictionary/width", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Entität bezeichnet eine horizontale Messung, die im rechten Winkel zur Länge eines Objekts vorgenommen wird.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This entity describes a horizontal measurement of an object taken at right angles to the length of the object.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Breite", + "IRI-based" : "Width", + "en" : "Width" + }, + "attributes" : [ "external" ], + "id" : "154", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/mo/PolarizedLightMicroscopy", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Polarized Light Microscopy is a technique that uses polarized light to enhance the contrast and reveal structural information in transparent samples. Light waves vibrate in specific directions, and by using polarizers to control the orientation of light waves, polarized light microscopy can highlight birefringent materials, anisotropic structures, and stress patterns within samples. This technique is valuable for studying crystalline structures, fibers, and anisotropic materials.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "PLM", + "type" : "label" + } ] + }, + "label" : { + "de" : "Polarisationslichtmikroskopie", + "IRI-based" : "PolarizedLightMicroscopy", + "en" : "Polarized Light Microscopy" + }, + "attributes" : [ "external" ], + "id" : "155", + "superClasses" : [ "46" ] + }, { + "iri" : "https://w3id.org/pmd/co/ProcessDuration", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A length of an interval of time in which a process is conducted.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Prozessdauer", + "IRI-based" : "ProcessDuration", + "en" : "Process Duration" + }, + "attributes" : [ "external" ], + "id" : "156", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/mo/ElectronDiffractionPattern", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "undefined", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Das Muster von Flecken oder Ringen, das auf einem Detektor entsteht, wenn Elektronen nach der Wechselwirkung mit einer kristallinen Probe gebeugt werden, und das zur Bestimmung der Kristallstruktur verwendet wird.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "The pattern of spots or rings produced on a detector when electrons diffract after interacting with a crystalline sample, used to determine the crystal structure.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Elektronenbeugungsmuster", + "IRI-based" : "ElectronDiffractionPattern", + "en" : "Electron Diffraction Pattern" + }, + "attributes" : [ "external" ], + "id" : "157", + "superClasses" : [ "158" ] + }, { + "iri" : "https://w3id.org/pmd/mo/PolarizedLightMicroscope", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A microscope that uses polarized light to observe and analyze samples.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Ein Mikroskop, das polarisiertes Licht zur Beobachtung und Analyse von Proben verwendet.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "PLM", + "type" : "label" + } ] + }, + "label" : { + "de" : "Polarisiertes Lichtmikroskop", + "IRI-based" : "PolarizedLightMicroscope", + "en" : "Polarized Light Microscope" + }, + "attributes" : [ "external" ], + "id" : "159", + "superClasses" : [ "160" ] + }, { + "iri" : "https://w3id.org/pmd/mo/ExtractionVoltage", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "undefined", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The voltage applied to the electron source in an electron microscope to extract electrons from the cathode and accelerate them towards the specimen.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Die Spannung, die an die Elektronenquelle in einem Elektronenmikroskop angelegt wird, um Elektronen aus der Kathode zu extrahieren und sie auf die Probe zu beschleunigen.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Extraktionsspannung", + "IRI-based" : "ExtractionVoltage", + "en" : "Extraction Voltage" + }, + "attributes" : [ "external" ], + "id" : "161", + "superClasses" : [ "162" ] + }, { + "iri" : "https://w3id.org/pmd/co/Thermocouple", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Thermocouple.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/thermocouple. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Ein Gerät zur Temperaturmessung, bei dem ein Paar Drähte aus unterschiedlichen Metallen (z. B. Kupfer und Eisen) verbunden und die freien Enden der Drähte mit einem Instrument (z. B. einem Voltmeter) verbunden werden, das die an der Verbindungsstelle erzeugte der beiden Metalle Potentialdifferenz misst .", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A device for measuring temperature in which a pair of wires of dissimilar metals (such as copper and iron) are joined and the free ends of the wires are connected to an instrument (such as a voltmeter) that measures the difference in potential created at the junction of the two metals.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Thermoelement", + "IRI-based" : "Thermocouple", + "en" : "Thermocouple" + }, + "attributes" : [ "external" ], + "id" : "175", + "superClasses" : [ "176" ] + }, { + "iri" : "https://w3id.org/pmd/co/YCoordinate", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Y-coordinate.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/y-coordinate. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Y-coordinate is a coordinate whose value is determined by measuring parallel to a y-axis.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Die Y-Koordinate ist eine Koordinate, deren Wert durch Messung parallel zu einer Y-Achse bestimmt wird.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Y Koordinate", + "IRI-based" : "YCoordinate", + "en" : "Y Coordinate" + }, + "subClasses" : [ "179" ], + "attributes" : [ "external" ], + "id" : "177", + "superClasses" : [ "178" ] + }, { + "iri" : "https://w3id.org/pmd/co/MaterialProperty", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“List of materials properties.” Wikipedia The Free Encyclopedia, https://en.wikipedia.org/wiki/List_of_materials_properties. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A materials property is an intensive property of a material, i.e., a physical property that does not depend on the amount of the material. These quantitative properties may be used as a metric by which the benefits of one material versus another can be compared, thereby aiding in materials selection.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Eine Materialeigenschaft ist eine intensive Eigenschaft eines Materials, d. h. eine physikalische Eigenschaft, die nicht von der Menge des Materials abhängt. Diese quantitativen Eigenschaften können als Maßstab verwendet werden, um die Vorteile eines Materials mit denen eines anderen zu vergleichen und so die Materialauswahl zu erleichtern.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Materialeigenschaft", + "IRI-based" : "MaterialProperty", + "en" : "Material Property" + }, + "subClasses" : [ "83", "188", "189", "190", "191", "192", "193", "117", "194" ], + "attributes" : [ "external" ], + "id" : "84", + "superClasses" : [ "187" ] + }, { + "iri" : "https://w3id.org/pmd/mo/FocusedIonBeamScanningElectronMicroscopy", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Focused Ion Beam Scanning Electron Microscopy is a combination of two techniques: focused ion beam (FIB) and scanning electron microscopy (SEM). FIB-SEM systems use a focused ion beam to both image and modify a sample's surface. The ion beam can be used for milling, cutting, and deposition processes, making FIB-SEM a versatile tool for materials analysis, sample preparation, and three-dimensional imaging.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "FIB-SEM", + "type" : "label" + } ] + }, + "label" : { + "de" : "Fokussierte Ionenstrahl-Rasterelektronenmikroskopie", + "IRI-based" : "FocusedIonBeamScanningElectronMicroscopy", + "en" : "Focused Ion Beam Scanning Electron Microscopy" + }, + "attributes" : [ "external" ], + "id" : "201", + "superClasses" : [ "182" ] + }, { + "iri" : "https://w3id.org/pmd/mo/SpatialResolution", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The ability of an imaging system to discern fine details in an object. It refers to the smallest discernible detail in an image.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Die Fähigkeit eines Bildgebungssystems, feine Details in einem Objekt anzuzeigen. Sie bezieht sich auf das kleinste wahrnehmbare Detail in einem Bild.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Ortsauflösung", + "IRI-based" : "SpatialResolution", + "en" : "Spatial Resolution" + }, + "attributes" : [ "external" ], + "id" : "202", + "superClasses" : [ "203" ] + }, { + "iri" : "https://w3id.org/pmd/mo/CollectionEfficiency", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The ability of a detector or system to capture and record relevant signals or data.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Die Fähigkeit eines Detektors oder Systems, relevante Signale oder Daten zu erfassen und aufzuzeichnen.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Kollektoreffizienz", + "IRI-based" : "CollectionEfficiency", + "en" : "Collection Efficiency" + }, + "attributes" : [ "external" ], + "id" : "204", + "superClasses" : [ "205" ] + }, { + "iri" : "https://w3id.org/pmd/mo/MechanicalPolishing", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Mechanical polishing is a material preparation technique used to enhance the surface quality and finish of a sample by removing thin layers of material through abrasion. It involves using abrasive materials, such as polishing cloths, diamond suspensions, or abrasive pastes, along with a polishing machine or device. The process typically includes several steps, each using progressively finer abrasives to achieve a smooth and mirror-like surface.\n\nDuring mechanical polishing, the sample is pressed against the rotating polishing medium with controlled pressure. The abrasive particles embedded in the medium gradually remove surface irregularities, scratches, and imperfections, resulting in improved flatness, clarity, and reflectivity. The process can be adjusted to target specific levels of surface roughness and precision.\n\nMechanical polishing is commonly used in various scientific and industrial applications, such as metallography, materials science, electronics, and optics. It is an essential step before further analyses like microscopy, spectroscopy, or surface profiling, as it provides a pristine surface for accurate characterization and observation of material properties.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Mechanisches Polieren", + "IRI-based" : "MechanicalPolishing", + "en" : "Mechanical Polishing" + }, + "attributes" : [ "external" ], + "id" : "206", + "superClasses" : [ "207" ] + }, { + "iri" : "https://w3id.org/pmd/mo/Efficiency", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The ratio of useful output to total input in any system.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Das Verhältnis von nützlichem / nutzbarem Output zum gesamten Input in einem System.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Effizienz", + "IRI-based" : "Efficiency", + "en" : "Efficiency" + }, + "subClasses" : [ "204", "223" ], + "attributes" : [ "external" ], + "id" : "205", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/mo/ImageFilter", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An image filter is a device or component used in imaging systems, such as microscopy or photography, to modify the appearance of an image by selectively altering certain characteristics. Filters can be used to adjust contrast, brightness, color balance, and other image properties. They are often used to enhance specific features or to correct for distortions caused by lighting conditions or optical imperfections.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Abbildungsfilter", + "IRI-based" : "ImageFilter", + "en" : "Image Filter" + }, + "subClasses" : [ "225" ], + "attributes" : [ "external" ], + "id" : "224", + "superClasses" : [ "110" ] + }, { + "iri" : "https://w3id.org/pmd/co/DimensionMeasuringDevice", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Entität beschreibt allgemein jedes Werkzeug, das für die Messung der Abmessungen eines greifbaren Objekts verwendet wird, z. B. eines Messschiebers.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This entity generically describes any tool that is used for the measurement of the dimensions of a tangible object, e.g., a caliper.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Dimensionsmesswerkzeug", + "IRI-based" : "DimensionMeasuringDevice", + "en" : "Dimension Measuring Device" + }, + "attributes" : [ "external" ], + "id" : "226", + "superClasses" : [ "176" ] + }, { + "iri" : "https://w3id.org/pmd/co/Caliper", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "https://www.merriam-webster.com/dictionary/caliper", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "ein Messgerät mit zwei in der Regel verstellbaren Armen, Schenkeln oder Klemmbacken, das vor allem zur Messung der Abmessungen von Gegenständen, wie z. B. des Durchmessers oder der Dicke, verwendet wird", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "any of various measuring instruments having two usually adjustable arms, legs, or jaws used especially to measure the dimensions of objects, such as diameters or thicknesses", + "type" : "label" + } ] + }, + "label" : { + "de" : "Messschieber", + "IRI-based" : "Caliper", + "en" : "Caliper" + }, + "attributes" : [ "external" ], + "id" : "245", + "superClasses" : [ "176" ] + }, { + "iri" : "https://w3id.org/pmd/co/Regression", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Regression.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/regression. Accessed 24 Nov. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A functional relationship between two or more correlated variables that is often empirically determined from data and is used especially to predict values of one variable when given values of the others.\nSpecifically : a function that yields the mean value of a random variable under the condition that one or more independent variables have specified values.", + "type" : "label" + } ], + "example" : [ { + "identifier" : "example", + "language" : "en", + "value" : "Regression of y on x is linear", + "type" : "label" + } ] + }, + "label" : { + "de" : "Regression", + "IRI-based" : "Regression", + "en" : "Regression" + }, + "attributes" : [ "external" ], + "id" : "82", + "superClasses" : [ "74" ] + }, { + "iri" : "https://w3id.org/pmd/mo/IonBeam", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "undefined", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Ein Ionenstrom, der zum Mahlen oder zur Analyse verwendet wird, insbesondere bei Ionenmikroskopietechniken zur Bildgebung.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A stream of ions used for grinding or analysis, especially in ion microscopy techniques for imaging.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Ionenstrahl", + "IRI-based" : "IonBeam", + "en" : "Ion Beam" + }, + "attributes" : [ "external" ], + "id" : "27", + "superClasses" : [ "22" ] + }, { + "iri" : "https://w3id.org/pmd/co/NodeName", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A human-generated identifier associated with a discernible, tangible or simulated entity intended to be unique in a given scope", + "type" : "label" + } ] + }, + "label" : { + "de" : "Knotenname", + "IRI-based" : "NodeName", + "en" : "Node Name" + }, + "attributes" : [ "external" ], + "id" : "77", + "superClasses" : [ "75", "232" ] + }, { + "iri" : "https://w3id.org/pmd/co/NodeVersion", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Processing Node Version Number, e.g. \"2.24\"", + "type" : "label" + } ] + }, + "label" : { + "de" : "Knotenversion", + "IRI-based" : "NodeVersion", + "en" : "Node Version" + }, + "attributes" : [ "external" ], + "id" : "234", + "superClasses" : [ "232" ] + }, { + "iri" : "https://w3id.org/pmd/co/Furnace", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Furnace.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/furnace. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Eine geschlossene Struktur, in der Wärme erzeugt wird (z. B. zum Heizen eines Hauses oder zum Einschmelzen von Erz).", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "An enclosed structure in which heat is produced (as for heating a house or for reducing ore).", + "type" : "label" + } ] + }, + "label" : { + "de" : "Ofen", + "IRI-based" : "Furnace", + "en" : "Furnace" + }, + "attributes" : [ "external" ], + "id" : "301", + "superClasses" : [ "110" ] + }, { + "iri" : "https://w3id.org/pmd/mo/FluorescenceMicroscopy", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Fluorescence Microscopy is an optical imaging technique used to visualize biological structures and molecules that fluoresce when illuminated with specific wavelengths of light. Fluorescent molecules absorb light energy and then emit light of a longer wavelength, allowing the visualization of specific molecules or cellular components. Fluorescence microscopy is widely used in cell biology, molecular biology, and medical research.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Fluoreszenzmikroskopie", + "IRI-based" : "FluorescenceMicroscopy", + "en" : "Fluorescence Microscopy" + }, + "attributes" : [ "external" ], + "id" : "317", + "superClasses" : [ "46" ] + }, { + "iri" : "http://purl.obolibrary.org/obo/CHEBI_24431", + "baseIri" : "http://purl.obolibrary.org/obo", + "instances" : 0, + "annotations" : { + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChEBI ontology https://www.ebi.ac.uk/chebi/searchId.do?chebiId=CHEBI:24431#", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "CHEBI_24431", + "en" : "Chemical Entity" + }, + "attributes" : [ "external" ], + "id" : "320" + }, { + "iri" : "https://w3id.org/pmd/co/Length", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "de", + "value" : "https://www.merriam-webster.com/dictionary/length", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Eine gemessene Entfernung oder Abmessung eines Objekts, normalerweise die längere oder längste Abmessung des Objekts.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A measured distance or dimension of an object, usually the longer or longest dimension of the object.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Länge", + "IRI-based" : "Length", + "en" : "Length" + }, + "subClasses" : [ "322", "323" ], + "attributes" : [ "external" ], + "id" : "321", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/CalibrationRange", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Eigenschaft beschreibt den Bereich zwischen den Grenzen, innerhalb derer eine Größe gemessen, empfangen oder übertragen wird (typischerweise von einem Prozessknoten, z. B. einer Maschine), ausgedrückt durch die Angabe des unteren und oberen Bereichswertes.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This property describes the region between the limits within which a quantity is measured, received or transmitted (typically by a process node, e.g. a machine), expressed by stating the lower and upper range values.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Kalibrierbereich", + "IRI-based" : "CalibrationRange", + "en" : "Calibration range" + }, + "attributes" : [ "external" ], + "id" : "324", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/mo/ScanningTransmissionElectronMicroscope", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Eine Art von Transmissionselektronenmikroskop, bei dem ein fokussierter Elektronenstrahl über die Probe gescannt wird.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A type of transmission electron microscope where a focused electron beam is scanned across the sample.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "STEM", + "type" : "label" + } ] + }, + "label" : { + "de" : "Rastertransmissionselektronenmikroskop", + "IRI-based" : "ScanningTransmissionElectronMicroscope", + "en" : "Scanning Transmission Electron Microscope" + }, + "subClasses" : [ "325" ], + "attributes" : [ "external" ], + "id" : "314", + "superClasses" : [ "277" ] + }, { + "iri" : "https://w3id.org/pmd/mo/Energy", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The capacity of a physical system to perform work.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Die Fähigkeit eines physischen Systems, Arbeit zu verrichten.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Energie", + "IRI-based" : "Energy", + "en" : "Energy" + }, + "subClasses" : [ "133", "70" ], + "comment" : { + "de" : "Die Energie wird üblicherweise in Joule (J) oder Elektronenvolt (eV) gemessen.", + "en" : "The energy is usually measured in joules (J) or electron volts (eV)." + }, + "attributes" : [ "external" ], + "id" : "71", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/Biological", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Biological.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/biological. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Biological is relating to biology or to life and living processes. Here specifically to the biological properties of a material.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Biologisch bezieht sich auf die Biologie oder auf das Leben und lebende Prozesse. Hier speziell auf die biologischen Eigenschaften eines Materials.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Biologisch", + "IRI-based" : "Biological", + "en" : "Biological" + }, + "attributes" : [ "external" ], + "id" : "193", + "superClasses" : [ "84" ] + }, { + "iri" : "https://w3id.org/pmd/co/PrimaryData", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Die Datenkategorie Primärdaten umfasst Daten, die vor / nach einem Prozess erfasst werden, entweder bezogen auf die Geometrie des Objekts (z.B. ao, bo, do, au, bu, du, Lu) oder als Register des gesamten Aufbaus (z.B. Skizzen, Fotos oder Videos)", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This data scope expresses that a ValueObject refers to data that is directly acquired during a process by sensors (time, force, length, temperature)", + "type" : "label" + } ] + }, + "label" : { + "de" : "Primärdaten", + "IRI-based" : "PrimaryData", + "en" : "Primary Data" + }, + "attributes" : [ "external" ], + "id" : "249", + "superClasses" : [ "250" ] + }, { + "iri" : "https://w3id.org/pmd/mo/PhysicalProcess", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A physical process refers to a sequence of events or interactions that occur in the physical world and can be described and analyzed based on the principles of physics. These processes involve the transformation of energy, matter, or both, and they often follow established laws and theories of physics. In particular, a physical process may just occur due to natural circumstances and does not necessarily have to be induced by human activities or interactions.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Physikalischer Prozess", + "IRI-based" : "PhysicalProcess", + "en" : "Physical Process" + }, + "subClasses" : [ "14", "19" ], + "attributes" : [ "external" ], + "id" : "15", + "superClasses" : [ "38" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Organization", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-agent", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "undefined", + "value" : "An organization is a social or legal institution such as a company, society, etc.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-types", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Organization", + "undefined" : "Organization" + }, + "subClasses" : [ "24", "29" ], + "attributes" : [ "external" ], + "id" : "25", + "superClasses" : [ "68" ] + }, { + "iri" : "https://w3id.org/pmd/co/Slide", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A moving piece that is guided by a part along its path, providing the mount for objects.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Schlitten", + "IRI-based" : "Slide", + "en" : "Slide" + }, + "attributes" : [ "external" ], + "id" : "379", + "superClasses" : [ "380" ] + }, { + "iri" : "https://w3id.org/pmd/mo/DynamicTransmissionElectronMicroscopy", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Dynamic Transmission Electron Microscopy is a technique that uses ultrafast electron pulses to capture rapid processes in materials with nanosecond to picosecond time resolution.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "DTEM", + "type" : "label" + } ] + }, + "label" : { + "de" : "Dynamische Transmissionselektronenmikroskopie", + "IRI-based" : "DynamicTransmissionElectronMicroscopy", + "en" : "Dynamic Transmission Electron Microscopy" + }, + "attributes" : [ "external" ], + "id" : "60", + "superClasses" : [ "5" ] + }, { + "instances" : 0, + "union" : [ "399", "400" ], + "attributes" : [ "union", "anonymous" ], + "id" : "398" + }, { + "iri" : "https://w3id.org/pmd/mo/FieldIonMicroscope", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Ein Mikroskoptyp, der das Phänomen der Feldionisation nutzt, um Oberflächen mit atomarer Auflösung abzubilden.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A type of microscope that uses the phenomenon of field ionization to image surfaces with atomic resolution.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "FIM", + "type" : "label" + } ] + }, + "label" : { + "de" : "Feldionenmikroskop", + "IRI-based" : "FieldIonMicroscope", + "en" : "Field Ion Microscope" + }, + "attributes" : [ "external" ], + "id" : "397", + "superClasses" : [ "357" ] + }, { + "iri" : "https://w3id.org/pmd/co/ChemicalComposition", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "undefined", + "value" : "https://chem.libretexts.org/Courses/College_of_Marin/CHEM_114%3A_Introductory_Chemistry/06%3A_Chemical_Composition", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Chemical composition refers to the arrangement, type, and ratio of atoms in molecules of chemical substances. Chemical composition varies when chemicals are added or subtracted from a substance, when the ratio of substances changes, or when other chemical changes occur in chemicals.", + "type" : "label" + } ], + "example" : [ { + "identifier" : "example", + "language" : "undefined", + "value" : "ex:proc1 a pmd:Process .\nex:proc1 pmd:chacteristic ex:vo1 .\n\nex:vo1 a ValueObject .\nex:vo1 pmd:resource ex:chemComp1 .\nex:chemComp1 a pmd:ChemicalComposition .\n\nex:vo2 dcterm:partOf ex:chemComp1 .\nex:vo2 a pmd:ChemicalElement .\nex:vo2 pmd:relatesToElement CHEBI:28984 .\nex:vo2 pmd:relatesTo ex:vo3 .\n\npmd:MassFraction rdf:subClassOf ValueObject .\nex:vo3 a pmd:MassFraction .\nex:vo3 qudt:upperBound \"0.3\" .\nex:vo3 qudt:lowerBound \"0\" .\nex:vo3 qudt:unit qudt:PERCENT .\n\nex:vo4 a pmd:MassFraction .\nex:vo4 pmd:resource pmd:NotDetected .", + "type" : "label" + } ] + }, + "label" : { + "de" : "Chemische Zusammensetzung", + "IRI-based" : "ChemicalComposition", + "en" : "Chemical Composition" + }, + "attributes" : [ "external" ], + "id" : "213", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/FeretDiameter", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The Feret diameter or Feret's diameter is a measure of an object size along a specified direction. In general, it can be defined as the distance between the two parallel planes restricting the object perpendicular to that direction.\n(cf. Wikipedia: https://en.wikipedia.org/wiki/Feret_diameter)", + "type" : "label" + } ] + }, + "label" : { + "de" : "Äquivalentdurchmesser", + "IRI-based" : "FeretDiameter", + "en" : "Feret diameter" + }, + "attributes" : [ "external" ], + "id" : "174", + "superClasses" : [ "170" ] + }, { + "iri" : "https://w3id.org/pmd/co/Initiator", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The person that commisioned the process.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Initiator", + "IRI-based" : "Initiator", + "en" : "Initiator" + }, + "intersection" : [ "67" ], + "attributes" : [ "external", "intersection" ], + "id" : "401" + }, { + "iri" : "https://w3id.org/pmd/co/ModulusOfElasticity", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "symbol" : [ { + "identifier" : "symbol", + "language" : "undefined", + "value" : "E", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Quotient der Änderung der Spannung ΔR und Änderung der prozentualen Dehnung Δe in dem untersuchten Bereich multipliziert mit 100 % \n\nAnmerkung: Es wird empfohlen, den Wert in GPa, gerundet auf 0,1 GPa, und nach ISO 80000-1 anzugeben.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "quotient of change of stress ΔR and change of percentage extension Δe in the range of evaluation, multiplied by 100 %\n\nNote: It is recommended to report the value in GPa rounded to the nearest 0.1 GPa and according to ISO 80000-1.", + "type" : "label" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "de", + "value" : "E-Modul", + "type" : "label" + } ] + }, + "label" : { + "de" : "Elastizitätsmodul", + "IRI-based" : "ModulusOfElasticity", + "en" : "Modulus Of Elasticity" + }, + "attributes" : [ "external" ], + "id" : "402", + "superClasses" : [ "11" ] + }, { + "instances" : 0, + "union" : [ "395", "228", "11" ], + "attributes" : [ "union", "anonymous" ], + "id" : "403" + }, { + "instances" : 0, + "union" : [ "110", "380" ], + "attributes" : [ "union", "anonymous" ], + "id" : "131" + }, { + "iri" : "https://w3id.org/pmd/co/RelatedProjectIdentifier", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This property describes a named value intended to distinguish between projects that are related to the project considered. For instance, two related projects could be a measurement project that is part of project with a broader scope.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Eigenschaft beschreibt einen benannten Wert, der dazu dient, zwischen Projekten zu unterscheiden, die mit dem betrachteten Projekt in Relation stehen. Zwei in Relation stehende Projekte könnten zum Beispiel ein Messprojekt sein, das Teil eines Projekts mit einem breiteren Betrachtungsbereich ist.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Identifikation Eines Verbundenen Projektes", + "IRI-based" : "RelatedProjectIdentifier", + "en" : "Related Project Identifier" + }, + "attributes" : [ "external" ], + "id" : "404", + "superClasses" : [ "76" ] + }, { + "iri" : "https://w3id.org/pmd/mo/FrameTime", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "undefined", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The time required to capture and display a single frame of an image in an electron microscope.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Die Zeit, die benötigt wird, um ein Einzelbild in einem Elektronenmikroskop aufzunehmen und anzuzeigen.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Rahmenscanzeit", + "IRI-based" : "FrameTime", + "en" : "Frame Time" + }, + "attributes" : [ "external" ], + "id" : "405", + "superClasses" : [ "406" ] + }, { + "iri" : "https://w3id.org/pmd/mo/Monochromator", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An optical device that transmits a narrow range of wavelengths of light.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Ein optisches Gerät, das einen engen Wellenlängenbereich von Licht überträgt.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Monochromator", + "IRI-based" : "Monochromator", + "en" : "Monochromator" + }, + "attributes" : [ "external" ], + "id" : "407", + "superClasses" : [ "110" ] + }, { + "iri" : "https://w3id.org/pmd/co/SecondaryData", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This data scope expresses that a ValueObject refers to characteristic values (e.g. test results) determined by equations or algorithms using primary data and/or metadata.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Der Datenkategorie Sekundärdaten umfasst Werte (z. B. Testergebnisse), die durch Gleichungen oder Algorithmen unter Verwendung von Primärdaten und Metadaten ermittelt werden.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Sekundärdaten", + "IRI-based" : "SecondaryData", + "en" : "Secondary Data" + }, + "attributes" : [ "external" ], + "id" : "257", + "superClasses" : [ "250" ] + }, { + "instances" : 0, + "union" : [ "34", "220", "68" ], + "attributes" : [ "union", "anonymous" ], + "id" : "408" + }, { + "instances" : 0, + "union" : [ "34", "220", "68" ], + "attributes" : [ "union", "anonymous" ], + "id" : "8" + }, { + "instances" : 0, + "union" : [ "110", "395", "33", "38", "228", "11" ], + "attributes" : [ "union", "anonymous" ], + "id" : "409" + }, { + "instances" : 0, + "union" : [ "34", "220", "68" ], + "attributes" : [ "union", "anonymous" ], + "id" : "410" + }, { + "instances" : 0, + "union" : [ "34", "220", "411", "68" ], + "attributes" : [ "union", "anonymous" ], + "id" : "53" + }, { + "iri" : "https://w3id.org/pmd/co/LoadCellCapacity", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "LoadCellCapacity", + "en" : "Load cell capacity" + }, + "attributes" : [ "external" ], + "id" : "412", + "superClasses" : [ "11" ] + }, { + "instances" : 0, + "union" : [ "367", "411" ], + "attributes" : [ "union", "anonymous" ], + "id" : "415" + }, { + "iri" : "https://w3id.org/pmd/co/CrossSectionArea", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "https://www.merriam-webster.com/dictionary/cross%20section", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This property describes the area of a cutting or piece of an object cut off or broken at right angles or related to an axis.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Eigenschaft beschreibt die Fläche eines Schnittes oder eines rechtwinklig geschnittenen oder gebrochenen Stücks eines Objektes in Bezug auf eine Achse.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Querschnittsfläche", + "IRI-based" : "CrossSectionArea", + "en" : "Cross Section Area" + }, + "subClasses" : [ "349" ], + "attributes" : [ "external" ], + "id" : "350", + "superClasses" : [ "416" ] + }, { + "instances" : 0, + "union" : [ "371", "331", "335", "339" ], + "attributes" : [ "union", "anonymous" ], + "id" : "417" + }, { + "iri" : "https://w3id.org/pmd/mo/DetectorQuantumEfficiency", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Die Effizienz, mit der ein Detektor einfallende Strahlung in Nutzsignale umwandelt.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "The efficiency with which a detector converts incident radiation into useful signals.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Detektor Quantenausbeute", + "IRI-based" : "DetectorQuantumEfficiency", + "en" : "Detector Quantum Efficiency" + }, + "attributes" : [ "external" ], + "id" : "223", + "superClasses" : [ "205" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Influence", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasInfluencedBy", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-influence", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Influence is the capacity of an entity, activity, or agent to have an effect on the character, development, or behavior of another by means of usage, start, end, generation, invalidation, communication, derivation, attribution, association, or delegation.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-influence", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Influence", + "undefined" : "Influence" + }, + "subClasses" : [ "119", "306", "309" ], + "comment" : { + "en" : "An instance of prov:Influence provides additional descriptions about the binary prov:wasInfluencedBy relation from some influenced Activity, Entity, or Agent to the influencing Activity, Entity, or Agent. For example, :stomach_ache prov:wasInfluencedBy :spoon; prov:qualifiedInfluence [ a prov:Influence; prov:entity :spoon; :foo :bar ] . Because prov:Influence is a broad relation, the more specific relations (Communication, Delegation, End, etc.) should be used when applicable." + }, + "attributes" : [ "external" ], + "id" : "7" + }, { + "iri" : "https://w3id.org/pmd/mo/Anode", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The anode is the positively charged electrode in an electrochemical cell or other electrically driven systems. It serves as the site where oxidation occurs, meaning electrons are released from the anode, typically moving towards the cathode. In devices like batteries, the anode is where electrons are produced during the discharge process.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Anode", + "IRI-based" : "Anode", + "en" : "Anode" + }, + "attributes" : [ "external" ], + "id" : "418", + "superClasses" : [ "419" ] + }, { + "iri" : "https://w3id.org/pmd/co/2DPixelCoordinates", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Ein Pixel kann durch ein Paar von Ganzzahlen identifiziert werden, die die Spalten- und Zeilennummer angeben, hier die 2D Pixel Koordinaten. Zum Beispiel würde ein Pixel mit den Koordinaten (1,2) in der Spalte Nummer 1 und der Zeile Nummer 2 liegen. Üblicherweise werden Spalten beginnend mit Null von links nach rechts nummeriert.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A pixel can be identified by a pair of integers indicating the column and row number, here the 2D pixel coordinates. For example, a pixel with coordinates (1,2) would be in column number 1 and row number 2. Typically, columns are numbered starting with zero from left to right.", + "type" : "label" + } ] + }, + "label" : { + "de" : "2D Pixel Koordinaten", + "IRI-based" : "2DPixelCoordinates", + "en" : "2D Pixel Coordinates" + }, + "subClasses" : [ "177", "267" ], + "attributes" : [ "external" ], + "id" : "178", + "superClasses" : [ "420" ] + }, { + "iri" : "https://w3id.org/pmd/co/MaterialRelated", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This property is used to qualitatively and quantitatively describe a material by providing information on a material, e.g., by including material properties, material structure, etc.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Klasse dient der qualitativen und quantitativen Beschreibung eines Materials, indem sie Informationen über ein Material angibt, z. B. durch die Einbeziehung von Materialeigenschaften, Materialstruktur usw.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Materialbezug", + "IRI-based" : "MaterialRelated", + "en" : "Material Related" + }, + "subClasses" : [ "270", "84", "274", "236", "241", "247" ], + "attributes" : [ "external" ], + "id" : "187", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/mo/DwellTime", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "undefined", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The amount of time that the electron beam is focused on a specific point or region of interest on the specimen during imaging or analysis.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Die Zeitspanne, in der der Elektronenstrahl während der Bildgebung oder Analyse auf einen bestimmten Punkt oder einen interessierenden Bereich der Probe fokussiert wird.", + "type" : "label" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "de", + "value" : "Verweildauer", + "type" : "label" + } ] + }, + "label" : { + "de" : "Verweilzeit", + "IRI-based" : "DwellTime", + "en" : "Dwell Time" + }, + "attributes" : [ "external" ], + "id" : "421", + "superClasses" : [ "406" ] + }, { + "iri" : "https://w3id.org/pmd/co/ValueObject", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A :ValueObject is an entity which represents a specific value. This value can be a numerical, textual, or a more complex data structure. If a literal value is to be specified, the :value datatype property has to be used. In cases where the value is represented by a resource (e.g. URI), the :resource object property has to be used.\n\nA value object, respectively its value, is always associated with an entity of type :Process, :ProcessingNode, :Object (e.g. :Specimen), :DigitalEntity, :Project, or other :ValueObject. The value is meant to be a charactaristic of the associated entity. To express this association it is indended to use the :characteristic object property if the value decribes some \\\"quality\\\", or the :participant (:input,:output) if it is participating a process.\n\nA value object might also refer to a unit. The :unit property might be used (e.g. with QUDT ontology).\n\nInstances of a value object might also be a type of :ValueScope, namely a :SetPoint (nominal value), or :Measurement (measured value). With :Setpoint the intend is to express, that the value is meant to be some preset, setting or nominal value. :Measurement expresses, that the value has been measured or determined somehow (see example).\n\nInstances of a value object might also be specified in a specific :DataScope (:Metadata, :PrimaryData, :SecondaryData).", + "type" : "label" + } ], + "example" : [ { + "identifier" : "example", + "language" : "en", + "value" : "- the length of a specimen\n- the model number of a machine\n- a person involved in a process\n- a force on an object", + "type" : "label" + }, { + "identifier" : "example", + "language" : "en", + "value" : ":Length rdfs:subClass :ValueObject .\nex:vo1 a :Length .\nex:vo1 a :Measurement .\nex:vo1 a :PrimaryData .\nex:vo1 :unit qudt:MilliM . \nex:vo1 :value \"123.45\"\nex:p1 a :LengthMeasuringProcess .\nex:p1 :characteristic ex:vo1 .", + "type" : "label" + }, { + "identifier" : "example", + "language" : "en", + "value" : "The length of a specimen, which has been measured as primary data. Its actual value is 123.45 millimeters.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Wertobjekt", + "IRI-based" : "ValueObject", + "en" : "Value Object" + }, + "union" : [ "253" ], + "subClasses" : [ "203", "255", "259", "162", "213", "216", "218", "420", "422", "423", "402", "424", "205", "425", "76", "426", "427", "428", "429", "412", "430", "129", "431", "432", "433", "187", "170", "434", "361", "435", "344", "436", "437", "438", "154", "232", "439", "440", "321", "156", "441", "324", "442", "443", "71", "444", "253", "139", "445", "446", "447", "448", "449", "262", "416" ], + "attributes" : [ "external", "union" ], + "id" : "11", + "superClasses" : [ "220" ] + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "452", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "451", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "https://w3id.org/pmd/co/Extension", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Increase in the extensometer gauge length at any moment during the test", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Note: The extension might be measured using different channels (e.g. when using one or two extensometer channels); usually, the mean average value of involved channels is given as extension value, if applicable.\n\nNote: Optical extensometry may require a specific data storage method.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Zunahme der Extensometer-Messlänge zu einem beliebigen Zeitpunkt des Versuchs", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Dimensional analysis: L\nUnit (e.g. SI): mm", + "type" : "label" + } ] + }, + "label" : { + "de" : "Verlängerung (der Extensometer-Messlänge)", + "IRI-based" : "Extension", + "en" : "Extension" + }, + "subClasses" : [ "458" ], + "attributes" : [ "external" ], + "id" : "436", + "superClasses" : [ "11" ] + }, { + "instances" : 0, + "union" : [ "7", "417" ], + "attributes" : [ "union", "anonymous" ], + "id" : "462" + }, { + "instances" : 0, + "union" : [ "7", "415" ], + "attributes" : [ "union", "anonymous" ], + "id" : "464" + }, { + "iri" : "https://w3id.org/pmd/co/StartTime", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The date and time when a plan/recipe or process is executed.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Startzeit", + "IRI-based" : "StartTime", + "en" : "Start Time" + }, + "attributes" : [ "external" ], + "id" : "465", + "superClasses" : [ "432" ] + }, { + "iri" : "https://w3id.org/pmd/mo/ConvergenceAngle", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "undefined", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The angle at which the electron beam converges onto the specimen in an electron microscope.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Der Winkel, in dem der Elektronenstrahl in einem Elektronenmikroskop auf die Probe trifft.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Konvergenzwinkel", + "IRI-based" : "ConvergenceAngle", + "en" : "Convergence Angle" + }, + "comment" : { + "de" : "Der Konvergenzwinkel beeinflusst die Schärfentiefe und die Auflösung des Bildes.", + "en" : "The convergence angle affects the depth of field and resolution of the image." + }, + "attributes" : [ "external" ], + "id" : "466", + "superClasses" : [ "435" ] + }, { + "iri" : "https://w3id.org/pmd/co/MeasuringProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A measurement process is an analysis process that acquires data (usually expressed in numbers) by using tools.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Messprozess", + "IRI-based" : "MeasuringProcess", + "en" : "Measuring Process" + }, + "attributes" : [ "external" ], + "id" : "80", + "superClasses" : [ "2" ] + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "467", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "id" : "468", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "id" : "319", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "id" : "469", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "id" : "470", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "471", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "id" : "472", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "473", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "id" : "474", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "id" : "63", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "https://w3id.org/pmd/mo/FieldIonMicroscopy", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Field Ion Microscopy is a specialized microscopy technique that uses a strong electric field to ionize atoms on the surface of a metal sample. These ionized atoms are then repelled from the surface and can be detected to create an image of the sample's surface topography at atomic resolution. FIM is especially powerful for imaging the arrangement of atoms on metallic surfaces.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "FIM", + "type" : "label" + } ] + }, + "label" : { + "de" : "Feldionenmikroskopie", + "IRI-based" : "FieldIonMicroscopy", + "en" : "Field Ion Microscopy" + }, + "attributes" : [ "external" ], + "id" : "304", + "superClasses" : [ "182" ] + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "62", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "475", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2001/XMLSchema#dateTime", + "baseIri" : "http://www.w3.org/2001/XMLSchema", + "id" : "476", + "label" : { + "IRI-based" : "dateTime" + } + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "477", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "12", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2001/XMLSchema#dateTime", + "baseIri" : "http://www.w3.org/2001/XMLSchema", + "id" : "116", + "label" : { + "IRI-based" : "dateTime" + } + }, { + "iri" : "http://www.w3.org/2001/XMLSchema#dateTime", + "baseIri" : "http://www.w3.org/2001/XMLSchema", + "id" : "478", + "label" : { + "IRI-based" : "dateTime" + } + }, { + "iri" : "http://www.w3.org/2001/XMLSchema#dateTime", + "baseIri" : "http://www.w3.org/2001/XMLSchema", + "id" : "479", + "label" : { + "IRI-based" : "dateTime" + } + }, { + "iri" : "http://www.w3.org/2001/XMLSchema#dateTime", + "baseIri" : "http://www.w3.org/2001/XMLSchema", + "id" : "480", + "label" : { + "IRI-based" : "dateTime" + } + }, { + "iri" : "https://w3id.org/pmd/mo/AnnularBrightFieldScanningTransmissionElectronMicroscopy", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "ABF STEM is a technique that utilizes a specific arrangement of detectors to enhance contrast in STEM images, particularly for heavy elements.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "ABF-STEM", + "type" : "label" + } ] + }, + "label" : { + "de" : "Ringförmige Hellfeld-Rastertransmissionselektronenmikroskopie", + "IRI-based" : "AnnularBrightFieldScanningTransmissionElectronMicroscopy", + "en" : "Annular Bright Field Scanning Transmission Electron Microscopy" + }, + "attributes" : [ "external" ], + "id" : "113", + "superClasses" : [ "4" ] + }, { + "iri" : "https://w3id.org/pmd/mo/FlybackTime", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "undefined", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The time taken for the electron beam to return to its starting position after scanning a line or frame in an electron microscope.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Die Zeit, die der Elektronenstrahl benötigt, um nach dem Abtasten einer Zeile oder eines Bildes in einem Elektronenmikroskop in seine Ausgangsposition zurückzukehren.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Rücklaufzeit", + "IRI-based" : "FlybackTime", + "en" : "Flyback Time" + }, + "attributes" : [ "external" ], + "id" : "513", + "superClasses" : [ "406" ] + }, { + "iri" : "http://www.w3.org/ns/prov#PrimarySource", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#hadPrimarySource", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-primary-source", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A primary source for a topic refers to something produced by some agent with direct experience and knowledge about the topic, at the time of the topic's study, without benefit from hindsight.\n\nBecause of the directness of primary sources, they 'speak for themselves' in ways that cannot be captured through the filter of secondary sources. As such, it is important for secondary sources to reference those primary sources from which they were derived, so that their reliability can be investigated.\n\nA primary source relation is a particular case of derivation of secondary materials from their primary sources. It is recognized that the determination of primary sources can be up to interpretation, and should be done according to conventions accepted within the application's domain.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-original-source", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "PrimarySource", + "undefined" : "PrimarySource" + }, + "comment" : { + "en" : "An instance of prov:PrimarySource provides additional descriptions about the binary prov:hadPrimarySource relation from some secondary prov:Entity to an earlier, primary prov:Entity. For example, :blog prov:hadPrimarySource :newsArticle; prov:qualifiedPrimarySource [ a prov:PrimarySource; prov:entity :newsArticle; :foo :bar ] ." + }, + "attributes" : [ "external" ], + "id" : "514", + "superClasses" : [ "331" ] + }, { + "iri" : "https://w3id.org/pmd/co/ProcessIdentifier", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Ein umgangssprachlicher, von Menschen erstellter, beschreibender Text, der die Art einer Prozessinstanz qualifiziert, die als Kennung verwendet wird, die nicht unbedingt eindeutig sein muss, z.B. “1050°C30 840°C10/ÖL”.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A colloquial, human-generated, descriptive text qualifying the nature of a process instance used as an identifier that is not strictly intended to be unique, e.g. “1050°C30 840°C10/ÖL”.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Prozessidentifikator", + "IRI-based" : "ProcessIdentifier", + "en" : "Process Identifier" + }, + "intersection" : [ "76" ], + "attributes" : [ "external", "intersection" ], + "id" : "515", + "superClasses" : [ "76" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Revision", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasRevisionOf", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-revision", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A revision is a derivation for which the resulting entity is a revised version of some original. The implication here is that the resulting entity contains substantial content from the original. Revision is a particular case of derivation.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-Revision", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Revision", + "undefined" : "Revision" + }, + "comment" : { + "en" : "An instance of prov:Revision provides additional descriptions about the binary prov:wasRevisionOf relation from some newer prov:Entity to an earlier prov:Entity. For example, :draft_2 prov:wasRevisionOf :draft_1; prov:qualifiedRevision [ a prov:Revision; prov:entity :draft_1; :foo :bar ]." + }, + "attributes" : [ "external" ], + "id" : "327", + "superClasses" : [ "331" ] + }, { + "iri" : "https://w3id.org/pmd/co/Time", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Time.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/time. Accessed 25 Nov. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A nonspatial continuum that is measured in terms of events which succeed one another from past through present to future.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Zeit", + "IRI-based" : "Time", + "en" : "Time" + }, + "subClasses" : [ "465", "406", "539", "540", "541", "542" ], + "attributes" : [ "external" ], + "id" : "432", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/SimulationNode", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A simulation node is a processing node that represents a computational unit or processing element consuming and creating simulation objects and parameters. It performs specific tasks, calculations, or processes related to the simulation, and may be contributing to an overall simulation model. Simulation nodes are integral components in simulating dynamic processes, and they may interact with other nodes to collectively model complex systems or scenarios.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Simulationsknoten", + "IRI-based" : "SimulationNode", + "en" : "Simulation Node" + }, + "attributes" : [ "external" ], + "id" : "126", + "superClasses" : [ "127" ] + }, { + "iri" : "http://www.w3.org/ns/prov#End", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasEndedBy", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-End", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "End is when an activity is deemed to have been ended by an entity, known as trigger. The activity no longer exists after its end. Any usage, generation, or invalidation involving an activity precedes the activity's end. An end may refer to a trigger entity that terminated the activity, or to an activity, known as ender that generated the trigger.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "constraints" : [ { + "identifier" : "constraints", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-constraints-20130430/#prov-dm-constraints-fig", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-End", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "End", + "undefined" : "End" + }, + "comment" : { + "en" : "An instance of prov:End provides additional descriptions about the binary prov:wasEndedBy relation from some ended prov:Activity to an prov:Entity that ended it. For example, :ball_game prov:wasEndedBy :buzzer; prov:qualifiedEnd [ a prov:End; prov:entity :buzzer; :foo :bar; prov:atTime '2012-03-09T08:05:08-05:00'^^xsd:dateTime ]." + }, + "attributes" : [ "external" ], + "id" : "335", + "superClasses" : [ "306", "411" ] + }, { + "iri" : "https://w3id.org/pmd/co/SimulationProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "undefined", + "value" : "A process that is used for a simulation.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Simulationsprozess", + "IRI-based" : "SimulationProcess", + "en" : "Simulation Process" + }, + "attributes" : [ "external" ], + "id" : "283", + "superClasses" : [ "38" ] + }, { + "iri" : "https://w3id.org/pmd/co/AccreditationDocument", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "https://www.merriam-webster.com/dictionary/accreditation", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Entität beschreibt ein Dokument, welches aussagt, dass einer Organisation, Person oder Einrichtung eine offizielle Konformität mit einer Norm anerkannt wurde. Dies kann z. B. Prozesse, Ausrüstungen oder ganze Laboratorien umfassen.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This entity describes a document used to state that an official authorization or approval to recognize or vouch for a conformation with a standard was granted to an organization, person, or entity. This may include, e.g., processes, (sets of) equipment, or entire laboratories.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Akkreditierungsdokument", + "IRI-based" : "AccreditationDocument", + "en" : "Accreditation Document" + }, + "attributes" : [ "external" ], + "id" : "508", + "superClasses" : [ "129" ] + }, { + "iri" : "https://w3id.org/pmd/co/MinorAxisDiameter", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The longest diameter of an ellipse.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Hauptachsendurchmesser", + "IRI-based" : "MinorAxisDiameter", + "en" : "Major axis diameter" + }, + "attributes" : [ "external" ], + "id" : "169", + "superClasses" : [ "170" ] + }, { + "iri" : "https://w3id.org/pmd/mo/MonochromaticBeam", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "undefined", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Ein Elektronenstrahl, der aus Elektronen mit einem engen Energiebereich besteht, der in der Regel durch Elektronenenergiefilter oder Monochromatoren erreicht wird.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "An electron beam consisting of electrons with a narrow range of energies, typically achieved using electron energy filters or monochromators.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Monochromatischer Strahl", + "IRI-based" : "MonochromaticBeam", + "en" : "Monochromatic Beam" + }, + "attributes" : [ "external" ], + "id" : "31", + "superClasses" : [ "22" ] + }, { + "iri" : "https://w3id.org/pmd/co/ValueScope", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Eine Entität, die es ermöglicht \"ValueObjects\" zusätzlich zu kategorisieren.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This class expresses the categorization of :ValueObjects into measurements and setpoints.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "An entity that makes it possible to add categorization to \"ValueObjects\".", + "type" : "label" + } ] + }, + "label" : { + "de" : "Wertekategorie", + "IRI-based" : "ValueScope", + "en" : "Value Scope" + }, + "subClasses" : [ "575", "576" ], + "attributes" : [ "external" ], + "id" : "373", + "superClasses" : [ "220" ] + }, { + "iri" : "https://w3id.org/pmd/co/CommissionTime", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Date and time an order or plan has been dispatched at.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Kommissionszeit", + "IRI-based" : "CommissionTime", + "en" : "Commission Time" + }, + "attributes" : [ "external" ], + "id" : "541", + "superClasses" : [ "432" ] + }, { + "iri" : "https://w3id.org/pmd/mo/BeamCurrent", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "undefined", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The intensity of the electron beam, measured as the number of electrons passing through a given area per unit time.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Die Intensität des Elektronenstrahls, gemessen als Anzahl der Elektronen, die eine bestimmte Fläche pro Zeiteinheit durchdringen.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Strahlstrom", + "IRI-based" : "BeamCurrent", + "en" : "Beam Current" + }, + "attributes" : [ "external" ], + "id" : "594", + "superClasses" : [ "445" ] + }, { + "iri" : "https://w3id.org/pmd/co/ManufacturingProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A process that is driven by the primary intent to transform objects.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Herstellungsprozess", + "IRI-based" : "ManufacturingProcess", + "en" : "Manufacture Process" + }, + "subClasses" : [ "206" ], + "attributes" : [ "external" ], + "id" : "207", + "superClasses" : [ "38" ] + }, { + "iri" : "http://purl.org/spar/datacite/Identifier", + "baseIri" : "http://purl.org/spar/datacite", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://purl.org/spar/datacite", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "Identifier", + "en" : "DataCite Identifier" + }, + "intersection" : [ "425", "11" ], + "attributes" : [ "external", "intersection" ], + "id" : "600" + }, { + "iri" : "https://w3id.org/pmd/co/HydrogenBond", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "\"Hydrogen bond.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/hydrogen%20bond. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Eine Wasserstoffbindung ist eine elektrostatische Anziehung zwischen einem Wasserstoffatom in einem polaren Molekül (z. B. Wasser) und einem kleinen elektronegativen Atom (z. B. Sauerstoff, Stickstoff oder Fluor) in einem anderen Molekül der gleichen oder einer anderen polaren Substanz.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Hydrogen bond is an electrostatic attraction between a hydrogen atom in one polar molecule (as of water) and a small electronegative atom (as of oxygen, nitrogen, or fluorine) in usually another molecule of the same or a different polar substance.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Wasserstoffbindung", + "IRI-based" : "HydrogenBond", + "en" : "Hydrogen Bond" + }, + "attributes" : [ "external" ], + "id" : "497", + "superClasses" : [ "247" ] + }, { + "iri" : "https://w3id.org/pmd/mo/AnnularDarkFieldScanningTransmissionElectronMicroscopy", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "ADF STEM is a technique that utilizes a specific arrangement of detectors to create contrast in STEM images based on the scattered electrons.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "ADF-STEM", + "type" : "label" + } ] + }, + "label" : { + "de" : "Ringförmige Dunkelfeld-Rastertransmissionselektronenmikroskopie", + "IRI-based" : "AnnularDarkFieldScanningTransmissionElectronMicroscopy", + "en" : "Annular Dark Field Scanning Transmission Electron Microscopy" + }, + "attributes" : [ "external" ], + "id" : "112", + "superClasses" : [ "4" ] + }, { + "iri" : "http://purl.obolibrary.org/obo/IAO_0000078", + "baseIri" : "http://purl.obolibrary.org/obo", + "instances" : 0, + "annotations" : { + "IAO_0000111" : [ { + "identifier" : "IAO_0000111", + "language" : "en", + "value" : "curation status specification", + "type" : "label" + } ], + "IAO_0000115" : [ { + "identifier" : "IAO_0000115", + "language" : "en", + "value" : "The curation status of the term. The allowed values come from an enumerated list of predefined terms. See the specification of these instances for more detailed definitions of each enumerated value.", + "type" : "label" + } ], + "IAO_0000114" : [ { + "identifier" : "IAO_0000114", + "language" : "undefined", + "value" : "http://purl.obolibrary.org/obo/IAO_0000125", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "IAO_0000078", + "en" : "curation status specification" + }, + "individuals" : [ { + "iri" : "http://purl.obolibrary.org/obo/IAO_0000125", + "baseIri" : "http://purl.obolibrary.org/obo", + "annotations" : { + "IAO_0000111" : [ { + "identifier" : "IAO_0000111", + "language" : "en", + "value" : "pending final vetting", + "type" : "label" + } ], + "IAO_0000115" : [ { + "identifier" : "IAO_0000115", + "language" : "en", + "value" : "All definitions, placement in the asserted IS_A hierarchy and required minimal metadata are complete. The class is awaiting a final review by someone other than the term editor.", + "type" : "label" + } ] + }, + "labels" : { + "IRI-based" : "IAO_0000125", + "en" : "pending final vetting" + } + }, { + "iri" : "http://purl.obolibrary.org/obo/IAO_0000423", + "baseIri" : "http://purl.obolibrary.org/obo", + "annotations" : { + "IAO_0000111" : [ { + "identifier" : "IAO_0000111", + "language" : "en", + "value" : "to be replaced with external ontology term", + "type" : "label" + } ], + "IAO_0000115" : [ { + "identifier" : "IAO_0000115", + "language" : "en", + "value" : "Terms with this status should eventually replaced with a term from another ontology.", + "type" : "label" + } ], + "IAO_0000117" : [ { + "identifier" : "IAO_0000117", + "language" : "en", + "value" : "Alan Ruttenberg", + "type" : "label" + } ], + "IAO_0000119" : [ { + "identifier" : "IAO_0000119", + "language" : "en", + "value" : "group:OBI", + "type" : "label" + } ] + }, + "labels" : { + "IRI-based" : "IAO_0000423", + "en" : "to be replaced with external ontology term" + } + }, { + "iri" : "http://purl.obolibrary.org/obo/IAO_0000121", + "baseIri" : "http://purl.obolibrary.org/obo", + "annotations" : { + "IAO_0000111" : [ { + "identifier" : "IAO_0000111", + "language" : "en", + "value" : "organizational term", + "type" : "label" + } ], + "IAO_0000115" : [ { + "identifier" : "IAO_0000115", + "language" : "en", + "value" : "Term created to ease viewing/sort terms for development purpose, and will not be included in a release", + "type" : "label" + } ] + }, + "labels" : { + "IRI-based" : "IAO_0000121", + "en" : "organizational term" + } + }, { + "iri" : "http://purl.obolibrary.org/obo/IAO_0000122", + "baseIri" : "http://purl.obolibrary.org/obo", + "annotations" : { + "IAO_0000111" : [ { + "identifier" : "IAO_0000111", + "language" : "en", + "value" : "ready for release", + "type" : "label" + } ], + "IAO_0000115" : [ { + "identifier" : "IAO_0000115", + "language" : "en", + "value" : "Class has undergone final review, is ready for use, and will be included in the next release. Any class lacking \"ready_for_release\" should be considered likely to change place in hierarchy, have its definition refined, or be obsoleted in the next release. Those classes deemed \"ready_for_release\" will also derived from a chain of ancestor classes that are also \"ready_for_release.\"", + "type" : "label" + } ] + }, + "labels" : { + "IRI-based" : "IAO_0000122", + "en" : "ready for release" + } + }, { + "iri" : "http://purl.obolibrary.org/obo/IAO_0000002", + "baseIri" : "http://purl.obolibrary.org/obo", + "annotations" : { + "IAO_0000111" : [ { + "identifier" : "IAO_0000111", + "language" : "en", + "value" : "example to be eventually removed", + "type" : "label" + } ] + }, + "labels" : { + "IRI-based" : "IAO_0000002", + "en" : "example to be eventually removed" + } + }, { + "iri" : "http://purl.obolibrary.org/obo/IAO_0000123", + "baseIri" : "http://purl.obolibrary.org/obo", + "annotations" : { + "IAO_0000111" : [ { + "identifier" : "IAO_0000111", + "language" : "en", + "value" : "metadata incomplete", + "type" : "label" + } ], + "IAO_0000115" : [ { + "identifier" : "IAO_0000115", + "language" : "en", + "value" : "Class is being worked on; however, the metadata (including definition) are not complete or sufficiently clear to the branch editors.", + "type" : "label" + } ] + }, + "labels" : { + "IRI-based" : "IAO_0000123", + "en" : "metadata incomplete" + } + }, { + "iri" : "http://purl.obolibrary.org/obo/IAO_0000124", + "baseIri" : "http://purl.obolibrary.org/obo", + "annotations" : { + "IAO_0000111" : [ { + "identifier" : "IAO_0000111", + "language" : "en", + "value" : "uncurated", + "type" : "label" + } ], + "IAO_0000115" : [ { + "identifier" : "IAO_0000115", + "language" : "en", + "value" : "Nothing done yet beyond assigning a unique class ID and proposing a preferred term.", + "type" : "label" + } ] + }, + "labels" : { + "IRI-based" : "IAO_0000124", + "en" : "uncurated" + } + }, { + "iri" : "http://purl.obolibrary.org/obo/IAO_0000120", + "baseIri" : "http://purl.obolibrary.org/obo", + "annotations" : { + "IAO_0000111" : [ { + "identifier" : "IAO_0000111", + "language" : "en", + "value" : "metadata complete", + "type" : "label" + } ], + "IAO_0000115" : [ { + "identifier" : "IAO_0000115", + "language" : "en", + "value" : "Class has all its metadata, but is either not guaranteed to be in its final location in the asserted IS_A hierarchy or refers to another class that is not complete.", + "type" : "label" + } ] + }, + "labels" : { + "IRI-based" : "IAO_0000120", + "en" : "metadata complete" + } + }, { + "iri" : "http://purl.obolibrary.org/obo/IAO_0000428", + "baseIri" : "http://purl.obolibrary.org/obo", + "annotations" : { + "IAO_0000115" : [ { + "identifier" : "IAO_0000115", + "language" : "en", + "value" : "A term that is metadata complete, has been reviewed, and problems have been identified that require discussion before release. Such a term requires editor note(s) to identify the outstanding issues.", + "type" : "label" + } ] + }, + "labels" : { + "IRI-based" : "IAO_0000428", + "en" : "requires discussion" + } + } ], + "attributes" : [ "external" ], + "id" : "601" + }, { + "iri" : "https://w3id.org/pmd/co/ThermalInsulation", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "https://en.wikipedia.org/wiki/Thermal_insulation", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Thermal insulation is the reduction of heat transfer (i.e., the transfer of thermal energy between objects of differing temperature) between objects in thermal contact or in range of radiative influence. Thermal insulation can be achieved with specially engineered methods or processes, as well as with suitable object shapes and materials.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Thermische Isolierung", + "IRI-based" : "ThermalInsulation", + "en" : "Thermal Insulation" + }, + "attributes" : [ "external" ], + "id" : "483", + "superClasses" : [ "439" ] + }, { + "iri" : "http://qudt.org/schema/qudt/Unit", + "baseIri" : "http://qudt.org/schema/qudt", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://qudt.org/schema/qudt", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "Unit" + }, + "individuals" : [ { + "iri" : "https://w3id.org/pmd/co/PixelUnit", + "baseIri" : "https://w3id.org/pmd/co", + "annotations" : { + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Pixel” Wikipedia The Free Encyclopedia, https://en.wikipedia.org/wiki/Pixel. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "In digital imaging, a pixel (abbreviated px), pel, or picture element is the smallest addressable element in a raster image, or the smallest point in an all points addressable display device. In most digital display devices, pixels are the smallest element that can be manipulated through software. Here it is referred to as a unit of counted pixels. (It is not an officially recognized unit).", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "In der digitalen Bildgebung ist ein Pixel (abgekürzt px), ein Pel oder ein Bildelement das kleinste adressierbare Element in einem Rasterbild oder der kleinste Punkt in einem alle Punkte adressierbaren Anzeigegerät. Bei den meisten digitalen Anzeigegeräten sind Pixel das kleinste Element, das durch Software manipuliert werden kann.\nHier wird es als eine Einheit von gezählten Pixeln bezeichnet. (Es handelt sich nicht um eine offiziell anerkannte Einheit.)", + "type" : "label" + } ] + }, + "labels" : { + "de" : "Pixeleinheit", + "IRI-based" : "PixelUnit", + "en" : "Pixel Unit" + } + }, { + "iri" : "https://w3id.org/pmd/co/PixelPerNanometerUnit", + "baseIri" : "https://w3id.org/pmd/co", + "annotations" : { + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Unit of counted pixels per nanometer. (It is not an official unit.)", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Einheit der gezählten Pixel pro Nanometer. (Es handelt sich nicht um eine offizielle Einheit.)", + "type" : "label" + } ] + }, + "labels" : { + "de" : "Pixel pro Nanometer", + "IRI-based" : "PixelPerNanometerUnit", + "en" : "Pixel Per Nanometer" + } + } ], + "attributes" : [ "external" ], + "id" : "602" + }, { + "iri" : "http://www.w3.org/ns/prov#ActivityInfluence", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "editorsDefinition" : [ { + "identifier" : "editorsDefinition", + "language" : "en", + "value" : "ActivitiyInfluence is the capacity of an activity to have an effect on the character, development, or behavior of another by means of generation, invalidation, communication, or other.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "seeAlso" : [ { + "identifier" : "seeAlso", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#activity", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "ActivityInfluence", + "undefined" : "ActivityInfluence" + }, + "subClasses" : [ "122", "552", "603" ], + "comment" : { + "en" : "ActivityInfluence provides additional descriptions of an Activity's binary influence upon any other kind of resource. Instances of ActivityInfluence use the prov:activity property to cite the influencing Activity." + }, + "attributes" : [ "external" ], + "id" : "309", + "superClasses" : [ "7" ] + }, { + "iri" : "https://w3id.org/pmd/co/AmorphousStructure", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Amorphous solid - Structure.” Wikipedia The Free Encyclopedia, https://en.wikipedia.org/wiki/Amorphous_solid. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Amorphe Materialien haben eine innere Struktur, die aus miteinander verbundenen Strukturblöcken besteht, die den grundlegenden Struktureinheiten in der entsprechenden kristallinen Phase der gleichen Verbindung ähnlich sein können. Anders als bei kristallinen Materialien besteht jedoch keine langfristige Ordnung. Amorphe Materialien können daher nicht durch eine bestimmte Einheitszelle definiert werden. ", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Amorphous materials have an internal structure consisting of interconnected structural blocks that can be similar to the basic structural units found in the corresponding crystalline phase of the same compound. Unlike in crystalline materials, however, no long-range order exists. Amorphous materials therefore cannot be defined by a finite unit cell. ", + "type" : "label" + } ] + }, + "label" : { + "de" : "Amorphe Struktur", + "IRI-based" : "AmorphousStructure", + "en" : "Amorphous Structure" + }, + "attributes" : [ "external" ], + "id" : "604", + "superClasses" : [ "236" ] + }, { + "iri" : "https://w3id.org/pmd/co/Medium", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Substance that surrounds an object inside the system boundaries of a processing node.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Medium", + "IRI-based" : "Medium", + "en" : "Medium" + }, + "attributes" : [ "external" ], + "id" : "605", + "superClasses" : [ "228" ] + }, { + "iri" : "https://w3id.org/pmd/co/Identifier", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A named value intended to distinguish between entities.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Identifikator", + "IRI-based" : "Identifier", + "en" : "Identifier" + }, + "subClasses" : [ "75", "606", "515", "607", "608", "404", "609", "610" ], + "attributes" : [ "external" ], + "id" : "76", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/Specimen", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "undefined", + "value" : "An object designed for a specific analysis.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Prüfling", + "IRI-based" : "Specimen", + "en" : "Specimen" + }, + "attributes" : [ "external" ], + "id" : "399", + "superClasses" : [ "611" ] + }, { + "iri" : "https://w3id.org/pmd/co/MaterialQuality", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "i.e. Materialgüte", + "type" : "label" + } ] + }, + "label" : { + "de" : "Materialqualität", + "IRI-based" : "MaterialQuality", + "en" : "Material Quality" + }, + "attributes" : [ "external" ], + "id" : "270", + "superClasses" : [ "187" ] + }, { + "iri" : "https://w3id.org/pmd/mo/AccelerationVoltage", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "undefined", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This class decribes the voltage applied to an electron microscope to accelerate the electrons emitted from the electron source (usually a cathode) towards the specimen.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Klasse beschreibt die Spannung, die an ein Elektronenmikroskop angelegt wird, um die von der Elektronenquelle (in der Regel eine Kathode) emittierten Elektronen auf die Probe zu beschleunigen.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Beschleunigungsspannung", + "IRI-based" : "AccelerationVoltage", + "en" : "Acceleration Voltage" + }, + "comment" : { + "de" : "Die Beschleunigungsspannung bestimmt die kinetische Energie der Elektronen und beeinflusst die Auflösung und die Eindringtiefe in die Probe.", + "en" : "The acceleration voltage determines the kinetic energy of the electrons and affects the resolution and depth of penetration in the sample." + }, + "attributes" : [ "external" ], + "id" : "612", + "superClasses" : [ "162" ] + }, { + "iri" : "https://w3id.org/pmd/mo/ElectronTomography", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Electron Tomography is a technique that involves collecting a series of transmission electron microscopy (TEM) images from different angles to reconstruct a three-dimensional image of a sample.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "ET", + "type" : "label" + } ] + }, + "label" : { + "de" : "Elektronentomographie", + "IRI-based" : "ElectronTomography", + "en" : "Electron Tomography" + }, + "subClasses" : [ "616" ], + "attributes" : [ "external" ], + "id" : "17", + "superClasses" : [ "5" ] + }, { + "iri" : "https://w3id.org/pmd/mo/ScanningProbeMicroscope", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A type of microscope that images surfaces by scanning a probe over the sample.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Ein Mikroskoptyp, der Oberflächen abbildet, indem er eine Sonde über die Probe führt.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Rastersondenmikroskop", + "IRI-based" : "ScanningProbeMicroscope", + "en" : "Scanning Probe Microscope" + }, + "subClasses" : [ "617" ], + "attributes" : [ "external" ], + "id" : "560", + "superClasses" : [ "554" ] + }, { + "iri" : "https://w3id.org/pmd/co/MeasuringDevice", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "undefined", + "value" : "A processing node capable of determining a specific quality.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Messgerät", + "IRI-based" : "MeasuringDevice", + "en" : "Measuring Device" + }, + "subClasses" : [ "175", "618", "226", "619", "245", "620" ], + "attributes" : [ "external" ], + "id" : "176", + "superClasses" : [ "110" ] + }, { + "iri" : "https://w3id.org/pmd/mo/ElectronTomograph", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Ein Instrument für die tomografische Bildgebung mit Elektronen.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "An instrument used for tomographic imaging using electrons.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "ET", + "type" : "label" + } ] + }, + "label" : { + "de" : "Elektronentomograph", + "IRI-based" : "ElectronTomograph", + "en" : "Electron Tomograph" + }, + "attributes" : [ "external" ], + "id" : "293", + "superClasses" : [ "277" ] + }, { + "iri" : "https://w3id.org/pmd/mo/ScanningProbeMicroscopy", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Scanning Probe Microscopy encompasses various techniques, such as Atomic Force Microscopy (AFM) and Scanning Tunneling Microscopy (STM), that use a sharp probe to scan a sample's surface. These techniques provide high-resolution images and information about surface properties on the nanometer scale.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "SPM", + "type" : "label" + } ] + }, + "label" : { + "de" : "Rastersondenmikroskopie", + "IRI-based" : "ScanningProbeMicroscopy", + "en" : "Scanning Probe Microscopy" + }, + "subClasses" : [ "622" ], + "attributes" : [ "external" ], + "id" : "523", + "superClasses" : [ "184" ] + }, { + "iri" : "https://w3id.org/pmd/co/Filter", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "https://en.wikipedia.org/wiki/Filter_%28software%29", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A filter is a computer program or subroutine to process a stream, producing another stream. While a single filter can be used individually, they are frequently strung together to form a pipeline.", + "type" : "label" + } ], + "example" : [ { + "identifier" : "example", + "language" : "en", + "value" : "Smoothing algorithm", + "type" : "label" + } ] + }, + "label" : { + "de" : "Filter", + "IRI-based" : "Filter", + "en" : "Filter" + }, + "attributes" : [ "external" ], + "id" : "73", + "superClasses" : [ "74" ] + }, { + "iri" : "http://www.w3.org/ns/prov#EmptyCollection", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "collections", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An empty collection is a collection without members.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "EmptyCollection", + "en" : "EmptyCollection" + }, + "attributes" : [ "external" ], + "id" : "238", + "superClasses" : [ "239" ] + }, { + "iri" : "https://w3id.org/pmd/mo/ElectronChannelingContrastImaging", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Electron Channeling Contrast Imaging is a technique used in SEM or TEM to study crystallographic defects, such as dislocations, in crystalline materials. It utilizes the contrast resulting from the deviation of electron trajectories due to crystal defects.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "ECCI", + "type" : "label" + } ] + }, + "label" : { + "de" : "Elektronenkanal-Kontrastbildgebung", + "IRI-based" : "ElectronChannelingContrastImaging", + "en" : "Electron Channeling Contrast Imaging" + }, + "attributes" : [ "external" ], + "id" : "101", + "superClasses" : [ "89" ] + }, { + "iri" : "https://w3id.org/pmd/co/Sample", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ISO 18589-1:2019-11 (international standardization committee: ISO/TC 85/SC 2/WG 17)", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Portion of material, usually selected from a larger quantity of material, collected and taken away for testing", + "type" : "label" + } ] + }, + "label" : { + "de" : "Probe", + "IRI-based" : "Sample", + "en" : "Sample" + }, + "subClasses" : [ "399", "400" ], + "attributes" : [ "external" ], + "id" : "611", + "superClasses" : [ "627" ] + }, { + "iri" : "https://w3id.org/pmd/mo/InelasticScattering", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Inelastic scattering is a scattering process that involves the transfer of energy and momentum between the incident particle (e.g., photon, electron) and the target particle. During inelastic scattering, the energy of the scattered particle changes, and the interaction may result in various outcomes, such as excitation, emission, or other energy transfers that alter the internal state of the target particle.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Inelastische Streuung", + "IRI-based" : "InelasticScattering", + "en" : "Inelastic Scattering" + }, + "attributes" : [ "external" ], + "id" : "14", + "superClasses" : [ "15" ] + }, { + "iri" : "https://w3id.org/pmd/mo/3DReconstruction", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The process of creating a three-dimensional representation of an object or scene from two-dimensional images or data.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Der Prozess der Erstellung einer dreidimensionalen Darstellung eines Objekts oder einer Szene aus zweidimensionalen Bildern oder Daten.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Dreidimensionale Rekonstruktion", + "IRI-based" : "3DReconstruction", + "en" : "Three dimensional reconstruction" + }, + "attributes" : [ "external" ], + "id" : "48", + "superClasses" : [ "47" ] + }, { + "iri" : "https://w3id.org/pmd/co/Temperature", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Temperature.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/temperature. Accessed 25 Nov. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The degree of hotness or coldness measured on a definite scale.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Temperatur", + "IRI-based" : "Temperature", + "en" : "Temperature" + }, + "subClasses" : [ "628", "527" ], + "attributes" : [ "external" ], + "id" : "443", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/mo/XRayMapping", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "X-ray mapping is a process that involves generating spatially resolved images of the distribution of specific elements within a sample. By collecting X-ray signals emitted or scattered from a sample at different points, an elemental map can be created, showing the varying concentrations of elements across the sample's surface.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Röntgen-Mapping", + "IRI-based" : "XRayMapping", + "en" : "X-ray Mapping" + }, + "subClasses" : [ "530", "535", "537" ], + "attributes" : [ "external" ], + "id" : "196", + "superClasses" : [ "91" ] + }, { + "iri" : "https://w3id.org/pmd/mo/Gun", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "In the context of electron microscopy and particle acceleration, a \"gun\" typically refers to an electron or particle source that generates and emits the particles. In electron microscopy, an electron gun is used to generate a beam of electrons for imaging or analysis. In particle accelerators, a particle gun generates and launches particles at high speeds for various experimental purposes.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Kanone", + "IRI-based" : "Gun", + "en" : "Gun" + }, + "subClasses" : [ "41" ], + "attributes" : [ "external" ], + "id" : "42", + "superClasses" : [ "110" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Location", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-attribute-location", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A location can be an identifiable geographic place (ISO 19112), but it can also be a non-geographic place such as a directory, row, or column. As such, there are numerous ways in which location can be expressed, such as by a coordinate, address, landmark, and so forth.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-attribute", + "type" : "label" + } ], + "seeAlso" : [ { + "identifier" : "seeAlso", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#atLocation", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "Location", + "undefined" : "Location" + }, + "attributes" : [ "external" ], + "id" : "54" + }, { + "iri" : "https://w3id.org/pmd/mo/ChromaticAberration", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Die Unfähigkeit eines Objektivs, alle Farben auf denselben Konvergenzpunkt zu fokussieren.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "The failure of a lens to focus all colors to the same convergence point.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Chromatische Aberration", + "IRI-based" : "ChromaticAberration", + "en" : "Chromatic Aberration" + }, + "attributes" : [ "external" ], + "id" : "548", + "superClasses" : [ "449" ] + }, { + "iri" : "https://w3id.org/pmd/co/Force", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Force.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/force. Accessed 5 Dec. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Strength or energy exerted or brought to bear : cause of motion or change : active power.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Kraft", + "IRI-based" : "Force", + "en" : "Force" + }, + "attributes" : [ "external" ], + "id" : "446", + "superClasses" : [ "11" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Derivation", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasDerivedFrom", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-Derivation", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A derivation is a transformation of an entity into another, an update of an entity resulting in a new one, or the construction of a new entity based on a pre-existing entity.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "constraints" : [ { + "identifier" : "constraints", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-constraints-20130430/#prov-dm-constraints-fig", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#Derivation-Relation", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Derivation", + "undefined" : "Derivation" + }, + "subClasses" : [ "544", "514", "327" ], + "comment" : { + "en" : "An instance of prov:Derivation provides additional descriptions about the binary prov:wasDerivedFrom relation from some derived prov:Entity to another prov:Entity from which it was derived. For example, :chewed_bubble_gum prov:wasDerivedFrom :unwrapped_bubble_gum; prov:qualifiedDerivation [ a prov:Derivation; prov:entity :unwrapped_bubble_gum; :foo :bar ]." + }, + "attributes" : [ "external" ], + "id" : "331", + "superClasses" : [ "306" ] + }, { + "iri" : "https://w3id.org/pmd/mo/AtmosphericScanningElectronMicroscopy", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Atmospheric Scanning Electron Microscopy is a technique that allows samples to be imaged in their natural, hydrated state at atmospheric pressure. It enables the observation of biological and other hydrated specimens without the need for dehydration or coating.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "ASEM", + "type" : "label" + } ] + }, + "label" : { + "de" : "Atmosphärische Rasterelektronenmikroskopie", + "IRI-based" : "AtmosphericScanningElectronMicroscopy", + "en" : "Atmospheric Scanning Electron Microscopy" + }, + "attributes" : [ "external" ], + "id" : "105", + "superClasses" : [ "89" ] + }, { + "iri" : "https://w3id.org/pmd/co/Project", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Eine Reihe von zielorientierten (absichtlichen) Aktivitäten und Interaktionen, um ein bestimmtes Ergebnis zu erzielen.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A series of goal-orientated (intent) activities and interactions to achieve a specific outcome.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Projekt", + "IRI-based" : "Project", + "en" : "Project" + }, + "attributes" : [ "external" ], + "id" : "33", + "superClasses" : [ "34" ] + }, { + "iri" : "https://w3id.org/pmd/co/MetallicBond", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "\"Metallic bond.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/metallic%20bond. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Metallische Bindung ist die für den metallischen Zustand typische chemische Bindung, die durch bewegliche Valenzelektronen gekennzeichnet ist, die die Atome in der Regel in Kristallgittern zusammenhalten und für die gute elektrische und Wärmeleitfähigkeit von Metallen verantwortlich sind.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Metallic bond is the chemical bond typical of the metallic state and characterized by mobile valence electrons that hold the atoms together usually in crystal lattices and are responsible for the good electrical and heat conductivity of metals.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Metallbindung", + "IRI-based" : "MetallicBond", + "en" : "Metallic Bond" + }, + "attributes" : [ "external" ], + "id" : "492", + "superClasses" : [ "247" ] + }, { + "iri" : "https://w3id.org/pmd/co/InitiatorRole", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A role indicating that its bearer has inititated a process.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Initiator Role", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "InitiatorRole" + }, + "attributes" : [ "external" ], + "id" : "631", + "superClasses" : [ "281" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Start", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasStartedBy", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-Start", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Start is when an activity is deemed to have been started by an entity, known as trigger. The activity did not exist before its start. Any usage, generation, or invalidation involving an activity follows the activity's start. A start may refer to a trigger entity that set off the activity, or to an activity, known as starter, that generated the trigger.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "constraints" : [ { + "identifier" : "constraints", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-constraints-20130430/#prov-dm-constraints-fig", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-Start", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Start", + "undefined" : "Start" + }, + "comment" : { + "en" : "An instance of prov:Start provides additional descriptions about the binary prov:wasStartedBy relation from some started prov:Activity to an prov:Entity that started it. For example, :foot_race prov:wasStartedBy :bang; prov:qualifiedStart [ a prov:Start; prov:entity :bang; :foo :bar; prov:atTime '2012-03-09T08:05:08-05:00'^^xsd:dateTime ] ." + }, + "attributes" : [ "external" ], + "id" : "339", + "superClasses" : [ "306", "411" ] + }, { + "iri" : "https://w3id.org/pmd/co/Document", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Document.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/document. Accessed 16 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Ein Original oder offizielles Papier, auf das man sich als Grundlage, Beweis oder Unterstützung von etwas stützt.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "An original or official paper relied on as the basis, proof, or support of something", + "type" : "label" + } ] + }, + "label" : { + "de" : "Dokument", + "IRI-based" : "Document", + "en" : "Document" + }, + "subClasses" : [ "505", "508", "510", "512", "128" ], + "attributes" : [ "external" ], + "id" : "129", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/MediaMovement", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Displacement of media surrounding objects inside the system boundaries of a processing node.", + "type" : "label" + } ], + "example" : [ { + "identifier" : "example", + "language" : "en", + "value" : "Circulation of a gaseous media within the systems boundaries.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Medienbewegung", + "IRI-based" : "MediaMovement", + "en" : "Media Movement" + }, + "attributes" : [ "external" ], + "id" : "503", + "superClasses" : [ "439" ] + }, { + "iri" : "https://w3id.org/pmd/co/TestingMachine", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Entität beschreibt einen Prozessknoten, der für die Durchführung eines bestimmten Tests verwendet wird. Eine Prüfmaschine kann technisch komplex sein und aus mehreren Teilen bestehen.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This entity describes a processing node that is used to perform a defined test. A testing machine may be technically complex and contain several parts.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Prüfmaschine", + "IRI-based" : "TestingMachine", + "en" : "Testing Machine" + }, + "attributes" : [ "external" ], + "id" : "633", + "superClasses" : [ "110" ] + }, { + "iri" : "https://w3id.org/pmd/co/Diameter", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Diameter.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/diameter. Accessed 5 Dec. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The length of a straight line through the center of an object or space.", + "type" : "label" + } ], + "constraints" : [ { + "identifier" : "constraints", + "language" : "undefined", + "value" : "TesileTest", + "type" : "label" + } ] + }, + "label" : { + "de" : "Durchmesser", + "IRI-based" : "Diameter", + "en" : "Diameter" + }, + "subClasses" : [ "169", "172", "174" ], + "attributes" : [ "external" ], + "id" : "170", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/mo/XRayAnalysis", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "X-ray analysis is a technique used to investigate the composition and structure of materials by exposing them to X-rays. When X-rays interact with a material, they can be absorbed, scattered, or diffracted in ways that provide information about the material's internal arrangement of atoms and its elemental composition.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Röntgenanalyse", + "IRI-based" : "XRayAnalysis", + "en" : "X-ray Analysis" + }, + "subClasses" : [ "186", "196" ], + "attributes" : [ "external" ], + "id" : "91", + "superClasses" : [ "2" ] + }, { + "iri" : "http://www.w3.org/ns/oa#FragmentSelector", + "baseIri" : "http://www.w3.org/ns/oa", + "instances" : 0, + "annotations" : { + "example" : [ { + "identifier" : "example", + "language" : "undefined", + "value" : "http://www.w3.org/ns/oa#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "FragmentSelector", + "en" : "Fragment Selector" + }, + "attributes" : [ "external" ], + "id" : "634" + }, { + "iri" : "https://w3id.org/pmd/mo/DynamicRefocusing", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "undefined", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Der Prozess, bei dem der Fokus des Elektronenstrahls während der Bildgebung angepasst wird, um Änderungen der Probenhöhe oder -topografie zu kompensieren und sicherzustellen, dass die gesamte Probe im Fokus bleibt.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "The process of adjusting the focus of the electron beam during imaging to compensate for changes in the specimen height or topography, ensuring that the entire specimen remains in focus.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Dynamische Refokussierung", + "IRI-based" : "DynamicRefocusing", + "en" : "Dynamic Refocusing" + }, + "attributes" : [ "external" ], + "id" : "86", + "superClasses" : [ "2" ] + }, { + "iri" : "https://w3id.org/pmd/co/CovalentBond", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "\"Covalent bond.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/covalent%20bond. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Eine kovalente Bindung ist eine chemische Verbindung zwischen Atomen, die durch die gemeinsame Nutzung von Elektronen entsteht.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Covalent bond is a chemical bond formed between atoms by the sharing of electrons.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Kovalente Bindung", + "IRI-based" : "CovalentBond", + "en" : "Covalent Bond" + }, + "attributes" : [ "external" ], + "id" : "501", + "superClasses" : [ "247" ] + }, { + "iri" : "https://w3id.org/pmd/co/Magnetic", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Magnetic.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/magnetic. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Magnetic is relating relating to a magnet or to magnetism. Here specifically to the magnetic properties of a material.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Magnetisch bezieht sich auf einen Magneten oder auf Magnetismus. Hier speziell auf die magnetischen Eigenschaften eines Materials.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Magnetisch", + "IRI-based" : "Magnetic", + "en" : "Magnetic" + }, + "attributes" : [ "external" ], + "id" : "194", + "superClasses" : [ "84" ] + }, { + "iri" : "https://w3id.org/pmd/mo/TimeOfFlightSecondaryIonMassSpectrometry", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Time-of-Flight Secondary Ion Mass Spectrometry (TOF-SIMS) is an advanced surface analysis technique used to determine the elemental and molecular composition of solid surfaces and thin films with high sensitivity and spatial resolution. It is employed in various scientific and industrial fields, including materials science, nanotechnology, biomedicine, and semiconductor research.\nTOF-SIMS builds upon the principles of Secondary Ion Mass Spectrometry (SIMS), where a focused beam of high-energy primary ions is directed at a sample's surface, causing the ejection of secondary ions. In TOF-SIMS, the flight time of these secondary ions is measured as they travel through a field-free region and enter a time-of-flight mass spectrometer. The mass spectrometer measures the time taken by the ions to reach the detector, which is directly proportional to their mass-to-charge ratio.\nBy analyzing the flight times of the secondary ions, TOF-SIMS can determine the elemental, isotopic, and molecular composition of the sample's surface. It provides information about the presence of specific elements, chemical compounds, and molecular fragments, along with their spatial distribution. The high sensitivity of TOF-SIMS allows for the detection of trace elements and molecular species in complex samples.\nTOF-SIMS is valuable for characterizing surfaces at the nanoscale, profiling layered structures, investigating organic and inorganic materials, and studying biological specimens. Its ability to provide detailed chemical information while maintaining spatial resolution makes it an essential tool for understanding surface properties and material interactions in a wide range of applications.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "TOF-SIMS", + "type" : "label" + } ] + }, + "label" : { + "de" : "Flugzeit-Sekundärionen-Massenspektrometrie", + "IRI-based" : "TimeOfFlightSecondaryIonMassSpectrometry", + "en" : "Time Of Flight Secondary Ion Mass Spectrometry" + }, + "attributes" : [ "external" ], + "id" : "145", + "superClasses" : [ "108" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Attribution", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasAttributedTo", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-attribution", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Attribution is the ascribing of an entity to an agent.\n\nWhen an entity e is attributed to agent ag, entity e was generated by some unspecified activity that in turn was associated to agent ag. Thus, this relation is useful when the activity is not known, or irrelevant.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "constraints" : [ { + "identifier" : "constraints", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-constraints-20130430/#prov-dm-constraints-fig", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-attribution", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Attribution", + "undefined" : "Attribution" + }, + "comment" : { + "en" : "An instance of prov:Attribution provides additional descriptions about the binary prov:wasAttributedTo relation from an prov:Entity to some prov:Agent that had some responsible for it. For example, :cake prov:wasAttributedTo :baker; prov:qualifiedAttribution [ a prov:Attribution; prov:entity :baker; :foo :bar ]." + }, + "attributes" : [ "external" ], + "id" : "364", + "superClasses" : [ "119" ] + }, { + "iri" : "https://w3id.org/pmd/co/WeightedXCoordinate", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Mass center of grey values in one direction", + "type" : "label" + } ] + }, + "label" : { + "de" : "Gewichtete X Koordinate", + "IRI-based" : "WeightedXCoordinate", + "en" : "Weighted X coordinate" + }, + "attributes" : [ "external" ], + "id" : "641", + "superClasses" : [ "267" ] + }, { + "iri" : "https://w3id.org/pmd/mo/ScanningElectronMicroscope", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A microscope that produces images of a sample by scanning it with a focused beam of electrons.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Ein Mikroskop, das Bilder einer Probe erzeugt, indem es diese mit einem fokussierten Elektronenstrahl abtastet.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "de", + "value" : "REM", + "type" : "label" + }, { + "identifier" : "abbreviation", + "language" : "en", + "value" : "SEM", + "type" : "label" + } ] + }, + "label" : { + "de" : "Rasterelektronenmikroskop", + "IRI-based" : "ScanningElectronMicroscope", + "en" : "Scanning Electron Microscope" + }, + "subClasses" : [ "198", "164" ], + "attributes" : [ "external" ], + "id" : "165", + "superClasses" : [ "554" ] + }, { + "iri" : "https://w3id.org/pmd/co/ManufacturerRole", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A role indicating that its bearer is a manufacturer. The role is realized in a manufacturing process.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "ManufacturerRole", + "en" : "Manufacturer Role" + }, + "attributes" : [ "external" ], + "id" : "642", + "superClasses" : [ "281" ] + }, { + "iri" : "https://w3id.org/pmd/co/Shape", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Shape.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/shape. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Das sichtbare Ausstattungsmerkmal (räumliche Form oder Kontur) eines bestimmten Objektes oder einer Art von Objekt.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "The visible makeup characteristic (spatial form or contour) of a particular item or kind of item.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Form", + "IRI-based" : "Shape", + "en" : "Shape" + }, + "subClasses" : [ "167", "138", "141", "143" ], + "attributes" : [ "external" ], + "id" : "139", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/CreepStress", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Is the strain occuring with time, when a constant force is applied to a physical body.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Kriechspannung", + "IRI-based" : "CreepStress", + "en" : "Creep Stress" + }, + "attributes" : [ "external" ], + "id" : "352", + "superClasses" : [ "344" ] + }, { + "iri" : "https://w3id.org/pmd/co/ComputingNode", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Ein Rechnersystem, das eine Ausführungsumgebung bspw. für Simulationsprozesse oder Vorhersagemodelle bereitstellt.\nEin Rechenknoten kann virtuell (bspw. ein Container oder eine virtuelle Maschine) oder physisch (z. B. ein Bare-Metal-Server) ausgestaltet sein und verwendet in der Regel digitale Repräsentationen von Objekten als Eingaben und erzeugt digitale Messungen, wie z.B. Simulationsergebnisse oder Vorhersagen, als Ausgaben.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A computing system that provides an execution environment for, e.g., simulation processes or prediction models.\nA Computing Node can be virtual (e.g., a container or virtual machine) or physical (e.g., a bare-metal servers), uses digital represenations of objects as inputs and produces digital measurements, such as simulation results or predictions, as outputs.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Computerknoten", + "IRI-based" : "ComputingNode", + "en" : "Computing Node" + }, + "subClasses" : [ "126" ], + "attributes" : [ "external" ], + "id" : "127", + "superClasses" : [ "110" ] + }, { + "iri" : "https://w3id.org/pmd/co/QualifyingNodeAnnotation", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Description for Processing Node's utility, e.g. \"Rear Vacuum Furnace Oil Quenching\"", + "type" : "label" + } ] + }, + "label" : { + "de" : "Qualifizierende Knotenannotation", + "IRI-based" : "QualifyingNodeAnnotation", + "en" : "Qualifying Node Annotation" + }, + "subClasses" : [ "135" ], + "attributes" : [ "external" ], + "id" : "136", + "superClasses" : [ "232" ] + }, { + "iri" : "https://w3id.org/pmd/mo/PolePiece", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "undefined", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Eine Komponente der Elektronensäule in einem Elektronenmikroskop, die den Elektronenstrahl fokussiert und auf die Probe lenkt.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A component of the electron column in an electron microscope that focuses and guides the electron beam onto the specimen.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Polschuh", + "IRI-based" : "PolePiece", + "en" : "Pole Piece" + }, + "attributes" : [ "external" ], + "id" : "644", + "superClasses" : [ "110" ] + }, { + "iri" : "https://w3id.org/pmd/co/NotDetected", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Indicates that an chemical element has not been detected in a corresponding experiment.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Nicht nachgewiesen", + "IRI-based" : "NotDetected", + "en" : "Not Detected" + }, + "attributes" : [ "external" ], + "id" : "648", + "superClasses" : [ "426" ] + }, { + "iri" : "https://w3id.org/pmd/mo/SiliconDriftDetector", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Eine Art Röntgendetektor, der Hochgeschwindigkeitsleistung und hohe Energieauflösung bietet.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A type of X-ray detector that offers high-speed performance and high energy resolution.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "SDD", + "type" : "label" + } ] + }, + "label" : { + "de" : "Silizium-Driftdetektor", + "IRI-based" : "SiliconDriftDetector", + "en" : "Silicon Drift Detector" + }, + "attributes" : [ "external" ], + "id" : "650", + "superClasses" : [ "110" ] + }, { + "iri" : "https://w3id.org/pmd/mo/ScanningElectronMicroscopy", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Scanning Electron Microscopy is a microscopy technique that uses a focused beam of electrons to scan the surface of a sample. The interaction of the electrons with the sample generates signals that provide information about the sample's topography, morphology, and composition.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "SEM", + "type" : "label" + } ] + }, + "label" : { + "de" : "Rasterelektronenmikroskopie", + "IRI-based" : "ScanningElectronMicroscopy", + "en" : "Scanning Electron Microscopy" + }, + "subClasses" : [ "88", "93", "97", "101", "105" ], + "attributes" : [ "external" ], + "id" : "89", + "superClasses" : [ "184" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Association", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasAssociatedWith", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-Association", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An activity association is an assignment of responsibility to an agent for an activity, indicating that the agent had a role in the activity. It further allows for a plan to be specified, which is the plan intended by the agent to achieve some goals in the context of this activity.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-Association", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Association", + "undefined" : "Association" + }, + "comment" : { + "en" : "An instance of prov:Association provides additional descriptions about the binary prov:wasAssociatedWith relation from an prov:Activity to some prov:Agent that had some responsiblity for it. For example, :baking prov:wasAssociatedWith :baker; prov:qualifiedAssociation [ a prov:Association; prov:agent :baker; :foo :bar ]." + }, + "attributes" : [ "external" ], + "id" : "367", + "superClasses" : [ "119" ] + }, { + "iri" : "https://w3id.org/pmd/mo/TransmissionElectronMicroscopy", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Transmission Electron Microscopy is a microscopy technique that involves transmitting a beam of electrons through a thin sample to create high-resolution images. It is used to study the internal structure and morphology of materials at the nanometer scale.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "TEM", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "TransmissionElectronMicroscopy" + }, + "subClasses" : [ "51", "56", "60", "66", "4", "17" ], + "attributes" : [ "external" ], + "id" : "5", + "superClasses" : [ "184" ] + }, { + "iri" : "https://w3id.org/pmd/mo/Beam", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "undefined", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Ein Strom von Elektronen, der von der Elektronenquelle emittiert und auf die Probe in einem Elektronenmikroskop gerichtet wird.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A stream of electrons emitted from the electron source and directed towards the specimen in an electron microscope.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Strahl", + "IRI-based" : "Beam", + "en" : "Beam" + }, + "subClasses" : [ "21", "27", "31", "36", "384", "386", "389", "393" ], + "attributes" : [ "external" ], + "id" : "22", + "superClasses" : [ "228" ] + }, { + "iri" : "https://w3id.org/pmd/mo/IonMicroscope", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A microscope that uses ions to create images of samples.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Ein Mikroskop, das mit Hilfe von Ionen Bilder von Proben erzeugt.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Ionenmikroskop", + "IRI-based" : "IonMicroscope", + "en" : "Ion Microscope" + }, + "subClasses" : [ "397", "356" ], + "attributes" : [ "external" ], + "id" : "357", + "superClasses" : [ "654" ] + }, { + "iri" : "https://w3id.org/pmd/mo/IonMicroscopy", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Ion Microscopy refers to a group of microscopy techniques that use focused ion beams to image and analyze samples. These techniques utilize ions, such as protons or heavy ions, instead of electrons or photons to interact with the sample, providing valuable information about its composition and structure.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Ionenmikroskopie", + "IRI-based" : "IonMicroscopy", + "en" : "Ion Microscopy" + }, + "subClasses" : [ "304", "201", "311" ], + "attributes" : [ "external" ], + "id" : "182", + "superClasses" : [ "45" ] + }, { + "iri" : "https://w3id.org/pmd/co/Blank", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Blank.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/blank. Accessed 25 Nov. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A piece of material prepared to be made into something by a further operation.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Rohling", + "IRI-based" : "Blank", + "en" : "Blank" + }, + "attributes" : [ "external" ], + "id" : "655", + "superClasses" : [ "627" ] + }, { + "iri" : "https://w3id.org/pmd/mo/TransmissionElectronMicroscope", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Ein Mikroskop, das einen Elektronenstrahl durch eine Probe sendet und ein Bild erzeugt.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A microscope that transmits a beam of electrons through a specimen, forming an image.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "undefined", + "value" : "TEM", + "type" : "label" + } ] + }, + "label" : { + "de" : "Transmissionelektronenmikroskop", + "IRI-based" : "TransmissionElectronMicroscope", + "en" : "Transmission Electron Microscope" + }, + "subClasses" : [ "314", "276", "279", "285", "289", "293" ], + "attributes" : [ "external" ], + "id" : "277", + "superClasses" : [ "554" ] + }, { + "iri" : "https://w3id.org/pmd/co/ProjectIdentifier", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A colloquial, human-generated, descriptive text qualifying the nature of a project.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Ein umgangssprachlicher, von Menschen erstellter, beschreibender Text, der die Art eines Projekts qualifiziert.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Projektidentifikator", + "IRI-based" : "ProjectIdentifier", + "en" : "Project Identifier" + }, + "intersection" : [ "76" ], + "attributes" : [ "external", "intersection" ], + "id" : "607", + "superClasses" : [ "76" ] + }, { + "iri" : "https://w3id.org/pmd/co/Dataset", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A collection of data published in one or more files. Usually instances of this class are also instances of DCAT dataset (see https://www.w3.org/TR/vocab-dcat-2/).", + "type" : "label" + } ] + }, + "label" : { + "de" : "Datensatz", + "IRI-based" : "Dataset", + "en" : "Dataset" + }, + "attributes" : [ "external" ], + "id" : "660", + "superClasses" : [ "395" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Collection", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "collections", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-collection", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A collection is an entity that provides a structure to some constituents, which are themselves entities. These constituents are said to be member of the collections.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Collection", + "undefined" : "Collection" + }, + "subClasses" : [ "238" ], + "attributes" : [ "external" ], + "id" : "239", + "superClasses" : [ "220" ] + }, { + "iri" : "https://w3id.org/pmd/mo/4D-ScanningTransmissionElectronMicroscopy", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "4D-STEM is a technique that adds an additional dimension of information, time, to STEM imaging, allowing the study of dynamic processes in materials at high spatial and temporal resolutions.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "4D-STEM", + "type" : "label" + } ] + }, + "label" : { + "de" : "4D-Rastertransmissionselektronenmikroskopie", + "IRI-based" : "4D-ScanningTransmissionElectronMicroscopy", + "en" : "4D Scanning Transmission Electron Microscopy" + }, + "attributes" : [ "external" ], + "id" : "114", + "superClasses" : [ "4" ] + }, { + "iri" : "https://w3id.org/pmd/mo/ElectronMicroprobe", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An analytical instrument used to determine the chemical composition of materials.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Ein Analyseinstrument zur Bestimmung der chemischen Zusammensetzung von Materialien.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Elektronenmikrosonde", + "IRI-based" : "ElectronMicroprobe", + "en" : "Electron Microprobe" + }, + "subClasses" : [ "243" ], + "attributes" : [ "external" ], + "id" : "244", + "superClasses" : [ "554" ] + }, { + "iri" : "https://w3id.org/pmd/co/InspectionDocument", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This entity describes a document used to give information on the examination of a tangible object, usually including an examination date, a typical examination interval and the state of the examined object. Typically, this is used for processing nodes.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Entität beschreibt ein Dokument, das Informationen über die Prüfung eines materiellen Objekts enthält, in der Regel versehen mit einem Prüfungsdatum, einem typischen Prüfungsintervall und dem Zustand des geprüften Objekts. Typischerweise wird ein solches Dokument für Prozessknoten verwendet.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Inspektionsdokument", + "IRI-based" : "InspectionDocument", + "en" : "Inspection Document" + }, + "attributes" : [ "external" ], + "id" : "505", + "superClasses" : [ "129" ] + }, { + "iri" : "https://w3id.org/pmd/mo/Source", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "undefined", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The electron source, such as a tungsten filament or field-emission cathode, that emits electrons in an electron microscope.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Die Elektronenquelle, z. B. ein Wolframfaden oder eine Feldemissionskathode, die in einem Elektronenmikroskop Elektronen emittiert.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Quelle", + "IRI-based" : "Source", + "en" : "Source" + }, + "attributes" : [ "external" ], + "id" : "673", + "superClasses" : [ "110" ] + }, { + "iri" : "https://w3id.org/pmd/mo/FocalLength", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "undefined", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Der Abstand zwischen dem Brennpunkt (wo der Elektronenstrahl fokussiert wird) und der Linse oder Blende in einem Elektronenmikroskop.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "The distance between the focal point (where the electron beam is focused) and the lens or aperture in an electron microscope.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Brennweite", + "IRI-based" : "FocalLength", + "en" : "Focal Length" + }, + "attributes" : [ "external" ], + "id" : "323", + "superClasses" : [ "321" ] + }, { + "iri" : "https://w3id.org/pmd/mo/FocalPoint", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "undefined", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The point at which the electron beam is focused in an electron microscope to form an image of the specimen.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Der Punkt, an dem der Elektronenstrahl in einem Elektronenmikroskop fokussiert wird, um ein Bild der Probe zu erzeugen.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Brennpunkt", + "IRI-based" : "FocalPoint", + "en" : "Focal Point" + }, + "attributes" : [ "external" ], + "id" : "676", + "superClasses" : [ "395" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Delegation", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#actedOnBehalfOf", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-delegation", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Delegation is the assignment of authority and responsibility to an agent (by itself or by another agent) to carry out a specific activity as a delegate or representative, while the agent it acts on behalf of retains some responsibility for the outcome of the delegated work.\n\nFor example, a student acted on behalf of his supervisor, who acted on behalf of the department chair, who acted on behalf of the university; all those agents are responsible in some way for the activity that took place but we do not say explicitly who bears responsibility and to what degree.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-delegation", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Delegation", + "undefined" : "Delegation" + }, + "comment" : { + "en" : "An instance of prov:Delegation provides additional descriptions about the binary prov:actedOnBehalfOf relation from a performing prov:Agent to some prov:Agent for whom it was performed. For example, :mixing prov:wasAssociatedWith :toddler . :toddler prov:actedOnBehalfOf :mother; prov:qualifiedDelegation [ a prov:Delegation; prov:entity :mother; :foo :bar ]." + }, + "attributes" : [ "external" ], + "id" : "371", + "superClasses" : [ "119" ] + }, { + "iri" : "https://w3id.org/pmd/co/NonTransformativeAnalysisProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An analysis process that is non-transformative.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Nicht-transformativer Analyseprozess", + "IRI-based" : "NonTransformativeAnalysisProcess", + "en" : "Non Transformative Analysis Process" + }, + "attributes" : [ "external" ], + "id" : "1", + "superClasses" : [ "2" ] + }, { + "iri" : "https://w3id.org/pmd/mo/TomographicReconstruction", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Der Prozess der Rekonstruktion einer dreidimensionalen Struktur aus einer Reihe von zweidimensionalen Bildern, die aus verschiedenen Winkeln aufgenommen wurden.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "The process of reconstructing a three-dimensional structure from a series of two-dimensional images taken at different angles.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Tomographische Rekonstruktion", + "IRI-based" : "TomographicReconstruction", + "en" : "Tomographic Reconstruction" + }, + "attributes" : [ "external" ], + "id" : "49", + "superClasses" : [ "47" ] + }, { + "iri" : "https://w3id.org/pmd/co/Perimeter", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The perimeter of a two-dimensional shape is defined as the path or boundary that encloses the shape.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Der Durchmesser einer zweidimensionalen Form.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Umfang", + "IRI-based" : "Perimeter", + "en" : "Perimeter" + }, + "attributes" : [ "external" ], + "id" : "259", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/mo/LightMicroscope", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An optical microscope that uses visible light to illuminate and magnify samples.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Ein optisches Mikroskop, das sichtbares Licht verwendet, um Proben zu beleuchten und zu vergrößern.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Lichtmikroskop", + "IRI-based" : "LightMicroscope", + "en" : "Light Microscope" + }, + "subClasses" : [ "159" ], + "attributes" : [ "external" ], + "id" : "160", + "superClasses" : [ "675" ] + }, { + "iri" : "https://w3id.org/pmd/co/AgingProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Das Aging oder Auslagern ist ein Anlassvorgang, der den Martensit (Härtungsgefüge) wieder duktil und verformbar macht. Dabei wird ein Agingvorgang genutzt, nämlich die Bildung von Ausscheidungen in Form von FeXCY - Carbiden", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A process that applies a method that causes a constituent to precipitate from solid solution.", + "type" : "label" + } ], + "example" : [ { + "identifier" : "example", + "language" : "en", + "value" : "The Process of austenitizing and quenching a steel alloy to achieve a martensitic microstructure for hardness increase.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Alterungsprozess", + "IRI-based" : "AgingProcess", + "en" : "Aging Process" + }, + "attributes" : [ "external" ], + "id" : "299", + "superClasses" : [ "38" ] + }, { + "iri" : "https://w3id.org/pmd/co/Coordinates", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Coordinate.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/coordinate. Accessed 5 Dec. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Any of a set of numbers used in specifying the location of a point on a line, on a surface, or in space.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Koordinaten", + "IRI-based" : "Coordinates", + "en" : "Coordinates" + }, + "subClasses" : [ "178" ], + "attributes" : [ "external" ], + "id" : "420", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/mo/ProbeSize", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The size of the probe or beam used in microscopy or spectroscopy techniques.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Die Größe der Sonde oder des Strahls, die bei Mikroskopie- oder Spektroskopieverfahren verwendet werden.", + "type" : "label" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "de", + "value" : "Messfühlergröße", + "type" : "label" + } ] + }, + "label" : { + "de" : "Sensorgröße", + "IRI-based" : "ProbeSize", + "en" : "Probe Size" + }, + "attributes" : [ "external" ], + "id" : "429", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/Image", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Image.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/image. Accessed 25 Nov. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A visual representation of something", + "type" : "label" + } ] + }, + "label" : { + "de" : "Bild", + "IRI-based" : "Image", + "en" : "Image" + }, + "attributes" : [ "external" ], + "id" : "692", + "superClasses" : [ "395" ] + }, { + "iri" : "https://w3id.org/pmd/co/EndTime", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The date and time when the plan/recipe is supposed to have been finished", + "type" : "label" + } ] + }, + "label" : { + "de" : "Endzeit", + "IRI-based" : "EndTime", + "en" : "End Time" + }, + "attributes" : [ "external" ], + "id" : "539", + "superClasses" : [ "432" ] + }, { + "iri" : "https://w3id.org/pmd/co/Distance", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Distance.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/distance. Accessed 5 Dec. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Spatial remoteness.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Abstand", + "IRI-based" : "Distance", + "en" : "Distance" + }, + "subClasses" : [ "693" ], + "attributes" : [ "external" ], + "id" : "434", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/mo/LightMicroscopy", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The use of visible light to observe and study small objects or structures.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Die Verwendung von sichtbarem Licht zur Beobachtung und Untersuchung kleiner Objekte oder Strukturen.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Lichtmikroskopie", + "IRI-based" : "LightMicroscopy", + "en" : "Light Microscopy" + }, + "subClasses" : [ "696", "317", "155" ], + "attributes" : [ "external" ], + "id" : "46", + "superClasses" : [ "44" ] + }, { + "iri" : "https://w3id.org/pmd/mo/EnergyFilteredTransmissionElectronMicroscope", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Ein Transmissionselektronenmikroskop, das mit einem Energiefilter ausgestattet ist, um Elektronen bestimmter Energieniveaus zu selektieren.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A transmission electron microscope equipped with an energy filter to select electrons of specific energy levels.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Energiegefiltertes Transmissionselektronenmikroskop", + "IRI-based" : "EnergyFilteredTransmissionElectronMicroscope", + "en" : "Energy-filtered Transmission Electron Microscope" + }, + "attributes" : [ "external" ], + "id" : "279", + "superClasses" : [ "277" ] + }, { + "iri" : "https://w3id.org/pmd/mo/Spectrometer", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An instrument used to measure properties of light over a specific portion of the electromagnetic spectrum.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Ein Instrument zur Messung der Eigenschaften von Licht in einem bestimmten Teil des elektromagnetischen Spektrums.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Spektrometer", + "IRI-based" : "Spectrometer", + "en" : "Spectrometer" + }, + "subClasses" : [ "706" ], + "attributes" : [ "external" ], + "id" : "705", + "superClasses" : [ "110" ] + }, { + "iri" : "https://w3id.org/pmd/co/XCoordinate", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“X-coordinate.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/x-coordinate. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Die X-Koordinate ist eine Koordinate, deren Wert durch Messung parallel zu einer X-Achse bestimmt wird.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "X-coordinate is a coordinate whose value is determined by measuring parallel to an x-axis.", + "type" : "label" + } ] + }, + "label" : { + "de" : "X Korrdinate", + "IRI-based" : "XCoordinate", + "en" : "X Coordinate" + }, + "subClasses" : [ "641" ], + "attributes" : [ "external" ], + "id" : "267", + "superClasses" : [ "178" ] + }, { + "iri" : "https://w3id.org/pmd/co/ParticleNumber", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Die Partikelnummer ermöglicht die eindeutige Zuordnung der gemessenen Eigenschaften zu einem bestimmten Partikel.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "The particle number enables the explicit assignment of measured properties to a specific particle.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Partikelnummer", + "IRI-based" : "ParticleNumber", + "en" : "Particle Number" + }, + "attributes" : [ "external" ], + "id" : "562", + "superClasses" : [ "427" ] + }, { + "iri" : "https://w3id.org/pmd/co/AgingInterval", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Timespan a Temperature during an Aging Process is hold.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Alterungsintervall", + "IRI-based" : "AgingInterval", + "en" : "Aging Interval" + }, + "attributes" : [ "external" ], + "id" : "712", + "superClasses" : [ "540" ] + }, { + "iri" : "https://w3id.org/pmd/mo/OpticalMicroscope", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A microscope that uses visible light and lenses to magnify specimens.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Ein Mikroskop, das sichtbares Licht und Linsen zur Vergrößerung von Proben verwendet.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Optisches Mikroskop", + "IRI-based" : "OpticalMicroscope", + "en" : "Optical Microscope" + }, + "subClasses" : [ "160" ], + "attributes" : [ "external" ], + "id" : "675", + "superClasses" : [ "654" ] + }, { + "iri" : "https://w3id.org/pmd/mo/FocusedBeam", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "undefined", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An electron beam that has been narrowed or focused to a small spot size on the specimen surface.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Ein Elektronenstrahl, der auf einen kleinen Punkt auf der Probenoberfläche eingeengt oder fokussiert wurde.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Fokussierter Strahl", + "IRI-based" : "FocusedBeam", + "en" : "Focused Beam" + }, + "attributes" : [ "external" ], + "id" : "386", + "superClasses" : [ "22" ] + }, { + "iri" : "https://w3id.org/pmd/co/LoadCell", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "https://en.wikipedia.org/wiki/Load_cell", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A load cell converts a force such as tension, compression, pressure, or torque into an electrical signal that can be measured and standardized. It is a force transducer. As the force applied to the load cell increases, the electrical signal changes proportionally. The most common types of load cell are pneumatic, hydraulic, and strain gauges.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Kraftmessdose", + "IRI-based" : "LoadCell", + "en" : "Load Cell" + }, + "attributes" : [ "external" ], + "id" : "708", + "superClasses" : [ "110" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Usage", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#used", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-Usage", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Usage is the beginning of utilizing an entity by an activity. Before usage, the activity had not begun to utilize this entity and could not have been affected by the entity.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "constraints" : [ { + "identifier" : "constraints", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-constraints-20130430/#prov-dm-constraints-fig", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-Usage", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Usage", + "undefined" : "Usage" + }, + "comment" : { + "en" : "An instance of prov:Usage provides additional descriptions about the binary prov:used relation from some prov:Activity to an prov:Entity that it used. For example, :keynote prov:used :podium; prov:qualifiedUsage [ a prov:Usage; prov:entity :podium; :foo :bar ]." + }, + "attributes" : [ "external" ], + "id" : "329", + "superClasses" : [ "306", "411" ] + }, { + "iri" : "https://w3id.org/pmd/co/Mechanical", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Mechanical.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/mechanical. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Mechanisch bedeutet, sich auf die Prinzipien der Mechanik zu beziehen, von ihnen beherrscht zu werden oder sie zu befolgen. Hier speziell auf die mechanischen Eigenschaften eines Materials.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Mechanical is relating to, governed by, or in accordance with the principles of mechanics. Here specifically to the mechanical properties of a material.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Mechanisch", + "IRI-based" : "Mechanical", + "en" : "Mechanical" + }, + "attributes" : [ "external" ], + "id" : "188", + "superClasses" : [ "84" ] + }, { + "iri" : "https://w3id.org/pmd/mo/SurfaceStructure", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The arrangement and features of the outermost layer of a material.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Die Anordnung und die Merkmale der äußersten Schicht eines Materials.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Oberflächenstruktur", + "IRI-based" : "SurfaceStructure", + "en" : "Surface Structure" + }, + "attributes" : [ "external" ], + "id" : "714", + "superClasses" : [ "228" ] + }, { + "iri" : "https://w3id.org/pmd/co/NodeSerialNumber", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A unique identifier of a processing node, typically provided by the manufacturer (manufacturer serial number, s/n).", + "type" : "label" + } ] + }, + "label" : { + "de" : "Knoten-Seriennummer", + "IRI-based" : "NodeSerialNumber", + "en" : "Node Serial Number" + }, + "attributes" : [ "external" ], + "id" : "78", + "superClasses" : [ "75", "232" ] + }, { + "iri" : "https://w3id.org/pmd/mo/ElectronBeam", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "undefined", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Ein Strom von Elektronen, der von einer Elektronenquelle emittiert und in einem Elektronenmikroskop zur Abbildung oder Analyse auf die Probe beschleunigt wird.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A stream of electrons emitted from an electron source and accelerated towards the specimen in an electron microscope for imaging or analysis.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Elektronenstrahl", + "IRI-based" : "ElectronBeam", + "en" : "Electron Beam" + }, + "attributes" : [ "external" ], + "id" : "389", + "superClasses" : [ "22" ] + }, { + "iri" : "https://w3id.org/pmd/co/Circular", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Circular.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/circular. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Geformt wie ein Kreis.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Having the form of a circle.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Kreisförmig", + "IRI-based" : "Circular", + "en" : "Circular" + }, + "attributes" : [ "external" ], + "id" : "138", + "superClasses" : [ "139" ] + }, { + "iri" : "https://w3id.org/pmd/co/Weight", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Weight.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/weight. Accessed 5 Dec. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The force with which a body is attracted toward the earth or a celestial body by gravitation and which is equal to the product of the mass and the local gravitational acceleration.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Gewicht", + "IRI-based" : "Weight", + "en" : "Weight" + }, + "attributes" : [ "external" ], + "id" : "255", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/WeightedYCoordinate", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Mass center of grey values in the other direction", + "type" : "label" + } ] + }, + "label" : { + "de" : "Gewichtete Y Koordinate", + "IRI-based" : "WeightedYCoordinate", + "en" : "Weighted Y coordinate" + }, + "attributes" : [ "external" ], + "id" : "179", + "superClasses" : [ "177" ] + }, { + "iri" : "https://w3id.org/pmd/co/ClassificationDocument", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This entity describes a document used to define the working or application range of a process node in accordance with standardized graduations.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Entität beschreibt ein Dokument, das dazu dient, den Arbeits- oder Anwendungsbereich eines Prozessknotens in Übereinstimmung mit genormten Abstufungen zu definieren.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Klassifzierungsdokument", + "IRI-based" : "ClassificationDocument", + "en" : "Classification Document" + }, + "attributes" : [ "external" ], + "id" : "510", + "superClasses" : [ "129" ] + }, { + "iri" : "https://w3id.org/pmd/mo/HeliumIonMicroscope", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Eine Art Mikroskop, das Helium-Ionen verwendet, um Proben mit hoher Auflösung abzubilden.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A type of microscope that uses helium ions to image samples with high resolution.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "HIM", + "type" : "label" + } ] + }, + "label" : { + "de" : "Helium-Ionen-Mikroskop", + "IRI-based" : "HeliumIonMicroscope", + "en" : "Helium Ion Microscope" + }, + "attributes" : [ "external" ], + "id" : "566", + "superClasses" : [ "356" ] + }, { + "iri" : "https://w3id.org/pmd/co/Index", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Some running number.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Index", + "IRI-based" : "Index", + "en" : "Index" + }, + "subClasses" : [ "562" ], + "attributes" : [ "external" ], + "id" : "427", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/ElectronMicroscope", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Electron microscope.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/electron%20microscope. Accessed 24 Nov. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An electron-optical instrument in which a beam of electrons is used to produce an enlarged image of a minute object.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Elektronenmikroskop", + "IRI-based" : "ElectronMicroscope", + "en" : "Electron Microscope" + }, + "subClasses" : [ "560", "165", "277", "244" ], + "attributes" : [ "external" ], + "id" : "554", + "superClasses" : [ "654" ] + }, { + "iri" : "https://w3id.org/pmd/co/Elliptical", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Elliptical.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/elliptical. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Geformt wie eine Ellipse.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Shaped like an ellipse.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Elliptisch", + "IRI-based" : "Elliptical", + "en" : "Elliptical" + }, + "attributes" : [ "external" ], + "id" : "167", + "superClasses" : [ "139" ] + }, { + "iri" : "https://w3id.org/pmd/co/ManufacturingNode", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A processing node that implements transformative processes as well as consumes and creates tangible objects and typically requires inputs\nIn general but not necessarily, a manufacture node includes intrinsic analysis nodes that create corresponding measurements with respect to the process implemented by the manufacture node.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Herstellungsknoten", + "IRI-based" : "ManufacturingNode", + "en" : "Manufacturing Node" + }, + "attributes" : [ "external" ], + "id" : "735", + "superClasses" : [ "110" ] + }, { + "iri" : "https://w3id.org/pmd/co/Measurement", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "https://en.wikipedia.org/wiki/Measurement", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The ValueScope category Measurement enables the categorization of ValueObjects as measured.\nMeasurement is the quantification of attributes of an object or event, which can be used to compare with other objects or events.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This value scope describes that a :ValueObject is the quantification of attributes of an object or event, which can be used to compare with other objects or events.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Die Wertekategorie Messung ermöglicht die Kategorisierung von ValueObjects als gemessen.\nMessung ist die Quantifizierung von Eigenschaften eines Objekts oder Ereignisses, die zum Vergleich mit anderen Objekten oder Ereignissen verwendet werden können.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Messwert", + "IRI-based" : "Measurement", + "en" : "Measurement" + }, + "attributes" : [ "external" ], + "id" : "575", + "superClasses" : [ "373" ] + }, { + "iri" : "https://w3id.org/pmd/mo/BeamEnergy", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Die Energie eines Teilchen- oder Photonenstrahls, der in verschiedenen Analyseverfahren verwendet wird.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "The energy of a particle or photon beam used in various analytical techniques.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Strahlungsenergie", + "IRI-based" : "BeamEnergy", + "en" : "Beam Energy" + }, + "attributes" : [ "external" ], + "id" : "70", + "superClasses" : [ "71" ] + }, { + "iri" : "https://w3id.org/pmd/co/ElectronMicroscopy", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Electron microscope.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/electron%20microscope. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Die Verwendung eines elektronenoptischen Instruments, bei dem ein Strahl beschleunigter Elektronen als Beleuchtungsquelle eingesetzt wird, um ein vergrößertes Bild eines kleinen Objekts zu erzeugen.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A microscopy process using an electron-optical instrument in which a beam of accelerated electrons as a source of illumination is applied to produce a magnified image of a tiny object.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Elektronenmikroskopie", + "IRI-based" : "ElectronMicroscopy", + "en" : "Electron Microscopy" + }, + "subClasses" : [ "523", "5", "89" ], + "attributes" : [ "external" ], + "id" : "184", + "superClasses" : [ "45" ] + }, { + "iri" : "https://w3id.org/pmd/co/VanderwaalsBond", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Van der Waals forces.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/van%20der%20Waals%20forces. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Van der Waals bond is given by the relatively weak attractive forces that act on neutral atoms and molecules and that arise because of the electric polarization induced in each of the particles by the presence of other particles.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Die Van-der-Waals-Bindung ist durch die relativ schwachen Anziehungskräfte gegeben, die auf neutrale Atome und Moleküle wirken und die aufgrund der elektrischen Polarisierung entstehen, die in jedem der Teilchen durch die Anwesenheit anderer Teilchen induziert wird.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Van der Waals Bindung", + "IRI-based" : "VanderwaalsBond", + "en" : "Vanderwaals Bond" + }, + "attributes" : [ "external" ], + "id" : "495", + "superClasses" : [ "247" ] + }, { + "iri" : "https://w3id.org/pmd/co/MechanicalTestingProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A mechanical testing process ia process that determines mechanical properties.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Mechanischer Testprozess", + "IRI-based" : "MechanicalTestingProcess", + "en" : "Mechanical Testing Process" + }, + "attributes" : [ "external" ], + "id" : "95", + "superClasses" : [ "2" ] + }, { + "iri" : "https://w3id.org/pmd/co/SemiCrystallineStructure", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Feststoffe, die eine teilkristalline Struktur aufweisen, enthalten sowohl kristalline als auch amorphe Bereiche (Domänen). Kristalline Stoffe, die keine Einkristalle, sondern Polykristalle sind, werden nicht als teilkristallin bezeichnet, auch wenn sich zwischen den Kristalliten ein dünner amorpher Film befindet.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Solid materials exhibiting a semi-crystalline structure contain both crystalline and amorphous sections (domains). Crystalline substances that are polycrystals rather than single crystals are not designated as semicrystalline, even if there is a thin amorphous film between the crystallites.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Semikristalline Struktur", + "IRI-based" : "SemiCrystallineStructure", + "en" : "Semi Crystalline Structure" + }, + "attributes" : [ "external" ], + "id" : "742", + "superClasses" : [ "236" ] + }, { + "iri" : "https://w3id.org/pmd/mo/HeliumIonMicroscopy", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Helium Ion Microscopy is a microscopy technique that uses a beam of helium ions instead of electrons to interact with a sample's surface. The smaller mass of helium ions compared to electrons allows for higher resolution imaging and reduced sample damage. HIM provides high-resolution images and is often used for imaging delicate or sensitive samples.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "HIM", + "type" : "label" + } ] + }, + "label" : { + "de" : "Helium-Ionen-Mikroskopie", + "IRI-based" : "HeliumIonMicroscopy", + "en" : "Helium Ion Microscopy" + }, + "attributes" : [ "external" ], + "id" : "311", + "superClasses" : [ "182" ] + }, { + "iri" : "https://w3id.org/pmd/co/EnvironmentalTemperature", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This property describes the observed temperature surrounding a tangible object considered. This may include room temperature and temperatures measured in test chambers.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Eigenschaft beschreibt die beobachtete Temperatur in der Umgebung eines betrachteten materiellen Objekts. Dazu können die Raumtemperatur und die in Prüfkammern gemessenen Temperaturen gehören.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Umgebungstemperatur", + "IRI-based" : "EnvironmentalTemperature", + "en" : "Environmental Temperature" + }, + "attributes" : [ "external" ], + "id" : "527", + "superClasses" : [ "443" ] + }, { + "iri" : "https://w3id.org/pmd/co/FurnaceCharacteristic", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Properties that describe the functions and capabilities of a heat treatment process node.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Ofencharakteristik", + "IRI-based" : "FurnaceCharacteristic", + "en" : "Furnace Characteristic" + }, + "subClasses" : [ "517", "503", "487", "483" ], + "attributes" : [ "external" ], + "id" : "439", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/Squared", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Square.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/square. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Geformt mit vier gleichen Seiten und vier rechten Winkeln.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Having four equal sides and four right angles.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Quadratisch", + "IRI-based" : "Squared", + "en" : "Squared" + }, + "attributes" : [ "external" ], + "id" : "141", + "superClasses" : [ "139" ] + }, { + "iri" : "https://w3id.org/pmd/co/RetortType", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Geometry and and orientation of the inner system boundaries of the heat treatment processing node.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Retortentyp", + "IRI-based" : "RetortType", + "en" : "Retort Type" + }, + "attributes" : [ "external" ], + "id" : "487", + "superClasses" : [ "439" ] + }, { + "iri" : "https://w3id.org/pmd/co/Stiffness", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Die Steifigkeit ist das Maß, bis zu dem ein Objekt einer Verformung als Reaktion auf eine einwirkende Kraft widersteht.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Stiffness is the extent to which an object resists deformation in response to an applied force.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Steifigkeit", + "IRI-based" : "Stiffness", + "en" : "Stiffness" + }, + "attributes" : [ "external" ], + "id" : "442", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/mo/ElectronProbe", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "undefined", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Der fokussierte Elektronenstrahl, der zur Abbildung oder Analyse in einem Elektronenmikroskop verwendet wird.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "The focused electron beam used for imaging or analysis in an electron microscope.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Elektronensonde", + "IRI-based" : "ElectronProbe", + "en" : "Electron Probe" + }, + "attributes" : [ "external" ], + "id" : "393", + "superClasses" : [ "22" ] + }, { + "iri" : "https://w3id.org/pmd/mo/Magnification", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Das Verhältnis zwischen der Größe eines von einem optischen System erzeugten Bildes und der Größe des Objekts.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "The ratio of the size of an image produced by an optical system to the size of the object.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Vergrößerung", + "IRI-based" : "Magnification", + "en" : "Magnification" + }, + "attributes" : [ "external" ], + "id" : "444", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/HeatTreatmentProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Heat-treat.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/heat-treat. Accessed 24 Nov. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A heat treatment is a conditioning process at (with) a defined temperature (change) and holding in order to achieve a change in the microstructure, residual stresses, defect distribution or local chemical composition of a material.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Wärmebehandlung", + "IRI-based" : "HeatTreatmentProcess", + "en" : "Heat Treatment Process" + }, + "attributes" : [ "external" ], + "id" : "747", + "superClasses" : [ "295" ] + }, { + "iri" : "https://w3id.org/pmd/mo/EnergyDispersiveXRaySpectroscopy", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "prefLabel" : [ { + "identifier" : "prefLabel", + "language" : "de", + "value" : "energiedispersive Röntgenanalyse", + "type" : "label" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Energy Dispersive X-ray Spectroscopy is a technique used to analyze the elemental composition of a sample by detecting the X-rays emitted when the sample is bombarded with electrons in an electron microscope or other instrument. EDS provides information about the elements present in the sample and their relative concentrations.", + "type" : "label" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "de", + "value" : "energiedispersive Röntgenmikroanalyse", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "EDS", + "type" : "label" + }, { + "identifier" : "abbreviation", + "language" : "en", + "value" : "EDX", + "type" : "label" + }, { + "identifier" : "abbreviation", + "language" : "en", + "value" : "XEDS", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "EnergyDispersiveXRaySpectroscopy", + "en" : "Energy Dispersive X-ray Spectroscopy" + }, + "attributes" : [ "external" ], + "id" : "750", + "superClasses" : [ "186" ] + }, { + "iri" : "https://w3id.org/pmd/mo/OrientationImagingMicroscopy", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Orientation Imaging Microscopy is a microscopy technique used to map the crystallographic orientations of grains within a material. It is commonly applied in SEM to study the microstructural properties of polycrystalline materials.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "OIM", + "type" : "label" + } ] + }, + "label" : { + "de" : "Bildgebende Orientierungsmikroskopie", + "IRI-based" : "OrientationImagingMicroscopy", + "en" : "Orientation Imaging Microscopy" + }, + "attributes" : [ "external" ], + "id" : "93", + "superClasses" : [ "89" ] + }, { + "iri" : "https://w3id.org/pmd/co/CrossSectionDetermination", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Cross section.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/cross%20section. Accessed 24 Nov. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Cross section is a cutting or piece of something cut off at right angles to an axis\nalso : a representation of such a cutting.", + "type" : "label" + } ], + "example" : [ { + "identifier" : "example", + "language" : "en", + "value" : "Using the density of the test piece.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Querschnittsermittlung", + "IRI-based" : "CrossSectionDetermination", + "en" : "Cross Section Determination" + }, + "attributes" : [ "external" ], + "id" : "568", + "superClasses" : [ "430" ] + }, { + "iri" : "https://w3id.org/pmd/co/HeatCapacity", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "https://en.wikipedia.org/wiki/Heat_capacity", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Heat capacity or thermal capacity is a physical property of matter, defined as the amount of heat to be supplied to an object to produce a unit change in its temperature.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Wärmekapazität", + "IRI-based" : "HeatCapacity", + "en" : "Heat Capacity" + }, + "attributes" : [ "external" ], + "id" : "517", + "superClasses" : [ "439" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Bundle", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-bundle-entity", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A bundle is a named set of provenance descriptions, and is itself an Entity, so allowing provenance of provenance to be expressed.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-bundle-declaration", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Bundle", + "undefined" : "Bundle" + }, + "comment" : { + "en" : "Note that there are kinds of bundles (e.g. handwritten letters, audio recordings, etc.) that are not expressed in PROV-O, but can be still be described by PROV-O." + }, + "attributes" : [ "external" ], + "id" : "354", + "superClasses" : [ "220" ] + }, { + "iri" : "https://w3id.org/pmd/co/Duration", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Eine Zeitspanne mit einer eigenen Zeitskala und einer in einer anderen Zeitskala verankerten Epoche. Eine Dauer kann durch einen einzigen Wert ausgedrückt werden, da sie die Zeitdifferenz zwischen zwei Zeitpunkten darstellt, z. B. die Differenz zwischen Endzeit und Startzeit oder die Differenz zwischen der aktuellen, momentanen Zeit und der Startzeit.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A period of time with its own timescale and an epoch anchored in another timescale. A duration can be expressed via a single value as it represents the time difference between two points in time, e.g. the difference between EndTime and StartTime or the difference between the current, momentary time and the StartTime.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Dauer", + "IRI-based" : "Duration", + "en" : "Duration" + }, + "subClasses" : [ "583", "405", "513", "421" ], + "attributes" : [ "external" ], + "id" : "406", + "superClasses" : [ "432" ] + }, { + "iri" : "https://w3id.org/pmd/co/BaseFraction", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The assumed base material of the objects or the remainder of the composition, e.g. for nickel-based alloy, iron-based alloy.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Basisanteil", + "IRI-based" : "BaseFraction", + "en" : "Base fraction" + }, + "attributes" : [ "external" ], + "id" : "771", + "superClasses" : [ "426" ] + }, { + "iri" : "https://w3id.org/pmd/co/Area", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The extent or measurement of a surface.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Fläche", + "IRI-based" : "Area", + "en" : "Area" + }, + "subClasses" : [ "578", "350" ], + "attributes" : [ "external" ], + "id" : "416", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/mo/IncidentBeam", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "undefined", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Der Elektronenstrahl, der in einem Elektronenmikroskop auf die Probenoberfläche trifft und Wechselwirkungen hervorruft, die Signale für die Abbildung oder Analyse erzeugen.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "The electron beam that strikes the specimen surface in an electron microscope, causing interactions that produce signals for imaging or analysis.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Einfallender Strahl", + "IRI-based" : "IncidentBeam", + "en" : "Incident Beam" + }, + "attributes" : [ "external" ], + "id" : "21", + "superClasses" : [ "22" ] + }, { + "iri" : "https://w3id.org/pmd/mo/DiffractionPattern", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "undefined", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The pattern of spots or bands produced on a detector when electrons diffract after interacting with a crystalline sample.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Das Muster von Flecken oder Banden, das auf einem Detektor entsteht, wenn Elektronen nach der Wechselwirkung mit einer kristallinen Probe gebeugt werden.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Beugungsmuster", + "IRI-based" : "DiffractionPattern", + "en" : "Diffraction Pattern" + }, + "subClasses" : [ "157" ], + "attributes" : [ "external" ], + "id" : "158", + "superClasses" : [ "395" ] + }, { + "iri" : "https://w3id.org/pmd/co/Note", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Additional information & knowledge for and by humans. Not expected to be parsable", + "type" : "label" + } ] + }, + "label" : { + "de" : "Bemerkung", + "IRI-based" : "Note", + "en" : "Note" + }, + "attributes" : [ "external" ], + "id" : "216", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/InsertSurface", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "https://www.merriam-webster.com/dictionary/surface", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This entity describes the state and quality of the exterior of the insert of a processing node, e.g., the inserts used in grips.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Entität beschreibt den Zustand und die Qualität des Außenbereichs des Einsatzes eines Prozessknotens, z. B. die in Klemm- und Spannsystemen verwendeten Einsätze.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Oberfläche Eines Einsatzstücks", + "IRI-based" : "InsertSurface", + "en" : "Insert Surface" + }, + "attributes" : [ "external" ], + "id" : "135", + "superClasses" : [ "136" ] + }, { + "iri" : "https://w3id.org/pmd/mo/DiskOfLeastConfusion", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "undefined", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Der Bereich in der Bildebene eines Elektronenmikroskops, in dem der Elektronenstrahl auf die kleinste Punktgröße fokussiert wird, wodurch die durch sphärische Aberration verursachte Unschärfe minimiert wird.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "The region in the image plane of an electron microscope where the electron beam is focused to the smallest spot size, minimizing the blurring effect due to spherical aberration.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Scheibe der geringsten Konfusion", + "IRI-based" : "DiskOfLeastConfusion", + "en" : "Disk Of Least Confusion" + }, + "attributes" : [ "external" ], + "id" : "349", + "superClasses" : [ "350" ] + }, { + "iri" : "https://w3id.org/pmd/co/NodeModel", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Processing Node short description, e.g. \"Vacuum Furnace\"", + "type" : "label" + } ] + }, + "label" : { + "de" : "Knotenmodell", + "IRI-based" : "NodeModel", + "en" : "Node Model" + }, + "attributes" : [ "external" ], + "id" : "231", + "superClasses" : [ "232" ] + }, { + "iri" : "https://w3id.org/pmd/co/Thickness", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This entity describes the measured dimension in one direction of a test piece.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Entität beschreibt die gemessene Dimension in einer Richtung eines Prüfstücks.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Dicke", + "IRI-based" : "Thickness", + "en" : "Thickness" + }, + "attributes" : [ "external" ], + "id" : "424", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/DigitalMaterialIdentifier", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The DigitalMaterialIdentifier value object refers to a dmi:DigitalMaterialIdentifier.\n\nA dmi:DigitalMaterialIdentifier is a resource identifier (IRI) that represents the specification of a material (in the sense of a material class) described in a specification document. The specification document can be, e.g., a standard, a datasheet, or any other citable document. Typically, a specification document requires some qualities that a material (in the sense of a portion of matter) has to comply with. Typical requirements include chemical compositions or physical properties.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "DigitalMaterialIdentifier", + "en" : "Digital Material Identifier" + }, + "intersection" : [ "76" ], + "attributes" : [ "external", "intersection" ], + "id" : "606", + "superClasses" : [ "76" ] + }, { + "iri" : "https://w3id.org/pmd/co/DataCiteMetadata", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This value object refers to metadata which can be provided as DataCite element.", + "type" : "label" + } ], + "example" : [ { + "identifier" : "example", + "language" : "en", + "value" : "For example, to refer to a ISBN number, following triples might be created:\n\n :p1 a pmd:Process .\n :p1 pmd:characteristic :doc_vo1 .\n :doc_vo1 a pmd:Document .\n :doc_vo1 pmd:characteristic :isbn_vo1 .\n :doc_vo1 pmd:resource \"http://example.org/book.pdf\" .\n :isbn_vo1 a pmd:DataCiteMetadata .\n :isbn_vo1 pmd:relatesTo .\n :isbn_vo1 pmd:value \"9780262012423\". \n\n\"a document related to process :p1 has a ISBN number 9780262012423\"", + "type" : "label" + } ] + }, + "label" : { + "de" : "Data Cite Metadaten", + "IRI-based" : "DataCiteMetadata", + "en" : "DataCite Metadata" + }, + "attributes" : [ "external" ], + "id" : "425", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/mo/AugerElectronSpectroscopy", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Auger Electron Spectroscopy (AES) is a surface analysis technique used in the field of materials science and surface chemistry. It involves the study of the interactions between high-energy electrons and atoms on the surface of a material. The process is named after Pierre Auger, who made significant contributions to the understanding of this phenomenon.\nIn AES, a sample's surface is bombarded with a beam of high-energy electrons, which causes inner-shell electrons to be ejected from the atoms in the sample. These vacancies are then filled by higher-energy electrons from outer shells, leading to the emission of Auger electrons. The energy of these emitted Auger electrons is characteristic of the specific elements present in the sample and their chemical states.\nBy analyzing the energy spectrum of the emitted Auger electrons, researchers can identify the elements present on the surface of the material and determine their relative concentrations. Auger Electron Spectroscopy provides valuable information about the elemental composition and chemical bonding of the top few atomic layers of a material, making it a powerful tool for studying surface properties, thin films, and interfaces in various scientific and industrial applications.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "AES", + "type" : "label" + } ] + }, + "label" : { + "de" : "Auger-Elektronen-Spektroskopie", + "IRI-based" : "AugerElectronSpectroscopy", + "en" : "Auger Electron Spectroscopy" + }, + "attributes" : [ "external" ], + "id" : "149", + "superClasses" : [ "108" ] + }, { + "iri" : "https://w3id.org/pmd/mo/TiltCorrection", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "undefined", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Eine Korrektur, die bei Bildern von gekippten Proben in der Elektronenmikroskopie angewendet wird, um durch den Kippwinkel verursachte Verzerrungen zu kompensieren.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A correction applied to images obtained from tilted specimens in electron microscopy to compensate for distortions caused by the tilt angle.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Neigungskorrektur", + "IRI-based" : "TiltCorrection", + "en" : "Tilt Correction" + }, + "attributes" : [ "external" ], + "id" : "58", + "superClasses" : [ "2" ] + }, { + "iri" : "https://w3id.org/pmd/mo/FocusedIonBeam-ScanningElectronMicroscope", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Ein Zweistrahlmikroskop, das einen fokussierten Ionenstrahl mit einem Rasterelektronenmikroskop kombiniert.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A dual-beam microscope that combines a focused ion beam with a scanning electron microscope.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "FIB-SEM", + "type" : "label" + } ] + }, + "label" : { + "de" : "Fokussierter Ionenstrahl - Rasterelektronenmikroskop", + "IRI-based" : "FocusedIonBeam-ScanningElectronMicroscope", + "en" : "Focus(ed) Ion Beam - Scanning Electron Microscope" + }, + "subClasses" : [ "566" ], + "attributes" : [ "external" ], + "id" : "356", + "superClasses" : [ "357" ] + }, { + "iri" : "https://w3id.org/pmd/co/Method", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Method.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/method. Accessed 5 Dec. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A way, technique, or process of or for doing something", + "type" : "label" + } ] + }, + "label" : { + "de" : "Methode", + "IRI-based" : "Method", + "en" : "Method" + }, + "subClasses" : [ "564", "74", "568" ], + "attributes" : [ "external" ], + "id" : "430", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/RegionOfInterest", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Some region of interest (ROI) in an image. Describe the ROI by use of Web Annotation Vocabulary (https://www.w3.org/TR/annotation-vocab/). The ROI is understood as the target of a (body-less) annotation. \n\nThe web annotation model suggests the use of different fragment specifications (https://www.w3.org/TR/annotation-model/#fragment-selector), however we suggest to prefer media fragments (https://www.w3.org/TR/media-frags/).", + "type" : "label" + } ], + "example" : [ { + "identifier" : "example", + "language" : "undefined", + "value" : ":image1 a pmd:Image\n:roi1 a pmd:RegionOfInterest .\n:roi1 oa:hasSource :image1 ;\n oa:hasSelector [\n a oa:FragmentSelector ;\n dcterms:conformsTo ;\n rdf:value \"xywh=160,120,320,240\" ] ] .", + "type" : "label" + } ] + }, + "label" : { + "de" : "Betrachteter Bereich", + "IRI-based" : "RegionOfInterest", + "en" : "Region of Interest" + }, + "attributes" : [ "external" ], + "id" : "783", + "superClasses" : [ "395" ] + }, { + "iri" : "https://w3id.org/pmd/co/Address", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Address.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/address. Accessed 16 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Ein Ort, an dem mit einer Person oder Organisation kommuniziert werden kann.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A place where a person or organization may be communicated with.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Adresse", + "IRI-based" : "Address", + "en" : "Address" + }, + "attributes" : [ "external" ], + "id" : "433", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/mo/WaitTime", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "undefined", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Das Zeitintervall zwischen aufeinander folgenden Messungen oder Operationen in einem Elektronenmikroskop.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "The time interval between successive measurements or operations in an electron microscope.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Wartezeit", + "IRI-based" : "WaitTime", + "en" : "Wait Time" + }, + "comment" : { + "de" : "Die Wartezeit wird häufig genutzt, um die Probe zu stabilisieren oder um die Beschädigung der Probe zu minimieren.", + "en" : "The wait time is often used to allow the specimen to stabilize or to minimize sample damage." + }, + "attributes" : [ "external" ], + "id" : "583", + "superClasses" : [ "406" ] + }, { + "iri" : "https://w3id.org/pmd/co/Norm", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Norm.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/norm. Accessed 24 Nov. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An authoritative standard.", + "type" : "label" + } ], + "example" : [ { + "identifier" : "example", + "language" : "en", + "value" : "Technical standard issued by the German Institute for Standardisation Registered Association (Deutsches Institut für Normung e.V. - DIN)", + "type" : "label" + } ] + }, + "label" : { + "de" : "Norm", + "IRI-based" : "Norm", + "en" : "Norm" + }, + "attributes" : [ "external" ], + "id" : "564", + "superClasses" : [ "430" ] + }, { + "iri" : "https://w3id.org/pmd/co/Voxel", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An element representing a value on a grid in three dimensional space.\nIn PMD, an infinitesimal part of an object which is made of a homogenuous material. Size depends on the observed material level. For now, geometrically, a cubus is assumed.\nDifferent Voxels can have different material properties and material structure\nA (partial) logical object that describes (a part of) a physical object", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "An element representing a value on a grid in three dimensional space.\nIn PMD, an infinitesimal part of an object which is made of a homogenuous material. Size depends on the observed material level. For now, geometrically, a cubus is assumed.\nMade of a material\nDifferent Voxels can have different material properties and material structure\nA (partial) logical object that describes (a part of) a physical object", + "type" : "label" + } ] + }, + "label" : { + "de" : "Voxel", + "IRI-based" : "Voxel", + "en" : "Voxel" + }, + "attributes" : [ "external" ], + "id" : "789", + "superClasses" : [ "395" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Communication", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasInformedBy", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-Communication", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "undefined", + "value" : "Communication is the exchange of an entity by two activities, one activity using the entity generated by the other.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "constraints" : [ { + "identifier" : "constraints", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-constraints-20130430/#prov-dm-constraints-fig", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-wasInformedBy", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Communication", + "undefined" : "Communication" + }, + "comment" : { + "en" : "An instance of prov:Communication provides additional descriptions about the binary prov:wasInformedBy relation from an informed prov:Activity to the prov:Activity that informed it. For example, :you_jumping_off_bridge prov:wasInformedBy :everyone_else_jumping_off_bridge; prov:qualifiedCommunication [ a prov:Communication; prov:activity :everyone_else_jumping_off_bridge; :foo :bar ]." + }, + "attributes" : [ "external" ], + "id" : "122", + "superClasses" : [ "309" ] + }, { + "iri" : "https://w3id.org/pmd/co/Thermal", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Thermal.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/thermal. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Thermisch bedeutet in Bezug auf oder verursacht durch Wärme. Hier speziell auf die thermischen Eigenschaften eines Materials.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Thermal is relating to, or caused by heat. Here specifically to the thermal properties of a material.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Thermisch", + "IRI-based" : "Thermal", + "en" : "Thermal" + }, + "attributes" : [ "external" ], + "id" : "192", + "superClasses" : [ "84" ] + }, { + "iri" : "https://w3id.org/pmd/co/Chemical", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Chemical.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/chemical. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Chemisch ist ein Begriff, der sich auf die Chemie oder die chemischen Phänomene bezieht, in der Chemie verwendet wird oder durch sie erzeugt wird. Hier geht es speziell um die chemischen Eigenschaften eines Materials.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Chemical is relating to, used in, or produced by chemistry or the phenomena of chemistry Here specifically to the chemical properties of a material.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Chemisch", + "IRI-based" : "Chemical", + "en" : "Chemical" + }, + "attributes" : [ "external" ], + "id" : "190", + "superClasses" : [ "84" ] + }, { + "iri" : "https://w3id.org/pmd/co/CoatingDesignation", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Eigenschaft ist ein Name oder Bezeichner eines Materialtyps, welcher den obersten Teil eines Bauteils (Beschichtung) bedeckt.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This property is a name or identifier of a material type which designates the most upper part of a component (coating).", + "type" : "label" + } ] + }, + "label" : { + "de" : "Beschichtungsbezeichnung", + "IRI-based" : "CoatingDesignation", + "en" : "Coating Designation" + }, + "attributes" : [ "external" ], + "id" : "241", + "superClasses" : [ "187" ] + }, { + "iri" : "https://w3id.org/pmd/co/AnalysingProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A process that is driven by the primary intent to gain new measurements.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Analyseprozess", + "IRI-based" : "AnalysingProcess", + "en" : "Analysing Process" + }, + "subClasses" : [ "80", "86", "91", "95", "99", "103", "47", "108", "58", "45", "1" ], + "attributes" : [ "external" ], + "id" : "2", + "superClasses" : [ "38" ] + }, { + "iri" : "https://w3id.org/pmd/co/Manufacturer", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Processing Node's manufacturer name, e.g.: \"Ipsen\", \"UPC\" or \"Bosch\"", + "type" : "label" + } ] + }, + "label" : { + "de" : "Hersteller", + "IRI-based" : "Manufacturer", + "en" : "Manufacturer" + }, + "intersection" : [ "25" ], + "attributes" : [ "external", "intersection" ], + "id" : "816" + }, { + "iri" : "https://w3id.org/pmd/co/TestPieceName", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This property describes the designation of a test piece, usually given as human-readable identifier by humans.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Eigenschaft beschreibt die Bezeichnung eines Prüfkörpers, die in der Regel als menschenlesbarer Identifikator von Menschen vergeben wird.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Prüfkörpername", + "IRI-based" : "TestPieceName", + "en" : "Test Piece Name" + }, + "intersection" : [ "76" ], + "attributes" : [ "external", "intersection" ], + "id" : "608", + "superClasses" : [ "76" ] + }, { + "iri" : "https://w3id.org/pmd/mo/DynamicFocusCorrection", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "undefined", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Eine Technik, die in der Elektronenmikroskopie eingesetzt wird, um den Fokus des Elektronenstrahls kontinuierlich in Echtzeit anzupassen und so eine optimale Bildqualität zu erhalten, insbesondere bei der Abbildung unebener oder rauer Oberflächen.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A technique used in electron microscopy to continuously adjust the focus of the electron beam in real-time to maintain optimal image quality, especially when imaging uneven or rough surfaces.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Dynamische Fokuskorrektur", + "IRI-based" : "DynamicFocusCorrection", + "en" : "Dynamic Focus Correction" + }, + "attributes" : [ "external" ], + "id" : "103", + "superClasses" : [ "2" ] + }, { + "iri" : "https://w3id.org/pmd/mo/ElectronBackscatterDiffraction", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Electron Backscatter Diffraction is a microscopy technique used to analyze the crystallographic orientation and microstructure of materials. It involves directing an electron beam onto a sample's surface and measuring the backscattered electrons. By analyzing the diffraction patterns of these electrons, researchers can determine the crystallographic orientation of the material's grains.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "EBSD", + "type" : "label" + } ] + }, + "label" : { + "de" : "Rückstreuelektronenbeugung", + "IRI-based" : "ElectronBackscatterDiffraction", + "en" : "Electron Backscatter Diffraction" + }, + "attributes" : [ "external" ], + "id" : "721", + "superClasses" : [ "391" ] + }, { + "iri" : "https://w3id.org/pmd/co/ProcessDescription", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A human readable order of steps. Might include additional information that likes sketches and notes.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A descriptive text qualifying the nature of a process instance used as an identifier that is not strictly intended to be unique, e.g. \"1050°C30 840°C10/ÖL\".", + "type" : "label" + } ] + }, + "label" : { + "de" : "Prozessbeschreibung", + "IRI-based" : "ProcessDescription", + "en" : "Process Description" + }, + "intersection" : [ "361" ], + "attributes" : [ "external", "intersection" ], + "id" : "360", + "superClasses" : [ "361" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Activity", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-Activity", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "undefined", + "value" : "An activity is something that occurs over a period of time and acts upon or with entities; it may include consuming, processing, transforming, modifying, relocating, using, or generating entities.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "starting-point", + "type" : "label" + } ], + "constraints" : [ { + "identifier" : "constraints", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-constraints-20130430/#prov-dm-constraints-fig", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-Activity", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Activity", + "undefined" : "Activity" + }, + "subClasses" : [ "33", "38" ], + "attributes" : [ "external" ], + "id" : "34" + }, { + "iri" : "https://w3id.org/pmd/mo/WorkingDistance", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "undefined", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The distance between the electron microscope objective lens and the specimen surface when the electron beam is focused on the specimen.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Der Abstand zwischen der Objektivlinse des Elektronenmikroskops und der Probenoberfläche, wenn der Elektronenstrahl auf die Probe fokussiert wird.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Arbeitsabstand", + "IRI-based" : "WorkingDistance", + "en" : "Working Distance" + }, + "comment" : { + "de" : "Der Arbeitsabstand wirkt sich auf die Tiefenschärfe und die Auflösung des Bildes aus.", + "en" : "The working distance affects the depth of field and the resolution of the image." + }, + "attributes" : [ "external" ], + "id" : "693", + "superClasses" : [ "434" ] + }, { + "iri" : "https://w3id.org/pmd/mo/Diffraction", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "undefined", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Die Biegung von Elektronenwellen beim Durchgang durch eine kristalline Probe, was zur Bildung von Beugungsmustern führt, die Informationen über die Kristallstruktur liefern.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "The bending of electron waves as they pass through a crystalline sample, resulting in the formation of diffraction patterns that provide information about the crystal structure.", + "type" : "label" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "de", + "value" : "Beugung", + "type" : "label" + }, { + "identifier" : "altLabel", + "language" : "en", + "value" : "Scattering", + "type" : "label" + } ] + }, + "label" : { + "de" : "Diffraktion", + "IRI-based" : "Diffraction", + "en" : "Diffraction" + }, + "subClasses" : [ "40", "43", "391" ], + "attributes" : [ "external" ], + "id" : "19", + "superClasses" : [ "15" ] + }, { + "iri" : "https://w3id.org/pmd/co/AgingTemperature", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Variable Temperature during an Aging Process depending on the desired deposition formations.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Alterungstemperatur", + "IRI-based" : "AgingTemperature", + "en" : "Aging Temperature" + }, + "attributes" : [ "external" ], + "id" : "628", + "superClasses" : [ "443" ] + }, { + "iri" : "https://w3id.org/pmd/mo/FilamentCurrent", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "undefined", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The current passing through the filament of the electron gun in an electron microscope, which heats up the filament to emit electrons.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Der Strom, der durch den Glühfaden der Elektronenkanone in einem Elektronenmikroskop fließt und den Glühfaden erhitzt, um Elektronen zu emittieren.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Glühfadenstrom", + "IRI-based" : "FilamentCurrent", + "en" : "Filament Current" + }, + "attributes" : [ "external" ], + "id" : "824", + "superClasses" : [ "445" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Entity", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-entity", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An entity is a physical, digital, conceptual, or other kind of thing with some fixed aspects; entities may be real or imaginary. ", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "starting-point", + "type" : "label" + } ], + "constraints" : [ { + "identifier" : "constraints", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-constraints-20130430/#prov-dm-constraints-fig", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-Entity", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Entity", + "undefined" : "Entity" + }, + "subClasses" : [ "395", "354", "250", "228", "239", "369", "373", "11" ], + "attributes" : [ "external" ], + "id" : "220" + }, { + "iri" : "https://w3id.org/pmd/co/AssemblingProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A process to mount or demount a component.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Assemblierungsprozess", + "IRI-based" : "AssemblingProcess", + "en" : "Assembling Process" + }, + "subClasses" : [ "333", "337", "341" ], + "attributes" : [ "external" ], + "id" : "291", + "superClasses" : [ "38" ] + }, { + "iri" : "https://w3id.org/pmd/mo/EnvironmentalTransmissionElectronMicroscopy", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Environmental Transmission Electron Microscopy allows imaging and analysis of materials in controlled gaseous environments, simulating real-world conditions.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "ETEM", + "type" : "label" + } ] + }, + "label" : { + "de" : "Umgebungs-Transmissionselektronenmikroskopie", + "IRI-based" : "EnvironmentalTransmissionElectronMicroscopy", + "en" : "Environmental Transmission Electron Microscopy" + }, + "attributes" : [ "external" ], + "id" : "66", + "superClasses" : [ "5" ] + }, { + "iri" : "https://w3id.org/pmd/mo/EnergyResolution", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The ability of a detector to distinguish between different energy levels of incident radiation.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Die Fähigkeit eines Detektors, zwischen verschiedenen Energieniveaus der einfallenden Strahlung zu unterscheiden.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Energieauflösung", + "IRI-based" : "EnergyResolution", + "en" : "Energy Resolution" + }, + "attributes" : [ "external" ], + "id" : "211", + "superClasses" : [ "203" ] + }, { + "iri" : "https://w3id.org/pmd/co/Process", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "IAO_0000117" : [ { + "identifier" : "IAO_0000117", + "language" : "en", + "value" : "A process is an activity comprising a series of actions or operations conducing to an end. In PMD, a process is conducted via processing nodes and has a discernable duration as part of a workflow. A process consumes objects and parameters. A process potentially generates new objects and measurements.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A process is an activity including a series of actions or operations conducing to an end. In PMD, a process is conducted via processing nodes and has a discernable duration as part of a workflow. A process consumes objects and parameters. A process potentially generates new objects and measurements.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Prozess", + "IRI-based" : "Process", + "en" : "Process" + }, + "subClasses" : [ "2", "15", "207", "283", "287", "291", "295", "299" ], + "attributes" : [ "external" ], + "id" : "38", + "superClasses" : [ "34" ] + }, { + "iri" : "https://w3id.org/pmd/mo/ElectronProbeMicroAnalyzer", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Ein Instrument zur Elementaranalyse fester Materialien durch Beschuss mit einem fokussierten Elektronenstrahl.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "An instrument used for elemental analysis of solid materials by bombarding them with a focused electron beam.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Elektronensonden-Mikro-Analysator", + "IRI-based" : "ElectronProbeMicroAnalyzer", + "en" : "Electron Probe Micro Analyzer" + }, + "attributes" : [ "external" ], + "id" : "243", + "superClasses" : [ "244" ] + }, { + "iri" : "https://w3id.org/pmd/mo/XRayPhotoelectronSpectroscopy", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "X-ray Photoelectron Spectroscopy, also known as Electron Spectroscopy for Chemical Analysis (ESCA), is a technique used to study the surface chemistry of materials. XPS involves bombarding a sample's surface with X-rays to emit photoelectrons, which are then analyzed to determine the elemental composition and chemical states of the elements on the surface.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "XPS", + "type" : "label" + } ] + }, + "label" : { + "de" : "Röntgenphotoelektronenspektroskopie", + "IRI-based" : "XRayPhotoelectronSpectroscopy", + "en" : "X-ray Photoelectron Spectroscopy" + }, + "attributes" : [ "external" ], + "id" : "537", + "superClasses" : [ "196" ] + }, { + "iri" : "https://w3id.org/pmd/mo/SphericalAberration", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Eine Art von optischer Aberration, die durch Abweichungen von der idealen sphärischen Form in Linsen oder Spiegeln verursacht wird.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A type of optical aberration caused by deviations from the ideal spherical shape in lenses or mirrors.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Sphärische Aberration", + "IRI-based" : "SphericalAberration", + "en" : "Spherical Aberration" + }, + "attributes" : [ "external" ], + "id" : "550", + "superClasses" : [ "449" ] + }, { + "iri" : "https://w3id.org/pmd/mo/XRayFluorescence", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "X-ray Fluorescence is a method used to determine the elemental composition of a sample by analyzing the X-rays emitted when the sample is exposed to high-energy X-rays. The X-rays emitted are characteristic of the elements present, allowing for quantitative analysis of the sample's elemental composition.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "XRF", + "type" : "label" + } ] + }, + "label" : { + "de" : "Röntgenfluoreszenz", + "IRI-based" : "XRayFluorescence", + "en" : "X-ray Fluorescence" + }, + "attributes" : [ "external" ], + "id" : "530", + "superClasses" : [ "196" ] + }, { + "iri" : "https://w3id.org/pmd/mo/Electrode", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An electrode is a conductor through which electric current enters or exits a substance. In the context of electrochemical systems, an electrode facilitates the transfer of electrons between a solid material and an electrolyte. Electrodes are essential components in batteries, fuel cells, electroplating, and other electrochemical processes. They play a critical role in facilitating chemical reactions and energy storage or conversion.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Elektrode", + "IRI-based" : "Electrode", + "en" : "Electrode" + }, + "subClasses" : [ "418", "759" ], + "attributes" : [ "external" ], + "id" : "419", + "superClasses" : [ "110" ] + }, { + "iri" : "https://w3id.org/pmd/mo/HighAngleAnnularDarkFieldScanningTransmissionElectronMicroscope", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A type of scanning transmission electron microscope that detects scattered electrons at high angles.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Eine Art Rastertransmissionselektronenmikroskop, das gestreute Elektronen in hohen Winkeln erkennt.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "HAADF-STEM", + "type" : "label" + } ] + }, + "label" : { + "de" : "Hochwinkel-Dunkelfeld-Rastertransmissionselektronenmikroskop mit annularem Winkel", + "IRI-based" : "HighAngleAnnularDarkFieldScanningTransmissionElectronMicroscope", + "en" : "High-angle Annular Dark-field Scanning Transmission Electron Microscope" + }, + "attributes" : [ "external" ], + "id" : "325", + "superClasses" : [ "314" ] + }, { + "iri" : "https://w3id.org/pmd/co/TestPieceClassification", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This property is used to provide information on a test piece concerning its graduation in accordance with corresponding standards.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Eigenschaft wird verwendet, um Informationen über einen Prüfkörper bezüglich seiner Einordnung gemäß entsprechender Normen zu liefern.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Prüfkörperklassifizierung", + "IRI-based" : "TestPieceClassification", + "en" : "Test Piece Classification" + }, + "attributes" : [ "external" ], + "id" : "485", + "superClasses" : [ "218" ] + }, { + "iri" : "https://w3id.org/pmd/mo/ScanningTunnelingMicroscope", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A microscope that uses quantum tunneling to image surfaces at the atomic level.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Ein Mikroskop, das Quanten-Tunneling nutzt, um Oberflächen auf atomarer Ebene abzubilden.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "STM", + "type" : "label" + } ] + }, + "label" : { + "de" : "Rastertunnelmikroskop", + "IRI-based" : "ScanningTunnelingMicroscope", + "en" : "Scanning Tunneling Microscope" + }, + "attributes" : [ "external" ], + "id" : "617", + "superClasses" : [ "560" ] + }, { + "iri" : "https://w3id.org/pmd/co/IonicBond", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "\"Ionic bond.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/ionic%20bond. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Eine Ionenbindung ist eine chemische Bindung, die zwischen entgegengesetzt geladenen Stoffen aufgrund ihrer gegenseitigen elektrostatischen Anziehung entsteht.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Ionic bond is a chemical bond formed between oppositely charged species because of their mutual electrostatic attraction.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Ionische Bindung", + "IRI-based" : "IonicBond", + "en" : "Ionic Bond" + }, + "attributes" : [ "external" ], + "id" : "489", + "superClasses" : [ "247" ] + }, { + "iri" : "https://w3id.org/pmd/mo/ProbeCurrent", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "undefined", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Der Strom der Elektronen im fokussierten Elektronenstrahl, der zur Abbildung oder Analyse in einem Elektronenmikroskop verwendet wird.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "The current of electrons in the focused electron beam used for imaging or analysis in an electron microscope.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Sondenstrom", + "IRI-based" : "ProbeCurrent", + "en" : "Probe Current" + }, + "attributes" : [ "external" ], + "id" : "830", + "superClasses" : [ "445" ] + }, { + "iri" : "https://w3id.org/pmd/co/ConditioningProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A process that comprises the procedure and measures by which a material object is adapted to predefined environmental conditions.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Aktivität beschreibt den Prozess und die Maßnahmen, die ergriffen werden, um einen materiellen Gegenstand auf vordefinierte Umgebungsbedingungen einzustellen.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Konditionierungsprozess", + "IRI-based" : "ConditioningProcess", + "en" : "Conditioning Process" + }, + "subClasses" : [ "747", "460" ], + "attributes" : [ "external" ], + "id" : "295", + "superClasses" : [ "38" ] + }, { + "iri" : "https://w3id.org/pmd/co/Date", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Eine Erklärung über den Tag der Ausführung oder Herstellung. Basierend auf dem gregorianischen Kalendersystem.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A statement of the day of execution or making. Based on an the gregorian calender system.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Datum", + "IRI-based" : "Date", + "en" : "Date" + }, + "attributes" : [ "external" ], + "id" : "542", + "superClasses" : [ "432" ] + }, { + "iri" : "https://w3id.org/pmd/mo/ScanningTunnelingMicroscopy", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Scanning Tunneling Microscopy is a technique that uses a conducting probe to measure the tunneling current between the probe and the sample's surface. It provides atomic-scale images of surfaces and is often used to study conductive materials.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "STM", + "type" : "label" + } ] + }, + "label" : { + "de" : "Rastertunnelmikroskopie", + "IRI-based" : "ScanningTunnelingMicroscopy", + "en" : "Scanning Tunneling Microscopy" + }, + "attributes" : [ "external" ], + "id" : "622", + "superClasses" : [ "523" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Invalidation", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasInvalidatedBy", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-Invalidation", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "undefined", + "value" : "Invalidation is the start of the destruction, cessation, or expiry of an existing entity by an activity. The entity is no longer available for use (or further invalidation) after invalidation. Any generation or usage of an entity precedes its invalidation.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "constraints" : [ { + "identifier" : "constraints", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-constraints-20130430/#prov-dm-constraints-fig", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-Invalidation", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Invalidation", + "undefined" : "Invalidation" + }, + "comment" : { + "en" : "An instance of prov:Invalidation provides additional descriptions about the binary prov:wasInvalidatedBy relation from an invalidated prov:Entity to the prov:Activity that invalidated it. For example, :uncracked_egg prov:wasInvalidatedBy :baking; prov:qualifiedInvalidation [ a prov:Invalidation; prov:activity :baking; :foo :bar ]." + }, + "attributes" : [ "external" ], + "id" : "603", + "superClasses" : [ "411", "309" ] + }, { + "iri" : "https://w3id.org/pmd/mo/XRayMicroanalysis", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "X-ray Microanalysis is a technique that combines microscopy and X-ray analysis to study the elemental composition of small regions within a sample. It involves focusing an electron or X-ray beam on a specific area of the sample and measuring the X-rays emitted from that area to determine the elemental composition.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Röntgen-Mikroanalyse", + "IRI-based" : "XRayMicroanalysis", + "en" : "X-ray Microanalysis" + }, + "subClasses" : [ "750" ], + "attributes" : [ "external" ], + "id" : "186", + "superClasses" : [ "91" ] + }, { + "iri" : "https://w3id.org/pmd/co/SpecimenName", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Eigenschaft beschreibt die Bezeichnung eines Prüfstücks, die in der Regel von Menschen als von Menschen lesbarer Identifikator vergeben wird.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "This property describes the designation of a specimen, usually given as human-readable identifier by humans.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Prüfstück Name", + "IRI-based" : "SpecimenName", + "en" : "Specimen Name" + }, + "intersection" : [ "76" ], + "attributes" : [ "external", "intersection" ], + "id" : "609", + "superClasses" : [ "76" ] + }, { + "iri" : "https://w3id.org/pmd/co/ClampingPressure", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Eigenschaft beschreibt als quantitativer Wert die Kraft pro Fläche (Druck), die beim Einbau einer Probe, eines Prüfkörpers oder eines Prüfstücks aufgebracht wird. Typischerweise ist das Aufbringen eines Klemmdrucks mit einer Art von Klemm- oder Spannzubehör (Grips) oder Ähnlichem verbunden.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This property describes the force per area (pressure) that is used during the mounting process of a sample, specimen, or test piece as a quantitative value. Typically, this process involves some sort of grips or the like.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Klemmdruck", + "IRI-based" : "ClampingPressure", + "en" : "Clamping Pressure" + }, + "attributes" : [ "external" ], + "id" : "343", + "superClasses" : [ "344" ] + }, { + "iri" : "https://w3id.org/pmd/co/Object", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A discernable, tangible or simulated entity that is processed in a process by a processing node.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Objekt", + "IRI-based" : "Object", + "en" : "Object" + }, + "subClasses" : [ "605", "627", "714", "380", "22", "757" ], + "attributes" : [ "external" ], + "id" : "228", + "superClasses" : [ "220" ] + }, { + "iri" : "https://w3id.org/pmd/co/MountingProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An assembly process in which a test piece or specimen is installed or otherwise integrated into a testing machine. This may also include the use of other processing nodes and components (e.g. grips).", + "type" : "label" + } ] + }, + "label" : { + "de" : "Montageprozess", + "IRI-based" : "MountingProcess", + "en" : "Mounting Process" + }, + "attributes" : [ "external" ], + "id" : "341", + "superClasses" : [ "291" ] + }, { + "iri" : "https://w3id.org/pmd/co/ProcessingNode", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Processing nodes are tools, equipment and accessories as well as software that are relevant for the performance of processes, such as e.g. mechanical and chemical test as well as simulation, prediction, and machine learning. Accordingly, processing nodes may be machines, parts of machines, and software applications.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Prozessknoten sind Werkzeuge, Geräte und Zubehör sowie Software, die für die Durchführung von Prozessen relevant sind, wie z. B. mechanische und chemische Tests sowie Simulationen, Vorhersagen und maschinelles Lernen. Dementsprechend können Prozessknoten Maschinen, Teile von Maschinen und Softwareanwendungen sein.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Prozessknoten", + "IRI-based" : "ProcessingNode", + "en" : "Processing Node" + }, + "subClasses" : [ "301", "735", "633", "176", "419", "644", "109", "673", "705", "708", "224", "650", "654", "407", "717", "42", "127" ], + "attributes" : [ "external" ], + "id" : "110", + "superClasses" : [ "68" ] + }, { + "iri" : "https://w3id.org/pmd/mo/SelectedAreaElectronDiffraction", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Selected Area Electron Diffraction is a technique used in transmission electron microscopy (TEM) to study the crystallographic orientation of small regions within a sample. By selecting a specific area of the sample and directing an electron beam onto it, diffraction patterns are generated. These patterns offer insights into the sample's crystal structure and orientation.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "SAD", + "type" : "label" + }, { + "identifier" : "abbreviation", + "language" : "en", + "value" : "SAED", + "type" : "label" + } ] + }, + "label" : { + "de" : "Elektronenbeugung ausgewählter Regionen", + "IRI-based" : "SelectedAreaElectronDiffraction", + "en" : "Selected Area Electron Diffraction" + }, + "attributes" : [ "external" ], + "id" : "40", + "superClasses" : [ "19" ] + }, { + "iri" : "https://w3id.org/pmd/co/TemperatureChangingProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A conditioning process which is run to increase or decrease the temperature of an object or a space. Usually, this involves heating or cooling devices such as furnaces or cooling media.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Temperaturänderungsprozess", + "IRI-based" : "TemperatureChangingProcess", + "en" : "Temperature Changing Process" + }, + "attributes" : [ "external" ], + "id" : "460", + "superClasses" : [ "295" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Quotation", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasQuotedFrom", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-quotation", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A quotation is the repeat of (some or all of) an entity, such as text or image, by someone who may or may not be its original author. Quotation is a particular case of derivation.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-quotation", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Quotation", + "undefined" : "Quotation" + }, + "comment" : { + "en" : "An instance of prov:Quotation provides additional descriptions about the binary prov:wasQuotedFrom relation from some taken prov:Entity from an earlier, larger prov:Entity. For example, :here_is_looking_at_you_kid prov:wasQuotedFrom :casablanca_script; prov:qualifiedQuotation [ a prov:Quotation; prov:entity :casablanca_script; :foo :bar ]." + }, + "attributes" : [ "external" ], + "id" : "544", + "superClasses" : [ "331" ] + }, { + "iri" : "https://w3id.org/pmd/mo/ElectronDiffraction", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "undefined", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Das Phänomen der Beugung von Elektronenwellen beim Durchgang durch eine kristalline Probe, das Informationen über die Kristallstruktur liefert.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "The phenomenon of electron waves diffracting as they pass through a crystalline sample, providing information about the crystal structure.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Elektronenbeugung", + "IRI-based" : "ElectronDiffraction", + "en" : "Electron Diffraction" + }, + "subClasses" : [ "721" ], + "attributes" : [ "external" ], + "id" : "391", + "superClasses" : [ "19" ] + }, { + "iri" : "https://w3id.org/pmd/co/AgingTime", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The timespan that an Aging Process executes to completion.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Alterungszeit", + "IRI-based" : "AgingTime", + "en" : "Aging Time" + }, + "subClasses" : [ "712" ], + "attributes" : [ "external" ], + "id" : "540", + "superClasses" : [ "432" ] + }, { + "iri" : "https://w3id.org/pmd/co/Laboratory", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Laboratory.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/laboratory. Accessed 24 Nov. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A place equipped for experimental study in a science or for testing and analysis.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Labor", + "IRI-based" : "Laboratory", + "en" : "Laboratory" + }, + "intersection" : [ "25" ], + "attributes" : [ "external", "intersection" ], + "id" : "29", + "superClasses" : [ "25" ] + }, { + "iri" : "https://w3id.org/pmd/co/Fraction", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "Fraction" + }, + "subClasses" : [ "648", "818", "820", "771" ], + "attributes" : [ "external" ], + "id" : "426", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/mo/GatanImageFilter", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A Gatan Image Filter refers to an image filter manufactured by Gatan, Inc., a company specializing in electron microscopy and related products. Gatan's image filters are designed for electron microscopes and electron energy loss spectroscopy (EELS) applications. These filters allow researchers to control and enhance the acquisition of electron energy loss spectra while obtaining high-resolution images of the sample under investigation.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Gatan Abbildungsfilter", + "IRI-based" : "GatanImageFilter", + "en" : "Gatan Image Filter" + }, + "attributes" : [ "external" ], + "id" : "225", + "superClasses" : [ "224" ] + }, { + "iri" : "https://w3id.org/pmd/co/Rectangular", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Rectangular.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/rectangular. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Geformt wie ein Rechteck.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Shaped like a rectangle.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Rechteckig", + "IRI-based" : "Rectangular", + "en" : "Rectangular" + }, + "attributes" : [ "external" ], + "id" : "143", + "superClasses" : [ "139" ] + }, { + "iri" : "https://w3id.org/pmd/mo/ScanningTransmissionElectronMicroscopy-ElectronEnergyLossSpectroscopy", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "STEM-EELS combines STEM imaging with electron energy loss spectroscopy to provide information about the elemental composition and electronic structure of a sample at high spatial resolution.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "STEM-EELS", + "type" : "label" + } ] + }, + "label" : { + "de" : "Rastertransmissionselektronenmikroskopie Elektronen-Energieverlust-Spektroskopie", + "IRI-based" : "ScanningTransmissionElectronMicroscopy-ElectronEnergyLossSpectroscopy", + "en" : "Scanning Transmission Electron Microscopy Electron Energy Loss Spectroscopy" + }, + "attributes" : [ "external" ], + "id" : "111", + "superClasses" : [ "4" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Role", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-attribute-role", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A role is the function of an entity or agent with respect to an activity, in the context of a usage, generation, invalidation, association, start, and end.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-attribute", + "type" : "label" + } ], + "seeAlso" : [ { + "identifier" : "seeAlso", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#hadRole", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "Role", + "undefined" : "Role" + }, + "subClasses" : [ "701", "631", "642", "812", "704" ], + "attributes" : [ "external" ], + "id" : "281" + }, { + "iri" : "https://w3id.org/pmd/co/MaterialStructure", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Material - Classification by structure.” Wikipedia The Free Encyclopedia, https://en.wikipedia.org/wiki/Material#Classification_by_structure. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The relevant structure of materials has a different length scale depending on the material. The structure and composition of a material can be determined by microscopy or spectroscopy.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Die relevante Struktur von Materialien hat je nach Material eine unterschiedliche Längenskala. Die Struktur und Zusammensetzung eines Materials kann durch Mikroskopie oder Spektroskopie bestimmt werden.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Materialstruktur", + "IRI-based" : "MaterialStructure", + "en" : "Material Structure" + }, + "subClasses" : [ "808", "742", "604" ], + "attributes" : [ "external" ], + "id" : "236", + "superClasses" : [ "187" ] + }, { + "iri" : "https://w3id.org/pmd/co/Pixel", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Pixel.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/pixel. Accessed 1 Dec. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Any of the small discrete elements that together constitute an image.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Pixel", + "IRI-based" : "Pixel", + "en" : "Pixel" + }, + "attributes" : [ "external" ], + "id" : "414", + "superClasses" : [ "395" ] + }, { + "iri" : "https://w3id.org/pmd/mo/TransmissionElectronAberrationCorrectedMicroscope", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A transmission electron microscope equipped with aberration correction to achieve high-resolution imaging.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Ein Transmissions-Elektronenmikroskop mit Aberrationskorrektur zur Erzielung hochauflösender Bilder.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "TEAM", + "type" : "label" + } ] + }, + "label" : { + "de" : "Transmissionselektronen-Aberrations-korrigiertes Mikroskop", + "IRI-based" : "TransmissionElectronAberrationCorrectedMicroscope", + "en" : "Transmission Electron Aberration-corrected Microscope" + }, + "attributes" : [ "external" ], + "id" : "289", + "superClasses" : [ "277" ] + }, { + "iri" : "https://w3id.org/pmd/mo/CryoElectronTomography", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Cryo Electron Tomography is a form of electron tomography that is performed at cryogenic temperatures. It is used to study the three-dimensional structure of frozen-hydrated samples.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "cryo-ET", + "type" : "label" + } ] + }, + "label" : { + "de" : "Kryo-Elektronentomographie", + "IRI-based" : "CryoElectronTomography", + "en" : "Cryo Electron Tomography" + }, + "attributes" : [ "external" ], + "id" : "616", + "superClasses" : [ "17" ] + }, { + "iri" : "https://w3id.org/pmd/co/Grips", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "https://www.merriam-webster.com/dictionary/grips", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This entity describes a part by which something, usually a tangible object, is grasped. Typically, grips are part of a mounting system (processing node) referring to a testing system.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Entität beschreibt ein Bauelement / Teil, mit dem etwas, normalerweise ein materielles Objekt, fest gegriffen oder eingespannt wird. Typischerweise sind Halterungen, Klemm- bzw. Spannsysteme Teil eines Befestigungssystems (Prozessknoten), das sich auf ein Prüfsystem bezieht.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Halterungsklemmen", + "IRI-based" : "Grips", + "en" : "Grips" + }, + "attributes" : [ "external" ], + "id" : "845", + "superClasses" : [ "380" ] + }, { + "iri" : "https://w3id.org/pmd/mo/SoftXRayEmissionSpectrometer", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An instrument used to analyze the emission of soft X-rays from a sample.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Ein Instrument zur Analyse der Emission weicher Röntgenstrahlen aus einer Probe.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "SXES", + "type" : "label" + } ] + }, + "label" : { + "de" : "Röntgenemissionsspektrometer mit weicher Röntgenstrahlung", + "IRI-based" : "SoftXRayEmissionSpectrometer", + "en" : "Soft X-ray Emission Spectrometer" + }, + "attributes" : [ "external" ], + "id" : "706", + "superClasses" : [ "705" ] + }, { + "iri" : "https://w3id.org/pmd/co/MaterialDesignation", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "editorialNote" : [ { + "identifier" : "editorialNote", + "language" : "undefined", + "value" : "former \"Material\" : \"It is a substance or mixture of substances that constitutes an object. represented by the sum of material properties and material structure\"", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "undefined", + "value" : "It is a name or identifier of a material type. It designates a material. \nE.g. \"steel\", \"aluminium\", \"wood\", \"plastic\", \"rubber\".", + "type" : "label" + } ] + }, + "label" : { + "de" : "Materialbezeichnung", + "IRI-based" : "MaterialDesignation", + "en" : "Material Designation" + }, + "attributes" : [ "external" ], + "id" : "274", + "superClasses" : [ "187" ] + }, { + "iri" : "https://w3id.org/pmd/co/MajorAxisDiameter", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The shortest diameter of an ellipse.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Halbachsendurchmesser", + "IRI-based" : "MajorAxisDiameter", + "en" : "Minor axis diameter" + }, + "attributes" : [ "external" ], + "id" : "172", + "superClasses" : [ "170" ] + }, { + "iri" : "https://w3id.org/pmd/co/BaseMaterial", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This entity is used to describe the material that was taken as granted as such and used in the beginning of a process chain under consideration.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Ausgangsmaterial", + "IRI-based" : "BaseMaterial", + "en" : "Base Material" + }, + "attributes" : [ "external" ], + "id" : "793", + "superClasses" : [ "627" ] + }, { + "iri" : "https://w3id.org/pmd/co/DataAcquisitionRate", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Eigenschaft bezeichnet die Anzahl der Messungen / Abfragen pro Zeiteinheit bei einer betrachteten Messung einer Messgröße (Abtast-/Abfragerate bei der Datenerfassung).", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This property denotes the number of measurements / queries per time period for a considered measurement of a measurement parameter (sampling / query rate during data acquisition).", + "type" : "label" + } ] + }, + "label" : { + "de" : "Datenerfassungsrate", + "IRI-based" : "DataAcquisitionRate", + "en" : "Data Acquisition Rate" + }, + "attributes" : [ "external" ], + "id" : "440", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/mo/EmissionCurrent", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "undefined", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Der Strom der von der Elektronenquelle emittierten Elektronen.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "The current of electrons emitted from the electron source.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Emissionsstrom", + "IRI-based" : "EmissionCurrent", + "en" : "Emission Current" + }, + "comment" : { + "de" : "Der Emissionsstrom wird normalerweise in Mikroampere (μA) oder Milliampere (mA) gemessen.", + "undefined" : "The emission current usually measured in microamperes (μA) or milliamperes (mA)." + }, + "attributes" : [ "external" ], + "id" : "851", + "superClasses" : [ "445" ] + }, { + "iri" : "https://w3id.org/pmd/mo/XRayAbsorptionNearEdgeSpectroscopy", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "X-ray Absorption Near Edge Spectroscopy (XANES) is a specialized technique used in the field of materials science and spectroscopy to study the electronic and structural properties of materials. It focuses on the X-ray absorption spectra of atoms within a sample, particularly the region just above the absorption edge of an element's X-ray absorption spectrum.\nIn XANES, a sample is irradiated with X-rays, typically generated by a synchrotron radiation source. These X-rays are tuned to specific energy levels corresponding to the absorption edges of the elements of interest in the sample. As the X-rays are absorbed by the sample, the energy levels of the atoms are altered, leading to various transitions in their electron configurations. The resulting X-ray absorption spectrum is measured, specifically targeting the energies just above the absorption edge.\nXANES provides information about the electronic structure of the atoms within the sample, including the oxidation state, chemical bonding, and local environment of the absorbing element. The fine details of the XANES spectrum offer insights into the atomic and molecular interactions, as well as the coordination and symmetry of atoms in different chemical environments.\nThis technique is widely used in various scientific fields, including chemistry, solid-state physics, and materials science. XANES helps researchers understand the properties and behavior of materials at the atomic level, making it an invaluable tool for investigating the characteristics of complex materials, catalysts, minerals, and biomolecules.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "XANES", + "type" : "label" + } ] + }, + "label" : { + "de" : "Röntgenabsorptionsspektroskopie im Nahbereich", + "IRI-based" : "XRayAbsorptionNearEdgeSpectroscopy", + "en" : "X-ray Absorption Near Edge Spectroscopy" + }, + "attributes" : [ "external" ], + "id" : "147", + "superClasses" : [ "108" ] + }, { + "iri" : "https://w3id.org/pmd/co/OperatorRole", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A role indicating that its bearer participates a process as operator.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "OperatorRole", + "en" : "Operator Role" + }, + "attributes" : [ "external" ], + "id" : "812", + "superClasses" : [ "281" ] + }, { + "iri" : "https://w3id.org/pmd/co/DemountingProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An assembling process in which a test piece or specimen is removed from a test machine.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Demontageprozess", + "IRI-based" : "DemountingProcess", + "en" : "Demounting Process" + }, + "attributes" : [ "external" ], + "id" : "333", + "superClasses" : [ "291" ] + }, { + "iri" : "https://w3id.org/pmd/co/GeometryChangingProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A process that is modifing the geometry of an object.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "GeometryChangingProcess", + "en" : "Geometry Changing Process" + }, + "subClasses" : [ "802" ], + "attributes" : [ "external" ], + "id" : "287", + "superClasses" : [ "38" ] + }, { + "iri" : "https://w3id.org/pmd/mo/InteractionVolume", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Der Bereich innerhalb einer Probe, in dem ein Teilchenstrahl mit dem Material in Wechselwirkung tritt.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "The region within a sample where a particle beam interacts with the material.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Überlagerungsvolumen", + "IRI-based" : "InteractionVolume", + "en" : "Interaction Volume" + }, + "attributes" : [ "external" ], + "id" : "261", + "superClasses" : [ "262" ] + }, { + "iri" : "https://w3id.org/pmd/mo/CryoTransmissionElectronMicroscope", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Ein Transmissionselektronenmikroskop, das bei kryogenen Temperaturen arbeitet.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A transmission electron microscope that operates at cryogenic temperatures.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "cryo-TEM", + "type" : "label" + } ] + }, + "label" : { + "de" : "Kryo-Transmissionselektronenmikroskop", + "IRI-based" : "CryoTransmissionElectronMicroscope", + "en" : "Cryo Transmission Electron Microscope" + }, + "attributes" : [ "external" ], + "id" : "276", + "superClasses" : [ "277" ] + }, { + "iri" : "https://w3id.org/pmd/co/DepartmentRole", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "label" : { + "IRI-based" : "DepartmentRole", + "en" : "Department Role", + "undefined" : "A role indication that an organization is a sub section of another organization." + }, + "attributes" : [ "external" ], + "id" : "701", + "superClasses" : [ "281" ] + }, { + "iri" : "https://w3id.org/pmd/co/EngineeredMaterial", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Ein Material, das im Rahmen eines Herstellungsprozesses synthetisiert wird.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A material that is synthesized within a manufacturing process.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "EngineeredMaterial", + "en" : "Engineered Material" + }, + "subClasses" : [ "611", "793", "655" ], + "attributes" : [ "external" ], + "id" : "627", + "superClasses" : [ "228" ] + }, { + "iri" : "http://www.w3.org/ns/prov#InstantaneousEvent", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The PROV data model is implicitly based on a notion of instantaneous events (or just events), that mark transitions in the world. Events include generation, usage, or invalidation of entities, as well as starting or ending of activities. This notion of event is not first-class in the data model, but it is useful for explaining its other concepts and its semantics.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "constraints" : [ { + "identifier" : "constraints", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-constraints-20130430/#dfn-event", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "InstantaneousEvent", + "undefined" : "InstantaneousEvent" + }, + "subClasses" : [ "329", "552", "603", "335", "339" ], + "comment" : { + "en" : "An instantaneous event, or event for short, happens in the world and marks a change in the world, in its activities and in its entities. The term 'event' is commonly used in process algebra with a similar meaning. Events represent communications or interactions; they are assumed to be atomic and instantaneous." + }, + "attributes" : [ "external" ], + "id" : "411" + }, { + "iri" : "https://w3id.org/pmd/co/ErrorReportDocument", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Entität beschreibt ein Dokument, das Informationen über Fehler bereitstellt, die während der Anwendung eines Prozessknotens aufgetreten sind, wie z. B. eine Überschreitung des Arbeitsbereichs eines Messgeräts.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This entity describes a document used to provide information on errors that occurred during the application of a process node, such as, e.g., an overshooting exceeding the working range of a measurement device.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Fehlerberichtdokument", + "IRI-based" : "ErrorReportDocument", + "en" : "Error Report Document" + }, + "attributes" : [ "external" ], + "id" : "512", + "superClasses" : [ "129" ] + }, { + "iri" : "https://w3id.org/pmd/co/Radiological", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Radiological.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/radiological. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Radiological is relating to radiology. Here specifically to the radiological properties of a material.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Radiologisch bezieht sich auf die Radiologie. Hier speziell auf die radiologischen Eigenschaften eines Materials.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Radiologisch", + "IRI-based" : "Radiological", + "en" : "Radiological" + }, + "attributes" : [ "external" ], + "id" : "189", + "superClasses" : [ "84" ] + }, { + "iri" : "https://w3id.org/pmd/co/PercentageExtension", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "en", + "value" : "(engineering) strain", + "type" : "label" + }, { + "identifier" : "altLabel", + "language" : "de", + "value" : "technische Dehnung", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "in Prozent angegebene Verlängerung der Extensometer-Messlänge\n\nAnmerkung: Die Extensometer-Dehnung wird oftmals auch als technische Dehnung bezeichnet.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "extension expressed as a percentage of the extensometer gauge length\n\nNote: The percentage extension is commonly called engineering strain.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Extensometer-Dehnung", + "IRI-based" : "PercentageExtension", + "en" : "Percentage Extension" + }, + "attributes" : [ "external" ], + "id" : "458", + "superClasses" : [ "436" ] + }, { + "iri" : "https://w3id.org/pmd/co/Micropscope", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Microscope.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/microscope. Accessed 5 Dec. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An optical instrument consisting of a lens or combination of lenses for making enlarged images of minute objects.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Mikroskop", + "IRI-based" : "Micropscope", + "en" : "Microscope" + }, + "subClasses" : [ "675", "554", "357" ], + "attributes" : [ "external" ], + "id" : "654", + "superClasses" : [ "110" ] + }, { + "iri" : "https://w3id.org/pmd/mo/CondensorLense", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A condenser lens is an optical element used in microscopy and other optical systems to focus and control the illumination on the sample being observed. It is positioned below the light source and directs light rays onto the specimen, making the illumination uniform and optimizing the quality of the sample's image. The condenser lens helps enhance contrast, resolution, and overall image quality by ensuring that a consistent and concentrated light beam illuminates the specimen.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Kondensorlinse", + "IRI-based" : "CondensorLense", + "en" : "Condensor Lense" + }, + "attributes" : [ "external" ], + "id" : "717", + "superClasses" : [ "110" ] + }, { + "iri" : "https://w3id.org/pmd/co/LaboratoryRole", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "A role indicating that an organization participates in a process as laboratory.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "LaboratoryRole", + "en" : "Laboratory Role" + }, + "attributes" : [ "external" ], + "id" : "704", + "superClasses" : [ "281" ] + }, { + "iri" : "https://w3id.org/pmd/mo/HighResolutionTransmissionElectronMicroscope", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A transmission electron microscope capable of achieving high-resolution images.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Ein Transmissionselektronenmikroskop, das hochauflösende Bilder liefert.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "HRTEM", + "type" : "label" + } ] + }, + "label" : { + "de" : "Hochauflösendes Transmissionselektronenmikroskop", + "IRI-based" : "HighResolutionTransmissionElectronMicroscope", + "en" : "High Resolution Transmission Electron Microscope" + }, + "attributes" : [ "external" ], + "id" : "285", + "superClasses" : [ "277" ] + }, { + "iri" : "https://w3id.org/pmd/mo/Angle", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "In geometry and trigonometry, an angle is a measure of the amount of rotation needed to bring one line or plane into coincidence with another. An angle is formed by two rays that share a common endpoint, known as the vertex of the angle. The rays are referred to as the sides of the angle. \n\nNote: The concept of an angle is fundamental in geometry and is often used to describe the relative orientation of lines, planes, or surfaces. Angles are typically measured in degrees (°) or radians (rad).", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "In der Geometrie und Trigonometrie ist ein Winkel ein Maß für eine Drehung, das erforderlich ist, um eine Linie oder Ebene mit einer anderen zur Deckung zu bringen. Ein Winkel wird durch zwei Strahlen gebildet, die einen gemeinsamen Endpunkt haben, der als Scheitelpunkt des Winkels bezeichnet wird. Die Strahlen werden als die Seiten des Winkels bezeichnet. \n\nHinweis: Das Konzept des Winkels ist in der Geometrie von grundlegender Bedeutung und wird häufig verwendet, um die relative Ausrichtung von Linien, Ebenen oder Flächen zu beschreiben. Winkel werden in der Regel in Grad (°) oder Bogenmaß (rad) gemessen.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Winkel", + "IRI-based" : "Angle", + "en" : "Angle", + "undefined" : "https://w3id.org/pmd/mo" + }, + "subClasses" : [ "466" ], + "attributes" : [ "external" ], + "id" : "435", + "superClasses" : [ "11" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Agent", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-agent", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An agent is something that bears some form of responsibility for an activity taking place, for the existence of an entity, or for another agent's activity. ", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "starting-point", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-Agent", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Agent", + "undefined" : "Agent" + }, + "subClasses" : [ "67", "110", "25", "668" ], + "attributes" : [ "external" ], + "id" : "68" + }, { + "iri" : "https://w3id.org/pmd/co/Location", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Location.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/location. Accessed 17 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A position or site occupied or available for occupancy or marked by some distinguishing feature.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Eine Position oder ein Ort, der besetzt ist oder besetzt werden kann oder durch ein bestimmtes Merkmal gekennzeichnet ist.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Ort", + "IRI-based" : "Location", + "en" : "Location" + }, + "attributes" : [ "external" ], + "id" : "438", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/mo/FocalPlane", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "undefined", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The plane perpendicular to the optical axis of an electron microscope where the electron beam is focused to form an image.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Die Ebene senkrecht zur optischen Achse eines Elektronenmikroskops, in der der Elektronenstrahl fokussiert wird, um ein Bild zu erzeugen.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Brennebene", + "IRI-based" : "FocalPlane", + "en" : "Focal Plane" + }, + "attributes" : [ "external" ], + "id" : "578", + "superClasses" : [ "416" ] + }, { + "iri" : "https://w3id.org/pmd/co/TestingRate", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "während des Versuchs verwendete Geschwindigkeit(en)", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "rate (resp. rates) used during the test", + "type" : "label" + } ] + }, + "label" : { + "de" : "Prüfgeschwindigkeit", + "IRI-based" : "TestingRate", + "en" : "Testing Rate" + }, + "attributes" : [ "external" ], + "id" : "441", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/mo/PrimaryBeam", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "undefined", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Der Hauptelektronenstrahl, der von der Elektronenquelle ausgesandt und auf die Probe in einem Elektronenmikroskop gerichtet wird.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "The main electron beam emitted from the electron source and directed towards the specimen in an electron microscope.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Primärstrahl", + "IRI-based" : "PrimaryBeam", + "en" : "Primary Beam" + }, + "attributes" : [ "external" ], + "id" : "36", + "superClasses" : [ "22" ] + }, { + "iri" : "https://w3id.org/pmd/co/Operator", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Operator.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/operator. Accessed 24 Nov. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A person that operates a machine or device.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Operator", + "IRI-based" : "Operator", + "en" : "Operator" + }, + "intersection" : [ "67" ], + "attributes" : [ "external", "intersection" ], + "id" : "875" + }, { + "iri" : "https://w3id.org/pmd/co/Department", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A sub section of an organization.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Abteilung", + "IRI-based" : "Department", + "en" : "Department" + }, + "intersection" : [ "25" ], + "attributes" : [ "external", "intersection" ], + "id" : "24", + "superClasses" : [ "25" ] + }, { + "iri" : "https://w3id.org/pmd/mo/Aberration", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Deviation from the ideal or expected behavior, often used in the context of optical systems.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Abweichung vom idealen oder erwarteten Verhalten, häufig im Zusammenhang mit optischen Systemen verwendet.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Aberration", + "IRI-based" : "Aberration", + "en" : "Aberration" + }, + "subClasses" : [ "548", "550" ], + "attributes" : [ "external" ], + "id" : "449", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/MicrometerGauge", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "https://www.merriam-webster.com/dictionary/micrometer%20caliper", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Entität beschreibt ein Werkzeug zur Durchführung präziser Messungen mit einer Spindel, die durch eine Feingewindeschraube bewegt wird.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This entity describes a tool for making precise measurements having a spindle moved by a finely threaded screw.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Bügelmessschraube", + "IRI-based" : "MicrometerGauge", + "en" : "Micrometer Gauge" + }, + "attributes" : [ "external" ], + "id" : "619", + "superClasses" : [ "176" ] + }, { + "iri" : "https://w3id.org/pmd/co/TestPieceInfo", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This property is used to provide information on a test piece such as its geometric shape, classification, and other parameters, including specifications and nominal values. The information is provided with respect to corresponding standards.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Eigenschaft wird verwendet, um Informationen über einen Prüfkörper zu liefern, wie z. B. seine geometrische Form, seine Klassifizierung und andere Parameter, einschließlich von Spezifikationen und Nennwerte. Die Informationen werden in Bezug auf die entsprechenden Normen bereitgestellt.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Prüfkörperinformationen", + "IRI-based" : "TestPieceInfo", + "en" : "Test Piece Info" + }, + "subClasses" : [ "485" ], + "attributes" : [ "external" ], + "id" : "218", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/BondingType", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "\"Bond types.” American Heritage® Dictionary of the English Language, Fifth Edition, https://www.thefreedictionary.com/Bond+Types. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Any of several forces, especially the ionic bond, covalent bond, and metallic bond, by which atoms or ions are bound in a molecule or crystal.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Eine von mehreren Bindungen, insbesondere die Ionenbindung, die kovalente Bindung und die Metallbindung, durch die Atome oder Ionen in einem Molekül oder Kristall gebunden sind.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Bindungstyp", + "IRI-based" : "BondingType", + "en" : "BondingType" + }, + "subClasses" : [ "489", "492", "495", "497", "501" ], + "attributes" : [ "external" ], + "id" : "247", + "superClasses" : [ "187" ] + }, { + "iri" : "https://w3id.org/pmd/mo/PixelSize", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The size of individual pixels in a digital image or display.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Die Größe der einzelnen Pixel in einem digitalen Bild oder einer Anzeige.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "PixelSize", + "en" : "Pixelgröße" + }, + "attributes" : [ "external" ], + "id" : "423", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/mo/CoherentBeam", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "undefined", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An electron beam in which the individual electrons maintain a constant phase relationship with each other, resulting in interference patterns when interacting with a sample.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Ein Elektronenstrahl, bei dem die einzelnen Elektronen eine konstante Phasenbeziehung zueinander haben, was bei der Wechselwirkung mit einer Probe zu Interferenzmustern führt.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Kohärenter Strahl", + "IRI-based" : "CoherentBeam", + "en" : "Coherent Beam" + }, + "attributes" : [ "external" ], + "id" : "384", + "superClasses" : [ "22" ] + }, { + "iri" : "https://w3id.org/pmd/co/Roughness", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "https://en.wikipedia.org/wiki/Surface_roughness", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Surface roughness, often shortened to roughness, is a component of surface finish (surface texture). It is quantified by the deviations in the direction of the normal vector of a real surface from its ideal form. If these deviations are large, the surface is rough; if they are small, the surface is smooth.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Die Oberflächenrauheit, oft abgekürzt als Rauheit, ist eine Komponente zur Beschreibung der Oberflächenbeschaffenheit (Oberflächentextur). Sie wird durch die Abweichungen in der Richtung des Normalenvektors einer realen Oberfläche von ihrer idealen Form quantifiziert. Sind diese Abweichungen groß, ist die Oberfläche rau (große Rauheit), sind sie klein, ist die Oberfläche glatt (geringe Rauheit).", + "type" : "label" + } ] + }, + "label" : { + "de" : "Oberflächenrauheit", + "IRI-based" : "Roughness", + "en" : "Roughness" + }, + "attributes" : [ "external" ], + "id" : "428", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/mo/EnvironmentalScanningElectronMicroscope", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Eine Art Elektronenmikroskop, das nicht leitende Proben in ihrem natürlichen Zustand abbilden kann.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A type of electron microscope that can image non-conductive samples in their natural state.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "ESEM", + "type" : "label" + } ] + }, + "label" : { + "de" : "Umwelt-Rasterelektronenmikroskop", + "IRI-based" : "EnvironmentalScanningElectronMicroscope", + "en" : "Environmental Scanning Electron Microscope" + }, + "attributes" : [ "external" ], + "id" : "164", + "superClasses" : [ "165" ] + }, { + "iri" : "https://w3id.org/pmd/mo/EnvironmentalScanningElectronMicroscopy", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Environmental Scanning Electron Microscopy is a technique that allows imaging of samples in a gaseous environment. It is particularly useful for observing hydrated or non-conductive samples without the need for extensive sample preparation.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "ESEM", + "type" : "label" + } ] + }, + "label" : { + "de" : "Umgebungs-Rasterelektronenmikroskopie", + "IRI-based" : "EnvironmentalScanningElectronMicroscopy", + "en" : "Environmental Scanning Electron Microscopy" + }, + "attributes" : [ "external" ], + "id" : "97", + "superClasses" : [ "89" ] + }, { + "iri" : "https://w3id.org/pmd/co/MicroscopyProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Microscopy.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/microscopy. Accessed 24 Nov. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An analysing process in which an investigation is made with a microscope.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Mikroskopie", + "IRI-based" : "MicroscopyProcess", + "en" : "Microscopy Process" + }, + "subClasses" : [ "44", "182", "184" ], + "attributes" : [ "external" ], + "id" : "45", + "superClasses" : [ "2" ] + }, { + "iri" : "https://w3id.org/pmd/co/SequenceNumber", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Strict monotonically increasing integer that indicates the position in an ordered list.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Sequenznummer", + "IRI-based" : "SequenceNumber", + "en" : "Sequence Number" + }, + "attributes" : [ "external" ], + "id" : "610", + "superClasses" : [ "76" ] + }, { + "iri" : "https://w3id.org/pmd/co/TransformativeAnalysisProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An analysis process that is transformative.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Transformativer Analyseprozess", + "IRI-based" : "TransformativeAnalysisProcess", + "en" : "Transformative Analysis Process" + }, + "attributes" : [ "external" ], + "id" : "99", + "superClasses" : [ "2" ] + }, { + "iri" : "https://w3id.org/pmd/mo/Cathode", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The cathode is the negatively charged electrode in an electrochemical cell or other electrical systems. It is the site where reduction occurs, leading to the acceptance of electrons from the external circuit. In batteries, for instance, the cathode is where electrons are consumed during the discharge process.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Kathode", + "IRI-based" : "Cathode", + "en" : "Cathode" + }, + "attributes" : [ "external" ], + "id" : "759", + "superClasses" : [ "419" ] + }, { + "iri" : "https://w3id.org/pmd/co/LengthChangingProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A geometry changing process which changes the length characteristic of an object.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "LengthChangingProcess", + "en" : "Length Changing Process" + }, + "comment" : { + "undefined" : "This class is used as an example of SWRL based reasoning. An instance belongs to the class if there are two embracing processes (previous and next) that determine different values after a length measurement (see SWRL rule)." + }, + "attributes" : [ "external" ], + "id" : "802", + "superClasses" : [ "287" ] + }, { + "iri" : "https://w3id.org/pmd/co/Metadata", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This data scope expresses that a :ValueObject refers to attributes and additional data (provenance) on production, laboratory, process system and objects that enable an evaluation of the quality/reliability of the measurements and a systematic search task in a database.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Die DataScope Metadaten umfassen Attribute und zusätzliche Daten (Provenienz), die z.B. die Fabrik, das Labor, das Prozesssystem und die Objekte betreffen und die eine Bewertung der Qualität / Zuverlässigkeit der Messungen und eine systematische Suche in einer Datenbank ermöglichen.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Metadaten", + "IRI-based" : "Metadata", + "en" : "Metadata" + }, + "attributes" : [ "external" ], + "id" : "253", + "superClasses" : [ "250", "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/GripsAlignment", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Klasse beschreibt den Prozess der Ausrichtung von Halterungen, die zum Fest-/Einspannen eines materiellen Objekts, wie z. B. einer Probe, eines Prüfkörpers oder eines Prüfstücks, verwendet werden. Dieser Vorgang ist in der Regel Teil des Montageprozesses während der Prüfung, falls ein solcher durchgeführt wird.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "An assembly process in which the grips used to grasp a tangible object, such as a sample, specimen or test piece, are arranged in a line. This process is usually part of the assembly process during testing, if applicable.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Ausrichtung Der Halterungen", + "IRI-based" : "GripsAlignment", + "en" : "Grips Alignment" + }, + "attributes" : [ "external" ], + "id" : "337", + "superClasses" : [ "291" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Plan", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-Association", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "undefined", + "value" : "A plan is an entity that represents a set of actions or steps intended by one or more agents to achieve some goals.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + }, { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-Association", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Plan", + "undefined" : "Plan" + }, + "comment" : { + "en" : "There exist no prescriptive requirement on the nature of plans, their representation, the actions or steps they consist of, or their intended goals. Since plans may evolve over time, it may become necessary to track their provenance, so plans themselves are entities. Representing the plan explicitly in the provenance can be useful for various tasks: for example, to validate the execution as represented in the provenance record, to manage expectation failures, or to provide explanations." + }, + "attributes" : [ "external" ], + "id" : "369", + "superClasses" : [ "220" ] + }, { + "iri" : "https://w3id.org/pmd/mo/Spectroscopy", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "prefLabel" : [ { + "identifier" : "prefLabel", + "language" : "en", + "value" : "Spectroscopy", + "type" : "label" + }, { + "identifier" : "prefLabel", + "language" : "de", + "value" : "Spektroskopie", + "type" : "label" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "de", + "value" : "Spektrometrie", + "type" : "label" + }, { + "identifier" : "altLabel", + "language" : "en", + "value" : "Spectrometry", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Spectroscopy is a scientific technique used to study and analyze the interaction of matter with electromagnetic radiation, such as light. It involves measuring the way in which different substances absorb, emit, or scatter light at various wavelengths or frequencies. By examining the spectrum of light emitted, absorbed, or transmitted by a sample, scientists can gain insights into its chemical composition, molecular structure, and physical properties. Spectroscopy is widely utilized in various fields, including chemistry, physics, astronomy, and biochemistry, to investigate the characteristics and behavior of materials at the atomic and molecular level.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Spectroscopy" + }, + "subClasses" : [ "145", "147", "149", "151", "153", "124" ], + "attributes" : [ "external" ], + "id" : "108", + "superClasses" : [ "2" ] + }, { + "iri" : "https://w3id.org/pmd/co/TemperatureChangeDevice", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Entität beschreibt allgemein jedes Werkzeug, das zur Änderung und Einstellung der Temperatur eines materiellen Objekts oder der Umgebung verwendet wird, z. B. einen Ofen und Kühlmittel.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This entity generically describes any tool that is used for the alteration and adjustment of the temperature of a tangible object or the environment, e.g., a furnace and cooling media.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Temperaturänderungswerkzeug", + "IRI-based" : "TemperatureChangeDevice", + "en" : "Temperature Change Device" + }, + "attributes" : [ "external" ], + "id" : "841", + "superClasses" : [ "620" ] + }, { + "iri" : "https://w3id.org/pmd/mo/FieldEmissionScanningElectronMicroscopy", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Field Emission Scanning Electron Microscopy is an advanced form of SEM that uses a field emitter to produce a highly focused electron beam, enabling high-resolution imaging and surface analysis.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "FESEM", + "type" : "label" + } ] + }, + "label" : { + "de" : "Feldemissions-Rasterelektronenmikroskopie", + "IRI-based" : "FieldEmissionScanningElectronMicroscopy", + "en" : "Field Emission Scanning Electron Microscopy" + }, + "attributes" : [ "external" ], + "id" : "88", + "superClasses" : [ "89" ] + }, { + "iri" : "https://w3id.org/pmd/co/Algorithm", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Algorithm.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/algorithm. Accessed 24 Nov. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A procedure for solving a mathematical problem (as of finding the greatest common divisor) in a finite number of steps that frequently involves repetition of an operation.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Algorithmus", + "IRI-based" : "Algorithm", + "en" : "Algorithm" + }, + "subClasses" : [ "73", "82" ], + "attributes" : [ "external" ], + "id" : "74", + "superClasses" : [ "430" ] + }, { + "iri" : "http://w3id.org/DMI/DigitalMaterialIdentifier", + "baseIri" : "http://w3id.org/DMI", + "instances" : 0, + "annotations" : { + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A dmi:DigitalMaterialIdentifier is a resource identifier (IRI) that represents the specification of a material (in the sense of a material class) described in a specification document. The specification document can be, e.g., a standard, a datasheet, or any other citable document. Typically, a specification document requires some qualities that a material (in the sense of a portion of matter) has to comply with. Typical requirements include chemical compositions or physical properties.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Digital Material Identifier", + "IRI-based" : "DigitalMaterialIdentifier", + "en" : "Digital Material Identifier" + }, + "attributes" : [ "external" ], + "id" : "888" + }, { + "iri" : "https://w3id.org/pmd/co/Radius", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Radius.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/radius. Accessed 5 Dec. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A line segment extending from the center of a circle or sphere to the circumference or bounding surface.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Radius", + "IRI-based" : "Radius", + "en" : "Radius" + }, + "attributes" : [ "external" ], + "id" : "431", + "superClasses" : [ "11" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Generation", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasGeneratedBy", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-Generation", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Generation is the completion of production of a new entity by an activity. This entity did not exist before generation and becomes available for usage after this generation.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "constraints" : [ { + "identifier" : "constraints", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-constraints-20130430/#prov-dm-constraints-fig", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-Generation", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Generation", + "undefined" : "Generation" + }, + "comment" : { + "en" : "An instance of prov:Generation provides additional descriptions about the binary prov:wasGeneratedBy relation from a generated prov:Entity to the prov:Activity that generated it. For example, :cake prov:wasGeneratedBy :baking; prov:qualifiedGeneration [ a prov:Generation; prov:activity :baking; :foo :bar ]." + }, + "attributes" : [ "external" ], + "id" : "552", + "superClasses" : [ "411", "309" ] + }, { + "iri" : "https://w3id.org/pmd/co/Description", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "undefined", + "value" : "A descriptive text qualifying the nature of a thing (e.g. agent, activity, entity, object, ...).", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Ein beschreibender Text, der die Natur / Beschaffenheit / Informationen zu einer Entität qualifiziert (z.B. Aktivitäten, Entitäten, Objekten, ...).", + "type" : "label" + } ] + }, + "label" : { + "de" : "Beschreibung", + "IRI-based" : "Description", + "en" : "Description" + }, + "subClasses" : [ "360" ], + "attributes" : [ "external" ], + "id" : "361", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/mo/EnergyLoss", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Der Energieverlust, den ein Teilchen beim Durchgang durch ein Medium erfährt.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "The loss of energy experienced by a particle as it passes through a medium.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Energieverlust", + "IRI-based" : "EnergyLoss", + "en" : "Energy Loss" + }, + "attributes" : [ "external" ], + "id" : "133", + "superClasses" : [ "71" ] + }, { + "iri" : "http://www.w3.org/ns/prov#AgentInfluence", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "editorsDefinition" : [ { + "identifier" : "editorsDefinition", + "language" : "en", + "value" : "AgentInfluence is the capacity of an agent to have an effect on the character, development, or behavior of another by means of attribution, association, delegation, or other.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "seeAlso" : [ { + "identifier" : "seeAlso", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#agent", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "AgentInfluence", + "undefined" : "AgentInfluence" + }, + "subClasses" : [ "364", "367", "371" ], + "comment" : { + "en" : "AgentInfluence provides additional descriptions of an Agent's binary influence upon any other kind of resource. Instances of AgentInfluence use the prov:agent property to cite the influencing Agent." + }, + "attributes" : [ "external" ], + "id" : "119", + "superClasses" : [ "7" ] + }, { + "iri" : "http://www.w3.org/ns/prov#EntityInfluence", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "editorsDefinition" : [ { + "identifier" : "editorsDefinition", + "language" : "en", + "value" : "EntityInfluence is the capacity of an entity to have an effect on the character, development, or behavior of another by means of usage, start, end, derivation, or other. ", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "seeAlso" : [ { + "identifier" : "seeAlso", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#entity", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "EntityInfluence", + "undefined" : "EntityInfluence" + }, + "subClasses" : [ "329", "331", "335", "339" ], + "comment" : { + "en" : "EntityInfluence provides additional descriptions of an Entity's binary influence upon any other kind of resource. Instances of EntityInfluence use the prov:entity property to cite the influencing Entity." + }, + "attributes" : [ "external" ], + "id" : "306", + "superClasses" : [ "7" ] + }, { + "iri" : "https://w3id.org/pmd/co/Stress", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "symbol" : [ { + "identifier" : "symbol", + "language" : "en", + "value" : "R", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Dimensional Analysis: \nML*-1T*-2", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Kraft zu einem beliebigen Zeitpunkt während des Versuchs dividiert durch den Anfangsquerschnitt (S_o) der Probe\n\nAnmerkung: Mit dem Begriff Spannung ist hier die technische Spannung ('Ingenieur-Spannung') gemeint.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "At any moment during the test, force divided by the original cross-sectional area, S_o, of the test piece\n\nNote: Here, all references to stress are to engineering stress.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Units: Pa (SI), psi", + "type" : "label" + } ] + }, + "label" : { + "de" : "Spannung", + "IRI-based" : "Stress", + "en" : "Stress" + }, + "subClasses" : [ "343", "352" ], + "attributes" : [ "external" ], + "id" : "344", + "superClasses" : [ "11" ] + }, { + "iri" : "http://www.w3.org/ns/prov#SoftwareAgent", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-agent", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A software agent is running software.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-types", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "SoftwareAgent", + "undefined" : "SoftwareAgent" + }, + "attributes" : [ "external" ], + "id" : "668", + "superClasses" : [ "68" ] + }, { + "iri" : "https://w3id.org/pmd/mo/ConfocalLaserScanningMicroscopy", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Confocal Laser Scanning Microscopy (CLSM) is an optical imaging technique that enhances resolution and eliminates out-of-focus blur by using a spatial pinhole and laser illumination. A focused laser beam is scanned across the sample's surface or depth, and only the light emitted from the focal plane (or a defined section) passes through the pinhole to form an image. CLSM provides high-resolution three-dimensional images, making it popular for biological imaging and studying fluorescently labeled samples.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "CLSM", + "type" : "label" + } ] + }, + "label" : { + "de" : "Konfokale Laser-Scanning-Mikroskopie", + "IRI-based" : "ConfocalLaserScanningMicroscopy", + "en" : "Confocal Laser Scanning Microscopy" + }, + "attributes" : [ "external" ], + "id" : "696", + "superClasses" : [ "46" ] + }, { + "iri" : "https://w3id.org/pmd/co/NodeInfo", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Descriptive values to specify a processing node.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Knoteninformation", + "IRI-based" : "NodeInfo", + "en" : "Node Info" + }, + "subClasses" : [ "297", "77", "265", "78", "136", "231", "234" ], + "attributes" : [ "external" ], + "id" : "232", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/TestPiece", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "EN 10021:2006-12 (European standardization committee: CEN/TC 459/SC 12/WG 4)", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Teil einer Probe mit bestimmten Dimensionen, bearbeitet oder unbearbeitet, der in einen erforderlichen Zustand gebracht wird, um einer bestimmten Prüfung unterzogen zu werden.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Part of a sample with specified dimensions, machined or un-machined, brought to a required condition for submission to a given test.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Prüfkörper", + "IRI-based" : "TestPiece", + "en" : "Test Piece" + }, + "attributes" : [ "external" ], + "id" : "400", + "superClasses" : [ "611" ] + }, { + "iri" : "https://w3id.org/pmd/co/Optical", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Optical.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/optical. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Optical is relating to the science of optics. Here specifically to the optical properties of a material.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Optisch bezieht sich auf die Wissenschaft der Optik. Hier speziell auf die optischen Eigenschaften eines Materials.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Optisch", + "IRI-based" : "Optical", + "en" : "Optical" + }, + "attributes" : [ "external" ], + "id" : "191", + "superClasses" : [ "84" ] + }, { + "iri" : "https://w3id.org/pmd/mo/Cryo-ScanningElectronMicroscope", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A type of electron microscope that operates under cryogenic temperatures.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Kryo-Rasterelektronenmikroskop", + "IRI-based" : "Cryo-ScanningElectronMicroscope", + "en" : "cryo-SEM" + }, + "comment" : { + "de" : "Eine Art Elektronenmikroskop, das bei kryogenen Temperaturen arbeitet.", + "en" : "A cryo-scanning electron microscope is typically used for imaging biological samples." + }, + "attributes" : [ "external" ], + "id" : "198", + "superClasses" : [ "165" ] + }, { + "iri" : "https://w3id.org/pmd/mo/BeamPath", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "undefined", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "de", + "value" : "Strahlenweg", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Die Flugbahn des Elektronenstrahls auf seinem Weg durch das Elektronenmikroskop von der Elektronenquelle zur Probe und dann zum Detektor.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "The trajectory followed by the electron beam as it travels through the electron microscope, from the electron source to the specimen and then to the detector.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Strahlengang", + "IRI-based" : "BeamPath", + "en" : "Beam Path" + }, + "attributes" : [ "external" ], + "id" : "757", + "superClasses" : [ "228" ] + }, { + "iri" : "https://w3id.org/pmd/mo/ElectronEnergyLossSpectroscopy", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Electron Energy Loss Spectroscopy (EELS) is a specialized analytical technique in the field of materials science and electron microscopy. It involves the measurement of the energy loss of electrons as they interact with a sample. EELS is commonly performed in transmission electron microscopy (TEM) setups.\nIn EELS, a focused beam of high-energy electrons is directed at a sample. As these electrons pass through the material, they can lose energy through various interactions, such as inelastic scattering and excitation of inner-shell electrons. The energy loss is measured and analyzed to gain information about the sample's composition, electronic structure, and bonding characteristics.\nBy studying the energy loss spectrum, researchers can identify the types of atoms present in the sample, determine their chemical states, and gather insights into the electronic properties of the material. EELS is particularly useful for investigating nanoscale materials, thin films, and interfaces, providing valuable information about their electronic and atomic structure. It is a powerful technique for understanding the behavior of materials at the nanometer scale and plays a significant role in advancing fields such as materials science, nanotechnology, and semiconductor research.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "EELS", + "type" : "label" + } ] + }, + "label" : { + "de" : "Elektronenenergieverlustspektroskopie", + "IRI-based" : "ElectronEnergyLossSpectroscopy", + "en" : "Electron Energy Loss Spectroscopy" + }, + "attributes" : [ "external" ], + "id" : "153", + "superClasses" : [ "108" ] + }, { + "iri" : "https://w3id.org/pmd/mo/BrightFieldTransmissionElectronMicroscopy", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Bright Field TEM is an imaging mode in transmission electron microscopy where regions of the sample that scatter electrons less appear brighter in the resulting image.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "BFTEM", + "type" : "label" + } ] + }, + "label" : { + "de" : "Hellfeld-Transmissionselektronenmikroskopie", + "IRI-based" : "BrightFieldTransmissionElectronMicroscopy", + "en" : "Bright Field Transmission Electron Microscopy" + }, + "attributes" : [ "external" ], + "id" : "56", + "superClasses" : [ "5" ] + }, { + "iri" : "https://w3id.org/pmd/co/VolumeFraction", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This value object describes one of several portions of the property of a body that is a measure of the amount of material it contains and causes it to have volume.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Volumen Anteil", + "IRI-based" : "VolumeFraction", + "en" : "Volume Fraction" + }, + "attributes" : [ "external" ], + "id" : "818", + "superClasses" : [ "426" ] + }, { + "iri" : "https://w3id.org/pmd/co/Precision", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Precision.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/precision. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The degree of refinement with which an operation is performed or a measurement stated.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Der Grad der Verfeinerung, mit dem eine Operation durchgeführt oder eine Messung angegeben wird.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Genauigkeit", + "IRI-based" : "Precision", + "en" : "Precision" + }, + "attributes" : [ "external" ], + "id" : "447", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/DataScope", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This class is used to categorize data with respect to their intended usage in accordance with a regarded object or process.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Die Entität Datenkategorie dient der Kategorisierung von Daten im Hinblick auf ihren Verwendungszweck in Übereinstimmung mit einem betrachteten Objekt oder Prozess.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Datenkategorie", + "IRI-based" : "DataScope", + "en" : "Data Scope" + }, + "subClasses" : [ "249", "253", "257" ], + "attributes" : [ "external" ], + "id" : "250", + "superClasses" : [ "220" ] + }, { + "iri" : "https://w3id.org/pmd/mo/Volume", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Die Menge an Raum, die ein Stoff oder Gegenstand einnimmt.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "The amount of space that a substance or object occupies.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Volumen", + "IRI-based" : "Volume", + "en" : "Volume" + }, + "subClasses" : [ "261" ], + "attributes" : [ "external" ], + "id" : "262", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/SetPoint", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "https://en.wikipedia.org/wiki/Setpoint_(control_system)", + "type" : "label" + }, { + "identifier" : "definitionSource", + "language" : "de", + "value" : "https://de.wikipedia.org/wiki/Sollwert", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The ValueScope Setpoint generally refers to the desired value of a quantitative characteristic of a system, from which the actual value should deviate as little as possible.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Sollwert bezeichnet allgemein den angestrebten Wert eines quantitativen Merkmales eines Systems, von dem der tatsächliche Istwert so wenig wie möglich abweichen soll. Der Sollwert wird von einem anderen System (z. B. Technik, Mensch) vorgegeben.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Die Wertekategorie Sollwert bezeichnet allgemein den gewünschten Wert eines quantitativen Merkmals eines Systems, von dem der Istwert möglichst wenig abweichen soll.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This value scope expresses that a :ValueObject is the desired or target value for an essential variable, or process value (PV) of a control system.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Sollwert", + "IRI-based" : "SetPoint", + "en" : "Set Point" + }, + "attributes" : [ "external" ], + "id" : "576", + "superClasses" : [ "373" ] + }, { + "iri" : "https://w3id.org/pmd/mo/Resolution", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "In various contexts, resolution refers to the degree of detail that can be discerned in an image, measurement, or other representation of an object or phenomenon.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "In verschiedenen Zusammenhängen bezieht sich die Auflösung auf den Grad der Detailgenauigkeit, die in einem Bild, einer Messung oder einer anderen Darstellung eines Objekts oder Phänomens erkennbar ist.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Auflösung", + "IRI-based" : "Resolution", + "en" : "Resolution" + }, + "subClasses" : [ "211", "202", "858" ], + "attributes" : [ "external" ], + "id" : "203", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/Extensometer", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Extensometer.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/extensometer. Accessed 5 Dec. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An instrument for measuring minute deformations of test specimens caused by tension, compression, bending, or twisting.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Extensometer", + "en" : "Extensometer" + }, + "attributes" : [ "external" ], + "id" : "618", + "superClasses" : [ "176" ] + }, { + "iri" : "https://w3id.org/pmd/mo/Voltage", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "de", + "value" : "Stromspannung", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Die Spannung, auch elektrische Potentialdifferenz, ist ein Maß für die elektrische potentielle Energie pro Ladungseinheit in einem elektrischen Stromkreis. Sie ist die Kraft, die den elektrischen Strom durch einen Leiter treibt. \n\nHinweis: Die Spannung wird in Volt (V) gemessen und stellt die potenzielle Energiedifferenz zwischen zwei Punkten in einem Stromkreis dar. Je höher die Spannung ist, desto größer ist die Kraft, die die elektrischen Ladungen antreibt, und desto höher ist folglich auch das Potenzial für einen Stromfluss.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Voltage, also known as electric potential difference, is a measure of the electric potential energy per unit charge in an electrical circuit. It is the force or pressure that drives electric current through a conductor. \n\nNote: Voltage is measured in volts (V), and it represents the potential energy difference between two points in a circuit. The higher the voltage, the greater the force pushing the electric charges, and consequently, the higher the potential for current to flow.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Spannung", + "IRI-based" : "Voltage", + "en" : "Voltage" + }, + "subClasses" : [ "612", "161" ], + "attributes" : [ "external" ], + "id" : "162", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/Component", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Ein Objekt, das einer bestimmten technischen Anwendung dient. Bestandteil einer Zusammensetzung von Teilen, die eine technische Anwendung bilden.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "An object that serves a specific technical application. Constituent part of a compound of parts that builds a technical application.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Komponente", + "IRI-based" : "Component", + "en" : "Component" + }, + "subClasses" : [ "845", "379" ], + "attributes" : [ "external" ], + "id" : "380", + "superClasses" : [ "228" ] + }, { + "iri" : "https://w3id.org/pmd/co/ChemicalObject", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Value object that describes the quantity (e.g. mass fraction) of a specific chemical object.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Chemisches Objekt", + "IRI-based" : "ChemicalObject", + "en" : "Chemical Object" + }, + "intersection" : [ "11" ], + "attributes" : [ "external", "intersection" ], + "id" : "422", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/NodeSeries", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "de", + "value" : "Knotentyp", + "type" : "label" + }, { + "identifier" : "altLabel", + "language" : "en", + "value" : "Node Type", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Processing Node typename, e.g. \"ProTherm500\"", + "type" : "label" + } ] + }, + "label" : { + "de" : "Serie", + "IRI-based" : "NodeSeries", + "en" : "Node Series" + }, + "attributes" : [ "external" ], + "id" : "265", + "superClasses" : [ "232" ] + }, { + "iri" : "https://w3id.org/pmd/mo/AtomicResolution", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The ability to resolve individual atoms in an image or structure.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Die Fähigkeit, einzelne Atome in einem Bild oder einer Struktur aufzulösen.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Atomare Auflösung", + "IRI-based" : "AtomicResolution", + "en" : "Atomic Resolution" + }, + "attributes" : [ "external" ], + "id" : "858", + "superClasses" : [ "203" ] + }, { + "iri" : "https://w3id.org/pmd/mo/XRayAbsorptionSpectroscopy", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "X-ray Absorption Spectroscopy is a technique used to study the electronic and local structural properties of materials by analyzing the absorption of X-rays. It involves measuring how X-rays are absorbed by a sample at various energies, providing insights into the electronic states and chemical environments of specific elements.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "XAS", + "type" : "label" + } ] + }, + "label" : { + "de" : "Röntgenabsorptionsspektroskopie", + "IRI-based" : "XRayAbsorptionSpectroscopy", + "en" : "X-ray Absorption Spectroscopy" + }, + "attributes" : [ "external" ], + "id" : "535", + "superClasses" : [ "196" ] + }, { + "iri" : "https://w3id.org/pmd/co/PixelDensity", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The pixel density of an electronic image device.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Pixeldichte", + "IRI-based" : "PixelDensity", + "en" : "Pixel density" + }, + "attributes" : [ "external" ], + "id" : "437", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/mo/HighResolutionTransmissionElectronMicroscopy", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "High Resolution TEM is a technique that provides exceptionally high-resolution images of a sample's internal structure, revealing atomic-level details.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "HRTEM", + "type" : "label" + } ] + }, + "label" : { + "de" : "Hochauflösende Transmissionselektronenmikroskopie", + "IRI-based" : "HighResolutionTransmissionElectronMicroscopy", + "en" : "High Resolution Transmission Electron Microscopy" + }, + "attributes" : [ "external" ], + "id" : "51", + "superClasses" : [ "5" ] + }, { + "iri" : "https://w3id.org/pmd/mo/CameraLength", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "Camera Length", + "type" : "label" + }, { + "identifier" : "definitionSource", + "language" : "de", + "value" : "Kameralänge", + "type" : "label" + }, { + "identifier" : "definitionSource", + "language" : "undefined", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Der Abstand zwischen der Probe und der Kamera, die zur Aufnahme von Bildern in einem Elektronenmikroskop verwendet wird.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "The distance between the specimen and the camera used to capture images in an electron microscope.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "CameraLength" + }, + "attributes" : [ "external" ], + "id" : "322", + "superClasses" : [ "321" ] + }, { + "iri" : "https://w3id.org/pmd/co/CollectionInterfaceHint", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A label in support of identifying a network interface and/or address used by a process node to provide primary data stored in ontologies", + "type" : "label" + } ] + }, + "label" : { + "de" : "Datenschnittstellenhinweis", + "IRI-based" : "CollectionInterfaceHint", + "en" : "Collection Interface Hint" + }, + "attributes" : [ "external" ], + "id" : "297", + "superClasses" : [ "232" ] + }, { + "iri" : "https://w3id.org/pmd/mo/Current", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Der Fluss der elektrischen Ladung.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "The flow of electric charge.", + "type" : "label" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "de", + "value" : "Stromstärke", + "type" : "label" + } ] + }, + "label" : { + "de" : "Strom", + "IRI-based" : "Current", + "en" : "Current" + }, + "subClasses" : [ "594", "851", "824", "830" ], + "comment" : { + "de" : "Der Strom wird normalerweise in Ampere (A) gemessen.", + "en" : "The current is typically measured in amperes (A)." + }, + "attributes" : [ "external" ], + "id" : "445", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/mo/FourierTransformInfraredSpectroscopy", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Fourier Transform Infrared Spectroscopy (FTIR) is a powerful analytical technique used in various scientific disciplines to study the molecular composition and properties of materials. It is based on the interaction between infrared radiation and a sample, providing information about the vibrational modes of molecules.\nIn FTIR spectroscopy, an infrared beam is directed through a sample, and the interaction between the radiation and the sample's molecules leads to absorption of specific infrared frequencies. Each type of molecular bond and functional group in the sample absorbs infrared radiation at characteristic frequencies, which correspond to the energies of molecular vibrations. The resulting absorption spectrum represents a fingerprint of the sample's molecular structure.\nThe Fourier transform technique is used to convert the raw data obtained from the absorption measurements into a Fourier-transformed spectrum. This transformation improves the signal-to-noise ratio and enhances the accuracy of spectral analysis.\nFTIR is extensively used in a wide range of fields, including chemistry, biology, materials science, pharmaceuticals, and environmental science. It is employed for qualitative and quantitative analysis, identification of compounds, monitoring chemical reactions, and studying molecular interactions. FTIR spectroscopy provides valuable insights into molecular bonding, functional groups, and the chemical composition of substances, making it an indispensable tool in modern analytical science.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "FTIR", + "type" : "label" + } ] + }, + "label" : { + "de" : "Fourier-Transformations-Infrarotspektroskopie", + "IRI-based" : "FourierTransformInfraredSpectroscopy", + "en" : "Fourier Transform Infrared Spectroscopy" + }, + "attributes" : [ "external" ], + "id" : "124", + "superClasses" : [ "108" ] + }, { + "iri" : "https://w3id.org/pmd/co/DigitalEntity", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An entity with digital representation.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "DigitalEntity", + "en" : "Digital Entity" + }, + "subClasses" : [ "692", "158", "789", "660", "676", "414", "783" ], + "attributes" : [ "external" ], + "id" : "395", + "superClasses" : [ "220" ] + }, { + "iri" : "https://w3id.org/pmd/co/WorkingRange", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This property describes the region between the limits within which a processing node (e.g., a machine) is capable of being used for its intended purpose, expressed by stating the lower and upper range values of interest.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Eigenschaft beschreibt den Bereich zwischen den Grenzen, innerhalb derer ein Prozessknoten (z. B. eine Maschine) für ihren vorgesehenen Zweck verwendet werden kann, ausgedrückt durch die Angabe der in Rede stehenden unteren und oberen Bereichswerte.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Arbeitsbereich", + "IRI-based" : "WorkingRange", + "en" : "Working Range" + }, + "attributes" : [ "external" ], + "id" : "448", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/mo/SecondaryIonMassSpectrometry", + "baseIri" : "https://w3id.org/pmd/mo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/mo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChatGPT 3.5", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Secondary Ion Mass Spectrometry (SIMS) is an advanced analytical technique used to determine the elemental and isotopic composition of solid surfaces and thin films at a very high sensitivity and spatial resolution. It is widely employed in various scientific and industrial applications, including materials science, semiconductor research, and surface analysis.\nIn SIMS, a focused beam of high-energy primary ions is directed at a sample's surface. The impact of these primary ions causes the ejection of secondary ions from the sample's surface. These secondary ions are then extracted, mass-separated, and detected using a mass spectrometer. The mass spectrometer measures the mass-to-charge ratios of the secondary ions, providing information about the elemental and isotopic composition of the sample.\nThe sensitivity and spatial resolution of SIMS allow researchers to analyze very small areas, often down to the micrometer or nanometer scale. This makes SIMS particularly valuable for investigating surface composition, depth profiling of layered structures, and detecting trace elements in complex materials. The technique is non-destructive in its elemental analysis, which is beneficial for studying delicate samples or preserving valuable materials.\nSIMS has applications in diverse fields, including materials characterization, semiconductor device analysis, biological and medical research, and geological studies. It provides essential information about the chemical composition, structure, and distribution of elements in complex samples, contributing to advancements in materials science and various technological developments.", + "type" : "label" + } ], + "abbreviation" : [ { + "identifier" : "abbreviation", + "language" : "en", + "value" : "SIMS", + "type" : "label" + } ] + }, + "label" : { + "de" : "Sekundärionen-Massenspektrometrie", + "IRI-based" : "SecondaryIonMassSpectrometry", + "en" : "Secondary Ion Mass Spectrometry" + }, + "attributes" : [ "external" ], + "id" : "151", + "superClasses" : [ "108" ] + }, { + "iri" : "https://w3id.org/pmd/co/CrystallineStructure", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Crystal structure.” Wikipedia The Free Encyclopedia, https://en.wikipedia.org/wiki/Crystal_structure. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "In der Kristallographie ist die Kristallstruktur eine Beschreibung der geordneten Anordnung von Atomen, Ionen oder Molekülen in einem kristallinen Material. Geordnete Strukturen ergeben sich aus der intrinsischen Natur der konstituierenden Teilchen, die symmetrische Muster bilden, die sich entlang der Hauptrichtungen des dreidimensionalen Raums in der Materie wiederholen.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "In crystallography, crystal structure is a description of the ordered arrangement of atoms, ions or molecules in a crystalline material. Ordered structures occur from the intrinsic nature of the constituent particles to form symmetric patterns that repeat along the principal directions of three-dimensional space in matter.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Kristalline Struktur", + "IRI-based" : "CrystallineStructure", + "en" : "Crystalline Structure" + }, + "attributes" : [ "external" ], + "id" : "808", + "superClasses" : [ "236" ] + }, { + "iri" : "https://w3id.org/pmd/co/MassFraction", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This value object describes one of several portions of the property of a body that is a measure of the amount of material it contains and causes it to have weight in a gravitational field.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Masse Anteil", + "IRI-based" : "MassFraction", + "en" : "Mass Fraction" + }, + "attributes" : [ "external" ], + "id" : "820", + "superClasses" : [ "426" ] + }, { + "iri" : "https://w3id.org/pmd/co/TemperatureMeasuringDevice", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This entity generically describes any tool that is used for the measurement of the temperature of a tangible object or the environment, e.g., a thermocouple and thermometers.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Entität beschreibt allgemein jedes Werkzeug, das zur Messung der Temperatur eines materiellen Objekts oder der Umgebung verwendet wird, z. B. ein Thermoelement und Thermometer.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Temperaturmesswerkzeug", + "IRI-based" : "TemperatureMeasuringDevice", + "en" : "Temperature Measuring Device" + }, + "subClasses" : [ "841" ], + "attributes" : [ "external" ], + "id" : "620", + "superClasses" : [ "176" ] + } ], + "property" : [ { + "id" : "0", + "type" : "rdfs:SubClassOf" + }, { + "id" : "3", + "type" : "rdfs:SubClassOf" + }, { + "id" : "6", + "type" : "owl:objectProperty" + }, { + "id" : "10", + "type" : "owl:objectProperty" + }, { + "id" : "13", + "type" : "rdfs:SubClassOf" + }, { + "id" : "16", + "type" : "rdfs:SubClassOf" + }, { + "id" : "18", + "type" : "rdfs:SubClassOf" + }, { + "id" : "20", + "type" : "rdfs:SubClassOf" + }, { + "id" : "23", + "type" : "rdfs:SubClassOf" + }, { + "id" : "26", + "type" : "rdfs:SubClassOf" + }, { + "id" : "28", + "type" : "rdfs:SubClassOf" + }, { + "id" : "30", + "type" : "rdfs:SubClassOf" + }, { + "id" : "32", + "type" : "rdfs:SubClassOf" + }, { + "id" : "35", + "type" : "rdfs:SubClassOf" + }, { + "id" : "37", + "type" : "rdfs:SubClassOf" + }, { + "id" : "39", + "type" : "rdfs:SubClassOf" + }, { + "id" : "50", + "type" : "rdfs:SubClassOf" + }, { + "id" : "52", + "type" : "owl:objectProperty" + }, { + "id" : "55", + "type" : "rdfs:SubClassOf" + }, { + "id" : "57", + "type" : "rdfs:SubClassOf" + }, { + "id" : "59", + "type" : "rdfs:SubClassOf" + }, { + "id" : "61", + "type" : "owl:datatypeProperty" + }, { + "id" : "64", + "type" : "rdfs:SubClassOf" + }, { + "id" : "65", + "type" : "rdfs:SubClassOf" + }, { + "id" : "69", + "type" : "rdfs:SubClassOf" + }, { + "id" : "72", + "type" : "rdfs:SubClassOf" + }, { + "id" : "79", + "type" : "rdfs:SubClassOf" + }, { + "id" : "81", + "type" : "rdfs:SubClassOf" + }, { + "id" : "85", + "type" : "rdfs:SubClassOf" + }, { + "id" : "87", + "type" : "rdfs:SubClassOf" + }, { + "id" : "90", + "type" : "rdfs:SubClassOf" + }, { + "id" : "92", + "type" : "rdfs:SubClassOf" + }, { + "id" : "94", + "type" : "rdfs:SubClassOf" + }, { + "id" : "96", + "type" : "rdfs:SubClassOf" + }, { + "id" : "98", + "type" : "rdfs:SubClassOf" + }, { + "id" : "100", + "type" : "rdfs:SubClassOf" + }, { + "id" : "102", + "type" : "rdfs:SubClassOf" + }, { + "id" : "104", + "type" : "rdfs:SubClassOf" + }, { + "id" : "106", + "type" : "rdfs:SubClassOf" + }, { + "id" : "107", + "type" : "rdfs:SubClassOf" + }, { + "id" : "115", + "type" : "owl:datatypeProperty" + }, { + "id" : "118", + "type" : "owl:objectProperty" + }, { + "id" : "121", + "type" : "owl:objectProperty" + }, { + "id" : "123", + "type" : "rdfs:SubClassOf" + }, { + "id" : "125", + "type" : "rdfs:SubClassOf" + }, { + "id" : "130", + "type" : "owl:objectProperty" + }, { + "id" : "132", + "type" : "rdfs:SubClassOf" + }, { + "id" : "134", + "type" : "rdfs:SubClassOf" + }, { + "id" : "137", + "type" : "rdfs:SubClassOf" + }, { + "id" : "140", + "type" : "rdfs:SubClassOf" + }, { + "id" : "142", + "type" : "rdfs:SubClassOf" + }, { + "id" : "144", + "type" : "rdfs:SubClassOf" + }, { + "id" : "146", + "type" : "rdfs:SubClassOf" + }, { + "id" : "148", + "type" : "rdfs:SubClassOf" + }, { + "id" : "150", + "type" : "rdfs:SubClassOf" + }, { + "id" : "152", + "type" : "rdfs:SubClassOf" + }, { + "id" : "163", + "type" : "rdfs:SubClassOf" + }, { + "id" : "166", + "type" : "rdfs:SubClassOf" + }, { + "id" : "168", + "type" : "rdfs:SubClassOf" + }, { + "id" : "171", + "type" : "rdfs:SubClassOf" + }, { + "id" : "173", + "type" : "rdfs:SubClassOf" + }, { + "id" : "180", + "type" : "rdfs:SubClassOf" + }, { + "id" : "181", + "type" : "rdfs:SubClassOf" + }, { + "id" : "183", + "type" : "rdfs:SubClassOf" + }, { + "id" : "185", + "type" : "rdfs:SubClassOf" + }, { + "id" : "195", + "type" : "rdfs:SubClassOf" + }, { + "id" : "197", + "type" : "rdfs:SubClassOf" + }, { + "id" : "199", + "type" : "owl:objectProperty" + }, { + "id" : "208", + "type" : "rdfs:SubClassOf" + }, { + "id" : "209", + "type" : "rdfs:SubClassOf" + }, { + "id" : "210", + "type" : "rdfs:SubClassOf" + }, { + "id" : "212", + "type" : "rdfs:SubClassOf" + }, { + "id" : "214", + "type" : "rdfs:SubClassOf" + }, { + "id" : "215", + "type" : "rdfs:SubClassOf" + }, { + "id" : "217", + "type" : "rdfs:SubClassOf" + }, { + "id" : "219", + "type" : "owl:objectProperty" + }, { + "id" : "222", + "type" : "owl:objectProperty" + }, { + "id" : "227", + "type" : "owl:objectProperty" + }, { + "id" : "230", + "type" : "rdfs:SubClassOf" + }, { + "id" : "233", + "type" : "rdfs:SubClassOf" + }, { + "id" : "235", + "type" : "rdfs:SubClassOf" + }, { + "id" : "237", + "type" : "rdfs:SubClassOf" + }, { + "id" : "240", + "type" : "rdfs:SubClassOf" + }, { + "id" : "242", + "type" : "rdfs:SubClassOf" + }, { + "id" : "246", + "type" : "rdfs:SubClassOf" + }, { + "id" : "248", + "type" : "rdfs:SubClassOf" + }, { + "id" : "251", + "type" : "rdfs:SubClassOf" + }, { + "id" : "252", + "type" : "rdfs:SubClassOf" + }, { + "id" : "254", + "type" : "rdfs:SubClassOf" + }, { + "id" : "256", + "type" : "rdfs:SubClassOf" + }, { + "id" : "258", + "type" : "rdfs:SubClassOf" + }, { + "id" : "260", + "type" : "rdfs:SubClassOf" + }, { + "id" : "263", + "type" : "rdfs:SubClassOf" + }, { + "id" : "264", + "type" : "rdfs:SubClassOf" + }, { + "id" : "266", + "type" : "rdfs:SubClassOf" + }, { + "id" : "268", + "type" : "rdfs:SubClassOf" + }, { + "id" : "269", + "type" : "rdfs:SubClassOf" + }, { + "id" : "271", + "type" : "rdfs:SubClassOf" + }, { + "id" : "272", + "type" : "rdfs:SubClassOf" + }, { + "id" : "273", + "type" : "rdfs:SubClassOf" + }, { + "id" : "275", + "type" : "rdfs:SubClassOf" + }, { + "id" : "278", + "type" : "rdfs:SubClassOf" + }, { + "id" : "280", + "type" : "owl:objectProperty" + }, { + "id" : "282", + "type" : "rdfs:SubClassOf" + }, { + "id" : "284", + "type" : "rdfs:SubClassOf" + }, { + "id" : "286", + "type" : "rdfs:SubClassOf" + }, { + "id" : "288", + "type" : "rdfs:SubClassOf" + }, { + "id" : "290", + "type" : "rdfs:SubClassOf" + }, { + "id" : "292", + "type" : "rdfs:SubClassOf" + }, { + "id" : "294", + "type" : "rdfs:SubClassOf" + }, { + "id" : "296", + "type" : "rdfs:SubClassOf" + }, { + "id" : "298", + "type" : "rdfs:SubClassOf" + }, { + "id" : "300", + "type" : "rdfs:SubClassOf" + }, { + "id" : "302", + "type" : "rdfs:SubClassOf" + }, { + "id" : "303", + "type" : "rdfs:SubClassOf" + }, { + "id" : "305", + "type" : "rdfs:SubClassOf" + }, { + "id" : "307", + "type" : "rdfs:SubClassOf" + }, { + "id" : "308", + "type" : "rdfs:SubClassOf" + }, { + "id" : "310", + "type" : "rdfs:SubClassOf" + }, { + "id" : "312", + "type" : "rdfs:SubClassOf" + }, { + "id" : "313", + "type" : "rdfs:SubClassOf" + }, { + "id" : "315", + "type" : "rdfs:SubClassOf" + }, { + "id" : "316", + "type" : "rdfs:SubClassOf" + }, { + "id" : "318", + "type" : "owl:datatypeProperty" + }, { + "id" : "326", + "type" : "owl:objectProperty" + }, { + "id" : "328", + "type" : "rdfs:SubClassOf" + }, { + "id" : "330", + "type" : "rdfs:SubClassOf" + }, { + "id" : "332", + "type" : "rdfs:SubClassOf" + }, { + "id" : "334", + "type" : "rdfs:SubClassOf" + }, { + "id" : "336", + "type" : "rdfs:SubClassOf" + }, { + "id" : "338", + "type" : "rdfs:SubClassOf" + }, { + "id" : "340", + "type" : "rdfs:SubClassOf" + }, { + "id" : "342", + "type" : "rdfs:SubClassOf" + }, { + "id" : "345", + "type" : "owl:objectProperty" + }, { + "id" : "348", + "type" : "rdfs:SubClassOf" + }, { + "id" : "351", + "type" : "rdfs:SubClassOf" + }, { + "id" : "353", + "type" : "rdfs:SubClassOf" + }, { + "id" : "355", + "type" : "rdfs:SubClassOf" + }, { + "id" : "358", + "type" : "rdfs:SubClassOf" + }, { + "id" : "359", + "type" : "rdfs:SubClassOf" + }, { + "id" : "362", + "type" : "rdfs:SubClassOf" + }, { + "id" : "363", + "type" : "rdfs:SubClassOf" + }, { + "id" : "365", + "type" : "rdfs:SubClassOf" + }, { + "id" : "366", + "type" : "rdfs:SubClassOf" + }, { + "id" : "368", + "type" : "rdfs:SubClassOf" + }, { + "id" : "370", + "type" : "rdfs:SubClassOf" + }, { + "id" : "372", + "type" : "rdfs:SubClassOf" + }, { + "id" : "374", + "type" : "rdfs:SubClassOf" + }, { + "id" : "375", + "type" : "owl:objectProperty" + }, { + "id" : "377", + "type" : "owl:objectProperty" + }, { + "id" : "381", + "type" : "owl:objectProperty" + }, { + "id" : "383", + "type" : "rdfs:SubClassOf" + }, { + "id" : "385", + "type" : "rdfs:SubClassOf" + }, { + "id" : "387", + "type" : "rdfs:SubClassOf" + }, { + "id" : "388", + "type" : "rdfs:SubClassOf" + }, { + "id" : "390", + "type" : "rdfs:SubClassOf" + }, { + "id" : "392", + "type" : "rdfs:SubClassOf" + }, { + "id" : "394", + "type" : "rdfs:SubClassOf" + }, { + "id" : "396", + "type" : "rdfs:SubClassOf" + }, { + "id" : "413", + "type" : "owl:someValuesFrom" + }, { + "id" : "450", + "type" : "owl:someValuesFrom" + }, { + "id" : "453", + "type" : "owl:disjointWith" + }, { + "id" : "454", + "type" : "owl:disjointWith" + }, { + "id" : "455", + "type" : "owl:someValuesFrom" + }, { + "id" : "456", + "type" : "owl:disjointWith" + }, { + "id" : "457", + "type" : "owl:disjointWith" + }, { + "id" : "459", + "type" : "owl:disjointWith" + }, { + "id" : "461", + "type" : "owl:disjointWith" + }, { + "id" : "463", + "type" : "rdfs:SubClassOf" + }, { + "id" : "481", + "type" : "owl:datatypeProperty" + }, { + "id" : "482", + "type" : "rdfs:SubClassOf" + }, { + "id" : "484", + "type" : "rdfs:SubClassOf" + }, { + "id" : "486", + "type" : "rdfs:SubClassOf" + }, { + "id" : "488", + "type" : "rdfs:SubClassOf" + }, { + "id" : "490", + "type" : "rdfs:SubClassOf" + }, { + "id" : "491", + "type" : "rdfs:SubClassOf" + }, { + "id" : "493", + "type" : "rdfs:SubClassOf" + }, { + "id" : "494", + "type" : "rdfs:SubClassOf" + }, { + "id" : "496", + "type" : "rdfs:SubClassOf" + }, { + "id" : "498", + "type" : "owl:objectProperty" + }, { + "id" : "500", + "type" : "rdfs:SubClassOf" + }, { + "id" : "502", + "type" : "rdfs:SubClassOf" + }, { + "id" : "504", + "type" : "rdfs:SubClassOf" + }, { + "id" : "506", + "type" : "owl:datatypeProperty" + }, { + "id" : "507", + "type" : "rdfs:SubClassOf" + }, { + "id" : "509", + "type" : "rdfs:SubClassOf" + }, { + "id" : "511", + "type" : "rdfs:SubClassOf" + }, { + "id" : "516", + "type" : "rdfs:SubClassOf" + }, { + "id" : "518", + "type" : "rdfs:SubClassOf" + }, { + "id" : "519", + "type" : "rdfs:SubClassOf" + }, { + "id" : "520", + "type" : "rdfs:SubClassOf" + }, { + "id" : "521", + "type" : "rdfs:SubClassOf" + }, { + "id" : "522", + "type" : "rdfs:SubClassOf" + }, { + "id" : "524", + "type" : "rdfs:SubClassOf" + }, { + "id" : "525", + "type" : "rdfs:SubClassOf" + }, { + "id" : "526", + "type" : "rdfs:SubClassOf" + }, { + "id" : "528", + "type" : "rdfs:SubClassOf" + }, { + "id" : "529", + "type" : "rdfs:SubClassOf" + }, { + "id" : "531", + "type" : "owl:objectProperty" + }, { + "id" : "533", + "type" : "rdfs:SubClassOf" + }, { + "id" : "534", + "type" : "rdfs:SubClassOf" + }, { + "id" : "536", + "type" : "rdfs:SubClassOf" + }, { + "id" : "538", + "type" : "rdfs:SubClassOf" + }, { + "id" : "543", + "type" : "rdfs:SubClassOf" + }, { + "id" : "545", + "type" : "rdfs:SubClassOf" + }, { + "id" : "546", + "type" : "rdfs:SubClassOf" + }, { + "id" : "547", + "type" : "rdfs:SubClassOf" + }, { + "id" : "549", + "type" : "rdfs:SubClassOf" + }, { + "id" : "551", + "type" : "owl:objectProperty" + }, { + "id" : "553", + "type" : "rdfs:SubClassOf" + }, { + "id" : "555", + "type" : "rdfs:SubClassOf" + }, { + "id" : "556", + "type" : "rdfs:SubClassOf" + }, { + "id" : "557", + "type" : "rdfs:SubClassOf" + }, { + "id" : "558", + "type" : "rdfs:SubClassOf" + }, { + "id" : "559", + "type" : "rdfs:SubClassOf" + }, { + "id" : "561", + "type" : "rdfs:SubClassOf" + }, { + "id" : "563", + "type" : "rdfs:SubClassOf" + }, { + "id" : "565", + "type" : "rdfs:SubClassOf" + }, { + "id" : "567", + "type" : "rdfs:SubClassOf" + }, { + "id" : "569", + "type" : "rdfs:SubClassOf" + }, { + "id" : "570", + "type" : "rdfs:SubClassOf" + }, { + "id" : "571", + "type" : "rdfs:SubClassOf" + }, { + "id" : "572", + "type" : "rdfs:SubClassOf" + }, { + "id" : "573", + "type" : "owl:objectProperty" + }, { + "id" : "574", + "type" : "owl:objectProperty" + }, { + "id" : "577", + "type" : "rdfs:SubClassOf" + }, { + "id" : "579", + "type" : "rdfs:SubClassOf" + }, { + "id" : "580", + "type" : "rdfs:SubClassOf" + }, { + "id" : "581", + "type" : "rdfs:SubClassOf" + }, { + "id" : "582", + "type" : "rdfs:SubClassOf" + }, { + "id" : "584", + "type" : "rdfs:SubClassOf" + }, { + "id" : "585", + "type" : "rdfs:SubClassOf" + }, { + "id" : "586", + "type" : "owl:objectProperty" + }, { + "id" : "588", + "type" : "rdfs:SubClassOf" + }, { + "id" : "589", + "type" : "rdfs:SubClassOf" + }, { + "id" : "590", + "type" : "rdfs:SubClassOf" + }, { + "id" : "591", + "type" : "owl:objectProperty" + }, { + "id" : "595", + "type" : "rdfs:SubClassOf" + }, { + "id" : "596", + "type" : "rdfs:SubClassOf" + }, { + "id" : "597", + "type" : "rdfs:SubClassOf" + }, { + "id" : "598", + "type" : "rdfs:SubClassOf" + }, { + "id" : "599", + "type" : "rdfs:SubClassOf" + }, { + "id" : "613", + "type" : "owl:objectProperty" + }, { + "id" : "621", + "type" : "owl:objectProperty" + }, { + "id" : "623", + "type" : "owl:datatypeProperty" + }, { + "id" : "624", + "type" : "rdfs:SubClassOf" + }, { + "id" : "625", + "type" : "rdfs:SubClassOf" + }, { + "id" : "626", + "type" : "rdfs:SubClassOf" + }, { + "id" : "593", + "type" : "owl:objectProperty" + }, { + "id" : "499", + "type" : "owl:objectProperty" + }, { + "id" : "630", + "type" : "owl:objectProperty" + }, { + "id" : "632", + "type" : "owl:objectProperty" + }, { + "id" : "635", + "type" : "owl:objectProperty" + }, { + "id" : "221", + "type" : "owl:objectProperty" + }, { + "id" : "643", + "type" : "owl:objectProperty" + }, { + "id" : "645", + "type" : "owl:objectProperty" + }, { + "id" : "649", + "type" : "owl:objectProperty" + }, { + "id" : "651", + "type" : "owl:objectProperty" + }, { + "id" : "653", + "type" : "owl:objectProperty" + }, { + "id" : "636", + "type" : "owl:objectProperty" + }, { + "id" : "656", + "type" : "rdfs:SubClassOf" + }, { + "id" : "376", + "type" : "owl:objectProperty" + }, { + "id" : "657", + "type" : "owl:objectProperty" + }, { + "id" : "661", + "type" : "rdfs:SubClassOf" + }, { + "id" : "662", + "type" : "rdfs:SubClassOf" + }, { + "id" : "663", + "type" : "rdfs:SubClassOf" + }, { + "id" : "664", + "type" : "rdfs:SubClassOf" + }, { + "id" : "665", + "type" : "rdfs:SubClassOf" + }, { + "id" : "666", + "type" : "rdfs:SubClassOf" + }, { + "id" : "667", + "type" : "rdfs:SubClassOf" + }, { + "id" : "669", + "type" : "rdfs:SubClassOf" + }, { + "id" : "670", + "type" : "rdfs:SubClassOf" + }, { + "id" : "671", + "type" : "rdfs:SubClassOf" + }, { + "id" : "672", + "type" : "rdfs:SubClassOf" + }, { + "id" : "646", + "type" : "owl:objectProperty" + }, { + "id" : "674", + "type" : "rdfs:SubClassOf" + }, { + "id" : "677", + "type" : "rdfs:SubClassOf" + }, { + "id" : "678", + "type" : "rdfs:SubClassOf" + }, { + "id" : "679", + "type" : "owl:objectProperty" + }, { + "id" : "682", + "type" : "rdfs:SubClassOf" + }, { + "id" : "683", + "type" : "rdfs:SubClassOf" + }, { + "id" : "684", + "type" : "rdfs:SubClassOf" + }, { + "id" : "685", + "type" : "rdfs:SubClassOf" + }, { + "id" : "686", + "type" : "rdfs:SubClassOf" + }, { + "id" : "687", + "type" : "owl:objectProperty" + }, { + "id" : "688", + "type" : "owl:objectProperty" + }, { + "id" : "690", + "type" : "owl:objectProperty" + }, { + "id" : "587", + "type" : "owl:objectProperty" + }, { + "id" : "229", + "type" : "owl:objectProperty" + }, { + "id" : "640", + "type" : "owl:objectProperty" + }, { + "id" : "647", + "type" : "owl:objectProperty" + }, { + "id" : "658", + "type" : "owl:objectProperty" + }, { + "id" : "697", + "type" : "owl:disjointWith" + }, { + "id" : "698", + "type" : "owl:disjointWith" + }, { + "id" : "699", + "type" : "owl:someValuesFrom" + }, { + "id" : "700", + "type" : "owl:someValuesFrom" + }, { + "id" : "702", + "type" : "owl:someValuesFrom" + }, { + "id" : "703", + "type" : "owl:someValuesFrom" + }, { + "id" : "707", + "type" : "owl:someValuesFrom" + }, { + "id" : "709", + "type" : "owl:disjointWith" + }, { + "id" : "710", + "type" : "owl:disjointWith" + }, { + "id" : "711", + "type" : "owl:disjointWith" + }, { + "id" : "713", + "type" : "owl:objectProperty" + }, { + "id" : "715", + "type" : "rdfs:SubClassOf" + }, { + "id" : "716", + "type" : "rdfs:SubClassOf" + }, { + "id" : "718", + "type" : "rdfs:SubClassOf" + }, { + "id" : "719", + "type" : "rdfs:SubClassOf" + }, { + "id" : "720", + "type" : "rdfs:SubClassOf" + }, { + "id" : "722", + "type" : "rdfs:SubClassOf" + }, { + "id" : "723", + "type" : "rdfs:SubClassOf" + }, { + "id" : "532", + "type" : "owl:objectProperty" + }, { + "id" : "724", + "type" : "owl:objectProperty" + }, { + "id" : "614", + "type" : "owl:objectProperty" + }, { + "id" : "694", + "type" : "owl:objectProperty" + }, { + "id" : "730", + "type" : "rdfs:SubClassOf" + }, { + "id" : "731", + "type" : "rdfs:SubClassOf" + }, { + "id" : "732", + "type" : "rdfs:SubClassOf" + }, { + "id" : "733", + "type" : "rdfs:SubClassOf" + }, { + "id" : "734", + "type" : "rdfs:SubClassOf" + }, { + "id" : "736", + "type" : "rdfs:SubClassOf" + }, { + "id" : "737", + "type" : "rdfs:SubClassOf" + }, { + "id" : "738", + "type" : "rdfs:SubClassOf" + }, { + "id" : "739", + "type" : "rdfs:SubClassOf" + }, { + "id" : "740", + "type" : "rdfs:SubClassOf" + }, { + "id" : "741", + "type" : "rdfs:SubClassOf" + }, { + "id" : "200", + "type" : "owl:objectProperty" + }, { + "id" : "743", + "type" : "rdfs:SubClassOf" + }, { + "id" : "744", + "type" : "rdfs:SubClassOf" + }, { + "id" : "745", + "type" : "owl:objectProperty" + }, { + "id" : "746", + "type" : "rdfs:SubClassOf" + }, { + "id" : "748", + "type" : "rdfs:SubClassOf" + }, { + "id" : "749", + "type" : "rdfs:SubClassOf" + }, { + "id" : "751", + "type" : "rdfs:SubClassOf" + }, { + "id" : "752", + "type" : "rdfs:SubClassOf" + }, { + "id" : "753", + "type" : "rdfs:SubClassOf" + }, { + "id" : "754", + "type" : "rdfs:SubClassOf" + }, { + "id" : "755", + "type" : "rdfs:SubClassOf" + }, { + "id" : "756", + "type" : "rdfs:SubClassOf" + }, { + "id" : "758", + "type" : "rdfs:SubClassOf" + }, { + "id" : "760", + "type" : "rdfs:SubClassOf" + }, { + "id" : "761", + "type" : "rdfs:SubClassOf" + }, { + "id" : "762", + "type" : "rdfs:SubClassOf" + }, { + "id" : "763", + "type" : "rdfs:SubClassOf" + }, { + "id" : "764", + "type" : "rdfs:SubClassOf" + }, { + "id" : "765", + "type" : "rdfs:SubClassOf" + }, { + "id" : "766", + "type" : "rdfs:SubClassOf" + }, { + "id" : "767", + "type" : "rdfs:SubClassOf" + }, { + "id" : "768", + "type" : "rdfs:SubClassOf" + }, { + "id" : "769", + "type" : "rdfs:SubClassOf" + }, { + "id" : "691", + "type" : "owl:objectProperty" + }, { + "id" : "770", + "type" : "owl:datatypeProperty" + }, { + "id" : "772", + "type" : "rdfs:SubClassOf" + }, { + "id" : "773", + "type" : "rdfs:SubClassOf" + }, { + "id" : "774", + "type" : "rdfs:SubClassOf" + }, { + "id" : "775", + "type" : "owl:datatypeProperty" + }, { + "id" : "776", + "type" : "rdfs:SubClassOf" + }, { + "id" : "777", + "type" : "rdfs:SubClassOf" + }, { + "id" : "778", + "type" : "rdfs:SubClassOf" + }, { + "id" : "779", + "type" : "owl:objectProperty" + }, { + "id" : "780", + "type" : "rdfs:SubClassOf" + }, { + "id" : "781", + "type" : "rdfs:SubClassOf" + }, { + "id" : "782", + "type" : "rdfs:SubClassOf" + }, { + "id" : "784", + "type" : "rdfs:SubClassOf" + }, { + "id" : "785", + "type" : "rdfs:SubClassOf" + }, { + "id" : "786", + "type" : "rdfs:SubClassOf" + }, { + "id" : "787", + "type" : "rdfs:SubClassOf" + }, { + "id" : "788", + "type" : "rdfs:SubClassOf" + }, { + "id" : "790", + "type" : "rdfs:SubClassOf" + }, { + "id" : "791", + "type" : "rdfs:SubClassOf" + }, { + "id" : "792", + "type" : "rdfs:SubClassOf" + }, { + "id" : "794", + "type" : "rdfs:SubClassOf" + }, { + "id" : "795", + "type" : "rdfs:SubClassOf" + }, { + "id" : "796", + "type" : "rdfs:SubClassOf" + }, { + "id" : "797", + "type" : "rdfs:SubClassOf" + }, { + "id" : "798", + "type" : "rdfs:SubClassOf" + }, { + "id" : "799", + "type" : "rdfs:SubClassOf" + }, { + "id" : "800", + "type" : "rdfs:SubClassOf" + }, { + "id" : "801", + "type" : "rdfs:SubClassOf" + }, { + "id" : "803", + "type" : "rdfs:SubClassOf" + }, { + "id" : "804", + "type" : "rdfs:SubClassOf" + }, { + "id" : "805", + "type" : "rdfs:SubClassOf" + }, { + "id" : "806", + "type" : "rdfs:SubClassOf" + }, { + "id" : "807", + "type" : "rdfs:SubClassOf" + }, { + "id" : "809", + "type" : "rdfs:SubClassOf" + }, { + "id" : "810", + "type" : "rdfs:SubClassOf" + }, { + "id" : "811", + "type" : "rdfs:SubClassOf" + }, { + "id" : "813", + "type" : "rdfs:SubClassOf" + }, { + "id" : "814", + "type" : "rdfs:SubClassOf" + }, { + "id" : "815", + "type" : "rdfs:SubClassOf" + }, { + "id" : "652", + "type" : "owl:objectProperty" + }, { + "id" : "817", + "type" : "rdfs:SubClassOf" + }, { + "id" : "819", + "type" : "rdfs:SubClassOf" + }, { + "id" : "821", + "type" : "rdfs:SubClassOf" + }, { + "id" : "822", + "type" : "rdfs:SubClassOf" + }, { + "id" : "823", + "type" : "owl:objectProperty" + }, { + "id" : "382", + "type" : "owl:objectProperty" + }, { + "id" : "825", + "type" : "owl:objectProperty" + }, { + "id" : "347", + "type" : "owl:objectProperty" + }, { + "id" : "826", + "type" : "owl:objectProperty" + }, { + "id" : "629", + "type" : "owl:objectProperty" + }, { + "id" : "828", + "type" : "owl:objectProperty" + }, { + "id" : "829", + "type" : "owl:objectProperty" + }, { + "id" : "831", + "type" : "owl:objectProperty" + }, { + "id" : "832", + "type" : "owl:objectProperty" + }, { + "id" : "689", + "type" : "owl:objectProperty" + }, { + "id" : "833", + "type" : "owl:objectProperty" + }, { + "id" : "592", + "type" : "owl:objectProperty" + }, { + "id" : "834", + "type" : "owl:objectProperty" + }, { + "id" : "120", + "type" : "owl:objectProperty" + }, { + "id" : "835", + "type" : "rdfs:SubClassOf" + }, { + "id" : "836", + "type" : "rdfs:SubClassOf" + }, { + "id" : "837", + "type" : "rdfs:SubClassOf" + }, { + "id" : "726", + "type" : "owl:objectProperty" + }, { + "id" : "838", + "type" : "rdfs:SubClassOf" + }, { + "id" : "839", + "type" : "rdfs:SubClassOf" + }, { + "id" : "840", + "type" : "rdfs:SubClassOf" + }, { + "id" : "842", + "type" : "owl:datatypeProperty" + }, { + "id" : "843", + "type" : "owl:objectProperty" + }, { + "id" : "844", + "type" : "owl:objectProperty" + }, { + "id" : "846", + "type" : "rdfs:SubClassOf" + }, { + "id" : "847", + "type" : "rdfs:SubClassOf" + }, { + "id" : "848", + "type" : "rdfs:SubClassOf" + }, { + "id" : "849", + "type" : "rdfs:SubClassOf" + }, { + "id" : "850", + "type" : "rdfs:SubClassOf" + }, { + "id" : "852", + "type" : "rdfs:SubClassOf" + }, { + "id" : "853", + "type" : "rdfs:SubClassOf" + }, { + "id" : "854", + "type" : "rdfs:SubClassOf" + }, { + "id" : "855", + "type" : "rdfs:SubClassOf" + }, { + "id" : "856", + "type" : "rdfs:SubClassOf" + }, { + "id" : "681", + "type" : "owl:objectProperty" + }, { + "id" : "857", + "type" : "rdfs:SubClassOf" + }, { + "id" : "859", + "type" : "rdfs:SubClassOf" + }, { + "id" : "860", + "type" : "rdfs:SubClassOf" + }, { + "id" : "861", + "type" : "rdfs:SubClassOf" + }, { + "id" : "862", + "type" : "rdfs:SubClassOf" + }, { + "id" : "863", + "type" : "rdfs:SubClassOf" + }, { + "id" : "864", + "type" : "rdfs:SubClassOf" + }, { + "id" : "865", + "type" : "rdfs:SubClassOf" + }, { + "id" : "866", + "type" : "rdfs:SubClassOf" + }, { + "id" : "867", + "type" : "rdfs:SubClassOf" + }, { + "id" : "868", + "type" : "owl:objectProperty" + }, { + "id" : "9", + "type" : "owl:objectProperty" + }, { + "id" : "871", + "type" : "owl:objectProperty" + }, { + "id" : "727", + "type" : "owl:objectProperty" + }, { + "id" : "872", + "type" : "owl:objectProperty" + }, { + "id" : "725", + "type" : "owl:objectProperty" + }, { + "id" : "873", + "type" : "owl:datatypeProperty" + }, { + "id" : "659", + "type" : "owl:objectProperty" + }, { + "id" : "874", + "type" : "owl:objectProperty" + }, { + "id" : "615", + "type" : "owl:objectProperty" + }, { + "id" : "695", + "type" : "owl:objectProperty" + }, { + "id" : "827", + "type" : "owl:objectProperty" + }, { + "id" : "378", + "type" : "owl:objectProperty" + }, { + "id" : "869", + "type" : "owl:objectProperty" + }, { + "id" : "876", + "type" : "owl:datatypeProperty" + }, { + "id" : "877", + "type" : "owl:objectProperty" + }, { + "id" : "878", + "type" : "owl:objectProperty" + }, { + "id" : "879", + "type" : "owl:datatypeProperty" + }, { + "id" : "880", + "type" : "owl:objectProperty" + }, { + "id" : "638", + "type" : "owl:objectProperty" + }, { + "id" : "870", + "type" : "owl:objectProperty" + }, { + "id" : "881", + "type" : "owl:objectProperty" + }, { + "id" : "882", + "type" : "rdfs:SubClassOf" + }, { + "id" : "883", + "type" : "rdfs:SubClassOf" + }, { + "id" : "884", + "type" : "rdfs:SubClassOf" + }, { + "id" : "885", + "type" : "rdfs:SubClassOf" + }, { + "id" : "886", + "type" : "rdfs:SubClassOf" + }, { + "id" : "887", + "type" : "rdfs:SubClassOf" + }, { + "id" : "889", + "type" : "rdfs:SubClassOf" + }, { + "id" : "890", + "type" : "rdfs:SubClassOf" + }, { + "id" : "891", + "type" : "rdfs:SubClassOf" + }, { + "id" : "892", + "type" : "rdfs:SubClassOf" + }, { + "id" : "893", + "type" : "rdfs:SubClassOf" + }, { + "id" : "894", + "type" : "rdfs:SubClassOf" + }, { + "id" : "895", + "type" : "rdfs:SubClassOf" + }, { + "id" : "896", + "type" : "rdfs:SubClassOf" + }, { + "id" : "897", + "type" : "owl:objectProperty" + }, { + "id" : "898", + "type" : "owl:objectProperty" + }, { + "id" : "899", + "type" : "rdfs:SubClassOf" + }, { + "id" : "900", + "type" : "rdfs:SubClassOf" + }, { + "id" : "901", + "type" : "rdfs:SubClassOf" + }, { + "id" : "902", + "type" : "rdfs:SubClassOf" + }, { + "id" : "903", + "type" : "rdfs:SubClassOf" + }, { + "id" : "904", + "type" : "rdfs:SubClassOf" + }, { + "id" : "905", + "type" : "rdfs:SubClassOf" + }, { + "id" : "906", + "type" : "rdfs:SubClassOf" + }, { + "id" : "907", + "type" : "rdfs:SubClassOf" + }, { + "id" : "908", + "type" : "rdfs:SubClassOf" + }, { + "id" : "909", + "type" : "rdfs:SubClassOf" + }, { + "id" : "910", + "type" : "rdfs:SubClassOf" + }, { + "id" : "911", + "type" : "rdfs:SubClassOf" + }, { + "id" : "912", + "type" : "rdfs:SubClassOf" + }, { + "id" : "913", + "type" : "rdfs:SubClassOf" + }, { + "id" : "914", + "type" : "rdfs:SubClassOf" + }, { + "id" : "915", + "type" : "rdfs:SubClassOf" + }, { + "id" : "916", + "type" : "owl:objectProperty" + }, { + "id" : "917", + "type" : "rdfs:SubClassOf" + }, { + "id" : "918", + "type" : "rdfs:SubClassOf" + }, { + "id" : "919", + "type" : "owl:objectProperty" + }, { + "id" : "920", + "type" : "owl:objectProperty" + }, { + "id" : "921", + "type" : "rdfs:SubClassOf" + }, { + "id" : "922", + "type" : "rdfs:SubClassOf" + }, { + "id" : "923", + "type" : "rdfs:SubClassOf" + }, { + "id" : "924", + "type" : "rdfs:SubClassOf" + }, { + "id" : "925", + "type" : "rdfs:SubClassOf" + }, { + "id" : "926", + "type" : "rdfs:SubClassOf" + }, { + "id" : "927", + "type" : "rdfs:SubClassOf" + }, { + "id" : "928", + "type" : "owl:objectProperty" + }, { + "id" : "346", + "type" : "owl:objectProperty" + }, { + "id" : "929", + "type" : "owl:datatypeProperty" + }, { + "id" : "639", + "type" : "owl:objectProperty" + }, { + "id" : "637", + "type" : "owl:objectProperty" + }, { + "id" : "680", + "type" : "owl:objectProperty" + }, { + "id" : "930", + "type" : "owl:objectProperty" + }, { + "id" : "931", + "type" : "owl:objectProperty" + }, { + "id" : "932", + "type" : "owl:objectProperty" + }, { + "id" : "933", + "type" : "owl:objectProperty" + } ], + "propertyAttribute" : [ { + "range" : "2", + "domain" : "1", + "attributes" : [ "anonymous", "object" ], + "id" : "0" + }, { + "range" : "5", + "domain" : "4", + "attributes" : [ "anonymous", "object" ], + "id" : "3" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedInfluenceOf", + "inverse" : "9", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "8", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "qualifiedInfluenceOf", + "undefined" : "qualifiedInfluenceOf" + }, + "domain" : "7", + "attributes" : [ "external", "object" ], + "id" : "6" + }, { + "iri" : "https://w3id.org/pmd/co/resource", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "12", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "en", + "value" : "has resource", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "resource", + "en" : "resource" + }, + "domain" : "11", + "attributes" : [ "external", "functional", "object" ], + "id" : "10" + }, { + "range" : "15", + "domain" : "14", + "attributes" : [ "anonymous", "object" ], + "id" : "13" + }, { + "range" : "5", + "domain" : "17", + "attributes" : [ "anonymous", "object" ], + "id" : "16" + }, { + "range" : "15", + "domain" : "19", + "attributes" : [ "anonymous", "object" ], + "id" : "18" + }, { + "range" : "22", + "domain" : "21", + "attributes" : [ "anonymous", "object" ], + "id" : "20" + }, { + "range" : "25", + "domain" : "24", + "attributes" : [ "anonymous", "object" ], + "id" : "23" + }, { + "range" : "22", + "domain" : "27", + "attributes" : [ "anonymous", "object" ], + "id" : "26" + }, { + "range" : "25", + "domain" : "29", + "attributes" : [ "anonymous", "object" ], + "id" : "28" + }, { + "range" : "22", + "domain" : "31", + "attributes" : [ "anonymous", "object" ], + "id" : "30" + }, { + "range" : "34", + "domain" : "33", + "attributes" : [ "anonymous", "object" ], + "id" : "32" + }, { + "range" : "22", + "domain" : "36", + "attributes" : [ "anonymous", "object" ], + "id" : "35" + }, { + "range" : "34", + "domain" : "38", + "attributes" : [ "anonymous", "object" ], + "id" : "37" + }, { + "range" : "19", + "domain" : "40", + "attributes" : [ "anonymous", "object" ], + "id" : "39" + }, { + "range" : "5", + "domain" : "51", + "attributes" : [ "anonymous", "object" ], + "id" : "50" + }, { + "iri" : "http://www.w3.org/ns/prov#atLocation", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "54", + "annotations" : { + "editorialNote" : [ { + "identifier" : "editorialNote", + "language" : "en", + "value" : "The naming of prov:atLocation parallels prov:atTime, and is not named prov:hadLocation to avoid conflicting with the convention that prov:had* properties are used on prov:Influence classes.", + "type" : "label" + }, { + "identifier" : "editorialNote", + "language" : "en", + "value" : "This property is not functional because the many values could be at a variety of granularies (In this building, in this room, in that chair).", + "type" : "label" + } ], + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "locationOf", + "type" : "label" + } ], + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Location", + "type" : "iri" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "atLocation", + "undefined" : "atLocation" + }, + "domain" : "53", + "comment" : { + "en" : "The Location of any resource.", + "undefined" : "This property has multiple RDFS domains to suit multiple OWL Profiles. See
    PROV-O OWL Profile." + }, + "attributes" : [ "external", "object" ], + "id" : "52" + }, { + "range" : "5", + "domain" : "56", + "attributes" : [ "anonymous", "object" ], + "id" : "55" + }, { + "range" : "2", + "domain" : "58", + "attributes" : [ "anonymous", "object" ], + "id" : "57" + }, { + "range" : "5", + "domain" : "60", + "attributes" : [ "anonymous", "object" ], + "id" : "59" + }, { + "iri" : "https://w3id.org/pmd/co/minValue", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "63", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "refers to all values equal or larger than the given one", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "minValue", + "en" : "min value" + }, + "domain" : "62", + "attributes" : [ "external", "datatype" ], + "id" : "61" + }, { + "range" : "2", + "domain" : "45", + "attributes" : [ "anonymous", "object" ], + "id" : "64" + }, { + "range" : "5", + "domain" : "66", + "attributes" : [ "anonymous", "object" ], + "id" : "65" + }, { + "range" : "71", + "domain" : "70", + "attributes" : [ "anonymous", "object" ], + "id" : "69" + }, { + "range" : "74", + "domain" : "73", + "attributes" : [ "anonymous", "object" ], + "id" : "72" + }, { + "range" : "2", + "domain" : "80", + "attributes" : [ "anonymous", "object" ], + "id" : "79" + }, { + "range" : "74", + "domain" : "82", + "attributes" : [ "anonymous", "object" ], + "id" : "81" + }, { + "range" : "2", + "domain" : "86", + "attributes" : [ "anonymous", "object" ], + "id" : "85" + }, { + "range" : "89", + "domain" : "88", + "attributes" : [ "anonymous", "object" ], + "id" : "87" + }, { + "range" : "2", + "domain" : "91", + "attributes" : [ "anonymous", "object" ], + "id" : "90" + }, { + "range" : "89", + "domain" : "93", + "attributes" : [ "anonymous", "object" ], + "id" : "92" + }, { + "range" : "2", + "domain" : "95", + "attributes" : [ "anonymous", "object" ], + "id" : "94" + }, { + "range" : "89", + "domain" : "97", + "attributes" : [ "anonymous", "object" ], + "id" : "96" + }, { + "range" : "2", + "domain" : "99", + "attributes" : [ "anonymous", "object" ], + "id" : "98" + }, { + "range" : "89", + "domain" : "101", + "attributes" : [ "anonymous", "object" ], + "id" : "100" + }, { + "range" : "2", + "domain" : "103", + "attributes" : [ "anonymous", "object" ], + "id" : "102" + }, { + "range" : "89", + "domain" : "105", + "attributes" : [ "anonymous", "object" ], + "id" : "104" + }, { + "range" : "2", + "domain" : "47", + "attributes" : [ "anonymous", "object" ], + "id" : "106" + }, { + "range" : "2", + "domain" : "108", + "attributes" : [ "anonymous", "object" ], + "id" : "107" + }, { + "iri" : "http://www.w3.org/ns/prov#endedAtTime", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "116", + "annotations" : { + "editorialNote" : [ { + "identifier" : "editorialNote", + "language" : "en", + "value" : "It is the intent that the property chain holds: (prov:qualifiedEnd o prov:atTime) rdfs:subPropertyOf prov:endedAtTime.", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "starting-point", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#atTime", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#End", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "endedAtTime", + "undefined" : "endedAtTime" + }, + "domain" : "34", + "comment" : { + "en" : "The time at which an activity ended. See also prov:startedAtTime." + }, + "attributes" : [ "external", "datatype" ], + "id" : "115" + }, { + "iri" : "http://www.w3.org/ns/prov#agentOfInfluence", + "inverse" : "120", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "119", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "agentOfInfluence", + "undefined" : "agentOfInfluence" + }, + "domain" : "68", + "attributes" : [ "external", "object" ], + "id" : "118" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedCommunication", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "122", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "qualifiedCommunicationOf", + "type" : "label" + } ], + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Communication", + "type" : "iri" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Communication", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "qualifiedCommunication", + "undefined" : "qualifiedCommunication" + }, + "superproperty" : [ "9" ], + "domain" : "34", + "comment" : { + "en" : "If this Activity prov:wasInformedBy Activity :a, then it can qualify how it was influenced using prov:qualifiedCommunication [ a prov:Communication; prov:activity :a; :foo :bar ]." + }, + "attributes" : [ "external", "object" ], + "id" : "121" + }, { + "range" : "108", + "domain" : "124", + "attributes" : [ "anonymous", "object" ], + "id" : "123" + }, { + "range" : "127", + "domain" : "126", + "attributes" : [ "anonymous", "object" ], + "id" : "125" + }, { + "iri" : "https://w3id.org/pmd/co/component", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "131", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The object property component, which is used in connection with ProcessingNode and its (modular) elements. It enables the representation of the individual, different parts of processing nodes. Essentially, the 'component property' is a way of breaking down a complex system into manageable and distinct parts in order to understand and manage the role of each part within the overall system.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Die Objekt-Eigenschaft Komponente, die in Verbindung mit ProzessKnoten und seinen (modularen) Elementen verwendet wird. Sie ermöglicht die Darstellung der einzelnen, unterschiedlichen Teile von ProzessKnoten. Im Wesentlichen ist die \"Komponenten-Eigenschaft\" eine Möglichkeit, ein komplexes System in überschaubare und eindeutige Teile zu zerlegen, um die Rolle der einzelnen Teile innerhalb des Gesamtsystems zu verstehen und zu verwalten.", + "type" : "label" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "en", + "value" : "has component", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "component", + "en" : "component" + }, + "domain" : "110", + "attributes" : [ "external", "object" ], + "id" : "130" + }, { + "range" : "71", + "domain" : "133", + "attributes" : [ "anonymous", "object" ], + "id" : "132" + }, { + "range" : "136", + "domain" : "135", + "attributes" : [ "anonymous", "object" ], + "id" : "134" + }, { + "range" : "139", + "domain" : "138", + "attributes" : [ "anonymous", "object" ], + "id" : "137" + }, { + "range" : "139", + "domain" : "141", + "attributes" : [ "anonymous", "object" ], + "id" : "140" + }, { + "range" : "139", + "domain" : "143", + "attributes" : [ "anonymous", "object" ], + "id" : "142" + }, { + "range" : "108", + "domain" : "145", + "attributes" : [ "anonymous", "object" ], + "id" : "144" + }, { + "range" : "108", + "domain" : "147", + "attributes" : [ "anonymous", "object" ], + "id" : "146" + }, { + "range" : "108", + "domain" : "149", + "attributes" : [ "anonymous", "object" ], + "id" : "148" + }, { + "range" : "108", + "domain" : "151", + "attributes" : [ "anonymous", "object" ], + "id" : "150" + }, { + "range" : "108", + "domain" : "153", + "attributes" : [ "anonymous", "object" ], + "id" : "152" + }, { + "range" : "165", + "domain" : "164", + "attributes" : [ "anonymous", "object" ], + "id" : "163" + }, { + "range" : "139", + "domain" : "167", + "attributes" : [ "anonymous", "object" ], + "id" : "166" + }, { + "range" : "170", + "domain" : "169", + "attributes" : [ "anonymous", "object" ], + "id" : "168" + }, { + "range" : "170", + "domain" : "172", + "attributes" : [ "anonymous", "object" ], + "id" : "171" + }, { + "range" : "170", + "domain" : "174", + "attributes" : [ "anonymous", "object" ], + "id" : "173" + }, { + "range" : "45", + "domain" : "44", + "attributes" : [ "anonymous", "object" ], + "id" : "180" + }, { + "range" : "45", + "domain" : "182", + "attributes" : [ "anonymous", "object" ], + "id" : "181" + }, { + "range" : "45", + "domain" : "184", + "attributes" : [ "anonymous", "object" ], + "id" : "183" + }, { + "range" : "91", + "domain" : "186", + "attributes" : [ "anonymous", "object" ], + "id" : "185" + }, { + "range" : "91", + "domain" : "196", + "attributes" : [ "anonymous", "object" ], + "id" : "195" + }, { + "range" : "165", + "domain" : "198", + "attributes" : [ "anonymous", "object" ], + "id" : "197" + }, { + "iri" : "https://w3id.org/pmd/co/relatesTo", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "12", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Describes a general relationship between domain objects.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "relatesTo", + "en" : "relates to" + }, + "domain" : "11", + "subproperty" : [ "200" ], + "attributes" : [ "external", "object" ], + "id" : "199" + }, { + "range" : "129", + "domain" : "128", + "attributes" : [ "anonymous", "object" ], + "id" : "208" + }, { + "range" : "11", + "domain" : "162", + "attributes" : [ "anonymous", "object" ], + "id" : "209" + }, { + "range" : "203", + "domain" : "211", + "attributes" : [ "anonymous", "object" ], + "id" : "210" + }, { + "range" : "11", + "domain" : "213", + "attributes" : [ "anonymous", "object" ], + "id" : "212" + }, { + "range" : "203", + "domain" : "202", + "attributes" : [ "anonymous", "object" ], + "id" : "214" + }, { + "range" : "11", + "domain" : "216", + "attributes" : [ "anonymous", "object" ], + "id" : "215" + }, { + "range" : "11", + "domain" : "218", + "attributes" : [ "anonymous", "object" ], + "id" : "217" + }, { + "iri" : "http://www.w3.org/ns/prov#wasInvalidatedBy", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "34", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "invalidated", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#qualifiedInvalidation", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Invalidation", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasInvalidatedBy", + "undefined" : "wasInvalidatedBy" + }, + "superproperty" : [ "221" ], + "domain" : "220", + "attributes" : [ "external", "object" ], + "id" : "219" + }, { + "iri" : "https://w3id.org/pmd/co/process", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "38", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Describes that a process is associated with a project.", + "type" : "label" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "en", + "value" : "has process", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "process", + "en" : "process" + }, + "domain" : "33", + "attributes" : [ "external", "object" ], + "id" : "222" + }, { + "iri" : "https://w3id.org/pmd/co/composedOf", + "inverse" : "229", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "228", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This property is used to describe which voxels and materials an object is composed of.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This property is used to describe the fact that and which objects are composed of other objects, i.e. it is used to describe the specific constituents or ingredients that form a particular entity or object. \nAs a prepositional phrase, it indicates the elements, parts, or components that make up a whole.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "composedOf", + "en" : "composed of" + }, + "domain" : "228", + "attributes" : [ "external", "object" ], + "id" : "227" + }, { + "range" : "232", + "domain" : "231", + "attributes" : [ "anonymous", "object" ], + "id" : "230" + }, { + "range" : "232", + "domain" : "234", + "attributes" : [ "anonymous", "object" ], + "id" : "233" + }, { + "range" : "187", + "domain" : "236", + "attributes" : [ "anonymous", "object" ], + "id" : "235" + }, { + "range" : "239", + "domain" : "238", + "attributes" : [ "anonymous", "object" ], + "id" : "237" + }, { + "range" : "187", + "domain" : "241", + "attributes" : [ "anonymous", "object" ], + "id" : "240" + }, { + "range" : "244", + "domain" : "243", + "attributes" : [ "anonymous", "object" ], + "id" : "242" + }, { + "range" : "187", + "domain" : "247", + "attributes" : [ "anonymous", "object" ], + "id" : "246" + }, { + "range" : "250", + "domain" : "249", + "attributes" : [ "anonymous", "object" ], + "id" : "248" + }, { + "range" : "11", + "domain" : "203", + "attributes" : [ "anonymous", "object" ], + "id" : "251" + }, { + "range" : "250", + "domain" : "253", + "attributes" : [ "anonymous", "object" ], + "id" : "252" + }, { + "range" : "11", + "domain" : "255", + "attributes" : [ "anonymous", "object" ], + "id" : "254" + }, { + "range" : "250", + "domain" : "257", + "attributes" : [ "anonymous", "object" ], + "id" : "256" + }, { + "range" : "11", + "domain" : "259", + "attributes" : [ "anonymous", "object" ], + "id" : "258" + }, { + "range" : "262", + "domain" : "261", + "attributes" : [ "anonymous", "object" ], + "id" : "260" + }, { + "range" : "178", + "domain" : "177", + "attributes" : [ "anonymous", "object" ], + "id" : "263" + }, { + "range" : "232", + "domain" : "265", + "attributes" : [ "anonymous", "object" ], + "id" : "264" + }, { + "range" : "178", + "domain" : "267", + "attributes" : [ "anonymous", "object" ], + "id" : "266" + }, { + "range" : "232", + "domain" : "78", + "attributes" : [ "anonymous", "object" ], + "id" : "268" + }, { + "range" : "187", + "domain" : "270", + "attributes" : [ "anonymous", "object" ], + "id" : "269" + }, { + "range" : "232", + "domain" : "136", + "attributes" : [ "anonymous", "object" ], + "id" : "271" + }, { + "range" : "187", + "domain" : "84", + "attributes" : [ "anonymous", "object" ], + "id" : "272" + }, { + "range" : "187", + "domain" : "274", + "attributes" : [ "anonymous", "object" ], + "id" : "273" + }, { + "range" : "277", + "domain" : "276", + "attributes" : [ "anonymous", "object" ], + "id" : "275" + }, { + "range" : "277", + "domain" : "279", + "attributes" : [ "anonymous", "object" ], + "id" : "278" + }, { + "iri" : "http://purl.obolibrary.org/obo/RO_0000087", + "baseIri" : "http://purl.obolibrary.org/obo", + "range" : "281", + "label" : { + "IRI-based" : "RO_0000087", + "en" : "has role" + }, + "domain" : "68", + "attributes" : [ "external", "object" ], + "id" : "280" + }, { + "range" : "38", + "domain" : "283", + "attributes" : [ "anonymous", "object" ], + "id" : "282" + }, { + "range" : "277", + "domain" : "285", + "attributes" : [ "anonymous", "object" ], + "id" : "284" + }, { + "range" : "38", + "domain" : "287", + "attributes" : [ "anonymous", "object" ], + "id" : "286" + }, { + "range" : "277", + "domain" : "289", + "attributes" : [ "anonymous", "object" ], + "id" : "288" + }, { + "range" : "38", + "domain" : "291", + "attributes" : [ "anonymous", "object" ], + "id" : "290" + }, { + "range" : "277", + "domain" : "293", + "attributes" : [ "anonymous", "object" ], + "id" : "292" + }, { + "range" : "38", + "domain" : "295", + "attributes" : [ "anonymous", "object" ], + "id" : "294" + }, { + "range" : "232", + "domain" : "297", + "attributes" : [ "anonymous", "object" ], + "id" : "296" + }, { + "range" : "38", + "domain" : "299", + "attributes" : [ "anonymous", "object" ], + "id" : "298" + }, { + "range" : "232", + "domain" : "77", + "attributes" : [ "anonymous", "object" ], + "id" : "300" + }, { + "range" : "7", + "domain" : "119", + "attributes" : [ "anonymous", "object" ], + "id" : "302" + }, { + "range" : "182", + "domain" : "304", + "attributes" : [ "anonymous", "object" ], + "id" : "303" + }, { + "range" : "7", + "domain" : "306", + "attributes" : [ "anonymous", "object" ], + "id" : "305" + }, { + "range" : "182", + "domain" : "201", + "attributes" : [ "anonymous", "object" ], + "id" : "307" + }, { + "range" : "7", + "domain" : "309", + "attributes" : [ "anonymous", "object" ], + "id" : "308" + }, { + "range" : "182", + "domain" : "311", + "attributes" : [ "anonymous", "object" ], + "id" : "310" + }, { + "range" : "38", + "domain" : "2", + "attributes" : [ "anonymous", "object" ], + "id" : "312" + }, { + "range" : "277", + "domain" : "314", + "attributes" : [ "anonymous", "object" ], + "id" : "313" + }, { + "range" : "38", + "domain" : "15", + "attributes" : [ "anonymous", "object" ], + "id" : "315" + }, { + "range" : "38", + "domain" : "207", + "attributes" : [ "anonymous", "object" ], + "id" : "316" + }, { + "iri" : "https://w3id.org/pmd/co/fragmentPath", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "319", + "annotations" : { + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A path expression that addresses a specific element in a document.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "fragmentPath", + "en" : "fragment path" + }, + "domain" : "62", + "attributes" : [ "external", "datatype" ], + "id" : "318" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedRevision", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "327", + "annotations" : { + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Revision", + "type" : "iri" + } ], + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "revisedEntity", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasRevisionOf", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "qualifiedRevision", + "undefined" : "qualifiedRevision" + }, + "superproperty" : [ "9" ], + "domain" : "220", + "comment" : { + "en" : "If this Entity prov:wasRevisionOf Entity :e, then it can qualify how it was revised using prov:qualifiedRevision [ a prov:Revision; prov:entity :e; :foo :bar ]." + }, + "attributes" : [ "external", "object" ], + "id" : "326" + }, { + "range" : "306", + "domain" : "329", + "attributes" : [ "anonymous", "object" ], + "id" : "328" + }, { + "range" : "306", + "domain" : "331", + "attributes" : [ "anonymous", "object" ], + "id" : "330" + }, { + "range" : "291", + "domain" : "333", + "attributes" : [ "anonymous", "object" ], + "id" : "332" + }, { + "range" : "306", + "domain" : "335", + "attributes" : [ "anonymous", "object" ], + "id" : "334" + }, { + "range" : "291", + "domain" : "337", + "attributes" : [ "anonymous", "object" ], + "id" : "336" + }, { + "range" : "306", + "domain" : "339", + "attributes" : [ "anonymous", "object" ], + "id" : "338" + }, { + "range" : "291", + "domain" : "341", + "attributes" : [ "anonymous", "object" ], + "id" : "340" + }, { + "range" : "344", + "domain" : "343", + "attributes" : [ "anonymous", "object" ], + "id" : "342" + }, { + "iri" : "https://w3id.org/pmd/co/executedBy", + "inverse" : "346", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "110", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This property represents which process is executed by which process node.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "executedBy", + "en" : "executed by" + }, + "superproperty" : [ "347" ], + "domain" : "38", + "attributes" : [ "external", "object" ], + "id" : "345" + }, { + "range" : "350", + "domain" : "349", + "attributes" : [ "anonymous", "object" ], + "id" : "348" + }, { + "range" : "344", + "domain" : "352", + "attributes" : [ "anonymous", "object" ], + "id" : "351" + }, { + "range" : "220", + "domain" : "354", + "attributes" : [ "anonymous", "object" ], + "id" : "353" + }, { + "range" : "357", + "domain" : "356", + "attributes" : [ "anonymous", "object" ], + "id" : "355" + }, { + "range" : "220", + "domain" : "250", + "attributes" : [ "anonymous", "object" ], + "id" : "358" + }, { + "range" : "361", + "domain" : "360", + "attributes" : [ "anonymous", "object" ], + "id" : "359" + }, { + "range" : "220", + "domain" : "228", + "attributes" : [ "anonymous", "object" ], + "id" : "362" + }, { + "range" : "119", + "domain" : "364", + "attributes" : [ "anonymous", "object" ], + "id" : "363" + }, { + "range" : "220", + "domain" : "239", + "attributes" : [ "anonymous", "object" ], + "id" : "365" + }, { + "range" : "119", + "domain" : "367", + "attributes" : [ "anonymous", "object" ], + "id" : "366" + }, { + "range" : "220", + "domain" : "369", + "attributes" : [ "anonymous", "object" ], + "id" : "368" + }, { + "range" : "119", + "domain" : "371", + "attributes" : [ "anonymous", "object" ], + "id" : "370" + }, { + "range" : "220", + "domain" : "373", + "attributes" : [ "anonymous", "object" ], + "id" : "372" + }, { + "range" : "220", + "domain" : "11", + "attributes" : [ "anonymous", "object" ], + "id" : "374" + }, { + "iri" : "http://www.w3.org/ns/prov#wasPrimarySourceOf", + "inverse" : "376", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "220", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasPrimarySourceOf", + "undefined" : "wasPrimarySourceOf" + }, + "domain" : "220", + "attributes" : [ "external", "object" ], + "id" : "375" + }, { + "iri" : "http://www.w3.org/ns/prov#wasPlanOf", + "inverse" : "378", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "367", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasPlanOf", + "undefined" : "wasPlanOf" + }, + "domain" : "369", + "attributes" : [ "external", "object" ], + "id" : "377" + }, { + "iri" : "http://www.w3.org/ns/prov#started", + "inverse" : "382", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "34", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "started", + "undefined" : "started" + }, + "domain" : "220", + "attributes" : [ "external", "object" ], + "id" : "381" + }, { + "range" : "22", + "domain" : "384", + "attributes" : [ "anonymous", "object" ], + "id" : "383" + }, { + "range" : "22", + "domain" : "386", + "attributes" : [ "anonymous", "object" ], + "id" : "385" + }, { + "range" : "19", + "domain" : "43", + "attributes" : [ "anonymous", "object" ], + "id" : "387" + }, { + "range" : "22", + "domain" : "389", + "attributes" : [ "anonymous", "object" ], + "id" : "388" + }, { + "range" : "19", + "domain" : "391", + "attributes" : [ "anonymous", "object" ], + "id" : "390" + }, { + "range" : "22", + "domain" : "393", + "attributes" : [ "anonymous", "object" ], + "id" : "392" + }, { + "range" : "220", + "domain" : "395", + "attributes" : [ "anonymous", "object" ], + "id" : "394" + }, { + "range" : "357", + "domain" : "397", + "attributes" : [ "anonymous", "object" ], + "id" : "396" + }, { + "iri" : "https://w3id.org/pmd/co/relatesTo", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "414", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Describes a general relationship between domain objects.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "relatesTo", + "en" : "relates to" + }, + "domain" : "178", + "subproperty" : [ "200" ], + "attributes" : [ "external", "object", "someValues" ], + "id" : "413" + }, { + "iri" : "https://w3id.org/pmd/co/fromValue", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "451", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "undefined", + "value" : "refers to the begin of a value range", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "fromValue", + "en" : "from value" + }, + "domain" : "448", + "attributes" : [ "external", "datatype", "someValues" ], + "id" : "450" + }, { + "range" : "257", + "domain" : "249", + "attributes" : [ "anonymous", "object" ], + "id" : "453" + }, { + "range" : "99", + "domain" : "1", + "attributes" : [ "anonymous", "object" ], + "id" : "454" + }, { + "iri" : "https://w3id.org/pmd/co/toValue", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "452", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "undefined", + "value" : "refers to the end of a value range", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "toValue", + "en" : "to value" + }, + "domain" : "448", + "attributes" : [ "external", "datatype", "someValues" ], + "id" : "455" + }, { + "range" : "400", + "domain" : "399", + "attributes" : [ "anonymous", "object" ], + "id" : "456" + }, { + "range" : "257", + "domain" : "253", + "attributes" : [ "anonymous", "object" ], + "id" : "457" + }, { + "range" : "460", + "domain" : "341", + "attributes" : [ "anonymous", "object" ], + "id" : "459" + }, { + "range" : "38", + "domain" : "430", + "attributes" : [ "anonymous", "object" ], + "id" : "461" + }, { + "range" : "44", + "domain" : "46", + "attributes" : [ "anonymous", "object" ], + "id" : "463" + }, { + "iri" : "http://www.w3.org/ns/prov#startedAtTime", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "476", + "annotations" : { + "editorialNote" : [ { + "identifier" : "editorialNote", + "language" : "en", + "value" : "It is the intent that the property chain holds: (prov:qualifiedStart o prov:atTime) rdfs:subPropertyOf prov:startedAtTime.", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "starting-point", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#atTime", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Start", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "startedAtTime", + "undefined" : "startedAtTime" + }, + "domain" : "34", + "comment" : { + "en" : "The time at which an activity started. See also prov:endedAtTime." + }, + "attributes" : [ "external", "datatype" ], + "id" : "481" + }, { + "range" : "439", + "domain" : "483", + "attributes" : [ "anonymous", "object" ], + "id" : "482" + }, { + "range" : "218", + "domain" : "485", + "attributes" : [ "anonymous", "object" ], + "id" : "484" + }, { + "range" : "439", + "domain" : "487", + "attributes" : [ "anonymous", "object" ], + "id" : "486" + }, { + "range" : "247", + "domain" : "489", + "attributes" : [ "anonymous", "object" ], + "id" : "488" + }, { + "range" : "84", + "domain" : "83", + "attributes" : [ "anonymous", "object" ], + "id" : "490" + }, { + "range" : "247", + "domain" : "492", + "attributes" : [ "anonymous", "object" ], + "id" : "491" + }, { + "range" : "177", + "domain" : "179", + "attributes" : [ "anonymous", "object" ], + "id" : "493" + }, { + "range" : "247", + "domain" : "495", + "attributes" : [ "anonymous", "object" ], + "id" : "494" + }, { + "range" : "247", + "domain" : "497", + "attributes" : [ "anonymous", "object" ], + "id" : "496" + }, { + "iri" : "http://www.w3.org/ns/prov#wasQuotedFrom", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "220", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "quotedAs", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Quotation", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#qualifiedQuotation", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasQuotedFrom", + "undefined" : "wasQuotedFrom" + }, + "superproperty" : [ "499" ], + "domain" : "220", + "comment" : { + "en" : "An entity is derived from an original entity by copying, or 'quoting', some or all of it." + }, + "attributes" : [ "external", "object" ], + "id" : "498" + }, { + "range" : "247", + "domain" : "501", + "attributes" : [ "anonymous", "object" ], + "id" : "500" + }, { + "range" : "439", + "domain" : "503", + "attributes" : [ "anonymous", "object" ], + "id" : "502" + }, { + "range" : "129", + "domain" : "505", + "attributes" : [ "anonymous", "object" ], + "id" : "504" + }, { + "iri" : "https://w3id.org/pmd/co/jsonPath", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "472", + "annotations" : { + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A path expression that allows the elements of a JSON document to be specifically addressed.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "jsonPath", + "en" : "json path" + }, + "domain" : "62", + "attributes" : [ "external", "datatype" ], + "id" : "506" + }, { + "range" : "129", + "domain" : "508", + "attributes" : [ "anonymous", "object" ], + "id" : "507" + }, { + "range" : "129", + "domain" : "510", + "attributes" : [ "anonymous", "object" ], + "id" : "509" + }, { + "range" : "129", + "domain" : "512", + "attributes" : [ "anonymous", "object" ], + "id" : "511" + }, { + "range" : "439", + "domain" : "517", + "attributes" : [ "anonymous", "object" ], + "id" : "516" + }, { + "range" : "184", + "domain" : "89", + "attributes" : [ "anonymous", "object" ], + "id" : "518" + }, { + "range" : "4", + "domain" : "114", + "attributes" : [ "anonymous", "object" ], + "id" : "519" + }, { + "range" : "4", + "domain" : "113", + "attributes" : [ "anonymous", "object" ], + "id" : "520" + }, { + "range" : "184", + "domain" : "5", + "attributes" : [ "anonymous", "object" ], + "id" : "521" + }, { + "range" : "184", + "domain" : "523", + "attributes" : [ "anonymous", "object" ], + "id" : "522" + }, { + "range" : "75", + "domain" : "78", + "attributes" : [ "anonymous", "object" ], + "id" : "524" + }, { + "range" : "75", + "domain" : "77", + "attributes" : [ "anonymous", "object" ], + "id" : "525" + }, { + "range" : "443", + "domain" : "527", + "attributes" : [ "anonymous", "object" ], + "id" : "526" + }, { + "range" : "4", + "domain" : "112", + "attributes" : [ "anonymous", "object" ], + "id" : "528" + }, { + "range" : "196", + "domain" : "530", + "attributes" : [ "anonymous", "object" ], + "id" : "529" + }, { + "iri" : "http://www.w3.org/ns/prov#alternateOf", + "inverse" : "531", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "220", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "alternateOf", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "alternate", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-alternate", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Two alternate entities present aspects of the same thing. These aspects may be the same or different, and the alternate entities may or may not overlap in time.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "constraints" : [ { + "identifier" : "constraints", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-constraints-20130430/#prov-dm-constraints-fig", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-alternate", + "type" : "label" + } ], + "seeAlso" : [ { + "identifier" : "seeAlso", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#specializationOf", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "alternateOf", + "undefined" : "alternateOf" + }, + "domain" : "220", + "subproperty" : [ "532" ], + "attributes" : [ "external", "object" ], + "id" : "531" + }, { + "range" : "4", + "domain" : "111", + "attributes" : [ "anonymous", "object" ], + "id" : "533" + }, { + "range" : "196", + "domain" : "535", + "attributes" : [ "anonymous", "object" ], + "id" : "534" + }, { + "range" : "196", + "domain" : "537", + "attributes" : [ "anonymous", "object" ], + "id" : "536" + }, { + "range" : "42", + "domain" : "41", + "attributes" : [ "anonymous", "object" ], + "id" : "538" + }, { + "range" : "331", + "domain" : "544", + "attributes" : [ "anonymous", "object" ], + "id" : "543" + }, { + "range" : "331", + "domain" : "514", + "attributes" : [ "anonymous", "object" ], + "id" : "545" + }, { + "range" : "331", + "domain" : "327", + "attributes" : [ "anonymous", "object" ], + "id" : "546" + }, { + "range" : "449", + "domain" : "548", + "attributes" : [ "anonymous", "object" ], + "id" : "547" + }, { + "range" : "449", + "domain" : "550", + "attributes" : [ "anonymous", "object" ], + "id" : "549" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedGeneration", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "552", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "qualifiedGenerationOf", + "type" : "label" + } ], + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Generation", + "type" : "iri" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasGeneratedBy", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "qualifiedGeneration", + "undefined" : "qualifiedGeneration" + }, + "superproperty" : [ "9" ], + "domain" : "220", + "comment" : { + "en" : "If this Activity prov:generated Entity :e, then it can qualify how it performed the Generation using prov:qualifiedGeneration [ a prov:Generation; prov:entity :e; :foo :bar ]." + }, + "attributes" : [ "external", "object" ], + "id" : "551" + }, { + "range" : "554", + "domain" : "277", + "attributes" : [ "anonymous", "object" ], + "id" : "553" + }, { + "range" : "554", + "domain" : "165", + "attributes" : [ "anonymous", "object" ], + "id" : "555" + }, { + "range" : "554", + "domain" : "244", + "attributes" : [ "anonymous", "object" ], + "id" : "556" + }, { + "range" : "47", + "domain" : "49", + "attributes" : [ "anonymous", "object" ], + "id" : "557" + }, { + "range" : "47", + "domain" : "48", + "attributes" : [ "anonymous", "object" ], + "id" : "558" + }, { + "range" : "554", + "domain" : "560", + "attributes" : [ "anonymous", "object" ], + "id" : "559" + }, { + "range" : "427", + "domain" : "562", + "attributes" : [ "anonymous", "object" ], + "id" : "561" + }, { + "range" : "430", + "domain" : "564", + "attributes" : [ "anonymous", "object" ], + "id" : "563" + }, { + "range" : "356", + "domain" : "566", + "attributes" : [ "anonymous", "object" ], + "id" : "565" + }, { + "range" : "430", + "domain" : "568", + "attributes" : [ "anonymous", "object" ], + "id" : "567" + }, { + "range" : "430", + "domain" : "74", + "attributes" : [ "anonymous", "object" ], + "id" : "569" + }, { + "range" : "205", + "domain" : "204", + "attributes" : [ "anonymous", "object" ], + "id" : "570" + }, { + "range" : "224", + "domain" : "225", + "attributes" : [ "anonymous", "object" ], + "id" : "571" + }, { + "range" : "205", + "domain" : "223", + "attributes" : [ "anonymous", "object" ], + "id" : "572" + }, { + "iri" : "http://www.w3.org/ns/prov#hadMember", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "220", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "wasMemberOf", + "type" : "label" + } ], + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Collection", + "type" : "iri" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "hadMember", + "undefined" : "hadMember" + }, + "superproperty" : [ "221" ], + "domain" : "239", + "attributes" : [ "external", "object" ], + "id" : "573" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedGenerationOf", + "inverse" : "551", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "220", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "qualifiedGenerationOf", + "undefined" : "qualifiedGenerationOf" + }, + "domain" : "552", + "attributes" : [ "external", "object" ], + "id" : "574" + }, { + "range" : "416", + "domain" : "578", + "attributes" : [ "anonymous", "object" ], + "id" : "577" + }, { + "range" : "406", + "domain" : "421", + "attributes" : [ "anonymous", "object" ], + "id" : "579" + }, { + "range" : "158", + "domain" : "157", + "attributes" : [ "anonymous", "object" ], + "id" : "580" + }, { + "range" : "416", + "domain" : "350", + "attributes" : [ "anonymous", "object" ], + "id" : "581" + }, { + "range" : "406", + "domain" : "583", + "attributes" : [ "anonymous", "object" ], + "id" : "582" + }, { + "range" : "84", + "domain" : "194", + "attributes" : [ "anonymous", "object" ], + "id" : "584" + }, { + "range" : "406", + "domain" : "513", + "attributes" : [ "anonymous", "object" ], + "id" : "585" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedAssociationOf", + "inverse" : "587", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "34", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "qualifiedAssociationOf", + "undefined" : "qualifiedAssociationOf" + }, + "domain" : "367", + "attributes" : [ "external", "object" ], + "id" : "586" + }, { + "range" : "406", + "domain" : "405", + "attributes" : [ "anonymous", "object" ], + "id" : "588" + }, { + "range" : "84", + "domain" : "117", + "attributes" : [ "anonymous", "object" ], + "id" : "589" + }, { + "range" : "84", + "domain" : "193", + "attributes" : [ "anonymous", "object" ], + "id" : "590" + }, { + "iri" : "http://www.w3.org/ns/prov#wasUsedBy", + "inverse" : "592", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "34", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasUsedBy", + "undefined" : "wasUsedBy" + }, + "domain" : "220", + "subproperty" : [ "593" ], + "attributes" : [ "external", "object" ], + "id" : "591" + }, { + "range" : "84", + "domain" : "192", + "attributes" : [ "anonymous", "object" ], + "id" : "595" + }, { + "range" : "84", + "domain" : "189", + "attributes" : [ "anonymous", "object" ], + "id" : "596" + }, { + "range" : "84", + "domain" : "188", + "attributes" : [ "anonymous", "object" ], + "id" : "597" + }, { + "range" : "84", + "domain" : "191", + "attributes" : [ "anonymous", "object" ], + "id" : "598" + }, { + "range" : "84", + "domain" : "190", + "attributes" : [ "anonymous", "object" ], + "id" : "599" + }, { + "iri" : "https://w3id.org/pmd/co/participantOf", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "62", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "en", + "value" : "is participant of", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "participantOf", + "en" : "participant of" + }, + "superproperty" : [ "614" ], + "domain" : "62", + "subproperty" : [ "593", "615" ], + "attributes" : [ "external", "object" ], + "id" : "613" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedCommunicationOf", + "inverse" : "121", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "34", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "qualifiedCommunicationOf", + "undefined" : "qualifiedCommunicationOf" + }, + "domain" : "122", + "attributes" : [ "external", "object" ], + "id" : "621" + }, { + "iri" : "http://www.w3.org/ns/prov#generatedAtTime", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "480", + "annotations" : { + "editorialNote" : [ { + "identifier" : "editorialNote", + "language" : "en", + "value" : "It is the intent that the property chain holds: (prov:qualifiedGeneration o prov:atTime) rdfs:subPropertyOf prov:generatedAtTime.", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#atTime", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Generation", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "generatedAtTime", + "undefined" : "generatedAtTime" + }, + "domain" : "220", + "comment" : { + "en" : "The time at which an entity was completely created and is available for use." + }, + "attributes" : [ "external", "datatype" ], + "id" : "623" + }, { + "range" : "321", + "domain" : "323", + "attributes" : [ "anonymous", "object" ], + "id" : "624" + }, { + "range" : "321", + "domain" : "322", + "attributes" : [ "anonymous", "object" ], + "id" : "625" + }, { + "range" : "314", + "domain" : "325", + "attributes" : [ "anonymous", "object" ], + "id" : "626" + }, { + "iri" : "https://w3id.org/pmd/co/inputOf", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "62", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "undefined", + "value" : "is input of", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "inputOf", + "en" : "input of" + }, + "superproperty" : [ "613", "591" ], + "domain" : "62", + "attributes" : [ "external", "object" ], + "id" : "593" + }, { + "iri" : "http://www.w3.org/ns/prov#wasDerivedFrom", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "220", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "hadDerivation", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A derivation is a transformation of an entity into another, an update of an entity resulting in a new one, or the construction of a new entity based on a pre-existing entity.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "starting-point", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#qualifiedDerivation", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Derivation", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasDerivedFrom", + "undefined" : "wasDerivedFrom" + }, + "superproperty" : [ "221" ], + "domain" : "220", + "subproperty" : [ "376", "629", "498" ], + "comment" : { + "en" : "The more specific subproperties of prov:wasDerivedFrom (i.e., prov:wasQuotedFrom, prov:wasRevisionOf, prov:hadPrimarySource) should be used when applicable." + }, + "attributes" : [ "external", "object" ], + "id" : "499" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedStart", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "339", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "qualifiedStartOf", + "type" : "label" + } ], + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Start", + "type" : "iri" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasStartedBy", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "qualifiedStart", + "undefined" : "qualifiedStart" + }, + "superproperty" : [ "9" ], + "domain" : "34", + "comment" : { + "en" : "If this Activity prov:wasStartedBy Entity :e1, then it can qualify how it was started using prov:qualifiedStart [ a prov:Start; prov:entity :e1; :foo :bar ]." + }, + "attributes" : [ "external", "object" ], + "id" : "630" + }, { + "iri" : "https://w3id.org/pmd/co/hasFunction", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "62", + "label" : { + "IRI-based" : "hasFunction" + }, + "domain" : "62", + "attributes" : [ "external", "object" ], + "id" : "632" + }, { + "iri" : "http://www.w3.org/ns/prov#wasAssociateFor", + "inverse" : "347", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "34", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasAssociateFor", + "undefined" : "wasAssociateFor" + }, + "domain" : "68", + "attributes" : [ "external", "object" ], + "id" : "635" + }, { + "iri" : "http://www.w3.org/ns/prov#wasInfluencedBy", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "410", + "annotations" : { + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Influence", + "type" : "iri" + } ], + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "influenced", + "type" : "label" + } ], + "editorialNote" : [ { + "identifier" : "editorialNote", + "language" : "en", + "value" : "The sub-properties of prov:wasInfluencedBy can be elaborated in more detail using the Qualification Pattern. For example, the binary relation :baking prov:used :spoon can be qualified by asserting :baking prov:qualifiedUsage [ a prov:Usage; prov:entity :spoon; prov:atLocation :kitchen ] .\n\nSubproperties of prov:wasInfluencedBy may also be asserted directly without being qualified.\n\nprov:wasInfluencedBy should not be used without also using one of its subproperties. \n", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Influence", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#qualifiedInfluence", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasInfluencedBy", + "undefined" : "wasInfluencedBy" + }, + "domain" : "408", + "subproperty" : [ "636", "637", "499", "638", "592", "347", "382", "639", "640", "219", "573" ], + "comment" : { + "en" : "Because prov:wasInfluencedBy is a broad relation, its more specific subproperties (e.g. prov:wasInformedBy, prov:actedOnBehalfOf, prov:wasEndedBy, etc.) should be used when applicable.", + "undefined" : "This property has multiple RDFS domains to suit multiple OWL Profiles. See PROV-O OWL Profile." + }, + "attributes" : [ "external", "object" ], + "id" : "221" + }, { + "iri" : "http://www.w3.org/ns/prov#wasMemberOf", + "inverse" : "573", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "239", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasMemberOf", + "undefined" : "wasMemberOf" + }, + "domain" : "220", + "attributes" : [ "external", "object" ], + "id" : "643" + }, { + "iri" : "https://w3id.org/pmd/co/participant", + "inverse" : "613", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "403", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "undefined", + "value" : "has participant", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A relation between a process and an object, in which the objects is somehow involved in the process.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "participant", + "en" : "participant" + }, + "domain" : "38", + "subproperty" : [ "646", "647" ], + "attributes" : [ "external", "object" ], + "id" : "645" + }, { + "iri" : "http://www.w3.org/ns/prov#quotedAs", + "inverse" : "498", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "220", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "quotedAs", + "undefined" : "quotedAs" + }, + "domain" : "220", + "attributes" : [ "external", "object" ], + "id" : "649" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedInvalidationOf", + "inverse" : "652", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "220", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "qualifiedInvalidationOf", + "undefined" : "qualifiedInvalidationOf" + }, + "domain" : "603", + "attributes" : [ "external", "object" ], + "id" : "651" + }, { + "iri" : "https://w3id.org/pmd/co/previousProcess", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "38", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This property is used to indicate that which process was previously run.", + "type" : "label" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "undefined", + "value" : "has previous process", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "previousProcess", + "en" : "previous process" + }, + "domain" : "38", + "attributes" : [ "external", "object" ], + "id" : "653" + }, { + "iri" : "http://www.w3.org/ns/prov#wasEndedBy", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "220", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "ended", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#qualifiedEnd", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#End", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasEndedBy", + "undefined" : "wasEndedBy" + }, + "superproperty" : [ "221" ], + "domain" : "34", + "comment" : { + "en" : "End is when an activity is deemed to have ended. An end may refer to an entity, known as trigger, that terminated the activity." + }, + "attributes" : [ "external", "object" ], + "id" : "636" + }, { + "range" : "443", + "domain" : "628", + "attributes" : [ "anonymous", "object" ], + "id" : "656" + }, { + "iri" : "http://www.w3.org/ns/prov#hadPrimarySource", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "220", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "wasPrimarySourceOf", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#qualifiedPrimarySource", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#PrimarySource", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "hadPrimarySource", + "undefined" : "hadPrimarySource" + }, + "superproperty" : [ "499" ], + "domain" : "220", + "attributes" : [ "external", "object" ], + "id" : "376" + }, { + "iri" : "http://www.w3.org/ns/prov#influenced", + "inverse" : "221", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "408", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "wasInfluencedBy", + "type" : "label" + } ], + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Influence", + "type" : "iri" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "influenced", + "undefined" : "influenced" + }, + "domain" : "410", + "subproperty" : [ "658", "659" ], + "attributes" : [ "external", "object" ], + "id" : "657" + }, { + "range" : "176", + "domain" : "620", + "attributes" : [ "anonymous", "object" ], + "id" : "661" + }, { + "range" : "523", + "domain" : "622", + "attributes" : [ "anonymous", "object" ], + "id" : "662" + }, { + "range" : "435", + "domain" : "466", + "attributes" : [ "anonymous", "object" ], + "id" : "663" + }, { + "range" : "68", + "domain" : "67", + "attributes" : [ "anonymous", "object" ], + "id" : "664" + }, { + "range" : "68", + "domain" : "110", + "attributes" : [ "anonymous", "object" ], + "id" : "665" + }, { + "range" : "68", + "domain" : "25", + "attributes" : [ "anonymous", "object" ], + "id" : "666" + }, { + "range" : "68", + "domain" : "668", + "attributes" : [ "anonymous", "object" ], + "id" : "667" + }, { + "range" : "611", + "domain" : "399", + "attributes" : [ "anonymous", "object" ], + "id" : "669" + }, { + "range" : "611", + "domain" : "400", + "attributes" : [ "anonymous", "object" ], + "id" : "670" + }, { + "range" : "176", + "domain" : "619", + "attributes" : [ "anonymous", "object" ], + "id" : "671" + }, { + "range" : "176", + "domain" : "245", + "attributes" : [ "anonymous", "object" ], + "id" : "672" + }, { + "iri" : "https://w3id.org/pmd/co/input", + "inverse" : "593", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "62", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This property is used to link the processes to their input objects.", + "type" : "label" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "undefined", + "value" : "has input", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "input", + "en" : "input" + }, + "superproperty" : [ "645", "592" ], + "domain" : "62", + "attributes" : [ "external", "object" ], + "id" : "646" + }, { + "range" : "654", + "domain" : "675", + "attributes" : [ "anonymous", "object" ], + "id" : "674" + }, { + "range" : "654", + "domain" : "554", + "attributes" : [ "anonymous", "object" ], + "id" : "677" + }, { + "range" : "654", + "domain" : "357", + "attributes" : [ "anonymous", "object" ], + "id" : "678" + }, { + "iri" : "http://www.w3.org/ns/prov#influencer", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "473", + "annotations" : { + "editorialNote" : [ { + "identifier" : "editorialNote", + "language" : "en", + "value" : "This property and its subproperties are used in the same way as the rdf:object property, i.e. to reference the object of an unqualified prov:wasInfluencedBy or prov:influenced triple.", + "type" : "label" + } ], + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "hadInfluence", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-influence", + "type" : "label" + } ], + "editorsDefinition" : [ { + "identifier" : "editorsDefinition", + "language" : "en", + "value" : "This property is used as part of the qualified influence pattern. Subclasses of prov:Influence use these subproperties to reference the resource (Entity, Agent, or Activity) whose influence is being qualified.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "influencer", + "undefined" : "influencer" + }, + "domain" : "7", + "subproperty" : [ "120", "680", "681" ], + "comment" : { + "en" : "Subproperties of prov:influencer are used to cite the object of an unqualified PROV-O triple whose predicate is a subproperty of prov:wasInfluencedBy (e.g. prov:used, prov:wasGeneratedBy). prov:influencer is used much like rdf:object is used." + }, + "attributes" : [ "external", "object" ], + "id" : "679" + }, { + "range" : "17", + "domain" : "616", + "attributes" : [ "anonymous", "object" ], + "id" : "682" + }, { + "range" : "560", + "domain" : "617", + "attributes" : [ "anonymous", "object" ], + "id" : "683" + }, { + "range" : "176", + "domain" : "175", + "attributes" : [ "anonymous", "object" ], + "id" : "684" + }, { + "range" : "176", + "domain" : "618", + "attributes" : [ "anonymous", "object" ], + "id" : "685" + }, { + "range" : "176", + "domain" : "226", + "attributes" : [ "anonymous", "object" ], + "id" : "686" + }, { + "iri" : "https://w3id.org/pmd/co/superordinateProcess", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "62", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This property is used to link a process to its super ordinated processes.", + "type" : "label" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "en", + "value" : "has superordinate process", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "superordinateProcess", + "en" : "superordinate process" + }, + "superproperty" : [ "614" ], + "domain" : "62", + "attributes" : [ "external", "object" ], + "id" : "687" + }, { + "iri" : "http://www.w3.org/ns/prov#generatedAsDerivation", + "inverse" : "689", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "331", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "generatedAsDerivation", + "undefined" : "generatedAsDerivation" + }, + "domain" : "552", + "attributes" : [ "external", "object" ], + "id" : "688" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedDelegationOf", + "inverse" : "691", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "68", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "qualifiedDelegationOf", + "undefined" : "qualifiedDelegationOf" + }, + "domain" : "371", + "attributes" : [ "external", "object" ], + "id" : "690" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedAssociation", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "367", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "qualifiedAssociationOf", + "type" : "label" + } ], + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Association", + "type" : "iri" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasAssociatedWith", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "qualifiedAssociation", + "undefined" : "qualifiedAssociation" + }, + "superproperty" : [ "9" ], + "domain" : "34", + "comment" : { + "en" : "If this Activity prov:wasAssociatedWith Agent :ag, then it can qualify the Association using prov:qualifiedAssociation [ a prov:Association; prov:agent :ag; :foo :bar ]." + }, + "attributes" : [ "external", "object" ], + "id" : "587" + }, { + "iri" : "https://w3id.org/pmd/co/composes", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "228", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This property is used to describe the fact that and which objects compose other objects, i.e. it is used to describe the specific constituents or ingredients forming a particular entity or object. \nAs a prepositional phrase, it indicates the elements, parts, or components that make up a whole of another object.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This property is used to describe which objects a voxel or a material contributes to compose.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Eigenschaft wird verwendet, um die Tatsache zu beschreiben, dass und welche Objekte andere Objekte zusammensetzen, d. h. sie wird verwendet, um die spezifischen Bestandteile oder Zutaten zu beschreiben, aus denen ein bestimmtes Gebilde oder Objekt besteht. \nAls Präpositionalphrase bezeichnet sie die Elemente, Teile oder Komponenten, aus denen sich ein anderes Objekt zusammensetzt.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "composes", + "en" : "composes" + }, + "domain" : "228", + "attributes" : [ "external", "object" ], + "id" : "229" + }, { + "iri" : "http://www.w3.org/ns/prov#wasInformedBy", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "34", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "informed", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "starting-point", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Communication", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#qualifiedCommunication", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasInformedBy", + "undefined" : "wasInformedBy" + }, + "superproperty" : [ "221" ], + "domain" : "34", + "subproperty" : [ "694", "695" ], + "comment" : { + "en" : "An activity a2 is dependent on or informed by another activity a1, by way of some unspecified entity that is generated by a1 and used by a2." + }, + "attributes" : [ "external", "object" ], + "id" : "640" + }, { + "iri" : "https://w3id.org/pmd/co/output", + "inverse" : "615", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "62", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "undefined", + "value" : "has output", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This property is used to link the processes to their output objects", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "output", + "en" : "output" + }, + "superproperty" : [ "645", "658" ], + "domain" : "62", + "attributes" : [ "external", "object" ], + "id" : "647" + }, { + "iri" : "http://www.w3.org/ns/prov#generated", + "inverse" : "637", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "220", + "annotations" : { + "editorialNote" : [ { + "identifier" : "editorialNote", + "language" : "en", + "value" : "prov:generated is one of few inverse property defined, to allow Activity-oriented assertions in addition to Entity-oriented assertions.", + "type" : "label" + } ], + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Generation", + "type" : "iri" + } ], + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "wasGeneratedBy", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "generated", + "undefined" : "generated" + }, + "superproperty" : [ "657" ], + "domain" : "34", + "subproperty" : [ "647" ], + "attributes" : [ "external", "object" ], + "id" : "658" + }, { + "range" : "411", + "domain" : "68", + "attributes" : [ "anonymous", "object" ], + "id" : "697" + }, { + "range" : "411", + "domain" : "220", + "attributes" : [ "anonymous", "object" ], + "id" : "698" + }, { + "iri" : "http://purl.org/dc/terms/isPartOf", + "baseIri" : "http://purl.org/dc/terms", + "range" : "422", + "label" : { + "IRI-based" : "isPartOf" + }, + "superproperty" : [ "614" ], + "domain" : "213", + "attributes" : [ "external", "object", "someValues" ], + "id" : "699" + }, { + "iri" : "http://purl.obolibrary.org/obo/RO_0000087", + "baseIri" : "http://purl.obolibrary.org/obo", + "range" : "25", + "label" : { + "IRI-based" : "RO_0000087", + "en" : "has role" + }, + "domain" : "701", + "attributes" : [ "external", "object", "someValues" ], + "id" : "700" + }, { + "iri" : "https://w3id.org/pmd/co/characteristicOf", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "301", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "undefined", + "value" : "is characteristic of", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "characteristicOf", + "en" : "characteristic of" + }, + "superproperty" : [ "614" ], + "domain" : "439", + "attributes" : [ "external", "object", "someValues" ], + "id" : "702" + }, { + "iri" : "http://purl.obolibrary.org/obo/RO_0000087", + "baseIri" : "http://purl.obolibrary.org/obo", + "range" : "25", + "label" : { + "IRI-based" : "RO_0000087", + "en" : "has role" + }, + "domain" : "704", + "attributes" : [ "external", "object", "someValues" ], + "id" : "703" + }, { + "iri" : "https://w3id.org/pmd/co/characteristicOf", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "708", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "undefined", + "value" : "is characteristic of", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "characteristicOf", + "en" : "characteristic of" + }, + "superproperty" : [ "614" ], + "domain" : "412", + "attributes" : [ "external", "object", "someValues" ], + "id" : "707" + }, { + "range" : "249", + "domain" : "253", + "attributes" : [ "anonymous", "object" ], + "id" : "709" + }, { + "range" : "220", + "domain" : "34", + "attributes" : [ "anonymous", "object" ], + "id" : "710" + }, { + "range" : "306", + "domain" : "309", + "attributes" : [ "anonymous", "object" ], + "id" : "711" + }, { + "iri" : "http://www.w3.org/ns/prov#hadRole", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "281", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "wasRoleIn", + "type" : "label" + } ], + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Role", + "type" : "iri" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "editorsDefinition" : [ { + "identifier" : "editorsDefinition", + "language" : "en", + "value" : "prov:hadRole references the Role (i.e. the function of an entity with respect to an activity), in the context of an instantaneous usage, generation, association, start, and end.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "hadRole", + "undefined" : "hadRole" + }, + "domain" : "464", + "comment" : { + "en" : "The _optional_ Role that an Entity assumed in the context of an Activity. For example, :baking prov:used :spoon; prov:qualified [ a prov:Usage; prov:entity :spoon; prov:hadRole roles:mixing_implement ].", + "undefined" : "This property has multiple RDFS domains to suit multiple OWL Profiles. See PROV-O OWL Profile." + }, + "attributes" : [ "external", "object" ], + "id" : "713" + }, { + "range" : "110", + "domain" : "407", + "attributes" : [ "anonymous", "object" ], + "id" : "715" + }, { + "range" : "110", + "domain" : "717", + "attributes" : [ "anonymous", "object" ], + "id" : "716" + }, { + "range" : "110", + "domain" : "42", + "attributes" : [ "anonymous", "object" ], + "id" : "718" + }, { + "range" : "110", + "domain" : "127", + "attributes" : [ "anonymous", "object" ], + "id" : "719" + }, { + "range" : "391", + "domain" : "721", + "attributes" : [ "anonymous", "object" ], + "id" : "720" + }, { + "range" : "540", + "domain" : "712", + "attributes" : [ "anonymous", "object" ], + "id" : "722" + }, { + "range" : "426", + "domain" : "648", + "attributes" : [ "anonymous", "object" ], + "id" : "723" + }, { + "iri" : "http://www.w3.org/ns/prov#specializationOf", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "477", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "generalizationOf", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "alternate", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-specialization", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An entity that is a specialization of another shares all aspects of the latter, and additionally presents more specific aspects of the same thing as the latter. In particular, the lifetime of the entity being specialized contains that of any specialization. Examples of aspects include a time period, an abstraction, and a context associated with the entity.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "constraints" : [ { + "identifier" : "constraints", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-constraints-20130430/#prov-dm-constraints-fig", + "type" : "label" + } ], + "seeAlso" : [ { + "identifier" : "seeAlso", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#alternateOf", + "type" : "iri" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-specialization", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "specializationOf", + "undefined" : "specializationOf" + }, + "superproperty" : [ "531" ], + "domain" : "220", + "attributes" : [ "external", "object" ], + "id" : "532" + }, { + "iri" : "http://www.w3.org/ns/prov#hadDelegate", + "inverse" : "639", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "68", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "hadDelegate", + "undefined" : "hadDelegate" + }, + "domain" : "68", + "attributes" : [ "external", "object" ], + "id" : "724" + }, { + "iri" : "http://www.w3.org/2002/07/owl#topObjectProperty", + "baseIri" : "http://www.w3.org/2002/07/owl", + "range" : "62", + "label" : { + "IRI-based" : "topObjectProperty" + }, + "domain" : "62", + "subproperty" : [ "725", "726", "687", "613", "727", "728", "729" ], + "attributes" : [ "external", "object" ], + "id" : "614" + }, { + "iri" : "https://w3id.org/pmd/co/belongsToProject", + "inverse" : "222", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "33", + "annotations" : { + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "belongs to process", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Association between a process and a project.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "belongsToProject" + }, + "superproperty" : [ "640" ], + "domain" : "38", + "attributes" : [ "external", "object" ], + "id" : "694" + }, { + "range" : "110", + "domain" : "224", + "attributes" : [ "anonymous", "object" ], + "id" : "730" + }, { + "range" : "110", + "domain" : "650", + "attributes" : [ "anonymous", "object" ], + "id" : "731" + }, { + "range" : "110", + "domain" : "654", + "attributes" : [ "anonymous", "object" ], + "id" : "732" + }, { + "range" : "110", + "domain" : "633", + "attributes" : [ "anonymous", "object" ], + "id" : "733" + }, { + "range" : "110", + "domain" : "176", + "attributes" : [ "anonymous", "object" ], + "id" : "734" + }, { + "range" : "110", + "domain" : "419", + "attributes" : [ "anonymous", "object" ], + "id" : "736" + }, { + "range" : "110", + "domain" : "644", + "attributes" : [ "anonymous", "object" ], + "id" : "737" + }, { + "range" : "110", + "domain" : "109", + "attributes" : [ "anonymous", "object" ], + "id" : "738" + }, { + "range" : "110", + "domain" : "673", + "attributes" : [ "anonymous", "object" ], + "id" : "739" + }, { + "range" : "110", + "domain" : "705", + "attributes" : [ "anonymous", "object" ], + "id" : "740" + }, { + "range" : "110", + "domain" : "708", + "attributes" : [ "anonymous", "object" ], + "id" : "741" + }, { + "iri" : "https://w3id.org/pmd/co/relatesToElement", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "320", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "relatesToElement", + "en" : "relates to element" + }, + "superproperty" : [ "199" ], + "domain" : "422", + "attributes" : [ "external", "object" ], + "id" : "200" + }, { + "range" : "110", + "domain" : "301", + "attributes" : [ "anonymous", "object" ], + "id" : "743" + }, { + "range" : "110", + "domain" : "735", + "attributes" : [ "anonymous", "object" ], + "id" : "744" + }, { + "iri" : "http://www.w3.org/ns/prov#entityOfInfluence", + "inverse" : "680", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "306", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "entityOfInfluence", + "undefined" : "entityOfInfluence" + }, + "domain" : "220", + "attributes" : [ "external", "object" ], + "id" : "745" + }, { + "range" : "295", + "domain" : "747", + "attributes" : [ "anonymous", "object" ], + "id" : "746" + }, { + "range" : "295", + "domain" : "460", + "attributes" : [ "anonymous", "object" ], + "id" : "748" + }, { + "range" : "186", + "domain" : "750", + "attributes" : [ "anonymous", "object" ], + "id" : "749" + }, { + "range" : "228", + "domain" : "605", + "attributes" : [ "anonymous", "object" ], + "id" : "751" + }, { + "range" : "228", + "domain" : "627", + "attributes" : [ "anonymous", "object" ], + "id" : "752" + }, { + "range" : "228", + "domain" : "714", + "attributes" : [ "anonymous", "object" ], + "id" : "753" + }, { + "range" : "228", + "domain" : "380", + "attributes" : [ "anonymous", "object" ], + "id" : "754" + }, { + "range" : "228", + "domain" : "22", + "attributes" : [ "anonymous", "object" ], + "id" : "755" + }, { + "range" : "228", + "domain" : "757", + "attributes" : [ "anonymous", "object" ], + "id" : "756" + }, { + "range" : "419", + "domain" : "759", + "attributes" : [ "anonymous", "object" ], + "id" : "758" + }, { + "range" : "11", + "domain" : "139", + "attributes" : [ "anonymous", "object" ], + "id" : "760" + }, { + "range" : "11", + "domain" : "445", + "attributes" : [ "anonymous", "object" ], + "id" : "761" + }, { + "range" : "11", + "domain" : "446", + "attributes" : [ "anonymous", "object" ], + "id" : "762" + }, { + "range" : "11", + "domain" : "447", + "attributes" : [ "anonymous", "object" ], + "id" : "763" + }, { + "range" : "11", + "domain" : "448", + "attributes" : [ "anonymous", "object" ], + "id" : "764" + }, { + "range" : "11", + "domain" : "449", + "attributes" : [ "anonymous", "object" ], + "id" : "765" + }, { + "range" : "11", + "domain" : "262", + "attributes" : [ "anonymous", "object" ], + "id" : "766" + }, { + "range" : "11", + "domain" : "416", + "attributes" : [ "anonymous", "object" ], + "id" : "767" + }, { + "range" : "436", + "domain" : "458", + "attributes" : [ "anonymous", "object" ], + "id" : "768" + }, { + "range" : "419", + "domain" : "418", + "attributes" : [ "anonymous", "object" ], + "id" : "769" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedDelegation", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "371", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "qualifiedDelegationOf", + "type" : "label" + } ], + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Delegation", + "type" : "iri" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#actedOnBehalfOf", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "qualifiedDelegation", + "undefined" : "qualifiedDelegation" + }, + "superproperty" : [ "9" ], + "domain" : "68", + "comment" : { + "en" : "If this Agent prov:actedOnBehalfOf Agent :ag, then it can qualify how with prov:qualifiedResponsibility [ a prov:Responsibility; prov:agent :ag; :foo :bar ]." + }, + "attributes" : [ "external", "object" ], + "id" : "691" + }, { + "iri" : "http://www.w3.org/2002/07/owl#topDataProperty", + "baseIri" : "http://www.w3.org/2002/07/owl", + "range" : "470", + "label" : { + "IRI-based" : "topDataProperty" + }, + "domain" : "62", + "attributes" : [ "external", "datatype" ], + "id" : "770" + }, { + "range" : "76", + "domain" : "404", + "attributes" : [ "anonymous", "object" ], + "id" : "772" + }, { + "range" : "76", + "domain" : "609", + "attributes" : [ "anonymous", "object" ], + "id" : "773" + }, { + "range" : "76", + "domain" : "610", + "attributes" : [ "anonymous", "object" ], + "id" : "774" + }, { + "iri" : "http://www.w3.org/ns/prov#atTime", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "478", + "annotations" : { + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#InstantaneousEvent", + "type" : "iri" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#endedAtTime", + "type" : "iri" + }, { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#generatedAtTime", + "type" : "iri" + }, { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#invalidatedAtTime", + "type" : "iri" + }, { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#startedAtTime", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "atTime", + "undefined" : "atTime" + }, + "domain" : "411", + "comment" : { + "en" : "The time at which an InstantaneousEvent occurred, in the form of xsd:dateTime." + }, + "attributes" : [ "external", "datatype" ], + "id" : "775" + }, { + "range" : "309", + "domain" : "552", + "attributes" : [ "anonymous", "object" ], + "id" : "776" + }, { + "range" : "309", + "domain" : "603", + "attributes" : [ "anonymous", "object" ], + "id" : "777" + }, { + "range" : "76", + "domain" : "75", + "attributes" : [ "anonymous", "object" ], + "id" : "778" + }, { + "iri" : "https://w3id.org/pmd/co/subordinateProcess", + "inverse" : "687", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "38", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This property is used to link a process to its subordinate processes.", + "type" : "label" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "undefined", + "value" : "has subordinate process", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "subordinateProcess", + "en" : "subordinate process" + }, + "domain" : "38", + "attributes" : [ "external", "object" ], + "id" : "779" + }, { + "range" : "76", + "domain" : "606", + "attributes" : [ "anonymous", "object" ], + "id" : "780" + }, { + "range" : "76", + "domain" : "515", + "attributes" : [ "anonymous", "object" ], + "id" : "781" + }, { + "range" : "76", + "domain" : "607", + "attributes" : [ "anonymous", "object" ], + "id" : "782" + }, { + "range" : "76", + "domain" : "608", + "attributes" : [ "anonymous", "object" ], + "id" : "784" + }, { + "range" : "411", + "domain" : "603", + "attributes" : [ "anonymous", "object" ], + "id" : "785" + }, { + "range" : "411", + "domain" : "335", + "attributes" : [ "anonymous", "object" ], + "id" : "786" + }, { + "range" : "411", + "domain" : "339", + "attributes" : [ "anonymous", "object" ], + "id" : "787" + }, { + "range" : "309", + "domain" : "122", + "attributes" : [ "anonymous", "object" ], + "id" : "788" + }, { + "range" : "207", + "domain" : "206", + "attributes" : [ "anonymous", "object" ], + "id" : "790" + }, { + "range" : "627", + "domain" : "611", + "attributes" : [ "anonymous", "object" ], + "id" : "791" + }, { + "range" : "627", + "domain" : "793", + "attributes" : [ "anonymous", "object" ], + "id" : "792" + }, { + "range" : "627", + "domain" : "655", + "attributes" : [ "anonymous", "object" ], + "id" : "794" + }, { + "range" : "411", + "domain" : "329", + "attributes" : [ "anonymous", "object" ], + "id" : "795" + }, { + "range" : "411", + "domain" : "552", + "attributes" : [ "anonymous", "object" ], + "id" : "796" + }, { + "range" : "236", + "domain" : "742", + "attributes" : [ "anonymous", "object" ], + "id" : "797" + }, { + "range" : "236", + "domain" : "604", + "attributes" : [ "anonymous", "object" ], + "id" : "798" + }, { + "range" : "373", + "domain" : "575", + "attributes" : [ "anonymous", "object" ], + "id" : "799" + }, { + "range" : "373", + "domain" : "576", + "attributes" : [ "anonymous", "object" ], + "id" : "800" + }, { + "range" : "287", + "domain" : "802", + "attributes" : [ "anonymous", "object" ], + "id" : "801" + }, { + "range" : "432", + "domain" : "539", + "attributes" : [ "anonymous", "object" ], + "id" : "803" + }, { + "range" : "432", + "domain" : "540", + "attributes" : [ "anonymous", "object" ], + "id" : "804" + }, { + "range" : "432", + "domain" : "541", + "attributes" : [ "anonymous", "object" ], + "id" : "805" + }, { + "range" : "432", + "domain" : "542", + "attributes" : [ "anonymous", "object" ], + "id" : "806" + }, { + "range" : "236", + "domain" : "808", + "attributes" : [ "anonymous", "object" ], + "id" : "807" + }, { + "range" : "281", + "domain" : "631", + "attributes" : [ "anonymous", "object" ], + "id" : "809" + }, { + "range" : "281", + "domain" : "642", + "attributes" : [ "anonymous", "object" ], + "id" : "810" + }, { + "range" : "281", + "domain" : "812", + "attributes" : [ "anonymous", "object" ], + "id" : "811" + }, { + "range" : "281", + "domain" : "704", + "attributes" : [ "anonymous", "object" ], + "id" : "813" + }, { + "range" : "432", + "domain" : "465", + "attributes" : [ "anonymous", "object" ], + "id" : "814" + }, { + "range" : "432", + "domain" : "406", + "attributes" : [ "anonymous", "object" ], + "id" : "815" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedInvalidation", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "603", + "annotations" : { + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Invalidation", + "type" : "iri" + } ], + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "qualifiedInvalidationOf", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasInvalidatedBy", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "qualifiedInvalidation", + "undefined" : "qualifiedInvalidation" + }, + "superproperty" : [ "9" ], + "domain" : "220", + "comment" : { + "en" : "If this Entity prov:wasInvalidatedBy Activity :a, then it can qualify how it was invalidated using prov:qualifiedInvalidation [ a prov:Invalidation; prov:activity :a; :foo :bar ]." + }, + "attributes" : [ "external", "object" ], + "id" : "652" + }, { + "range" : "426", + "domain" : "818", + "attributes" : [ "anonymous", "object" ], + "id" : "817" + }, { + "range" : "426", + "domain" : "820", + "attributes" : [ "anonymous", "object" ], + "id" : "819" + }, { + "range" : "426", + "domain" : "771", + "attributes" : [ "anonymous", "object" ], + "id" : "821" + }, { + "range" : "281", + "domain" : "701", + "attributes" : [ "anonymous", "object" ], + "id" : "822" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedDerivation", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "331", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "qualifiedDerivationOf", + "type" : "label" + } ], + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Derivation", + "type" : "iri" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasDerivedFrom", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "qualifiedDerivation", + "undefined" : "qualifiedDerivation" + }, + "superproperty" : [ "9" ], + "domain" : "220", + "comment" : { + "en" : "If this Entity prov:wasDerivedFrom Entity :e, then it can qualify how it was derived using prov:qualifiedDerivation [ a prov:Derivation; prov:entity :e; :foo :bar ]." + }, + "attributes" : [ "external", "object" ], + "id" : "823" + }, { + "iri" : "http://www.w3.org/ns/prov#wasStartedBy", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "220", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "started", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#qualifiedStart", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Start", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasStartedBy", + "undefined" : "wasStartedBy" + }, + "superproperty" : [ "221" ], + "domain" : "34", + "comment" : { + "en" : "Start is when an activity is deemed to have started. A start may refer to an entity, known as trigger, that initiated the activity." + }, + "attributes" : [ "external", "object" ], + "id" : "382" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedEnd", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "335", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "qualifiedEndOf", + "type" : "label" + } ], + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#End", + "type" : "iri" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasEndedBy", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "qualifiedEnd", + "undefined" : "qualifiedEnd" + }, + "superproperty" : [ "9" ], + "domain" : "34", + "comment" : { + "en" : "If this Activity prov:wasEndedBy Entity :e1, then it can qualify how it was ended using prov:qualifiedEnd [ a prov:End; prov:entity :e1; :foo :bar ]." + }, + "attributes" : [ "external", "object" ], + "id" : "825" + }, { + "iri" : "http://www.w3.org/ns/prov#wasAssociatedWith", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "68", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "wasAssociateFor", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "starting-point", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Association", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#qualifiedAssociation", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasAssociatedWith", + "undefined" : "wasAssociatedWith" + }, + "superproperty" : [ "221" ], + "domain" : "34", + "subproperty" : [ "345" ], + "comment" : { + "en" : "An prov:Agent that had some (unspecified) responsibility for the occurrence of this prov:Activity." + }, + "attributes" : [ "external", "object" ], + "id" : "347" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedQuotationOf", + "inverse" : "827", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "220", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "qualifiedQuotationOf", + "undefined" : "qualifiedQuotationOf" + }, + "domain" : "544", + "attributes" : [ "external", "object" ], + "id" : "826" + }, { + "iri" : "http://www.w3.org/ns/prov#wasRevisionOf", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "477", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "hadRevision", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Revision", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#qualifiedRevision", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasRevisionOf", + "undefined" : "wasRevisionOf" + }, + "superproperty" : [ "499" ], + "domain" : "220", + "comment" : { + "en" : "A revision is a derivation that revises an entity into a revised version." + }, + "attributes" : [ "external", "object" ], + "id" : "629" + }, { + "iri" : "http://www.w3.org/ns/prov#hadInfluence", + "inverse" : "679", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "7", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "hadInfluence", + "undefined" : "hadInfluence" + }, + "domain" : "473", + "attributes" : [ "external", "object" ], + "id" : "828" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedAttribution", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "364", + "annotations" : { + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Attribution", + "type" : "iri" + } ], + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "qualifiedAttributionOf", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasAttributedTo", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "qualifiedAttribution", + "undefined" : "qualifiedAttribution" + }, + "superproperty" : [ "9" ], + "domain" : "220", + "comment" : { + "en" : "If this Entity prov:wasAttributedTo Agent :ag, then it can qualify how it was influenced using prov:qualifiedAttribution [ a prov:Attribution; prov:agent :ag; :foo :bar ]." + }, + "attributes" : [ "external", "object" ], + "id" : "829" + }, { + "iri" : "http://www.w3.org/ns/prov#revisedEntity", + "inverse" : "326", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "220", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "revisedEntity", + "undefined" : "revisedEntity" + }, + "domain" : "327", + "attributes" : [ "external", "object" ], + "id" : "831" + }, { + "iri" : "http://www.w3.org/ns/prov#generalizationOf", + "inverse" : "532", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "220", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "generalizationOf", + "undefined" : "generalizationOf" + }, + "domain" : "477", + "attributes" : [ "external", "object" ], + "id" : "832" + }, { + "iri" : "http://www.w3.org/ns/prov#hadGeneration", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "552", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "generatedAsDerivation", + "type" : "label" + } ], + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Generation", + "type" : "iri" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "hadGeneration", + "undefined" : "hadGeneration" + }, + "domain" : "331", + "comment" : { + "en" : "The _optional_ Generation involved in an Entity's Derivation." + }, + "attributes" : [ "external", "object" ], + "id" : "689" + }, { + "iri" : "http://www.w3.org/ns/prov#locationOf", + "inverse" : "52", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "53", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "locationOf", + "undefined" : "locationOf" + }, + "domain" : "54", + "attributes" : [ "external", "object" ], + "id" : "833" + }, { + "iri" : "http://www.w3.org/ns/prov#used", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "220", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "wasUsedBy", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "starting-point", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#qualifiedUsage", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Usage", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "used", + "undefined" : "used" + }, + "superproperty" : [ "221" ], + "domain" : "34", + "subproperty" : [ "646" ], + "comment" : { + "en" : "A prov:Entity that was used by this prov:Activity. For example, :baking prov:used :spoon, :egg, :oven ." + }, + "attributes" : [ "external", "object" ], + "id" : "592" + }, { + "iri" : "http://www.w3.org/ns/prov#hadUsage", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "329", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "wasUsedInDerivation", + "type" : "label" + } ], + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Usage", + "type" : "iri" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "hadUsage", + "undefined" : "hadUsage" + }, + "domain" : "331", + "comment" : { + "en" : "The _optional_ Usage involved in an Entity's Derivation." + }, + "attributes" : [ "external", "object" ], + "id" : "834" + }, { + "iri" : "http://www.w3.org/ns/prov#agent", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "68", + "annotations" : { + "editorialNote" : [ { + "identifier" : "editorialNote", + "language" : "en", + "value" : "This property behaves in spirit like rdf:object; it references the object of a prov:wasInfluencedBy triple.", + "type" : "label" + } ], + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "agentOfInfluence", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "editorsDefinition" : [ { + "identifier" : "editorsDefinition", + "language" : "en", + "value" : "The prov:agent property references an prov:Agent which influenced a resource. This property applies to an prov:AgentInfluence, which is given by a subproperty of prov:qualifiedInfluence from the influenced prov:Entity, prov:Activity or prov:Agent.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "agent", + "undefined" : "agent" + }, + "superproperty" : [ "679" ], + "domain" : "119", + "attributes" : [ "external", "object" ], + "id" : "120" + }, { + "range" : "395", + "domain" : "789", + "attributes" : [ "anonymous", "object" ], + "id" : "835" + }, { + "range" : "395", + "domain" : "660", + "attributes" : [ "anonymous", "object" ], + "id" : "836" + }, { + "range" : "395", + "domain" : "676", + "attributes" : [ "anonymous", "object" ], + "id" : "837" + }, { + "iri" : "https://w3id.org/pmd/co/characteristic", + "inverse" : "728", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "11", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The object property characteristic, in conjunction with ProcessingNode, Process and Object, is used to establish a connection with ValueObjects. This property enables the representation of relationships between ProcessingNodes, Processes and Objects and the associated values or attributes (metadata) that are stored in ValueObjects.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Die Objekteigenschaft characterisitc, wird in Verbindung mit ProzessKnoten, Prozess und Objekt verwendet und dient zur Herstellung einer Verbindung mit dem WerteObjekt. Diese Eigenschaft ermöglicht die Abbildung von Beziehungen zwischen ProzessKnoten, Prozessen und Objekten und den dazugehörigen Werten oder Attributen (Metadaten), die in WerteObjekt ausgedrückt sind.", + "type" : "label" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "en", + "value" : "has characteristic", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "characteristic", + "en" : "characteristic" + }, + "superproperty" : [ "614" ], + "domain" : "409", + "attributes" : [ "external", "object" ], + "id" : "726" + }, { + "range" : "395", + "domain" : "414", + "attributes" : [ "anonymous", "object" ], + "id" : "838" + }, { + "range" : "395", + "domain" : "783", + "attributes" : [ "anonymous", "object" ], + "id" : "839" + }, { + "range" : "620", + "domain" : "841", + "attributes" : [ "anonymous", "object" ], + "id" : "840" + }, { + "iri" : "https://w3id.org/pmd/co/xPath", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "468", + "annotations" : { + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A non-XML-based path expression that allows the elements of an XML document to be specifically addressed.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "xPath", + "en" : "x path" + }, + "domain" : "62", + "attributes" : [ "external", "datatype" ], + "id" : "842" + }, { + "iri" : "https://w3id.org/pmd/co/state", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "467", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "state", + "en" : "state" + }, + "domain" : "398", + "attributes" : [ "external", "object" ], + "id" : "843" + }, { + "iri" : "http://www.w3.org/ns/prov#hadDerivation", + "inverse" : "499", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "220", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "hadDerivation", + "undefined" : "hadDerivation" + }, + "domain" : "220", + "attributes" : [ "external", "object" ], + "id" : "844" + }, { + "range" : "46", + "domain" : "155", + "attributes" : [ "anonymous", "object" ], + "id" : "846" + }, { + "range" : "705", + "domain" : "706", + "attributes" : [ "anonymous", "object" ], + "id" : "847" + }, { + "range" : "267", + "domain" : "641", + "attributes" : [ "anonymous", "object" ], + "id" : "848" + }, { + "range" : "445", + "domain" : "594", + "attributes" : [ "anonymous", "object" ], + "id" : "849" + }, { + "range" : "445", + "domain" : "851", + "attributes" : [ "anonymous", "object" ], + "id" : "850" + }, { + "range" : "445", + "domain" : "824", + "attributes" : [ "anonymous", "object" ], + "id" : "852" + }, { + "range" : "445", + "domain" : "830", + "attributes" : [ "anonymous", "object" ], + "id" : "853" + }, { + "range" : "675", + "domain" : "160", + "attributes" : [ "anonymous", "object" ], + "id" : "854" + }, { + "range" : "395", + "domain" : "692", + "attributes" : [ "anonymous", "object" ], + "id" : "855" + }, { + "range" : "395", + "domain" : "158", + "attributes" : [ "anonymous", "object" ], + "id" : "856" + }, { + "iri" : "http://www.w3.org/ns/prov#activity", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "34", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "activityOfInfluence", + "type" : "label" + } ], + "editorialNote" : [ { + "identifier" : "editorialNote", + "language" : "en", + "value" : "This property behaves in spirit like rdf:object; it references the object of a prov:wasInfluencedBy triple.", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "editorsDefinition" : [ { + "identifier" : "editorsDefinition", + "language" : "undefined", + "value" : "The prov:activity property references an prov:Activity which influenced a resource. This property applies to an prov:ActivityInfluence, which is given by a subproperty of prov:qualifiedInfluence from the influenced prov:Entity, prov:Activity or prov:Agent.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "activity", + "undefined" : "activity" + }, + "superproperty" : [ "679" ], + "domain" : "309", + "attributes" : [ "external", "object" ], + "id" : "681" + }, { + "range" : "203", + "domain" : "858", + "attributes" : [ "anonymous", "object" ], + "id" : "857" + }, { + "range" : "160", + "domain" : "159", + "attributes" : [ "anonymous", "object" ], + "id" : "859" + }, { + "range" : "162", + "domain" : "612", + "attributes" : [ "anonymous", "object" ], + "id" : "860" + }, { + "range" : "162", + "domain" : "161", + "attributes" : [ "anonymous", "object" ], + "id" : "861" + }, { + "range" : "380", + "domain" : "845", + "attributes" : [ "anonymous", "object" ], + "id" : "862" + }, { + "range" : "380", + "domain" : "379", + "attributes" : [ "anonymous", "object" ], + "id" : "863" + }, { + "range" : "420", + "domain" : "178", + "attributes" : [ "anonymous", "object" ], + "id" : "864" + }, { + "range" : "434", + "domain" : "693", + "attributes" : [ "anonymous", "object" ], + "id" : "865" + }, { + "range" : "46", + "domain" : "696", + "attributes" : [ "anonymous", "object" ], + "id" : "866" + }, { + "range" : "46", + "domain" : "317", + "attributes" : [ "anonymous", "object" ], + "id" : "867" + }, { + "iri" : "http://www.w3.org/ns/prov#ended", + "inverse" : "636", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "34", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "ended", + "undefined" : "ended" + }, + "domain" : "220", + "attributes" : [ "external", "object" ], + "id" : "868" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedInfluence", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "7", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "qualifiedInfluenceOf", + "type" : "label" + } ], + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Influence", + "type" : "iri" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasInfluencedBy", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "qualifiedInfluence", + "undefined" : "qualifiedInfluence" + }, + "domain" : "8", + "subproperty" : [ "829", "823", "869", "652", "691", "630", "827", "551", "121", "825", "587", "326", "870" ], + "comment" : { + "en" : "Because prov:qualifiedInfluence is a broad relation, the more specific relations (qualifiedCommunication, qualifiedDelegation, qualifiedEnd, etc.) should be used when applicable." + }, + "attributes" : [ "external", "object" ], + "id" : "9" + }, { + "iri" : "http://www.w3.org/ns/prov#informed", + "inverse" : "640", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "34", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "informed", + "undefined" : "informed" + }, + "domain" : "34", + "attributes" : [ "external", "object" ], + "id" : "871" + }, { + "iri" : "http://www.w3.org/ns/oa#hasSource", + "baseIri" : "http://www.w3.org/ns/oa", + "range" : "62", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/oa#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "hasSource" + }, + "superproperty" : [ "614" ], + "domain" : "62", + "attributes" : [ "external", "object" ], + "id" : "727" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedEndOf", + "inverse" : "825", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "34", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "qualifiedEndOf", + "undefined" : "qualifiedEndOf" + }, + "domain" : "335", + "attributes" : [ "external", "object" ], + "id" : "872" + }, { + "iri" : "http://www.w3.org/ns/oa#hasSelector", + "baseIri" : "http://www.w3.org/ns/oa", + "range" : "62", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/oa#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "hasSelector" + }, + "superproperty" : [ "614" ], + "domain" : "62", + "attributes" : [ "external", "object" ], + "id" : "725" + }, { + "iri" : "http://www.w3.org/ns/prov#value", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "474", + "annotations" : { + "editorialNote" : [ { + "identifier" : "editorialNote", + "language" : "en", + "value" : "This property serves the same purpose as rdf:value, but has been reintroduced to avoid some of the definitional ambiguity in the RDF specification (specifically, 'may be used in describing structured values').", + "type" : "label" + }, { + "identifier" : "editorialNote", + "language" : "undefined", + "value" : "The editor's definition comes from http://www.w3.org/TR/rdf-primer/#rdfvalue", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-attribute-value", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Provides a value that is a direct representation of an entity.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "value", + "undefined" : "value" + }, + "domain" : "220", + "attributes" : [ "external", "datatype" ], + "id" : "873" + }, { + "iri" : "http://www.w3.org/ns/prov#invalidated", + "inverse" : "219", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "220", + "annotations" : { + "editorialNote" : [ { + "identifier" : "editorialNote", + "language" : "en", + "value" : "prov:invalidated is one of few inverse property defined, to allow Activity-oriented assertions in addition to Entity-oriented assertions.", + "type" : "label" + } ], + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Invalidation", + "type" : "iri" + } ], + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "wasInvalidatedBy", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "invalidated", + "undefined" : "invalidated" + }, + "superproperty" : [ "657" ], + "domain" : "34", + "attributes" : [ "external", "object" ], + "id" : "659" + }, { + "iri" : "http://purl.org/spar/datacite/hasIdentifier", + "baseIri" : "http://purl.org/spar/datacite", + "range" : "600", + "label" : { + "IRI-based" : "hasIdentifier" + }, + "domain" : "471", + "attributes" : [ "external", "object" ], + "id" : "874" + }, { + "iri" : "https://w3id.org/pmd/co/outputOf", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "62", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "en", + "value" : "is output of", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "outputOf", + "en" : "output of" + }, + "superproperty" : [ "613" ], + "domain" : "62", + "attributes" : [ "external", "object" ], + "id" : "615" + }, { + "iri" : "https://w3id.org/pmd/co/nextProcess", + "inverse" : "653", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "38", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "en", + "value" : "has next process", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This property is used to indicate the process that was run after the current process.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "nextProcess", + "en" : "next process" + }, + "superproperty" : [ "640" ], + "domain" : "38", + "attributes" : [ "external", "object" ], + "id" : "695" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedQuotation", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "544", + "annotations" : { + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Quotation", + "type" : "iri" + } ], + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "qualifiedQuotationOf", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasQuotedFrom", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "qualifiedQuotation", + "undefined" : "qualifiedQuotation" + }, + "superproperty" : [ "9" ], + "domain" : "220", + "comment" : { + "en" : "If this Entity prov:wasQuotedFrom Entity :e, then it can qualify how using prov:qualifiedQuotation [ a prov:Quotation; prov:entity :e; :foo :bar ]." + }, + "attributes" : [ "external", "object" ], + "id" : "827" + }, { + "iri" : "http://www.w3.org/ns/prov#hadPlan", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "369", + "annotations" : { + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Plan", + "type" : "iri" + } ], + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "wasPlanOf", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "hadPlan", + "undefined" : "hadPlan" + }, + "domain" : "367", + "comment" : { + "en" : "The _optional_ Plan adopted by an Agent in Association with some Activity. Plan specifications are out of the scope of this specification." + }, + "attributes" : [ "external", "object" ], + "id" : "378" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedUsage", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "329", + "annotations" : { + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Usage", + "type" : "iri" + } ], + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "qualifiedUsingActivity", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#used", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "qualifiedUsage", + "undefined" : "qualifiedUsage" + }, + "superproperty" : [ "9" ], + "domain" : "34", + "comment" : { + "en" : "If this Activity prov:used Entity :e, then it can qualify how it used it using prov:qualifiedUsage [ a prov:Usage; prov:entity :e; :foo :bar ]." + }, + "attributes" : [ "external", "object" ], + "id" : "869" + }, { + "iri" : "https://w3id.org/pmd/co/value", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "475", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Provides the actual value a value object is referring to.", + "type" : "label" + } ] + }, + "label" : { + "de" : "hat Wert", + "IRI-based" : "value", + "en" : "value" + }, + "domain" : "11", + "attributes" : [ "external", "datatype" ], + "id" : "876" + }, { + "iri" : "http://www.w3.org/ns/prov#wasUsedInDerivation", + "inverse" : "834", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "331", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasUsedInDerivation", + "undefined" : "wasUsedInDerivation" + }, + "domain" : "329", + "attributes" : [ "external", "object" ], + "id" : "877" + }, { + "iri" : "https://w3id.org/pmd/co/isResourceOf", + "inverse" : "10", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "11", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "isResourceOf", + "undefined" : "is resource of" + }, + "domain" : "12", + "attributes" : [ "external", "object" ], + "id" : "878" + }, { + "iri" : "https://w3id.org/pmd/co/maxValue", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "469", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "refers to all values equal or smaller than the given one", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "maxValue", + "en" : "max value" + }, + "domain" : "62", + "attributes" : [ "external", "datatype" ], + "id" : "879" + }, { + "iri" : "http://www.w3.org/ns/prov#hadRevision", + "inverse" : "629", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "220", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "hadRevision", + "undefined" : "hadRevision" + }, + "domain" : "477", + "attributes" : [ "external", "object" ], + "id" : "880" + }, { + "iri" : "http://www.w3.org/ns/prov#wasAttributedTo", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "68", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "contributed", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Attribution is the ascribing of an entity to an agent.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "starting-point", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#qualifiedAttribution", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Attribution", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasAttributedTo", + "undefined" : "wasAttributedTo" + }, + "superproperty" : [ "221" ], + "domain" : "220", + "comment" : { + "en" : "Attribution is the ascribing of an entity to an agent." + }, + "attributes" : [ "external", "object" ], + "id" : "638" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedPrimarySource", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "514", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "qualifiedSourceOf", + "type" : "label" + } ], + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#PrimarySource", + "type" : "iri" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#hadPrimarySource", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "qualifiedPrimarySource", + "undefined" : "qualifiedPrimarySource" + }, + "superproperty" : [ "9" ], + "domain" : "220", + "comment" : { + "en" : "If this Entity prov:hadPrimarySource Entity :e, then it can qualify how using prov:qualifiedPrimarySource [ a prov:PrimarySource; prov:entity :e; :foo :bar ]." + }, + "attributes" : [ "external", "object" ], + "id" : "870" + }, { + "iri" : "http://www.w3.org/ns/prov#hadActivity", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "34", + "annotations" : { + "editorialNote" : [ { + "identifier" : "editorialNote", + "language" : "en", + "value" : "The multiple rdfs:domain assertions are intended. One is simpler and works for OWL-RL, the union is more specific but is not recognized by OWL-RL.", + "type" : "label" + } ], + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Activity", + "type" : "iri" + } ], + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "wasActivityOfInfluence", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "hadActivity", + "undefined" : "hadActivity" + }, + "domain" : "462", + "comment" : { + "en" : "The _optional_ Activity of an Influence, which used, generated, invalidated, or was the responsibility of some Entity. This property is _not_ used by ActivityInfluence (use prov:activity instead).", + "undefined" : "This property has multiple RDFS domains to suit multiple OWL Profiles. See PROV-O OWL Profile." + }, + "attributes" : [ "external", "object" ], + "id" : "881" + }, { + "range" : "11", + "domain" : "440", + "attributes" : [ "anonymous", "object" ], + "id" : "882" + }, { + "range" : "11", + "domain" : "321", + "attributes" : [ "anonymous", "object" ], + "id" : "883" + }, { + "range" : "11", + "domain" : "156", + "attributes" : [ "anonymous", "object" ], + "id" : "884" + }, { + "range" : "11", + "domain" : "441", + "attributes" : [ "anonymous", "object" ], + "id" : "885" + }, { + "range" : "11", + "domain" : "324", + "attributes" : [ "anonymous", "object" ], + "id" : "886" + }, { + "range" : "11", + "domain" : "442", + "attributes" : [ "anonymous", "object" ], + "id" : "887" + }, { + "range" : "11", + "domain" : "443", + "attributes" : [ "anonymous", "object" ], + "id" : "889" + }, { + "range" : "11", + "domain" : "71", + "attributes" : [ "anonymous", "object" ], + "id" : "890" + }, { + "range" : "11", + "domain" : "444", + "attributes" : [ "anonymous", "object" ], + "id" : "891" + }, { + "range" : "11", + "domain" : "253", + "attributes" : [ "anonymous", "object" ], + "id" : "892" + }, { + "range" : "11", + "domain" : "439", + "attributes" : [ "anonymous", "object" ], + "id" : "893" + }, { + "range" : "11", + "domain" : "434", + "attributes" : [ "anonymous", "object" ], + "id" : "894" + }, { + "range" : "11", + "domain" : "361", + "attributes" : [ "anonymous", "object" ], + "id" : "895" + }, { + "range" : "11", + "domain" : "435", + "attributes" : [ "anonymous", "object" ], + "id" : "896" + }, { + "iri" : "http://www.w3.org/ns/prov#wasActivityOfInfluence", + "inverse" : "881", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "462", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasActivityOfInfluence", + "undefined" : "wasActivityOfInfluence" + }, + "domain" : "34", + "attributes" : [ "external", "object" ], + "id" : "897" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedAttributionOf", + "inverse" : "829", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "220", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "qualifiedAttributionOf", + "undefined" : "qualifiedAttributionOf" + }, + "domain" : "364", + "attributes" : [ "external", "object" ], + "id" : "898" + }, { + "range" : "11", + "domain" : "344", + "attributes" : [ "anonymous", "object" ], + "id" : "899" + }, { + "range" : "11", + "domain" : "436", + "attributes" : [ "anonymous", "object" ], + "id" : "900" + }, { + "range" : "11", + "domain" : "437", + "attributes" : [ "anonymous", "object" ], + "id" : "901" + }, { + "range" : "11", + "domain" : "438", + "attributes" : [ "anonymous", "object" ], + "id" : "902" + }, { + "range" : "11", + "domain" : "154", + "attributes" : [ "anonymous", "object" ], + "id" : "903" + }, { + "range" : "11", + "domain" : "232", + "attributes" : [ "anonymous", "object" ], + "id" : "904" + }, { + "range" : "11", + "domain" : "187", + "attributes" : [ "anonymous", "object" ], + "id" : "905" + }, { + "range" : "11", + "domain" : "170", + "attributes" : [ "anonymous", "object" ], + "id" : "906" + }, { + "range" : "11", + "domain" : "428", + "attributes" : [ "anonymous", "object" ], + "id" : "907" + }, { + "range" : "11", + "domain" : "429", + "attributes" : [ "anonymous", "object" ], + "id" : "908" + }, { + "range" : "11", + "domain" : "412", + "attributes" : [ "anonymous", "object" ], + "id" : "909" + }, { + "range" : "11", + "domain" : "430", + "attributes" : [ "anonymous", "object" ], + "id" : "910" + }, { + "range" : "11", + "domain" : "129", + "attributes" : [ "anonymous", "object" ], + "id" : "911" + }, { + "range" : "11", + "domain" : "431", + "attributes" : [ "anonymous", "object" ], + "id" : "912" + }, { + "range" : "11", + "domain" : "432", + "attributes" : [ "anonymous", "object" ], + "id" : "913" + }, { + "range" : "11", + "domain" : "433", + "attributes" : [ "anonymous", "object" ], + "id" : "914" + }, { + "range" : "11", + "domain" : "76", + "attributes" : [ "anonymous", "object" ], + "id" : "915" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedStartOf", + "inverse" : "630", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "34", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "qualifiedStartOf", + "undefined" : "qualifiedStartOf" + }, + "domain" : "339", + "attributes" : [ "external", "object" ], + "id" : "916" + }, { + "range" : "11", + "domain" : "426", + "attributes" : [ "anonymous", "object" ], + "id" : "917" + }, { + "range" : "11", + "domain" : "427", + "attributes" : [ "anonymous", "object" ], + "id" : "918" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedDerivationOf", + "inverse" : "823", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "220", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "qualifiedDerivationOf", + "undefined" : "qualifiedDerivationOf" + }, + "domain" : "331", + "attributes" : [ "external", "object" ], + "id" : "919" + }, { + "iri" : "https://w3id.org/pmd/co/unit", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "12", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "en", + "value" : "has unit", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Unit of measurement.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "unit", + "en" : "unit" + }, + "domain" : "11", + "comment" : { + "undefined" : "Examples for rdsf:range are units from qudt or wikidata or own defindes units." + }, + "attributes" : [ "external", "object" ], + "id" : "920" + }, { + "range" : "11", + "domain" : "420", + "attributes" : [ "anonymous", "object" ], + "id" : "921" + }, { + "range" : "11", + "domain" : "422", + "attributes" : [ "anonymous", "object" ], + "id" : "922" + }, { + "range" : "11", + "domain" : "423", + "attributes" : [ "anonymous", "object" ], + "id" : "923" + }, { + "range" : "11", + "domain" : "402", + "attributes" : [ "anonymous", "object" ], + "id" : "924" + }, { + "range" : "11", + "domain" : "424", + "attributes" : [ "anonymous", "object" ], + "id" : "925" + }, { + "range" : "11", + "domain" : "205", + "attributes" : [ "anonymous", "object" ], + "id" : "926" + }, { + "range" : "11", + "domain" : "425", + "attributes" : [ "anonymous", "object" ], + "id" : "927" + }, { + "iri" : "http://www.w3.org/ns/prov#contributed", + "inverse" : "638", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "220", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "contributed", + "undefined" : "contributed" + }, + "domain" : "68", + "attributes" : [ "external", "object" ], + "id" : "928" + }, { + "iri" : "https://w3id.org/pmd/co/executes", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "38", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This property represents which ProcessingNode executes a Process.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "executes", + "en" : "executes" + }, + "domain" : "110", + "attributes" : [ "external", "object" ], + "id" : "346" + }, { + "iri" : "http://www.w3.org/ns/prov#invalidatedAtTime", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "479", + "annotations" : { + "editorialNote" : [ { + "identifier" : "editorialNote", + "language" : "en", + "value" : "It is the intent that the property chain holds: (prov:qualifiedInvalidation o prov:atTime) rdfs:subPropertyOf prov:invalidatedAtTime.", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#atTime", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Invalidation", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "invalidatedAtTime", + "undefined" : "invalidatedAtTime" + }, + "domain" : "220", + "comment" : { + "en" : "The time at which an entity was invalidated (i.e., no longer usable)." + }, + "attributes" : [ "external", "datatype" ], + "id" : "929" + }, { + "iri" : "http://www.w3.org/ns/prov#actedOnBehalfOf", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "68", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "hadDelegate", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "starting-point", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Delegation", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#qualifiedDelegation", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "actedOnBehalfOf", + "undefined" : "actedOnBehalfOf" + }, + "superproperty" : [ "221" ], + "domain" : "68", + "comment" : { + "en" : "An object property to express the accountability of an agent towards another agent. The subordinate agent acted on behalf of the responsible agent in an actual activity. " + }, + "attributes" : [ "external", "object" ], + "id" : "639" + }, { + "iri" : "http://www.w3.org/ns/prov#wasGeneratedBy", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "34", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "generated", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "starting-point", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#qualifiedGeneration", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Generation", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasGeneratedBy", + "undefined" : "wasGeneratedBy" + }, + "superproperty" : [ "221" ], + "domain" : "220", + "attributes" : [ "external", "object" ], + "id" : "637" + }, { + "iri" : "http://www.w3.org/ns/prov#entity", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "220", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "entityOfInfluence", + "type" : "label" + } ], + "editorialNote" : [ { + "identifier" : "editorialNote", + "language" : "en", + "value" : "This property behaves in spirit like rdf:object; it references the object of a prov:wasInfluencedBy triple.", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "editorsDefinition" : [ { + "identifier" : "editorsDefinition", + "language" : "undefined", + "value" : "The prov:entity property references an prov:Entity which influenced a resource. This property applies to an prov:EntityInfluence, which is given by a subproperty of prov:qualifiedInfluence from the influenced prov:Entity, prov:Activity or prov:Agent.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "entity", + "undefined" : "entity" + }, + "superproperty" : [ "679" ], + "domain" : "306", + "attributes" : [ "external", "object" ], + "id" : "680" + }, { + "iri" : "http://www.w3.org/ns/prov#wasRoleIn", + "inverse" : "713", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "464", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasRoleIn", + "undefined" : "wasRoleIn" + }, + "domain" : "281", + "attributes" : [ "external", "object" ], + "id" : "930" + }, { + "iri" : "http://www.w3.org/ns/prov#activityOfInfluence", + "inverse" : "681", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "309", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "activityOfInfluence", + "undefined" : "activityOfInfluence" + }, + "domain" : "34", + "attributes" : [ "external", "object" ], + "id" : "931" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedUsingActivity", + "inverse" : "869", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "34", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "qualifiedUsingActivity", + "undefined" : "qualifiedUsingActivity" + }, + "domain" : "329", + "attributes" : [ "external", "object" ], + "id" : "932" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedSourceOf", + "inverse" : "870", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "220", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "qualifiedSourceOf", + "undefined" : "qualifiedSourceOf" + }, + "domain" : "514", + "attributes" : [ "external", "object" ], + "id" : "933" + } ] +} \ No newline at end of file diff --git a/mo/webvowl/data/template.json b/mo/webvowl/data/template.json new file mode 100644 index 0000000..003d011 --- /dev/null +++ b/mo/webvowl/data/template.json @@ -0,0 +1,163 @@ +{ + "namespace": [ + { + "name": "", + "iri": "" + } + ], + "header": { + "languages": [ + "all", + "occurring", + "languages" + ], + "title": { + "language": "label" + }, + "iri": "", + "version": "", + "author": [ + "Author One", + "Author Two" + ], + "description": { + "language": "label" + }, + "other": { + "someIdentifier": [ + { + "identifier": "someIdentifier", + "language": "undefined", + "value": "http://an.iri/", + "type": "iri" + } + ], + "someOtherIdentifier": [ + { + "identifier": "someOtherIdentifier", + "language": "undefined", + "value": "Some person", + "type": "label" + } + ] + } + }, + "metrics": { + "classCount": 40, + "datatypeCount": 13, + "objectPropertyCount": 23, + "datatypePropertyCount": 13, + "propertyCount": 36, + "nodeCount": 53, + "axiomCount": 216, + "individualCount": 8 + }, + "class": [ + { + "id": "", + "type": "" + } + ], + "classAttribute": [ + { + "id": "", + "label": "", + "iri": "", + "individuals": [ + { + "iri": "", + "labels": { + "language": "label" + }, + "annotations": {} + } + ], + "comment": "", + "equivalent": [ + "" + ], + "union": [ + "" + ], + "intersection": [ + "" + ], + "complement": [ + "" + ], + "attributes": [ + "deprecated", + "external", + "datatype", + "object", + "rdf" + ] + } + ], + "datatype": [ + { + "id": "", + "type": "" + } + ], + "datatypeAttribute": [ + { + "id": "", + "label": { + "language": "label" + }, + "iri": "", + "individuals": [ + { + "iri": "", + "labels": { + "language": "label" + }, + "annotations": {} + } + ], + "comment": "", + "equivalent": [ + "" + ] + } + ], + "property": [ + { + "id": "" + } + ], + "propertyAttribute": [ + { + "id": "", + "domain": "", + "range": "", + "inverse": "", + "label": { + "language": "label" + }, + "type": "", + "comment": "", + "cardinality": "", + "minCardinality": "", + "maxCardinality": "", + "subproperty": [ + "" + ], + "equivalent": [ + "" + ], + "attributes": [ + "deprecated", + "external", + "datatype", + "object", + "rdf", + "transitive", + "functional", + "inverse functional", + "symmetric" + ] + } + ] +} diff --git a/mo/webvowl/favicon.ico b/mo/webvowl/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..a857d51f1c78d8be8fe2103fde3a10b9a72b041b GIT binary patch literal 1150 zcmZ{iTS(MF6vpSDMI@zZq!kjD5lIgVRzmkE>Ln?=j=Cg=A2Q=;BWM3#W7MP z4OJ>kDK(AIMUUUlNiAY5G~ADT4`TD^KT8_Ohu^q3+sPs_m<2K*IxH|v#-41e7dK;P#seDD5<=IR4*mZa&J>`|7t0Yd|ZNFMV^(Tu4PXs)p070(cT z!?_f^eR>stth4Tx_DRfLmW9@fxmak561{^wOJBD@=O%G|eu)J=ogRGq;DxWH4!xh= z@eUb`We(&Z^`+KH+K#5I(Dl(;dm3I}*$?#hqqD9Ct+!9=G~Qf0#5-8DzLm8+&pK1v zMLdUh{?#`W|INMS#$jEe~o`qM<7dT(J;9K4tKUTz-2=hhc!xn87uCUtA9+ykHIIoj@=L3^bY(rf8C zb+d?AL1<7QstXeM2J(1@MZbZ8en{=<^Ipostpi&T9x_VKKBkraA%Ih5$fyyJJfz1` zk2d~akaZ*9;?dNV2n!i0+8boJUpg=vTosV+>66AGdF5;zOj?e@ + + + + + + + + + + + + + + WebVOWL + + + +
    +
    + + + + + + + +
    + + + + + +
    + +
    + + +
    + +
    +
    >
    + +
    + +
    + + +
    +
    +
    +

    +

    +

    +

    +

    -

    +
    +
    + + +
    +
    +
    +
    + + + + +
    + + + + + + + diff --git a/mo/webvowl/js/d3.min.js b/mo/webvowl/js/d3.min.js new file mode 100644 index 0000000..1664873 --- /dev/null +++ b/mo/webvowl/js/d3.min.js @@ -0,0 +1,5 @@ +!function(){function n(n){return n&&(n.ownerDocument||n.document||n).documentElement}function t(n){return n&&(n.ownerDocument&&n.ownerDocument.defaultView||n.document&&n||n.defaultView)}function e(n,t){return t>n?-1:n>t?1:n>=t?0:NaN}function r(n){return null===n?NaN:+n}function i(n){return!isNaN(n)}function u(n){return{left:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)<0?r=u+1:i=u}return r},right:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)>0?i=u:r=u+1}return r}}}function o(n){return n.length}function a(n){for(var t=1;n*t%1;)t*=10;return t}function l(n,t){for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}function c(){this._=Object.create(null)}function f(n){return(n+="")===bo||n[0]===_o?_o+n:n}function s(n){return(n+="")[0]===_o?n.slice(1):n}function h(n){return f(n)in this._}function p(n){return(n=f(n))in this._&&delete this._[n]}function g(){var n=[];for(var t in this._)n.push(s(t));return n}function v(){var n=0;for(var t in this._)++n;return n}function d(){for(var n in this._)return!1;return!0}function y(){this._=Object.create(null)}function m(n){return n}function M(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function x(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.slice(1);for(var e=0,r=wo.length;r>e;++e){var i=wo[e]+t;if(i in n)return i}}function b(){}function _(){}function w(n){function t(){for(var t,r=e,i=-1,u=r.length;++ie;e++)for(var i,u=n[e],o=0,a=u.length;a>o;o++)(i=u[o])&&t(i,o,e);return n}function Z(n){return ko(n,qo),n}function V(n){var t,e;return function(r,i,u){var o,a=n[u].update,l=a.length;for(u!=e&&(e=u,t=0),i>=t&&(t=i+1);!(o=a[t])&&++t0&&(n=n.slice(0,a));var c=To.get(n);return c&&(n=c,l=B),a?t?i:r:t?b:u}function $(n,t){return function(e){var r=ao.event;ao.event=e,t[0]=this.__data__;try{n.apply(this,t)}finally{ao.event=r}}}function B(n,t){var e=$(n,t);return function(n){var t=this,r=n.relatedTarget;r&&(r===t||8&r.compareDocumentPosition(t))||e.call(t,n)}}function W(e){var r=".dragsuppress-"+ ++Do,i="click"+r,u=ao.select(t(e)).on("touchmove"+r,S).on("dragstart"+r,S).on("selectstart"+r,S);if(null==Ro&&(Ro="onselectstart"in e?!1:x(e.style,"userSelect")),Ro){var o=n(e).style,a=o[Ro];o[Ro]="none"}return function(n){if(u.on(r,null),Ro&&(o[Ro]=a),n){var t=function(){u.on(i,null)};u.on(i,function(){S(),t()},!0),setTimeout(t,0)}}}function J(n,e){e.changedTouches&&(e=e.changedTouches[0]);var r=n.ownerSVGElement||n;if(r.createSVGPoint){var i=r.createSVGPoint();if(0>Po){var u=t(n);if(u.scrollX||u.scrollY){r=ao.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var o=r[0][0].getScreenCTM();Po=!(o.f||o.e),r.remove()}}return Po?(i.x=e.pageX,i.y=e.pageY):(i.x=e.clientX,i.y=e.clientY),i=i.matrixTransform(n.getScreenCTM().inverse()),[i.x,i.y]}var a=n.getBoundingClientRect();return[e.clientX-a.left-n.clientLeft,e.clientY-a.top-n.clientTop]}function G(){return ao.event.changedTouches[0].identifier}function K(n){return n>0?1:0>n?-1:0}function Q(n,t,e){return(t[0]-n[0])*(e[1]-n[1])-(t[1]-n[1])*(e[0]-n[0])}function nn(n){return n>1?0:-1>n?Fo:Math.acos(n)}function tn(n){return n>1?Io:-1>n?-Io:Math.asin(n)}function en(n){return((n=Math.exp(n))-1/n)/2}function rn(n){return((n=Math.exp(n))+1/n)/2}function un(n){return((n=Math.exp(2*n))-1)/(n+1)}function on(n){return(n=Math.sin(n/2))*n}function an(){}function ln(n,t,e){return this instanceof ln?(this.h=+n,this.s=+t,void(this.l=+e)):arguments.length<2?n instanceof ln?new ln(n.h,n.s,n.l):_n(""+n,wn,ln):new ln(n,t,e)}function cn(n,t,e){function r(n){return n>360?n-=360:0>n&&(n+=360),60>n?u+(o-u)*n/60:180>n?o:240>n?u+(o-u)*(240-n)/60:u}function i(n){return Math.round(255*r(n))}var u,o;return n=isNaN(n)?0:(n%=360)<0?n+360:n,t=isNaN(t)?0:0>t?0:t>1?1:t,e=0>e?0:e>1?1:e,o=.5>=e?e*(1+t):e+t-e*t,u=2*e-o,new mn(i(n+120),i(n),i(n-120))}function fn(n,t,e){return this instanceof fn?(this.h=+n,this.c=+t,void(this.l=+e)):arguments.length<2?n instanceof fn?new fn(n.h,n.c,n.l):n instanceof hn?gn(n.l,n.a,n.b):gn((n=Sn((n=ao.rgb(n)).r,n.g,n.b)).l,n.a,n.b):new fn(n,t,e)}function sn(n,t,e){return isNaN(n)&&(n=0),isNaN(t)&&(t=0),new hn(e,Math.cos(n*=Yo)*t,Math.sin(n)*t)}function hn(n,t,e){return this instanceof hn?(this.l=+n,this.a=+t,void(this.b=+e)):arguments.length<2?n instanceof hn?new hn(n.l,n.a,n.b):n instanceof fn?sn(n.h,n.c,n.l):Sn((n=mn(n)).r,n.g,n.b):new hn(n,t,e)}function pn(n,t,e){var r=(n+16)/116,i=r+t/500,u=r-e/200;return i=vn(i)*na,r=vn(r)*ta,u=vn(u)*ea,new mn(yn(3.2404542*i-1.5371385*r-.4985314*u),yn(-.969266*i+1.8760108*r+.041556*u),yn(.0556434*i-.2040259*r+1.0572252*u))}function gn(n,t,e){return n>0?new fn(Math.atan2(e,t)*Zo,Math.sqrt(t*t+e*e),n):new fn(NaN,NaN,n)}function vn(n){return n>.206893034?n*n*n:(n-4/29)/7.787037}function dn(n){return n>.008856?Math.pow(n,1/3):7.787037*n+4/29}function yn(n){return Math.round(255*(.00304>=n?12.92*n:1.055*Math.pow(n,1/2.4)-.055))}function mn(n,t,e){return this instanceof mn?(this.r=~~n,this.g=~~t,void(this.b=~~e)):arguments.length<2?n instanceof mn?new mn(n.r,n.g,n.b):_n(""+n,mn,cn):new mn(n,t,e)}function Mn(n){return new mn(n>>16,n>>8&255,255&n)}function xn(n){return Mn(n)+""}function bn(n){return 16>n?"0"+Math.max(0,n).toString(16):Math.min(255,n).toString(16)}function _n(n,t,e){var r,i,u,o=0,a=0,l=0;if(r=/([a-z]+)\((.*)\)/.exec(n=n.toLowerCase()))switch(i=r[2].split(","),r[1]){case"hsl":return e(parseFloat(i[0]),parseFloat(i[1])/100,parseFloat(i[2])/100);case"rgb":return t(Nn(i[0]),Nn(i[1]),Nn(i[2]))}return(u=ua.get(n))?t(u.r,u.g,u.b):(null==n||"#"!==n.charAt(0)||isNaN(u=parseInt(n.slice(1),16))||(4===n.length?(o=(3840&u)>>4,o=o>>4|o,a=240&u,a=a>>4|a,l=15&u,l=l<<4|l):7===n.length&&(o=(16711680&u)>>16,a=(65280&u)>>8,l=255&u)),t(o,a,l))}function wn(n,t,e){var r,i,u=Math.min(n/=255,t/=255,e/=255),o=Math.max(n,t,e),a=o-u,l=(o+u)/2;return a?(i=.5>l?a/(o+u):a/(2-o-u),r=n==o?(t-e)/a+(e>t?6:0):t==o?(e-n)/a+2:(n-t)/a+4,r*=60):(r=NaN,i=l>0&&1>l?0:r),new ln(r,i,l)}function Sn(n,t,e){n=kn(n),t=kn(t),e=kn(e);var r=dn((.4124564*n+.3575761*t+.1804375*e)/na),i=dn((.2126729*n+.7151522*t+.072175*e)/ta),u=dn((.0193339*n+.119192*t+.9503041*e)/ea);return hn(116*i-16,500*(r-i),200*(i-u))}function kn(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function Nn(n){var t=parseFloat(n);return"%"===n.charAt(n.length-1)?Math.round(2.55*t):t}function En(n){return"function"==typeof n?n:function(){return n}}function An(n){return function(t,e,r){return 2===arguments.length&&"function"==typeof e&&(r=e,e=null),Cn(t,e,n,r)}}function Cn(n,t,e,r){function i(){var n,t=l.status;if(!t&&Ln(l)||t>=200&&300>t||304===t){try{n=e.call(u,l)}catch(r){return void o.error.call(u,r)}o.load.call(u,n)}else o.error.call(u,l)}var u={},o=ao.dispatch("beforesend","progress","load","error"),a={},l=new XMLHttpRequest,c=null;return!this.XDomainRequest||"withCredentials"in l||!/^(http(s)?:)?\/\//.test(n)||(l=new XDomainRequest),"onload"in l?l.onload=l.onerror=i:l.onreadystatechange=function(){l.readyState>3&&i()},l.onprogress=function(n){var t=ao.event;ao.event=n;try{o.progress.call(u,l)}finally{ao.event=t}},u.header=function(n,t){return n=(n+"").toLowerCase(),arguments.length<2?a[n]:(null==t?delete a[n]:a[n]=t+"",u)},u.mimeType=function(n){return arguments.length?(t=null==n?null:n+"",u):t},u.responseType=function(n){return arguments.length?(c=n,u):c},u.response=function(n){return e=n,u},["get","post"].forEach(function(n){u[n]=function(){return u.send.apply(u,[n].concat(co(arguments)))}}),u.send=function(e,r,i){if(2===arguments.length&&"function"==typeof r&&(i=r,r=null),l.open(e,n,!0),null==t||"accept"in a||(a.accept=t+",*/*"),l.setRequestHeader)for(var f in a)l.setRequestHeader(f,a[f]);return null!=t&&l.overrideMimeType&&l.overrideMimeType(t),null!=c&&(l.responseType=c),null!=i&&u.on("error",i).on("load",function(n){i(null,n)}),o.beforesend.call(u,l),l.send(null==r?null:r),u},u.abort=function(){return l.abort(),u},ao.rebind(u,o,"on"),null==r?u:u.get(zn(r))}function zn(n){return 1===n.length?function(t,e){n(null==t?e:null)}:n}function Ln(n){var t=n.responseType;return t&&"text"!==t?n.response:n.responseText}function qn(n,t,e){var r=arguments.length;2>r&&(t=0),3>r&&(e=Date.now());var i=e+t,u={c:n,t:i,n:null};return aa?aa.n=u:oa=u,aa=u,la||(ca=clearTimeout(ca),la=1,fa(Tn)),u}function Tn(){var n=Rn(),t=Dn()-n;t>24?(isFinite(t)&&(clearTimeout(ca),ca=setTimeout(Tn,t)),la=0):(la=1,fa(Tn))}function Rn(){for(var n=Date.now(),t=oa;t;)n>=t.t&&t.c(n-t.t)&&(t.c=null),t=t.n;return n}function Dn(){for(var n,t=oa,e=1/0;t;)t.c?(t.t8?function(n){return n/e}:function(n){return n*e},symbol:n}}function jn(n){var t=n.decimal,e=n.thousands,r=n.grouping,i=n.currency,u=r&&e?function(n,t){for(var i=n.length,u=[],o=0,a=r[0],l=0;i>0&&a>0&&(l+a+1>t&&(a=Math.max(1,t-l)),u.push(n.substring(i-=a,i+a)),!((l+=a+1)>t));)a=r[o=(o+1)%r.length];return u.reverse().join(e)}:m;return function(n){var e=ha.exec(n),r=e[1]||" ",o=e[2]||">",a=e[3]||"-",l=e[4]||"",c=e[5],f=+e[6],s=e[7],h=e[8],p=e[9],g=1,v="",d="",y=!1,m=!0;switch(h&&(h=+h.substring(1)),(c||"0"===r&&"="===o)&&(c=r="0",o="="),p){case"n":s=!0,p="g";break;case"%":g=100,d="%",p="f";break;case"p":g=100,d="%",p="r";break;case"b":case"o":case"x":case"X":"#"===l&&(v="0"+p.toLowerCase());case"c":m=!1;case"d":y=!0,h=0;break;case"s":g=-1,p="r"}"$"===l&&(v=i[0],d=i[1]),"r"!=p||h||(p="g"),null!=h&&("g"==p?h=Math.max(1,Math.min(21,h)):"e"!=p&&"f"!=p||(h=Math.max(0,Math.min(20,h)))),p=pa.get(p)||Fn;var M=c&&s;return function(n){var e=d;if(y&&n%1)return"";var i=0>n||0===n&&0>1/n?(n=-n,"-"):"-"===a?"":a;if(0>g){var l=ao.formatPrefix(n,h);n=l.scale(n),e=l.symbol+d}else n*=g;n=p(n,h);var x,b,_=n.lastIndexOf(".");if(0>_){var w=m?n.lastIndexOf("e"):-1;0>w?(x=n,b=""):(x=n.substring(0,w),b=n.substring(w))}else x=n.substring(0,_),b=t+n.substring(_+1);!c&&s&&(x=u(x,1/0));var S=v.length+x.length+b.length+(M?0:i.length),k=f>S?new Array(S=f-S+1).join(r):"";return M&&(x=u(k+x,k.length?f-b.length:1/0)),i+=v,n=x+b,("<"===o?i+n+k:">"===o?k+i+n:"^"===o?k.substring(0,S>>=1)+i+n+k.substring(S):i+(M?n:k+n))+e}}}function Fn(n){return n+""}function Hn(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function On(n,t,e){function r(t){var e=n(t),r=u(e,1);return r-t>t-e?e:r}function i(e){return t(e=n(new va(e-1)),1),e}function u(n,e){return t(n=new va(+n),e),n}function o(n,r,u){var o=i(n),a=[];if(u>1)for(;r>o;)e(o)%u||a.push(new Date(+o)),t(o,1);else for(;r>o;)a.push(new Date(+o)),t(o,1);return a}function a(n,t,e){try{va=Hn;var r=new Hn;return r._=n,o(r,t,e)}finally{va=Date}}n.floor=n,n.round=r,n.ceil=i,n.offset=u,n.range=o;var l=n.utc=In(n);return l.floor=l,l.round=In(r),l.ceil=In(i),l.offset=In(u),l.range=a,n}function In(n){return function(t,e){try{va=Hn;var r=new Hn;return r._=t,n(r,e)._}finally{va=Date}}}function Yn(n){function t(n){function t(t){for(var e,i,u,o=[],a=-1,l=0;++aa;){if(r>=c)return-1;if(i=t.charCodeAt(a++),37===i){if(o=t.charAt(a++),u=C[o in ya?t.charAt(a++):o],!u||(r=u(n,e,r))<0)return-1}else if(i!=e.charCodeAt(r++))return-1}return r}function r(n,t,e){_.lastIndex=0;var r=_.exec(t.slice(e));return r?(n.w=w.get(r[0].toLowerCase()),e+r[0].length):-1}function i(n,t,e){x.lastIndex=0;var r=x.exec(t.slice(e));return r?(n.w=b.get(r[0].toLowerCase()),e+r[0].length):-1}function u(n,t,e){N.lastIndex=0;var r=N.exec(t.slice(e));return r?(n.m=E.get(r[0].toLowerCase()),e+r[0].length):-1}function o(n,t,e){S.lastIndex=0;var r=S.exec(t.slice(e));return r?(n.m=k.get(r[0].toLowerCase()),e+r[0].length):-1}function a(n,t,r){return e(n,A.c.toString(),t,r)}function l(n,t,r){return e(n,A.x.toString(),t,r)}function c(n,t,r){return e(n,A.X.toString(),t,r)}function f(n,t,e){var r=M.get(t.slice(e,e+=2).toLowerCase());return null==r?-1:(n.p=r,e)}var s=n.dateTime,h=n.date,p=n.time,g=n.periods,v=n.days,d=n.shortDays,y=n.months,m=n.shortMonths;t.utc=function(n){function e(n){try{va=Hn;var t=new va;return t._=n,r(t)}finally{va=Date}}var r=t(n);return e.parse=function(n){try{va=Hn;var t=r.parse(n);return t&&t._}finally{va=Date}},e.toString=r.toString,e},t.multi=t.utc.multi=ct;var M=ao.map(),x=Vn(v),b=Xn(v),_=Vn(d),w=Xn(d),S=Vn(y),k=Xn(y),N=Vn(m),E=Xn(m);g.forEach(function(n,t){M.set(n.toLowerCase(),t)});var A={a:function(n){return d[n.getDay()]},A:function(n){return v[n.getDay()]},b:function(n){return m[n.getMonth()]},B:function(n){return y[n.getMonth()]},c:t(s),d:function(n,t){return Zn(n.getDate(),t,2)},e:function(n,t){return Zn(n.getDate(),t,2)},H:function(n,t){return Zn(n.getHours(),t,2)},I:function(n,t){return Zn(n.getHours()%12||12,t,2)},j:function(n,t){return Zn(1+ga.dayOfYear(n),t,3)},L:function(n,t){return Zn(n.getMilliseconds(),t,3)},m:function(n,t){return Zn(n.getMonth()+1,t,2)},M:function(n,t){return Zn(n.getMinutes(),t,2)},p:function(n){return g[+(n.getHours()>=12)]},S:function(n,t){return Zn(n.getSeconds(),t,2)},U:function(n,t){return Zn(ga.sundayOfYear(n),t,2)},w:function(n){return n.getDay()},W:function(n,t){return Zn(ga.mondayOfYear(n),t,2)},x:t(h),X:t(p),y:function(n,t){return Zn(n.getFullYear()%100,t,2)},Y:function(n,t){return Zn(n.getFullYear()%1e4,t,4)},Z:at,"%":function(){return"%"}},C={a:r,A:i,b:u,B:o,c:a,d:tt,e:tt,H:rt,I:rt,j:et,L:ot,m:nt,M:it,p:f,S:ut,U:Bn,w:$n,W:Wn,x:l,X:c,y:Gn,Y:Jn,Z:Kn,"%":lt};return t}function Zn(n,t,e){var r=0>n?"-":"",i=(r?-n:n)+"",u=i.length;return r+(e>u?new Array(e-u+1).join(t)+i:i)}function Vn(n){return new RegExp("^(?:"+n.map(ao.requote).join("|")+")","i")}function Xn(n){for(var t=new c,e=-1,r=n.length;++e68?1900:2e3)}function nt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.m=r[0]-1,e+r[0].length):-1}function tt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.d=+r[0],e+r[0].length):-1}function et(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.j=+r[0],e+r[0].length):-1}function rt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.H=+r[0],e+r[0].length):-1}function it(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.M=+r[0],e+r[0].length):-1}function ut(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.S=+r[0],e+r[0].length):-1}function ot(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.L=+r[0],e+r[0].length):-1}function at(n){var t=n.getTimezoneOffset(),e=t>0?"-":"+",r=xo(t)/60|0,i=xo(t)%60;return e+Zn(r,"0",2)+Zn(i,"0",2)}function lt(n,t,e){Ma.lastIndex=0;var r=Ma.exec(t.slice(e,e+1));return r?e+r[0].length:-1}function ct(n){for(var t=n.length,e=-1;++e=0?1:-1,a=o*e,l=Math.cos(t),c=Math.sin(t),f=u*c,s=i*l+f*Math.cos(a),h=f*o*Math.sin(a);ka.add(Math.atan2(h,s)),r=n,i=l,u=c}var t,e,r,i,u;Na.point=function(o,a){Na.point=n,r=(t=o)*Yo,i=Math.cos(a=(e=a)*Yo/2+Fo/4),u=Math.sin(a)},Na.lineEnd=function(){n(t,e)}}function dt(n){var t=n[0],e=n[1],r=Math.cos(e);return[r*Math.cos(t),r*Math.sin(t),Math.sin(e)]}function yt(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}function mt(n,t){return[n[1]*t[2]-n[2]*t[1],n[2]*t[0]-n[0]*t[2],n[0]*t[1]-n[1]*t[0]]}function Mt(n,t){n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}function xt(n,t){return[n[0]*t,n[1]*t,n[2]*t]}function bt(n){var t=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);n[0]/=t,n[1]/=t,n[2]/=t}function _t(n){return[Math.atan2(n[1],n[0]),tn(n[2])]}function wt(n,t){return xo(n[0]-t[0])a;++a)i.point((e=n[a])[0],e[1]);return void i.lineEnd()}var l=new Tt(e,n,null,!0),c=new Tt(e,null,l,!1);l.o=c,u.push(l),o.push(c),l=new Tt(r,n,null,!1),c=new Tt(r,null,l,!0),l.o=c,u.push(l),o.push(c)}}),o.sort(t),qt(u),qt(o),u.length){for(var a=0,l=e,c=o.length;c>a;++a)o[a].e=l=!l;for(var f,s,h=u[0];;){for(var p=h,g=!0;p.v;)if((p=p.n)===h)return;f=p.z,i.lineStart();do{if(p.v=p.o.v=!0,p.e){if(g)for(var a=0,c=f.length;c>a;++a)i.point((s=f[a])[0],s[1]);else r(p.x,p.n.x,1,i);p=p.n}else{if(g){f=p.p.z;for(var a=f.length-1;a>=0;--a)i.point((s=f[a])[0],s[1])}else r(p.x,p.p.x,-1,i);p=p.p}p=p.o,f=p.z,g=!g}while(!p.v);i.lineEnd()}}}function qt(n){if(t=n.length){for(var t,e,r=0,i=n[0];++r0){for(b||(u.polygonStart(),b=!0),u.lineStart();++o1&&2&t&&e.push(e.pop().concat(e.shift())),p.push(e.filter(Dt))}var p,g,v,d=t(u),y=i.invert(r[0],r[1]),m={point:o,lineStart:l,lineEnd:c,polygonStart:function(){m.point=f,m.lineStart=s,m.lineEnd=h,p=[],g=[]},polygonEnd:function(){m.point=o,m.lineStart=l,m.lineEnd=c,p=ao.merge(p);var n=Ot(y,g);p.length?(b||(u.polygonStart(),b=!0),Lt(p,Ut,n,e,u)):n&&(b||(u.polygonStart(),b=!0),u.lineStart(),e(null,null,1,u),u.lineEnd()),b&&(u.polygonEnd(),b=!1),p=g=null},sphere:function(){u.polygonStart(),u.lineStart(),e(null,null,1,u),u.lineEnd(),u.polygonEnd()}},M=Pt(),x=t(M),b=!1;return m}}function Dt(n){return n.length>1}function Pt(){var n,t=[];return{lineStart:function(){t.push(n=[])},point:function(t,e){n.push([t,e])},lineEnd:b,buffer:function(){var e=t;return t=[],n=null,e},rejoin:function(){t.length>1&&t.push(t.pop().concat(t.shift()))}}}function Ut(n,t){return((n=n.x)[0]<0?n[1]-Io-Uo:Io-n[1])-((t=t.x)[0]<0?t[1]-Io-Uo:Io-t[1])}function jt(n){var t,e=NaN,r=NaN,i=NaN;return{lineStart:function(){n.lineStart(),t=1},point:function(u,o){var a=u>0?Fo:-Fo,l=xo(u-e);xo(l-Fo)0?Io:-Io),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(a,r),n.point(u,r),t=0):i!==a&&l>=Fo&&(xo(e-i)Uo?Math.atan((Math.sin(t)*(u=Math.cos(r))*Math.sin(e)-Math.sin(r)*(i=Math.cos(t))*Math.sin(n))/(i*u*o)):(t+r)/2}function Ht(n,t,e,r){var i;if(null==n)i=e*Io,r.point(-Fo,i),r.point(0,i),r.point(Fo,i),r.point(Fo,0),r.point(Fo,-i),r.point(0,-i),r.point(-Fo,-i),r.point(-Fo,0),r.point(-Fo,i);else if(xo(n[0]-t[0])>Uo){var u=n[0]a;++a){var c=t[a],f=c.length;if(f)for(var s=c[0],h=s[0],p=s[1]/2+Fo/4,g=Math.sin(p),v=Math.cos(p),d=1;;){d===f&&(d=0),n=c[d];var y=n[0],m=n[1]/2+Fo/4,M=Math.sin(m),x=Math.cos(m),b=y-h,_=b>=0?1:-1,w=_*b,S=w>Fo,k=g*M;if(ka.add(Math.atan2(k*_*Math.sin(w),v*x+k*Math.cos(w))),u+=S?b+_*Ho:b,S^h>=e^y>=e){var N=mt(dt(s),dt(n));bt(N);var E=mt(i,N);bt(E);var A=(S^b>=0?-1:1)*tn(E[2]);(r>A||r===A&&(N[0]||N[1]))&&(o+=S^b>=0?1:-1)}if(!d++)break;h=y,g=M,v=x,s=n}}return(-Uo>u||Uo>u&&-Uo>ka)^1&o}function It(n){function t(n,t){return Math.cos(n)*Math.cos(t)>u}function e(n){var e,u,l,c,f;return{lineStart:function(){c=l=!1,f=1},point:function(s,h){var p,g=[s,h],v=t(s,h),d=o?v?0:i(s,h):v?i(s+(0>s?Fo:-Fo),h):0;if(!e&&(c=l=v)&&n.lineStart(),v!==l&&(p=r(e,g),(wt(e,p)||wt(g,p))&&(g[0]+=Uo,g[1]+=Uo,v=t(g[0],g[1]))),v!==l)f=0,v?(n.lineStart(),p=r(g,e),n.point(p[0],p[1])):(p=r(e,g),n.point(p[0],p[1]),n.lineEnd()),e=p;else if(a&&e&&o^v){var y;d&u||!(y=r(g,e,!0))||(f=0,o?(n.lineStart(),n.point(y[0][0],y[0][1]),n.point(y[1][0],y[1][1]),n.lineEnd()):(n.point(y[1][0],y[1][1]),n.lineEnd(),n.lineStart(),n.point(y[0][0],y[0][1])))}!v||e&&wt(e,g)||n.point(g[0],g[1]),e=g,l=v,u=d},lineEnd:function(){l&&n.lineEnd(),e=null},clean:function(){return f|(c&&l)<<1}}}function r(n,t,e){var r=dt(n),i=dt(t),o=[1,0,0],a=mt(r,i),l=yt(a,a),c=a[0],f=l-c*c;if(!f)return!e&&n;var s=u*l/f,h=-u*c/f,p=mt(o,a),g=xt(o,s),v=xt(a,h);Mt(g,v);var d=p,y=yt(g,d),m=yt(d,d),M=y*y-m*(yt(g,g)-1);if(!(0>M)){var x=Math.sqrt(M),b=xt(d,(-y-x)/m);if(Mt(b,g),b=_t(b),!e)return b;var _,w=n[0],S=t[0],k=n[1],N=t[1];w>S&&(_=w,w=S,S=_);var E=S-w,A=xo(E-Fo)E;if(!A&&k>N&&(_=k,k=N,N=_),C?A?k+N>0^b[1]<(xo(b[0]-w)Fo^(w<=b[0]&&b[0]<=S)){var z=xt(d,(-y+x)/m);return Mt(z,g),[b,_t(z)]}}}function i(t,e){var r=o?n:Fo-n,i=0;return-r>t?i|=1:t>r&&(i|=2),-r>e?i|=4:e>r&&(i|=8),i}var u=Math.cos(n),o=u>0,a=xo(u)>Uo,l=ve(n,6*Yo);return Rt(t,e,l,o?[0,-n]:[-Fo,n-Fo])}function Yt(n,t,e,r){return function(i){var u,o=i.a,a=i.b,l=o.x,c=o.y,f=a.x,s=a.y,h=0,p=1,g=f-l,v=s-c;if(u=n-l,g||!(u>0)){if(u/=g,0>g){if(h>u)return;p>u&&(p=u)}else if(g>0){if(u>p)return;u>h&&(h=u)}if(u=e-l,g||!(0>u)){if(u/=g,0>g){if(u>p)return;u>h&&(h=u)}else if(g>0){if(h>u)return;p>u&&(p=u)}if(u=t-c,v||!(u>0)){if(u/=v,0>v){if(h>u)return;p>u&&(p=u)}else if(v>0){if(u>p)return;u>h&&(h=u)}if(u=r-c,v||!(0>u)){if(u/=v,0>v){if(u>p)return;u>h&&(h=u)}else if(v>0){if(h>u)return;p>u&&(p=u)}return h>0&&(i.a={x:l+h*g,y:c+h*v}),1>p&&(i.b={x:l+p*g,y:c+p*v}),i}}}}}}function Zt(n,t,e,r){function i(r,i){return xo(r[0]-n)0?0:3:xo(r[0]-e)0?2:1:xo(r[1]-t)0?1:0:i>0?3:2}function u(n,t){return o(n.x,t.x)}function o(n,t){var e=i(n,1),r=i(t,1);return e!==r?e-r:0===e?t[1]-n[1]:1===e?n[0]-t[0]:2===e?n[1]-t[1]:t[0]-n[0]}return function(a){function l(n){for(var t=0,e=d.length,r=n[1],i=0;e>i;++i)for(var u,o=1,a=d[i],l=a.length,c=a[0];l>o;++o)u=a[o],c[1]<=r?u[1]>r&&Q(c,u,n)>0&&++t:u[1]<=r&&Q(c,u,n)<0&&--t,c=u;return 0!==t}function c(u,a,l,c){var f=0,s=0;if(null==u||(f=i(u,l))!==(s=i(a,l))||o(u,a)<0^l>0){do c.point(0===f||3===f?n:e,f>1?r:t);while((f=(f+l+4)%4)!==s)}else c.point(a[0],a[1])}function f(i,u){return i>=n&&e>=i&&u>=t&&r>=u}function s(n,t){f(n,t)&&a.point(n,t)}function h(){C.point=g,d&&d.push(y=[]),S=!0,w=!1,b=_=NaN}function p(){v&&(g(m,M),x&&w&&E.rejoin(),v.push(E.buffer())),C.point=s,w&&a.lineEnd()}function g(n,t){n=Math.max(-Ha,Math.min(Ha,n)),t=Math.max(-Ha,Math.min(Ha,t));var e=f(n,t);if(d&&y.push([n,t]),S)m=n,M=t,x=e,S=!1,e&&(a.lineStart(),a.point(n,t));else if(e&&w)a.point(n,t);else{var r={a:{x:b,y:_},b:{x:n,y:t}};A(r)?(w||(a.lineStart(),a.point(r.a.x,r.a.y)),a.point(r.b.x,r.b.y),e||a.lineEnd(),k=!1):e&&(a.lineStart(),a.point(n,t),k=!1)}b=n,_=t,w=e}var v,d,y,m,M,x,b,_,w,S,k,N=a,E=Pt(),A=Yt(n,t,e,r),C={point:s,lineStart:h,lineEnd:p,polygonStart:function(){a=E,v=[],d=[],k=!0},polygonEnd:function(){a=N,v=ao.merge(v);var t=l([n,r]),e=k&&t,i=v.length;(e||i)&&(a.polygonStart(),e&&(a.lineStart(),c(null,null,1,a),a.lineEnd()),i&&Lt(v,u,t,c,a),a.polygonEnd()),v=d=y=null}};return C}}function Vt(n){var t=0,e=Fo/3,r=ae(n),i=r(t,e);return i.parallels=function(n){return arguments.length?r(t=n[0]*Fo/180,e=n[1]*Fo/180):[t/Fo*180,e/Fo*180]},i}function Xt(n,t){function e(n,t){var e=Math.sqrt(u-2*i*Math.sin(t))/i;return[e*Math.sin(n*=i),o-e*Math.cos(n)]}var r=Math.sin(n),i=(r+Math.sin(t))/2,u=1+r*(2*i-r),o=Math.sqrt(u)/i;return e.invert=function(n,t){var e=o-t;return[Math.atan2(n,e)/i,tn((u-(n*n+e*e)*i*i)/(2*i))]},e}function $t(){function n(n,t){Ia+=i*n-r*t,r=n,i=t}var t,e,r,i;$a.point=function(u,o){$a.point=n,t=r=u,e=i=o},$a.lineEnd=function(){n(t,e)}}function Bt(n,t){Ya>n&&(Ya=n),n>Va&&(Va=n),Za>t&&(Za=t),t>Xa&&(Xa=t)}function Wt(){function n(n,t){o.push("M",n,",",t,u)}function t(n,t){o.push("M",n,",",t),a.point=e}function e(n,t){o.push("L",n,",",t)}function r(){a.point=n}function i(){o.push("Z")}var u=Jt(4.5),o=[],a={point:n,lineStart:function(){a.point=t},lineEnd:r,polygonStart:function(){a.lineEnd=i},polygonEnd:function(){a.lineEnd=r,a.point=n},pointRadius:function(n){return u=Jt(n),a},result:function(){if(o.length){var n=o.join("");return o=[],n}}};return a}function Jt(n){return"m0,"+n+"a"+n+","+n+" 0 1,1 0,"+-2*n+"a"+n+","+n+" 0 1,1 0,"+2*n+"z"}function Gt(n,t){Ca+=n,za+=t,++La}function Kt(){function n(n,r){var i=n-t,u=r-e,o=Math.sqrt(i*i+u*u);qa+=o*(t+n)/2,Ta+=o*(e+r)/2,Ra+=o,Gt(t=n,e=r)}var t,e;Wa.point=function(r,i){Wa.point=n,Gt(t=r,e=i)}}function Qt(){Wa.point=Gt}function ne(){function n(n,t){var e=n-r,u=t-i,o=Math.sqrt(e*e+u*u);qa+=o*(r+n)/2,Ta+=o*(i+t)/2,Ra+=o,o=i*n-r*t,Da+=o*(r+n),Pa+=o*(i+t),Ua+=3*o,Gt(r=n,i=t)}var t,e,r,i;Wa.point=function(u,o){Wa.point=n,Gt(t=r=u,e=i=o)},Wa.lineEnd=function(){n(t,e)}}function te(n){function t(t,e){n.moveTo(t+o,e),n.arc(t,e,o,0,Ho)}function e(t,e){n.moveTo(t,e),a.point=r}function r(t,e){n.lineTo(t,e)}function i(){a.point=t}function u(){n.closePath()}var o=4.5,a={point:t,lineStart:function(){a.point=e},lineEnd:i,polygonStart:function(){a.lineEnd=u},polygonEnd:function(){a.lineEnd=i,a.point=t},pointRadius:function(n){return o=n,a},result:b};return a}function ee(n){function t(n){return(a?r:e)(n)}function e(t){return ue(t,function(e,r){e=n(e,r),t.point(e[0],e[1])})}function r(t){function e(e,r){e=n(e,r),t.point(e[0],e[1])}function r(){M=NaN,S.point=u,t.lineStart()}function u(e,r){var u=dt([e,r]),o=n(e,r);i(M,x,m,b,_,w,M=o[0],x=o[1],m=e,b=u[0],_=u[1],w=u[2],a,t),t.point(M,x)}function o(){S.point=e,t.lineEnd()}function l(){ +r(),S.point=c,S.lineEnd=f}function c(n,t){u(s=n,h=t),p=M,g=x,v=b,d=_,y=w,S.point=u}function f(){i(M,x,m,b,_,w,p,g,s,v,d,y,a,t),S.lineEnd=o,o()}var s,h,p,g,v,d,y,m,M,x,b,_,w,S={point:e,lineStart:r,lineEnd:o,polygonStart:function(){t.polygonStart(),S.lineStart=l},polygonEnd:function(){t.polygonEnd(),S.lineStart=r}};return S}function i(t,e,r,a,l,c,f,s,h,p,g,v,d,y){var m=f-t,M=s-e,x=m*m+M*M;if(x>4*u&&d--){var b=a+p,_=l+g,w=c+v,S=Math.sqrt(b*b+_*_+w*w),k=Math.asin(w/=S),N=xo(xo(w)-1)u||xo((m*z+M*L)/x-.5)>.3||o>a*p+l*g+c*v)&&(i(t,e,r,a,l,c,A,C,N,b/=S,_/=S,w,d,y),y.point(A,C),i(A,C,N,b,_,w,f,s,h,p,g,v,d,y))}}var u=.5,o=Math.cos(30*Yo),a=16;return t.precision=function(n){return arguments.length?(a=(u=n*n)>0&&16,t):Math.sqrt(u)},t}function re(n){var t=ee(function(t,e){return n([t*Zo,e*Zo])});return function(n){return le(t(n))}}function ie(n){this.stream=n}function ue(n,t){return{point:t,sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}function oe(n){return ae(function(){return n})()}function ae(n){function t(n){return n=a(n[0]*Yo,n[1]*Yo),[n[0]*h+l,c-n[1]*h]}function e(n){return n=a.invert((n[0]-l)/h,(c-n[1])/h),n&&[n[0]*Zo,n[1]*Zo]}function r(){a=Ct(o=se(y,M,x),u);var n=u(v,d);return l=p-n[0]*h,c=g+n[1]*h,i()}function i(){return f&&(f.valid=!1,f=null),t}var u,o,a,l,c,f,s=ee(function(n,t){return n=u(n,t),[n[0]*h+l,c-n[1]*h]}),h=150,p=480,g=250,v=0,d=0,y=0,M=0,x=0,b=Fa,_=m,w=null,S=null;return t.stream=function(n){return f&&(f.valid=!1),f=le(b(o,s(_(n)))),f.valid=!0,f},t.clipAngle=function(n){return arguments.length?(b=null==n?(w=n,Fa):It((w=+n)*Yo),i()):w},t.clipExtent=function(n){return arguments.length?(S=n,_=n?Zt(n[0][0],n[0][1],n[1][0],n[1][1]):m,i()):S},t.scale=function(n){return arguments.length?(h=+n,r()):h},t.translate=function(n){return arguments.length?(p=+n[0],g=+n[1],r()):[p,g]},t.center=function(n){return arguments.length?(v=n[0]%360*Yo,d=n[1]%360*Yo,r()):[v*Zo,d*Zo]},t.rotate=function(n){return arguments.length?(y=n[0]%360*Yo,M=n[1]%360*Yo,x=n.length>2?n[2]%360*Yo:0,r()):[y*Zo,M*Zo,x*Zo]},ao.rebind(t,s,"precision"),function(){return u=n.apply(this,arguments),t.invert=u.invert&&e,r()}}function le(n){return ue(n,function(t,e){n.point(t*Yo,e*Yo)})}function ce(n,t){return[n,t]}function fe(n,t){return[n>Fo?n-Ho:-Fo>n?n+Ho:n,t]}function se(n,t,e){return n?t||e?Ct(pe(n),ge(t,e)):pe(n):t||e?ge(t,e):fe}function he(n){return function(t,e){return t+=n,[t>Fo?t-Ho:-Fo>t?t+Ho:t,e]}}function pe(n){var t=he(n);return t.invert=he(-n),t}function ge(n,t){function e(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*r+a*i;return[Math.atan2(l*u-f*o,a*r-c*i),tn(f*u+l*o)]}var r=Math.cos(n),i=Math.sin(n),u=Math.cos(t),o=Math.sin(t);return e.invert=function(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*u-l*o;return[Math.atan2(l*u+c*o,a*r+f*i),tn(f*r-a*i)]},e}function ve(n,t){var e=Math.cos(n),r=Math.sin(n);return function(i,u,o,a){var l=o*t;null!=i?(i=de(e,i),u=de(e,u),(o>0?u>i:i>u)&&(i+=o*Ho)):(i=n+o*Ho,u=n-.5*l);for(var c,f=i;o>0?f>u:u>f;f-=l)a.point((c=_t([e,-r*Math.cos(f),-r*Math.sin(f)]))[0],c[1])}}function de(n,t){var e=dt(t);e[0]-=n,bt(e);var r=nn(-e[1]);return((-e[2]<0?-r:r)+2*Math.PI-Uo)%(2*Math.PI)}function ye(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[n,t]})}}function me(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[t,n]})}}function Me(n){return n.source}function xe(n){return n.target}function be(n,t,e,r){var i=Math.cos(t),u=Math.sin(t),o=Math.cos(r),a=Math.sin(r),l=i*Math.cos(n),c=i*Math.sin(n),f=o*Math.cos(e),s=o*Math.sin(e),h=2*Math.asin(Math.sqrt(on(r-t)+i*o*on(e-n))),p=1/Math.sin(h),g=h?function(n){var t=Math.sin(n*=h)*p,e=Math.sin(h-n)*p,r=e*l+t*f,i=e*c+t*s,o=e*u+t*a;return[Math.atan2(i,r)*Zo,Math.atan2(o,Math.sqrt(r*r+i*i))*Zo]}:function(){return[n*Zo,t*Zo]};return g.distance=h,g}function _e(){function n(n,i){var u=Math.sin(i*=Yo),o=Math.cos(i),a=xo((n*=Yo)-t),l=Math.cos(a);Ja+=Math.atan2(Math.sqrt((a=o*Math.sin(a))*a+(a=r*u-e*o*l)*a),e*u+r*o*l),t=n,e=u,r=o}var t,e,r;Ga.point=function(i,u){t=i*Yo,e=Math.sin(u*=Yo),r=Math.cos(u),Ga.point=n},Ga.lineEnd=function(){Ga.point=Ga.lineEnd=b}}function we(n,t){function e(t,e){var r=Math.cos(t),i=Math.cos(e),u=n(r*i);return[u*i*Math.sin(t),u*Math.sin(e)]}return e.invert=function(n,e){var r=Math.sqrt(n*n+e*e),i=t(r),u=Math.sin(i),o=Math.cos(i);return[Math.atan2(n*u,r*o),Math.asin(r&&e*u/r)]},e}function Se(n,t){function e(n,t){o>0?-Io+Uo>t&&(t=-Io+Uo):t>Io-Uo&&(t=Io-Uo);var e=o/Math.pow(i(t),u);return[e*Math.sin(u*n),o-e*Math.cos(u*n)]}var r=Math.cos(n),i=function(n){return Math.tan(Fo/4+n/2)},u=n===t?Math.sin(n):Math.log(r/Math.cos(t))/Math.log(i(t)/i(n)),o=r*Math.pow(i(n),u)/u;return u?(e.invert=function(n,t){var e=o-t,r=K(u)*Math.sqrt(n*n+e*e);return[Math.atan2(n,e)/u,2*Math.atan(Math.pow(o/r,1/u))-Io]},e):Ne}function ke(n,t){function e(n,t){var e=u-t;return[e*Math.sin(i*n),u-e*Math.cos(i*n)]}var r=Math.cos(n),i=n===t?Math.sin(n):(r-Math.cos(t))/(t-n),u=r/i+n;return xo(i)i;i++){for(;r>1&&Q(n[e[r-2]],n[e[r-1]],n[i])<=0;)--r;e[r++]=i}return e.slice(0,r)}function qe(n,t){return n[0]-t[0]||n[1]-t[1]}function Te(n,t,e){return(e[0]-t[0])*(n[1]-t[1])<(e[1]-t[1])*(n[0]-t[0])}function Re(n,t,e,r){var i=n[0],u=e[0],o=t[0]-i,a=r[0]-u,l=n[1],c=e[1],f=t[1]-l,s=r[1]-c,h=(a*(l-c)-s*(i-u))/(s*o-a*f);return[i+h*o,l+h*f]}function De(n){var t=n[0],e=n[n.length-1];return!(t[0]-e[0]||t[1]-e[1])}function Pe(){rr(this),this.edge=this.site=this.circle=null}function Ue(n){var t=cl.pop()||new Pe;return t.site=n,t}function je(n){Be(n),ol.remove(n),cl.push(n),rr(n)}function Fe(n){var t=n.circle,e=t.x,r=t.cy,i={x:e,y:r},u=n.P,o=n.N,a=[n];je(n);for(var l=u;l.circle&&xo(e-l.circle.x)f;++f)c=a[f],l=a[f-1],nr(c.edge,l.site,c.site,i);l=a[0],c=a[s-1],c.edge=Ke(l.site,c.site,null,i),$e(l),$e(c)}function He(n){for(var t,e,r,i,u=n.x,o=n.y,a=ol._;a;)if(r=Oe(a,o)-u,r>Uo)a=a.L;else{if(i=u-Ie(a,o),!(i>Uo)){r>-Uo?(t=a.P,e=a):i>-Uo?(t=a,e=a.N):t=e=a;break}if(!a.R){t=a;break}a=a.R}var l=Ue(n);if(ol.insert(t,l),t||e){if(t===e)return Be(t),e=Ue(t.site),ol.insert(l,e),l.edge=e.edge=Ke(t.site,l.site),$e(t),void $e(e);if(!e)return void(l.edge=Ke(t.site,l.site));Be(t),Be(e);var c=t.site,f=c.x,s=c.y,h=n.x-f,p=n.y-s,g=e.site,v=g.x-f,d=g.y-s,y=2*(h*d-p*v),m=h*h+p*p,M=v*v+d*d,x={x:(d*m-p*M)/y+f,y:(h*M-v*m)/y+s};nr(e.edge,c,g,x),l.edge=Ke(c,n,null,x),e.edge=Ke(n,g,null,x),$e(t),$e(e)}}function Oe(n,t){var e=n.site,r=e.x,i=e.y,u=i-t;if(!u)return r;var o=n.P;if(!o)return-(1/0);e=o.site;var a=e.x,l=e.y,c=l-t;if(!c)return a;var f=a-r,s=1/u-1/c,h=f/c;return s?(-h+Math.sqrt(h*h-2*s*(f*f/(-2*c)-l+c/2+i-u/2)))/s+r:(r+a)/2}function Ie(n,t){var e=n.N;if(e)return Oe(e,t);var r=n.site;return r.y===t?r.x:1/0}function Ye(n){this.site=n,this.edges=[]}function Ze(n){for(var t,e,r,i,u,o,a,l,c,f,s=n[0][0],h=n[1][0],p=n[0][1],g=n[1][1],v=ul,d=v.length;d--;)if(u=v[d],u&&u.prepare())for(a=u.edges,l=a.length,o=0;l>o;)f=a[o].end(),r=f.x,i=f.y,c=a[++o%l].start(),t=c.x,e=c.y,(xo(r-t)>Uo||xo(i-e)>Uo)&&(a.splice(o,0,new tr(Qe(u.site,f,xo(r-s)Uo?{x:s,y:xo(t-s)Uo?{x:xo(e-g)Uo?{x:h,y:xo(t-h)Uo?{x:xo(e-p)=-jo)){var p=l*l+c*c,g=f*f+s*s,v=(s*p-c*g)/h,d=(l*g-f*p)/h,s=d+a,y=fl.pop()||new Xe;y.arc=n,y.site=i,y.x=v+o,y.y=s+Math.sqrt(v*v+d*d),y.cy=s,n.circle=y;for(var m=null,M=ll._;M;)if(y.yd||d>=a)return;if(h>g){if(u){if(u.y>=c)return}else u={x:d,y:l};e={x:d,y:c}}else{if(u){if(u.yr||r>1)if(h>g){if(u){if(u.y>=c)return}else u={x:(l-i)/r,y:l};e={x:(c-i)/r,y:c}}else{if(u){if(u.yp){if(u){if(u.x>=a)return}else u={x:o,y:r*o+i};e={x:a,y:r*a+i}}else{if(u){if(u.xu||s>o||r>h||i>p)){if(g=n.point){var g,v=t-n.x,d=e-n.y,y=v*v+d*d;if(l>y){var m=Math.sqrt(l=y);r=t-m,i=e-m,u=t+m,o=e+m,a=g}}for(var M=n.nodes,x=.5*(f+h),b=.5*(s+p),_=t>=x,w=e>=b,S=w<<1|_,k=S+4;k>S;++S)if(n=M[3&S])switch(3&S){case 0:c(n,f,s,x,b);break;case 1:c(n,x,s,h,b);break;case 2:c(n,f,b,x,p);break;case 3:c(n,x,b,h,p)}}}(n,r,i,u,o),a}function vr(n,t){n=ao.rgb(n),t=ao.rgb(t);var e=n.r,r=n.g,i=n.b,u=t.r-e,o=t.g-r,a=t.b-i;return function(n){return"#"+bn(Math.round(e+u*n))+bn(Math.round(r+o*n))+bn(Math.round(i+a*n))}}function dr(n,t){var e,r={},i={};for(e in n)e in t?r[e]=Mr(n[e],t[e]):i[e]=n[e];for(e in t)e in n||(i[e]=t[e]);return function(n){for(e in r)i[e]=r[e](n);return i}}function yr(n,t){return n=+n,t=+t,function(e){return n*(1-e)+t*e}}function mr(n,t){var e,r,i,u=hl.lastIndex=pl.lastIndex=0,o=-1,a=[],l=[];for(n+="",t+="";(e=hl.exec(n))&&(r=pl.exec(t));)(i=r.index)>u&&(i=t.slice(u,i),a[o]?a[o]+=i:a[++o]=i),(e=e[0])===(r=r[0])?a[o]?a[o]+=r:a[++o]=r:(a[++o]=null,l.push({i:o,x:yr(e,r)})),u=pl.lastIndex;return ur;++r)a[(e=l[r]).i]=e.x(n);return a.join("")})}function Mr(n,t){for(var e,r=ao.interpolators.length;--r>=0&&!(e=ao.interpolators[r](n,t)););return e}function xr(n,t){var e,r=[],i=[],u=n.length,o=t.length,a=Math.min(n.length,t.length);for(e=0;a>e;++e)r.push(Mr(n[e],t[e]));for(;u>e;++e)i[e]=n[e];for(;o>e;++e)i[e]=t[e];return function(n){for(e=0;a>e;++e)i[e]=r[e](n);return i}}function br(n){return function(t){return 0>=t?0:t>=1?1:n(t)}}function _r(n){return function(t){return 1-n(1-t)}}function wr(n){return function(t){return.5*(.5>t?n(2*t):2-n(2-2*t))}}function Sr(n){return n*n}function kr(n){return n*n*n}function Nr(n){if(0>=n)return 0;if(n>=1)return 1;var t=n*n,e=t*n;return 4*(.5>n?e:3*(n-t)+e-.75)}function Er(n){return function(t){return Math.pow(t,n)}}function Ar(n){return 1-Math.cos(n*Io)}function Cr(n){return Math.pow(2,10*(n-1))}function zr(n){return 1-Math.sqrt(1-n*n)}function Lr(n,t){var e;return arguments.length<2&&(t=.45),arguments.length?e=t/Ho*Math.asin(1/n):(n=1,e=t/4),function(r){return 1+n*Math.pow(2,-10*r)*Math.sin((r-e)*Ho/t)}}function qr(n){return n||(n=1.70158),function(t){return t*t*((n+1)*t-n)}}function Tr(n){return 1/2.75>n?7.5625*n*n:2/2.75>n?7.5625*(n-=1.5/2.75)*n+.75:2.5/2.75>n?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375}function Rr(n,t){n=ao.hcl(n),t=ao.hcl(t);var e=n.h,r=n.c,i=n.l,u=t.h-e,o=t.c-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.c:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return sn(e+u*n,r+o*n,i+a*n)+""}}function Dr(n,t){n=ao.hsl(n),t=ao.hsl(t);var e=n.h,r=n.s,i=n.l,u=t.h-e,o=t.s-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.s:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return cn(e+u*n,r+o*n,i+a*n)+""}}function Pr(n,t){n=ao.lab(n),t=ao.lab(t);var e=n.l,r=n.a,i=n.b,u=t.l-e,o=t.a-r,a=t.b-i;return function(n){return pn(e+u*n,r+o*n,i+a*n)+""}}function Ur(n,t){return t-=n,function(e){return Math.round(n+t*e)}}function jr(n){var t=[n.a,n.b],e=[n.c,n.d],r=Hr(t),i=Fr(t,e),u=Hr(Or(e,t,-i))||0;t[0]*e[1]180?t+=360:t-n>180&&(n+=360),r.push({i:e.push(Ir(e)+"rotate(",null,")")-2,x:yr(n,t)})):t&&e.push(Ir(e)+"rotate("+t+")")}function Vr(n,t,e,r){n!==t?r.push({i:e.push(Ir(e)+"skewX(",null,")")-2,x:yr(n,t)}):t&&e.push(Ir(e)+"skewX("+t+")")}function Xr(n,t,e,r){if(n[0]!==t[0]||n[1]!==t[1]){var i=e.push(Ir(e)+"scale(",null,",",null,")");r.push({i:i-4,x:yr(n[0],t[0])},{i:i-2,x:yr(n[1],t[1])})}else 1===t[0]&&1===t[1]||e.push(Ir(e)+"scale("+t+")")}function $r(n,t){var e=[],r=[];return n=ao.transform(n),t=ao.transform(t),Yr(n.translate,t.translate,e,r),Zr(n.rotate,t.rotate,e,r),Vr(n.skew,t.skew,e,r),Xr(n.scale,t.scale,e,r),n=t=null,function(n){for(var t,i=-1,u=r.length;++i=0;)e.push(i[r])}function oi(n,t){for(var e=[n],r=[];null!=(n=e.pop());)if(r.push(n),(u=n.children)&&(i=u.length))for(var i,u,o=-1;++oe;++e)(t=n[e][1])>i&&(r=e,i=t);return r}function yi(n){return n.reduce(mi,0)}function mi(n,t){return n+t[1]}function Mi(n,t){return xi(n,Math.ceil(Math.log(t.length)/Math.LN2+1))}function xi(n,t){for(var e=-1,r=+n[0],i=(n[1]-r)/t,u=[];++e<=t;)u[e]=i*e+r;return u}function bi(n){return[ao.min(n),ao.max(n)]}function _i(n,t){return n.value-t.value}function wi(n,t){var e=n._pack_next;n._pack_next=t,t._pack_prev=n,t._pack_next=e,e._pack_prev=t}function Si(n,t){n._pack_next=t,t._pack_prev=n}function ki(n,t){var e=t.x-n.x,r=t.y-n.y,i=n.r+t.r;return.999*i*i>e*e+r*r}function Ni(n){function t(n){f=Math.min(n.x-n.r,f),s=Math.max(n.x+n.r,s),h=Math.min(n.y-n.r,h),p=Math.max(n.y+n.r,p)}if((e=n.children)&&(c=e.length)){var e,r,i,u,o,a,l,c,f=1/0,s=-(1/0),h=1/0,p=-(1/0);if(e.forEach(Ei),r=e[0],r.x=-r.r,r.y=0,t(r),c>1&&(i=e[1],i.x=i.r,i.y=0,t(i),c>2))for(u=e[2],zi(r,i,u),t(u),wi(r,u),r._pack_prev=u,wi(u,i),i=r._pack_next,o=3;c>o;o++){zi(r,i,u=e[o]);var g=0,v=1,d=1;for(a=i._pack_next;a!==i;a=a._pack_next,v++)if(ki(a,u)){g=1;break}if(1==g)for(l=r._pack_prev;l!==a._pack_prev&&!ki(l,u);l=l._pack_prev,d++);g?(d>v||v==d&&i.ro;o++)u=e[o],u.x-=y,u.y-=m,M=Math.max(M,u.r+Math.sqrt(u.x*u.x+u.y*u.y));n.r=M,e.forEach(Ai)}}function Ei(n){n._pack_next=n._pack_prev=n}function Ai(n){delete n._pack_next,delete n._pack_prev}function Ci(n,t,e,r){var i=n.children;if(n.x=t+=r*n.x,n.y=e+=r*n.y,n.r*=r,i)for(var u=-1,o=i.length;++u=0;)t=i[u],t.z+=e,t.m+=e,e+=t.s+(r+=t.c)}function Pi(n,t,e){return n.a.parent===t.parent?n.a:e}function Ui(n){return 1+ao.max(n,function(n){return n.y})}function ji(n){return n.reduce(function(n,t){return n+t.x},0)/n.length}function Fi(n){var t=n.children;return t&&t.length?Fi(t[0]):n}function Hi(n){var t,e=n.children;return e&&(t=e.length)?Hi(e[t-1]):n}function Oi(n){return{x:n.x,y:n.y,dx:n.dx,dy:n.dy}}function Ii(n,t){var e=n.x+t[3],r=n.y+t[0],i=n.dx-t[1]-t[3],u=n.dy-t[0]-t[2];return 0>i&&(e+=i/2,i=0),0>u&&(r+=u/2,u=0),{x:e,y:r,dx:i,dy:u}}function Yi(n){var t=n[0],e=n[n.length-1];return e>t?[t,e]:[e,t]}function Zi(n){return n.rangeExtent?n.rangeExtent():Yi(n.range())}function Vi(n,t,e,r){var i=e(n[0],n[1]),u=r(t[0],t[1]);return function(n){return u(i(n))}}function Xi(n,t){var e,r=0,i=n.length-1,u=n[r],o=n[i];return u>o&&(e=r,r=i,i=e,e=u,u=o,o=e),n[r]=t.floor(u),n[i]=t.ceil(o),n}function $i(n){return n?{floor:function(t){return Math.floor(t/n)*n},ceil:function(t){return Math.ceil(t/n)*n}}:Sl}function Bi(n,t,e,r){var i=[],u=[],o=0,a=Math.min(n.length,t.length)-1;for(n[a]2?Bi:Vi,l=r?Wr:Br;return o=i(n,t,l,e),a=i(t,n,l,Mr),u}function u(n){return o(n)}var o,a;return u.invert=function(n){return a(n)},u.domain=function(t){return arguments.length?(n=t.map(Number),i()):n},u.range=function(n){return arguments.length?(t=n,i()):t},u.rangeRound=function(n){return u.range(n).interpolate(Ur)},u.clamp=function(n){return arguments.length?(r=n,i()):r},u.interpolate=function(n){return arguments.length?(e=n,i()):e},u.ticks=function(t){return Qi(n,t)},u.tickFormat=function(t,e){return nu(n,t,e)},u.nice=function(t){return Gi(n,t),i()},u.copy=function(){return Wi(n,t,e,r)},i()}function Ji(n,t){return ao.rebind(n,t,"range","rangeRound","interpolate","clamp")}function Gi(n,t){return Xi(n,$i(Ki(n,t)[2])),Xi(n,$i(Ki(n,t)[2])),n}function Ki(n,t){null==t&&(t=10);var e=Yi(n),r=e[1]-e[0],i=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),u=t/r*i;return.15>=u?i*=10:.35>=u?i*=5:.75>=u&&(i*=2),e[0]=Math.ceil(e[0]/i)*i,e[1]=Math.floor(e[1]/i)*i+.5*i,e[2]=i,e}function Qi(n,t){return ao.range.apply(ao,Ki(n,t))}function nu(n,t,e){var r=Ki(n,t);if(e){var i=ha.exec(e);if(i.shift(),"s"===i[8]){var u=ao.formatPrefix(Math.max(xo(r[0]),xo(r[1])));return i[7]||(i[7]="."+tu(u.scale(r[2]))),i[8]="f",e=ao.format(i.join("")),function(n){return e(u.scale(n))+u.symbol}}i[7]||(i[7]="."+eu(i[8],r)),e=i.join("")}else e=",."+tu(r[2])+"f";return ao.format(e)}function tu(n){return-Math.floor(Math.log(n)/Math.LN10+.01)}function eu(n,t){var e=tu(t[2]);return n in kl?Math.abs(e-tu(Math.max(xo(t[0]),xo(t[1]))))+ +("e"!==n):e-2*("%"===n)}function ru(n,t,e,r){function i(n){return(e?Math.log(0>n?0:n):-Math.log(n>0?0:-n))/Math.log(t)}function u(n){return e?Math.pow(t,n):-Math.pow(t,-n)}function o(t){return n(i(t))}return o.invert=function(t){return u(n.invert(t))},o.domain=function(t){return arguments.length?(e=t[0]>=0,n.domain((r=t.map(Number)).map(i)),o):r},o.base=function(e){return arguments.length?(t=+e,n.domain(r.map(i)),o):t},o.nice=function(){var t=Xi(r.map(i),e?Math:El);return n.domain(t),r=t.map(u),o},o.ticks=function(){var n=Yi(r),o=[],a=n[0],l=n[1],c=Math.floor(i(a)),f=Math.ceil(i(l)),s=t%1?2:t;if(isFinite(f-c)){if(e){for(;f>c;c++)for(var h=1;s>h;h++)o.push(u(c)*h);o.push(u(c))}else for(o.push(u(c));c++0;h--)o.push(u(c)*h);for(c=0;o[c]l;f--);o=o.slice(c,f)}return o},o.tickFormat=function(n,e){if(!arguments.length)return Nl;arguments.length<2?e=Nl:"function"!=typeof e&&(e=ao.format(e));var r=Math.max(1,t*n/o.ticks().length);return function(n){var o=n/u(Math.round(i(n)));return t-.5>o*t&&(o*=t),r>=o?e(n):""}},o.copy=function(){return ru(n.copy(),t,e,r)},Ji(o,n)}function iu(n,t,e){function r(t){return n(i(t))}var i=uu(t),u=uu(1/t);return r.invert=function(t){return u(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain((e=t.map(Number)).map(i)),r):e},r.ticks=function(n){return Qi(e,n)},r.tickFormat=function(n,t){return nu(e,n,t)},r.nice=function(n){return r.domain(Gi(e,n))},r.exponent=function(o){return arguments.length?(i=uu(t=o),u=uu(1/t),n.domain(e.map(i)),r):t},r.copy=function(){return iu(n.copy(),t,e)},Ji(r,n)}function uu(n){return function(t){return 0>t?-Math.pow(-t,n):Math.pow(t,n)}}function ou(n,t){function e(e){return u[((i.get(e)||("range"===t.t?i.set(e,n.push(e)):NaN))-1)%u.length]}function r(t,e){return ao.range(n.length).map(function(n){return t+e*n})}var i,u,o;return e.domain=function(r){if(!arguments.length)return n;n=[],i=new c;for(var u,o=-1,a=r.length;++oe?[NaN,NaN]:[e>0?a[e-1]:n[0],et?NaN:t/u+n,[t,t+1/u]},r.copy=function(){return lu(n,t,e)},i()}function cu(n,t){function e(e){return e>=e?t[ao.bisect(n,e)]:void 0}return e.domain=function(t){return arguments.length?(n=t,e):n},e.range=function(n){return arguments.length?(t=n,e):t},e.invertExtent=function(e){return e=t.indexOf(e),[n[e-1],n[e]]},e.copy=function(){return cu(n,t)},e}function fu(n){function t(n){return+n}return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=e.map(t),t):n},t.ticks=function(t){return Qi(n,t)},t.tickFormat=function(t,e){return nu(n,t,e)},t.copy=function(){return fu(n)},t}function su(){return 0}function hu(n){return n.innerRadius}function pu(n){return n.outerRadius}function gu(n){return n.startAngle}function vu(n){return n.endAngle}function du(n){return n&&n.padAngle}function yu(n,t,e,r){return(n-e)*t-(t-r)*n>0?0:1}function mu(n,t,e,r,i){var u=n[0]-t[0],o=n[1]-t[1],a=(i?r:-r)/Math.sqrt(u*u+o*o),l=a*o,c=-a*u,f=n[0]+l,s=n[1]+c,h=t[0]+l,p=t[1]+c,g=(f+h)/2,v=(s+p)/2,d=h-f,y=p-s,m=d*d+y*y,M=e-r,x=f*p-h*s,b=(0>y?-1:1)*Math.sqrt(Math.max(0,M*M*m-x*x)),_=(x*y-d*b)/m,w=(-x*d-y*b)/m,S=(x*y+d*b)/m,k=(-x*d+y*b)/m,N=_-g,E=w-v,A=S-g,C=k-v;return N*N+E*E>A*A+C*C&&(_=S,w=k),[[_-l,w-c],[_*e/M,w*e/M]]}function Mu(n){function t(t){function o(){c.push("M",u(n(f),a))}for(var l,c=[],f=[],s=-1,h=t.length,p=En(e),g=En(r);++s1?n.join("L"):n+"Z"}function bu(n){return n.join("L")+"Z"}function _u(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t1&&i.push("H",r[0]),i.join("")}function wu(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t1){a=t[1],u=n[l],l++,r+="C"+(i[0]+o[0])+","+(i[1]+o[1])+","+(u[0]-a[0])+","+(u[1]-a[1])+","+u[0]+","+u[1];for(var c=2;c9&&(i=3*t/Math.sqrt(i),o[a]=i*e,o[a+1]=i*r));for(a=-1;++a<=l;)i=(n[Math.min(l,a+1)][0]-n[Math.max(0,a-1)][0])/(6*(1+o[a]*o[a])),u.push([i||0,o[a]*i||0]);return u}function Fu(n){return n.length<3?xu(n):n[0]+Au(n,ju(n))}function Hu(n){for(var t,e,r,i=-1,u=n.length;++i=t?o(n-t):void(f.c=o)}function o(e){var i=g.active,u=g[i];u&&(u.timer.c=null,u.timer.t=NaN,--g.count,delete g[i],u.event&&u.event.interrupt.call(n,n.__data__,u.index));for(var o in g)if(r>+o){var c=g[o];c.timer.c=null,c.timer.t=NaN,--g.count,delete g[o]}f.c=a,qn(function(){return f.c&&a(e||1)&&(f.c=null,f.t=NaN),1},0,l),g.active=r,v.event&&v.event.start.call(n,n.__data__,t),p=[],v.tween.forEach(function(e,r){(r=r.call(n,n.__data__,t))&&p.push(r)}),h=v.ease,s=v.duration}function a(i){for(var u=i/s,o=h(u),a=p.length;a>0;)p[--a].call(n,o);return u>=1?(v.event&&v.event.end.call(n,n.__data__,t),--g.count?delete g[r]:delete n[e],1):void 0}var l,f,s,h,p,g=n[e]||(n[e]={active:0,count:0}),v=g[r];v||(l=i.time,f=qn(u,0,l),v=g[r]={tween:new c,time:l,timer:f,delay:i.delay,duration:i.duration,ease:i.ease,index:t},i=null,++g.count)}function no(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate("+(isFinite(r)?r:e(n))+",0)"})}function to(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate(0,"+(isFinite(r)?r:e(n))+")"})}function eo(n){return n.toISOString()}function ro(n,t,e){function r(t){return n(t)}function i(n,e){var r=n[1]-n[0],i=r/e,u=ao.bisect(Kl,i);return u==Kl.length?[t.year,Ki(n.map(function(n){return n/31536e6}),e)[2]]:u?t[i/Kl[u-1]1?{floor:function(t){for(;e(t=n.floor(t));)t=io(t-1);return t},ceil:function(t){for(;e(t=n.ceil(t));)t=io(+t+1);return t}}:n))},r.ticks=function(n,t){var e=Yi(r.domain()),u=null==n?i(e,10):"number"==typeof n?i(e,n):!n.range&&[{range:n},t];return u&&(n=u[0],t=u[1]),n.range(e[0],io(+e[1]+1),1>t?1:t)},r.tickFormat=function(){return e},r.copy=function(){return ro(n.copy(),t,e)},Ji(r,n)}function io(n){return new Date(n)}function uo(n){return JSON.parse(n.responseText)}function oo(n){var t=fo.createRange();return t.selectNode(fo.body),t.createContextualFragment(n.responseText)}var ao={version:"3.5.17"},lo=[].slice,co=function(n){return lo.call(n)},fo=this.document;if(fo)try{co(fo.documentElement.childNodes)[0].nodeType}catch(so){co=function(n){for(var t=n.length,e=new Array(t);t--;)e[t]=n[t];return e}}if(Date.now||(Date.now=function(){return+new Date}),fo)try{fo.createElement("DIV").style.setProperty("opacity",0,"")}catch(ho){var po=this.Element.prototype,go=po.setAttribute,vo=po.setAttributeNS,yo=this.CSSStyleDeclaration.prototype,mo=yo.setProperty;po.setAttribute=function(n,t){go.call(this,n,t+"")},po.setAttributeNS=function(n,t,e){vo.call(this,n,t,e+"")},yo.setProperty=function(n,t,e){mo.call(this,n,t+"",e)}}ao.ascending=e,ao.descending=function(n,t){return n>t?-1:t>n?1:t>=n?0:NaN},ao.min=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i=r){e=r;break}for(;++ir&&(e=r)}else{for(;++i=r){e=r;break}for(;++ir&&(e=r)}return e},ao.max=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i=r){e=r;break}for(;++ie&&(e=r)}else{for(;++i=r){e=r;break}for(;++ie&&(e=r)}return e},ao.extent=function(n,t){var e,r,i,u=-1,o=n.length;if(1===arguments.length){for(;++u=r){e=i=r;break}for(;++ur&&(e=r),r>i&&(i=r))}else{for(;++u=r){e=i=r;break}for(;++ur&&(e=r),r>i&&(i=r))}return[e,i]},ao.sum=function(n,t){var e,r=0,u=n.length,o=-1;if(1===arguments.length)for(;++o1?l/(f-1):void 0},ao.deviation=function(){var n=ao.variance.apply(this,arguments);return n?Math.sqrt(n):n};var Mo=u(e);ao.bisectLeft=Mo.left,ao.bisect=ao.bisectRight=Mo.right,ao.bisector=function(n){return u(1===n.length?function(t,r){return e(n(t),r)}:n)},ao.shuffle=function(n,t,e){(u=arguments.length)<3&&(e=n.length,2>u&&(t=0));for(var r,i,u=e-t;u;)i=Math.random()*u--|0,r=n[u+t],n[u+t]=n[i+t],n[i+t]=r;return n},ao.permute=function(n,t){for(var e=t.length,r=new Array(e);e--;)r[e]=n[t[e]];return r},ao.pairs=function(n){for(var t,e=0,r=n.length-1,i=n[0],u=new Array(0>r?0:r);r>e;)u[e]=[t=i,i=n[++e]];return u},ao.transpose=function(n){if(!(i=n.length))return[];for(var t=-1,e=ao.min(n,o),r=new Array(e);++t=0;)for(r=n[i],t=r.length;--t>=0;)e[--o]=r[t];return e};var xo=Math.abs;ao.range=function(n,t,e){if(arguments.length<3&&(e=1,arguments.length<2&&(t=n,n=0)),(t-n)/e===1/0)throw new Error("infinite range");var r,i=[],u=a(xo(e)),o=-1;if(n*=u,t*=u,e*=u,0>e)for(;(r=n+e*++o)>t;)i.push(r/u);else for(;(r=n+e*++o)=u.length)return r?r.call(i,o):e?o.sort(e):o;for(var l,f,s,h,p=-1,g=o.length,v=u[a++],d=new c;++p=u.length)return n;var r=[],i=o[e++];return n.forEach(function(n,i){r.push({key:n,values:t(i,e)})}),i?r.sort(function(n,t){return i(n.key,t.key)}):r}var e,r,i={},u=[],o=[];return i.map=function(t,e){return n(e,t,0)},i.entries=function(e){return t(n(ao.map,e,0),0)},i.key=function(n){return u.push(n),i},i.sortKeys=function(n){return o[u.length-1]=n,i},i.sortValues=function(n){return e=n,i},i.rollup=function(n){return r=n,i},i},ao.set=function(n){var t=new y;if(n)for(var e=0,r=n.length;r>e;++e)t.add(n[e]);return t},l(y,{has:h,add:function(n){return this._[f(n+="")]=!0,n},remove:p,values:g,size:v,empty:d,forEach:function(n){for(var t in this._)n.call(this,s(t))}}),ao.behavior={},ao.rebind=function(n,t){for(var e,r=1,i=arguments.length;++r=0&&(r=n.slice(e+1),n=n.slice(0,e)),n)return arguments.length<2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},ao.event=null,ao.requote=function(n){return n.replace(So,"\\$&")};var So=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,ko={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},No=function(n,t){return t.querySelector(n)},Eo=function(n,t){return t.querySelectorAll(n)},Ao=function(n,t){var e=n.matches||n[x(n,"matchesSelector")];return(Ao=function(n,t){return e.call(n,t)})(n,t)};"function"==typeof Sizzle&&(No=function(n,t){return Sizzle(n,t)[0]||null},Eo=Sizzle,Ao=Sizzle.matchesSelector),ao.selection=function(){return ao.select(fo.documentElement)};var Co=ao.selection.prototype=[];Co.select=function(n){var t,e,r,i,u=[];n=A(n);for(var o=-1,a=this.length;++o=0&&"xmlns"!==(e=n.slice(0,t))&&(n=n.slice(t+1)),Lo.hasOwnProperty(e)?{space:Lo[e],local:n}:n}},Co.attr=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node();return n=ao.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(z(t,n[t]));return this}return this.each(z(n,t))},Co.classed=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node(),r=(n=T(n)).length,i=-1;if(t=e.classList){for(;++ii){if("string"!=typeof n){2>i&&(e="");for(r in n)this.each(P(r,n[r],e));return this}if(2>i){var u=this.node();return t(u).getComputedStyle(u,null).getPropertyValue(n)}r=""}return this.each(P(n,e,r))},Co.property=function(n,t){if(arguments.length<2){if("string"==typeof n)return this.node()[n];for(t in n)this.each(U(t,n[t]));return this}return this.each(U(n,t))},Co.text=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.textContent=null==t?"":t}:null==n?function(){this.textContent=""}:function(){this.textContent=n}):this.node().textContent},Co.html=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.innerHTML=null==t?"":t}:null==n?function(){this.innerHTML=""}:function(){this.innerHTML=n}):this.node().innerHTML},Co.append=function(n){return n=j(n),this.select(function(){return this.appendChild(n.apply(this,arguments))})},Co.insert=function(n,t){return n=j(n),t=A(t),this.select(function(){return this.insertBefore(n.apply(this,arguments),t.apply(this,arguments)||null)})},Co.remove=function(){return this.each(F)},Co.data=function(n,t){function e(n,e){var r,i,u,o=n.length,s=e.length,h=Math.min(o,s),p=new Array(s),g=new Array(s),v=new Array(o);if(t){var d,y=new c,m=new Array(o);for(r=-1;++rr;++r)g[r]=H(e[r]);for(;o>r;++r)v[r]=n[r]}g.update=p,g.parentNode=p.parentNode=v.parentNode=n.parentNode,a.push(g),l.push(p),f.push(v)}var r,i,u=-1,o=this.length;if(!arguments.length){for(n=new Array(o=(r=this[0]).length);++uu;u++){i.push(t=[]),t.parentNode=(e=this[u]).parentNode;for(var a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return E(i)},Co.order=function(){for(var n=-1,t=this.length;++n=0;)(e=r[i])&&(u&&u!==e.nextSibling&&u.parentNode.insertBefore(e,u),u=e);return this},Co.sort=function(n){n=I.apply(this,arguments);for(var t=-1,e=this.length;++tn;n++)for(var e=this[n],r=0,i=e.length;i>r;r++){var u=e[r];if(u)return u}return null},Co.size=function(){var n=0;return Y(this,function(){++n}),n};var qo=[];ao.selection.enter=Z,ao.selection.enter.prototype=qo,qo.append=Co.append,qo.empty=Co.empty,qo.node=Co.node,qo.call=Co.call,qo.size=Co.size,qo.select=function(n){for(var t,e,r,i,u,o=[],a=-1,l=this.length;++ar){if("string"!=typeof n){2>r&&(t=!1);for(e in n)this.each(X(e,n[e],t));return this}if(2>r)return(r=this.node()["__on"+n])&&r._;e=!1}return this.each(X(n,t,e))};var To=ao.map({mouseenter:"mouseover",mouseleave:"mouseout"});fo&&To.forEach(function(n){"on"+n in fo&&To.remove(n)});var Ro,Do=0;ao.mouse=function(n){return J(n,k())};var Po=this.navigator&&/WebKit/.test(this.navigator.userAgent)?-1:0;ao.touch=function(n,t,e){if(arguments.length<3&&(e=t,t=k().changedTouches),t)for(var r,i=0,u=t.length;u>i;++i)if((r=t[i]).identifier===e)return J(n,r)},ao.behavior.drag=function(){function n(){this.on("mousedown.drag",u).on("touchstart.drag",o)}function e(n,t,e,u,o){return function(){function a(){var n,e,r=t(h,v);r&&(n=r[0]-M[0],e=r[1]-M[1],g|=n|e,M=r,p({type:"drag",x:r[0]+c[0],y:r[1]+c[1],dx:n,dy:e}))}function l(){t(h,v)&&(y.on(u+d,null).on(o+d,null),m(g),p({type:"dragend"}))}var c,f=this,s=ao.event.target.correspondingElement||ao.event.target,h=f.parentNode,p=r.of(f,arguments),g=0,v=n(),d=".drag"+(null==v?"":"-"+v),y=ao.select(e(s)).on(u+d,a).on(o+d,l),m=W(s),M=t(h,v);i?(c=i.apply(f,arguments),c=[c.x-M[0],c.y-M[1]]):c=[0,0],p({type:"dragstart"})}}var r=N(n,"drag","dragstart","dragend"),i=null,u=e(b,ao.mouse,t,"mousemove","mouseup"),o=e(G,ao.touch,m,"touchmove","touchend");return n.origin=function(t){return arguments.length?(i=t,n):i},ao.rebind(n,r,"on")},ao.touches=function(n,t){return arguments.length<2&&(t=k().touches),t?co(t).map(function(t){var e=J(n,t);return e.identifier=t.identifier,e}):[]};var Uo=1e-6,jo=Uo*Uo,Fo=Math.PI,Ho=2*Fo,Oo=Ho-Uo,Io=Fo/2,Yo=Fo/180,Zo=180/Fo,Vo=Math.SQRT2,Xo=2,$o=4;ao.interpolateZoom=function(n,t){var e,r,i=n[0],u=n[1],o=n[2],a=t[0],l=t[1],c=t[2],f=a-i,s=l-u,h=f*f+s*s;if(jo>h)r=Math.log(c/o)/Vo,e=function(n){return[i+n*f,u+n*s,o*Math.exp(Vo*n*r)]};else{var p=Math.sqrt(h),g=(c*c-o*o+$o*h)/(2*o*Xo*p),v=(c*c-o*o-$o*h)/(2*c*Xo*p),d=Math.log(Math.sqrt(g*g+1)-g),y=Math.log(Math.sqrt(v*v+1)-v);r=(y-d)/Vo,e=function(n){var t=n*r,e=rn(d),a=o/(Xo*p)*(e*un(Vo*t+d)-en(d));return[i+a*f,u+a*s,o*e/rn(Vo*t+d)]}}return e.duration=1e3*r,e},ao.behavior.zoom=function(){function n(n){n.on(L,s).on(Wo+".zoom",p).on("dblclick.zoom",g).on(R,h)}function e(n){return[(n[0]-k.x)/k.k,(n[1]-k.y)/k.k]}function r(n){return[n[0]*k.k+k.x,n[1]*k.k+k.y]}function i(n){k.k=Math.max(A[0],Math.min(A[1],n))}function u(n,t){t=r(t),k.x+=n[0]-t[0],k.y+=n[1]-t[1]}function o(t,e,r,o){t.__chart__={x:k.x,y:k.y,k:k.k},i(Math.pow(2,o)),u(d=e,r),t=ao.select(t),C>0&&(t=t.transition().duration(C)),t.call(n.event)}function a(){b&&b.domain(x.range().map(function(n){return(n-k.x)/k.k}).map(x.invert)),w&&w.domain(_.range().map(function(n){return(n-k.y)/k.k}).map(_.invert))}function l(n){z++||n({type:"zoomstart"})}function c(n){a(),n({type:"zoom",scale:k.k,translate:[k.x,k.y]})}function f(n){--z||(n({type:"zoomend"}),d=null)}function s(){function n(){a=1,u(ao.mouse(i),h),c(o)}function r(){s.on(q,null).on(T,null),p(a),f(o)}var i=this,o=D.of(i,arguments),a=0,s=ao.select(t(i)).on(q,n).on(T,r),h=e(ao.mouse(i)),p=W(i);Il.call(i),l(o)}function h(){function n(){var n=ao.touches(g);return p=k.k,n.forEach(function(n){n.identifier in d&&(d[n.identifier]=e(n))}),n}function t(){var t=ao.event.target;ao.select(t).on(x,r).on(b,a),_.push(t);for(var e=ao.event.changedTouches,i=0,u=e.length;u>i;++i)d[e[i].identifier]=null;var l=n(),c=Date.now();if(1===l.length){if(500>c-M){var f=l[0];o(g,f,d[f.identifier],Math.floor(Math.log(k.k)/Math.LN2)+1),S()}M=c}else if(l.length>1){var f=l[0],s=l[1],h=f[0]-s[0],p=f[1]-s[1];y=h*h+p*p}}function r(){var n,t,e,r,o=ao.touches(g);Il.call(g);for(var a=0,l=o.length;l>a;++a,r=null)if(e=o[a],r=d[e.identifier]){if(t)break;n=e,t=r}if(r){var f=(f=e[0]-n[0])*f+(f=e[1]-n[1])*f,s=y&&Math.sqrt(f/y);n=[(n[0]+e[0])/2,(n[1]+e[1])/2],t=[(t[0]+r[0])/2,(t[1]+r[1])/2],i(s*p)}M=null,u(n,t),c(v)}function a(){if(ao.event.touches.length){for(var t=ao.event.changedTouches,e=0,r=t.length;r>e;++e)delete d[t[e].identifier];for(var i in d)return void n()}ao.selectAll(_).on(m,null),w.on(L,s).on(R,h),N(),f(v)}var p,g=this,v=D.of(g,arguments),d={},y=0,m=".zoom-"+ao.event.changedTouches[0].identifier,x="touchmove"+m,b="touchend"+m,_=[],w=ao.select(g),N=W(g);t(),l(v),w.on(L,null).on(R,t)}function p(){var n=D.of(this,arguments);m?clearTimeout(m):(Il.call(this),v=e(d=y||ao.mouse(this)),l(n)),m=setTimeout(function(){m=null,f(n)},50),S(),i(Math.pow(2,.002*Bo())*k.k),u(d,v),c(n)}function g(){var n=ao.mouse(this),t=Math.log(k.k)/Math.LN2;o(this,n,e(n),ao.event.shiftKey?Math.ceil(t)-1:Math.floor(t)+1)}var v,d,y,m,M,x,b,_,w,k={x:0,y:0,k:1},E=[960,500],A=Jo,C=250,z=0,L="mousedown.zoom",q="mousemove.zoom",T="mouseup.zoom",R="touchstart.zoom",D=N(n,"zoomstart","zoom","zoomend");return Wo||(Wo="onwheel"in fo?(Bo=function(){return-ao.event.deltaY*(ao.event.deltaMode?120:1)},"wheel"):"onmousewheel"in fo?(Bo=function(){return ao.event.wheelDelta},"mousewheel"):(Bo=function(){return-ao.event.detail},"MozMousePixelScroll")),n.event=function(n){n.each(function(){var n=D.of(this,arguments),t=k;Hl?ao.select(this).transition().each("start.zoom",function(){k=this.__chart__||{x:0,y:0,k:1},l(n)}).tween("zoom:zoom",function(){var e=E[0],r=E[1],i=d?d[0]:e/2,u=d?d[1]:r/2,o=ao.interpolateZoom([(i-k.x)/k.k,(u-k.y)/k.k,e/k.k],[(i-t.x)/t.k,(u-t.y)/t.k,e/t.k]);return function(t){var r=o(t),a=e/r[2];this.__chart__=k={x:i-r[0]*a,y:u-r[1]*a,k:a},c(n)}}).each("interrupt.zoom",function(){f(n)}).each("end.zoom",function(){f(n)}):(this.__chart__=k,l(n),c(n),f(n))})},n.translate=function(t){return arguments.length?(k={x:+t[0],y:+t[1],k:k.k},a(),n):[k.x,k.y]},n.scale=function(t){return arguments.length?(k={x:k.x,y:k.y,k:null},i(+t),a(),n):k.k},n.scaleExtent=function(t){return arguments.length?(A=null==t?Jo:[+t[0],+t[1]],n):A},n.center=function(t){return arguments.length?(y=t&&[+t[0],+t[1]],n):y},n.size=function(t){return arguments.length?(E=t&&[+t[0],+t[1]],n):E},n.duration=function(t){return arguments.length?(C=+t,n):C},n.x=function(t){return arguments.length?(b=t,x=t.copy(),k={x:0,y:0,k:1},n):b},n.y=function(t){return arguments.length?(w=t,_=t.copy(),k={x:0,y:0,k:1},n):w},ao.rebind(n,D,"on")};var Bo,Wo,Jo=[0,1/0];ao.color=an,an.prototype.toString=function(){return this.rgb()+""},ao.hsl=ln;var Go=ln.prototype=new an;Go.brighter=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,this.l/n)},Go.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,n*this.l)},Go.rgb=function(){return cn(this.h,this.s,this.l)},ao.hcl=fn;var Ko=fn.prototype=new an;Ko.brighter=function(n){return new fn(this.h,this.c,Math.min(100,this.l+Qo*(arguments.length?n:1)))},Ko.darker=function(n){return new fn(this.h,this.c,Math.max(0,this.l-Qo*(arguments.length?n:1)))},Ko.rgb=function(){return sn(this.h,this.c,this.l).rgb()},ao.lab=hn;var Qo=18,na=.95047,ta=1,ea=1.08883,ra=hn.prototype=new an;ra.brighter=function(n){return new hn(Math.min(100,this.l+Qo*(arguments.length?n:1)),this.a,this.b)},ra.darker=function(n){return new hn(Math.max(0,this.l-Qo*(arguments.length?n:1)),this.a,this.b)},ra.rgb=function(){return pn(this.l,this.a,this.b)},ao.rgb=mn;var ia=mn.prototype=new an;ia.brighter=function(n){n=Math.pow(.7,arguments.length?n:1);var t=this.r,e=this.g,r=this.b,i=30;return t||e||r?(t&&i>t&&(t=i),e&&i>e&&(e=i),r&&i>r&&(r=i),new mn(Math.min(255,t/n),Math.min(255,e/n),Math.min(255,r/n))):new mn(i,i,i)},ia.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new mn(n*this.r,n*this.g,n*this.b)},ia.hsl=function(){return wn(this.r,this.g,this.b)},ia.toString=function(){return"#"+bn(this.r)+bn(this.g)+bn(this.b)};var ua=ao.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});ua.forEach(function(n,t){ua.set(n,Mn(t))}),ao.functor=En,ao.xhr=An(m),ao.dsv=function(n,t){function e(n,e,u){arguments.length<3&&(u=e,e=null);var o=Cn(n,t,null==e?r:i(e),u);return o.row=function(n){return arguments.length?o.response(null==(e=n)?r:i(n)):e},o}function r(n){return e.parse(n.responseText)}function i(n){return function(t){return e.parse(t.responseText,n)}}function u(t){return t.map(o).join(n)}function o(n){return a.test(n)?'"'+n.replace(/\"/g,'""')+'"':n}var a=new RegExp('["'+n+"\n]"),l=n.charCodeAt(0);return e.parse=function(n,t){var r;return e.parseRows(n,function(n,e){if(r)return r(n,e-1);var i=new Function("d","return {"+n.map(function(n,t){return JSON.stringify(n)+": d["+t+"]"}).join(",")+"}");r=t?function(n,e){return t(i(n),e)}:i})},e.parseRows=function(n,t){function e(){if(f>=c)return o;if(i)return i=!1,u;var t=f;if(34===n.charCodeAt(t)){for(var e=t;e++f;){var r=n.charCodeAt(f++),a=1;if(10===r)i=!0;else if(13===r)i=!0,10===n.charCodeAt(f)&&(++f,++a);else if(r!==l)continue;return n.slice(t,f-a)}return n.slice(t)}for(var r,i,u={},o={},a=[],c=n.length,f=0,s=0;(r=e())!==o;){for(var h=[];r!==u&&r!==o;)h.push(r),r=e();t&&null==(h=t(h,s++))||a.push(h)}return a},e.format=function(t){if(Array.isArray(t[0]))return e.formatRows(t);var r=new y,i=[];return t.forEach(function(n){for(var t in n)r.has(t)||i.push(r.add(t))}),[i.map(o).join(n)].concat(t.map(function(t){return i.map(function(n){return o(t[n])}).join(n)})).join("\n")},e.formatRows=function(n){return n.map(u).join("\n")},e},ao.csv=ao.dsv(",","text/csv"),ao.tsv=ao.dsv(" ","text/tab-separated-values");var oa,aa,la,ca,fa=this[x(this,"requestAnimationFrame")]||function(n){setTimeout(n,17)};ao.timer=function(){qn.apply(this,arguments)},ao.timer.flush=function(){Rn(),Dn()},ao.round=function(n,t){return t?Math.round(n*(t=Math.pow(10,t)))/t:Math.round(n)};var sa=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"].map(Un);ao.formatPrefix=function(n,t){var e=0;return(n=+n)&&(0>n&&(n*=-1),t&&(n=ao.round(n,Pn(n,t))),e=1+Math.floor(1e-12+Math.log(n)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((e-1)/3)))),sa[8+e/3]};var ha=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,pa=ao.map({b:function(n){return n.toString(2)},c:function(n){return String.fromCharCode(n)},o:function(n){return n.toString(8)},x:function(n){return n.toString(16)},X:function(n){return n.toString(16).toUpperCase()},g:function(n,t){return n.toPrecision(t)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},r:function(n,t){return(n=ao.round(n,Pn(n,t))).toFixed(Math.max(0,Math.min(20,Pn(n*(1+1e-15),t))))}}),ga=ao.time={},va=Date;Hn.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){da.setUTCDate.apply(this._,arguments)},setDay:function(){da.setUTCDay.apply(this._,arguments)},setFullYear:function(){da.setUTCFullYear.apply(this._,arguments)},setHours:function(){da.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){da.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){da.setUTCMinutes.apply(this._,arguments)},setMonth:function(){da.setUTCMonth.apply(this._,arguments)},setSeconds:function(){da.setUTCSeconds.apply(this._,arguments)},setTime:function(){da.setTime.apply(this._,arguments)}};var da=Date.prototype;ga.year=On(function(n){return n=ga.day(n),n.setMonth(0,1),n},function(n,t){n.setFullYear(n.getFullYear()+t)},function(n){return n.getFullYear()}),ga.years=ga.year.range,ga.years.utc=ga.year.utc.range,ga.day=On(function(n){var t=new va(2e3,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t},function(n,t){n.setDate(n.getDate()+t)},function(n){return n.getDate()-1}),ga.days=ga.day.range,ga.days.utc=ga.day.utc.range,ga.dayOfYear=function(n){var t=ga.year(n);return Math.floor((n-t-6e4*(n.getTimezoneOffset()-t.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(n,t){t=7-t;var e=ga[n]=On(function(n){return(n=ga.day(n)).setDate(n.getDate()-(n.getDay()+t)%7),n},function(n,t){n.setDate(n.getDate()+7*Math.floor(t))},function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)-(e!==t)});ga[n+"s"]=e.range,ga[n+"s"].utc=e.utc.range,ga[n+"OfYear"]=function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)}}),ga.week=ga.sunday,ga.weeks=ga.sunday.range,ga.weeks.utc=ga.sunday.utc.range,ga.weekOfYear=ga.sundayOfYear;var ya={"-":"",_:" ",0:"0"},ma=/^\s*\d+/,Ma=/^%/;ao.locale=function(n){return{numberFormat:jn(n),timeFormat:Yn(n)}};var xa=ao.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"], +shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});ao.format=xa.numberFormat,ao.geo={},ft.prototype={s:0,t:0,add:function(n){st(n,this.t,ba),st(ba.s,this.s,this),this.s?this.t+=ba.t:this.s=ba.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var ba=new ft;ao.geo.stream=function(n,t){n&&_a.hasOwnProperty(n.type)?_a[n.type](n,t):ht(n,t)};var _a={Feature:function(n,t){ht(n.geometry,t)},FeatureCollection:function(n,t){for(var e=n.features,r=-1,i=e.length;++rn?4*Fo+n:n,Na.lineStart=Na.lineEnd=Na.point=b}};ao.geo.bounds=function(){function n(n,t){M.push(x=[f=n,h=n]),s>t&&(s=t),t>p&&(p=t)}function t(t,e){var r=dt([t*Yo,e*Yo]);if(y){var i=mt(y,r),u=[i[1],-i[0],0],o=mt(u,i);bt(o),o=_t(o);var l=t-g,c=l>0?1:-1,v=o[0]*Zo*c,d=xo(l)>180;if(d^(v>c*g&&c*t>v)){var m=o[1]*Zo;m>p&&(p=m)}else if(v=(v+360)%360-180,d^(v>c*g&&c*t>v)){var m=-o[1]*Zo;s>m&&(s=m)}else s>e&&(s=e),e>p&&(p=e);d?g>t?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t):h>=f?(f>t&&(f=t),t>h&&(h=t)):t>g?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t)}else n(t,e);y=r,g=t}function e(){b.point=t}function r(){x[0]=f,x[1]=h,b.point=n,y=null}function i(n,e){if(y){var r=n-g;m+=xo(r)>180?r+(r>0?360:-360):r}else v=n,d=e;Na.point(n,e),t(n,e)}function u(){Na.lineStart()}function o(){i(v,d),Na.lineEnd(),xo(m)>Uo&&(f=-(h=180)),x[0]=f,x[1]=h,y=null}function a(n,t){return(t-=n)<0?t+360:t}function l(n,t){return n[0]-t[0]}function c(n,t){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:nka?(f=-(h=180),s=-(p=90)):m>Uo?p=90:-Uo>m&&(s=-90),x[0]=f,x[1]=h}};return function(n){p=h=-(f=s=1/0),M=[],ao.geo.stream(n,b);var t=M.length;if(t){M.sort(l);for(var e,r=1,i=M[0],u=[i];t>r;++r)e=M[r],c(e[0],i)||c(e[1],i)?(a(i[0],e[1])>a(i[0],i[1])&&(i[1]=e[1]),a(e[0],i[1])>a(i[0],i[1])&&(i[0]=e[0])):u.push(i=e);for(var o,e,g=-(1/0),t=u.length-1,r=0,i=u[t];t>=r;i=e,++r)e=u[r],(o=a(i[1],e[0]))>g&&(g=o,f=e[0],h=i[1])}return M=x=null,f===1/0||s===1/0?[[NaN,NaN],[NaN,NaN]]:[[f,s],[h,p]]}}(),ao.geo.centroid=function(n){Ea=Aa=Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,ja);var t=Da,e=Pa,r=Ua,i=t*t+e*e+r*r;return jo>i&&(t=qa,e=Ta,r=Ra,Uo>Aa&&(t=Ca,e=za,r=La),i=t*t+e*e+r*r,jo>i)?[NaN,NaN]:[Math.atan2(e,t)*Zo,tn(r/Math.sqrt(i))*Zo]};var Ea,Aa,Ca,za,La,qa,Ta,Ra,Da,Pa,Ua,ja={sphere:b,point:St,lineStart:Nt,lineEnd:Et,polygonStart:function(){ja.lineStart=At},polygonEnd:function(){ja.lineStart=Nt}},Fa=Rt(zt,jt,Ht,[-Fo,-Fo/2]),Ha=1e9;ao.geo.clipExtent=function(){var n,t,e,r,i,u,o={stream:function(n){return i&&(i.valid=!1),i=u(n),i.valid=!0,i},extent:function(a){return arguments.length?(u=Zt(n=+a[0][0],t=+a[0][1],e=+a[1][0],r=+a[1][1]),i&&(i.valid=!1,i=null),o):[[n,t],[e,r]]}};return o.extent([[0,0],[960,500]])},(ao.geo.conicEqualArea=function(){return Vt(Xt)}).raw=Xt,ao.geo.albers=function(){return ao.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},ao.geo.albersUsa=function(){function n(n){var u=n[0],o=n[1];return t=null,e(u,o),t||(r(u,o),t)||i(u,o),t}var t,e,r,i,u=ao.geo.albers(),o=ao.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),a=ao.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),l={point:function(n,e){t=[n,e]}};return n.invert=function(n){var t=u.scale(),e=u.translate(),r=(n[0]-e[0])/t,i=(n[1]-e[1])/t;return(i>=.12&&.234>i&&r>=-.425&&-.214>r?o:i>=.166&&.234>i&&r>=-.214&&-.115>r?a:u).invert(n)},n.stream=function(n){var t=u.stream(n),e=o.stream(n),r=a.stream(n);return{point:function(n,i){t.point(n,i),e.point(n,i),r.point(n,i)},sphere:function(){t.sphere(),e.sphere(),r.sphere()},lineStart:function(){t.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){t.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){t.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){t.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},n.precision=function(t){return arguments.length?(u.precision(t),o.precision(t),a.precision(t),n):u.precision()},n.scale=function(t){return arguments.length?(u.scale(t),o.scale(.35*t),a.scale(t),n.translate(u.translate())):u.scale()},n.translate=function(t){if(!arguments.length)return u.translate();var c=u.scale(),f=+t[0],s=+t[1];return e=u.translate(t).clipExtent([[f-.455*c,s-.238*c],[f+.455*c,s+.238*c]]).stream(l).point,r=o.translate([f-.307*c,s+.201*c]).clipExtent([[f-.425*c+Uo,s+.12*c+Uo],[f-.214*c-Uo,s+.234*c-Uo]]).stream(l).point,i=a.translate([f-.205*c,s+.212*c]).clipExtent([[f-.214*c+Uo,s+.166*c+Uo],[f-.115*c-Uo,s+.234*c-Uo]]).stream(l).point,n},n.scale(1070)};var Oa,Ia,Ya,Za,Va,Xa,$a={point:b,lineStart:b,lineEnd:b,polygonStart:function(){Ia=0,$a.lineStart=$t},polygonEnd:function(){$a.lineStart=$a.lineEnd=$a.point=b,Oa+=xo(Ia/2)}},Ba={point:Bt,lineStart:b,lineEnd:b,polygonStart:b,polygonEnd:b},Wa={point:Gt,lineStart:Kt,lineEnd:Qt,polygonStart:function(){Wa.lineStart=ne},polygonEnd:function(){Wa.point=Gt,Wa.lineStart=Kt,Wa.lineEnd=Qt}};ao.geo.path=function(){function n(n){return n&&("function"==typeof a&&u.pointRadius(+a.apply(this,arguments)),o&&o.valid||(o=i(u)),ao.geo.stream(n,o)),u.result()}function t(){return o=null,n}var e,r,i,u,o,a=4.5;return n.area=function(n){return Oa=0,ao.geo.stream(n,i($a)),Oa},n.centroid=function(n){return Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,i(Wa)),Ua?[Da/Ua,Pa/Ua]:Ra?[qa/Ra,Ta/Ra]:La?[Ca/La,za/La]:[NaN,NaN]},n.bounds=function(n){return Va=Xa=-(Ya=Za=1/0),ao.geo.stream(n,i(Ba)),[[Ya,Za],[Va,Xa]]},n.projection=function(n){return arguments.length?(i=(e=n)?n.stream||re(n):m,t()):e},n.context=function(n){return arguments.length?(u=null==(r=n)?new Wt:new te(n),"function"!=typeof a&&u.pointRadius(a),t()):r},n.pointRadius=function(t){return arguments.length?(a="function"==typeof t?t:(u.pointRadius(+t),+t),n):a},n.projection(ao.geo.albersUsa()).context(null)},ao.geo.transform=function(n){return{stream:function(t){var e=new ie(t);for(var r in n)e[r]=n[r];return e}}},ie.prototype={point:function(n,t){this.stream.point(n,t)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},ao.geo.projection=oe,ao.geo.projectionMutator=ae,(ao.geo.equirectangular=function(){return oe(ce)}).raw=ce.invert=ce,ao.geo.rotation=function(n){function t(t){return t=n(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t}return n=se(n[0]%360*Yo,n[1]*Yo,n.length>2?n[2]*Yo:0),t.invert=function(t){return t=n.invert(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t},t},fe.invert=ce,ao.geo.circle=function(){function n(){var n="function"==typeof r?r.apply(this,arguments):r,t=se(-n[0]*Yo,-n[1]*Yo,0).invert,i=[];return e(null,null,1,{point:function(n,e){i.push(n=t(n,e)),n[0]*=Zo,n[1]*=Zo}}),{type:"Polygon",coordinates:[i]}}var t,e,r=[0,0],i=6;return n.origin=function(t){return arguments.length?(r=t,n):r},n.angle=function(r){return arguments.length?(e=ve((t=+r)*Yo,i*Yo),n):t},n.precision=function(r){return arguments.length?(e=ve(t*Yo,(i=+r)*Yo),n):i},n.angle(90)},ao.geo.distance=function(n,t){var e,r=(t[0]-n[0])*Yo,i=n[1]*Yo,u=t[1]*Yo,o=Math.sin(r),a=Math.cos(r),l=Math.sin(i),c=Math.cos(i),f=Math.sin(u),s=Math.cos(u);return Math.atan2(Math.sqrt((e=s*o)*e+(e=c*f-l*s*a)*e),l*f+c*s*a)},ao.geo.graticule=function(){function n(){return{type:"MultiLineString",coordinates:t()}}function t(){return ao.range(Math.ceil(u/d)*d,i,d).map(h).concat(ao.range(Math.ceil(c/y)*y,l,y).map(p)).concat(ao.range(Math.ceil(r/g)*g,e,g).filter(function(n){return xo(n%d)>Uo}).map(f)).concat(ao.range(Math.ceil(a/v)*v,o,v).filter(function(n){return xo(n%y)>Uo}).map(s))}var e,r,i,u,o,a,l,c,f,s,h,p,g=10,v=g,d=90,y=360,m=2.5;return n.lines=function(){return t().map(function(n){return{type:"LineString",coordinates:n}})},n.outline=function(){return{type:"Polygon",coordinates:[h(u).concat(p(l).slice(1),h(i).reverse().slice(1),p(c).reverse().slice(1))]}},n.extent=function(t){return arguments.length?n.majorExtent(t).minorExtent(t):n.minorExtent()},n.majorExtent=function(t){return arguments.length?(u=+t[0][0],i=+t[1][0],c=+t[0][1],l=+t[1][1],u>i&&(t=u,u=i,i=t),c>l&&(t=c,c=l,l=t),n.precision(m)):[[u,c],[i,l]]},n.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],a=+t[0][1],o=+t[1][1],r>e&&(t=r,r=e,e=t),a>o&&(t=a,a=o,o=t),n.precision(m)):[[r,a],[e,o]]},n.step=function(t){return arguments.length?n.majorStep(t).minorStep(t):n.minorStep()},n.majorStep=function(t){return arguments.length?(d=+t[0],y=+t[1],n):[d,y]},n.minorStep=function(t){return arguments.length?(g=+t[0],v=+t[1],n):[g,v]},n.precision=function(t){return arguments.length?(m=+t,f=ye(a,o,90),s=me(r,e,m),h=ye(c,l,90),p=me(u,i,m),n):m},n.majorExtent([[-180,-90+Uo],[180,90-Uo]]).minorExtent([[-180,-80-Uo],[180,80+Uo]])},ao.geo.greatArc=function(){function n(){return{type:"LineString",coordinates:[t||r.apply(this,arguments),e||i.apply(this,arguments)]}}var t,e,r=Me,i=xe;return n.distance=function(){return ao.geo.distance(t||r.apply(this,arguments),e||i.apply(this,arguments))},n.source=function(e){return arguments.length?(r=e,t="function"==typeof e?null:e,n):r},n.target=function(t){return arguments.length?(i=t,e="function"==typeof t?null:t,n):i},n.precision=function(){return arguments.length?n:0},n},ao.geo.interpolate=function(n,t){return be(n[0]*Yo,n[1]*Yo,t[0]*Yo,t[1]*Yo)},ao.geo.length=function(n){return Ja=0,ao.geo.stream(n,Ga),Ja};var Ja,Ga={sphere:b,point:b,lineStart:_e,lineEnd:b,polygonStart:b,polygonEnd:b},Ka=we(function(n){return Math.sqrt(2/(1+n))},function(n){return 2*Math.asin(n/2)});(ao.geo.azimuthalEqualArea=function(){return oe(Ka)}).raw=Ka;var Qa=we(function(n){var t=Math.acos(n);return t&&t/Math.sin(t)},m);(ao.geo.azimuthalEquidistant=function(){return oe(Qa)}).raw=Qa,(ao.geo.conicConformal=function(){return Vt(Se)}).raw=Se,(ao.geo.conicEquidistant=function(){return Vt(ke)}).raw=ke;var nl=we(function(n){return 1/n},Math.atan);(ao.geo.gnomonic=function(){return oe(nl)}).raw=nl,Ne.invert=function(n,t){return[n,2*Math.atan(Math.exp(t))-Io]},(ao.geo.mercator=function(){return Ee(Ne)}).raw=Ne;var tl=we(function(){return 1},Math.asin);(ao.geo.orthographic=function(){return oe(tl)}).raw=tl;var el=we(function(n){return 1/(1+n)},function(n){return 2*Math.atan(n)});(ao.geo.stereographic=function(){return oe(el)}).raw=el,Ae.invert=function(n,t){return[-t,2*Math.atan(Math.exp(n))-Io]},(ao.geo.transverseMercator=function(){var n=Ee(Ae),t=n.center,e=n.rotate;return n.center=function(n){return n?t([-n[1],n[0]]):(n=t(),[n[1],-n[0]])},n.rotate=function(n){return n?e([n[0],n[1],n.length>2?n[2]+90:90]):(n=e(),[n[0],n[1],n[2]-90])},e([0,0,90])}).raw=Ae,ao.geom={},ao.geom.hull=function(n){function t(n){if(n.length<3)return[];var t,i=En(e),u=En(r),o=n.length,a=[],l=[];for(t=0;o>t;t++)a.push([+i.call(this,n[t],t),+u.call(this,n[t],t),t]);for(a.sort(qe),t=0;o>t;t++)l.push([a[t][0],-a[t][1]]);var c=Le(a),f=Le(l),s=f[0]===c[0],h=f[f.length-1]===c[c.length-1],p=[];for(t=c.length-1;t>=0;--t)p.push(n[a[c[t]][2]]);for(t=+s;t=r&&c.x<=u&&c.y>=i&&c.y<=o?[[r,o],[u,o],[u,i],[r,i]]:[];f.point=n[a]}),t}function e(n){return n.map(function(n,t){return{x:Math.round(u(n,t)/Uo)*Uo,y:Math.round(o(n,t)/Uo)*Uo,i:t}})}var r=Ce,i=ze,u=r,o=i,a=sl;return n?t(n):(t.links=function(n){return ar(e(n)).edges.filter(function(n){return n.l&&n.r}).map(function(t){return{source:n[t.l.i],target:n[t.r.i]}})},t.triangles=function(n){var t=[];return ar(e(n)).cells.forEach(function(e,r){for(var i,u,o=e.site,a=e.edges.sort(Ve),l=-1,c=a.length,f=a[c-1].edge,s=f.l===o?f.r:f.l;++l=c,h=r>=f,p=h<<1|s;n.leaf=!1,n=n.nodes[p]||(n.nodes[p]=hr()),s?i=c:a=c,h?o=f:l=f,u(n,t,e,r,i,o,a,l)}var f,s,h,p,g,v,d,y,m,M=En(a),x=En(l);if(null!=t)v=t,d=e,y=r,m=i;else if(y=m=-(v=d=1/0),s=[],h=[],g=n.length,o)for(p=0;g>p;++p)f=n[p],f.xy&&(y=f.x),f.y>m&&(m=f.y),s.push(f.x),h.push(f.y);else for(p=0;g>p;++p){var b=+M(f=n[p],p),_=+x(f,p);v>b&&(v=b),d>_&&(d=_),b>y&&(y=b),_>m&&(m=_),s.push(b),h.push(_)}var w=y-v,S=m-d;w>S?m=d+w:y=v+S;var k=hr();if(k.add=function(n){u(k,n,+M(n,++p),+x(n,p),v,d,y,m)},k.visit=function(n){pr(n,k,v,d,y,m)},k.find=function(n){return gr(k,n[0],n[1],v,d,y,m)},p=-1,null==t){for(;++p=0?n.slice(0,t):n,r=t>=0?n.slice(t+1):"in";return e=vl.get(e)||gl,r=dl.get(r)||m,br(r(e.apply(null,lo.call(arguments,1))))},ao.interpolateHcl=Rr,ao.interpolateHsl=Dr,ao.interpolateLab=Pr,ao.interpolateRound=Ur,ao.transform=function(n){var t=fo.createElementNS(ao.ns.prefix.svg,"g");return(ao.transform=function(n){if(null!=n){t.setAttribute("transform",n);var e=t.transform.baseVal.consolidate()}return new jr(e?e.matrix:yl)})(n)},jr.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var yl={a:1,b:0,c:0,d:1,e:0,f:0};ao.interpolateTransform=$r,ao.layout={},ao.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++ea*a/y){if(v>l){var c=t.charge/l;n.px-=u*c,n.py-=o*c}return!0}if(t.point&&l&&v>l){var c=t.pointCharge/l;n.px-=u*c,n.py-=o*c}}return!t.charge}}function t(n){n.px=ao.event.x,n.py=ao.event.y,l.resume()}var e,r,i,u,o,a,l={},c=ao.dispatch("start","tick","end"),f=[1,1],s=.9,h=ml,p=Ml,g=-30,v=xl,d=.1,y=.64,M=[],x=[];return l.tick=function(){if((i*=.99)<.005)return e=null,c.end({type:"end",alpha:i=0}),!0;var t,r,l,h,p,v,y,m,b,_=M.length,w=x.length;for(r=0;w>r;++r)l=x[r],h=l.source,p=l.target,m=p.x-h.x,b=p.y-h.y,(v=m*m+b*b)&&(v=i*o[r]*((v=Math.sqrt(v))-u[r])/v,m*=v,b*=v,p.x-=m*(y=h.weight+p.weight?h.weight/(h.weight+p.weight):.5),p.y-=b*y,h.x+=m*(y=1-y),h.y+=b*y);if((y=i*d)&&(m=f[0]/2,b=f[1]/2,r=-1,y))for(;++r<_;)l=M[r],l.x+=(m-l.x)*y,l.y+=(b-l.y)*y;if(g)for(ri(t=ao.geom.quadtree(M),i,a),r=-1;++r<_;)(l=M[r]).fixed||t.visit(n(l));for(r=-1;++r<_;)l=M[r],l.fixed?(l.x=l.px,l.y=l.py):(l.x-=(l.px-(l.px=l.x))*s,l.y-=(l.py-(l.py=l.y))*s);c.tick({type:"tick",alpha:i})},l.nodes=function(n){return arguments.length?(M=n,l):M},l.links=function(n){return arguments.length?(x=n,l):x},l.size=function(n){return arguments.length?(f=n,l):f},l.linkDistance=function(n){return arguments.length?(h="function"==typeof n?n:+n,l):h},l.distance=l.linkDistance,l.linkStrength=function(n){return arguments.length?(p="function"==typeof n?n:+n,l):p},l.friction=function(n){return arguments.length?(s=+n,l):s},l.charge=function(n){return arguments.length?(g="function"==typeof n?n:+n,l):g},l.chargeDistance=function(n){return arguments.length?(v=n*n,l):Math.sqrt(v)},l.gravity=function(n){return arguments.length?(d=+n,l):d},l.theta=function(n){return arguments.length?(y=n*n,l):Math.sqrt(y)},l.alpha=function(n){return arguments.length?(n=+n,i?n>0?i=n:(e.c=null,e.t=NaN,e=null,c.end({type:"end",alpha:i=0})):n>0&&(c.start({type:"start",alpha:i=n}),e=qn(l.tick)),l):i},l.start=function(){function n(n,r){if(!e){for(e=new Array(i),l=0;i>l;++l)e[l]=[];for(l=0;c>l;++l){var u=x[l];e[u.source.index].push(u.target),e[u.target.index].push(u.source)}}for(var o,a=e[t],l=-1,f=a.length;++lt;++t)(r=M[t]).index=t,r.weight=0;for(t=0;c>t;++t)r=x[t],"number"==typeof r.source&&(r.source=M[r.source]),"number"==typeof r.target&&(r.target=M[r.target]),++r.source.weight,++r.target.weight;for(t=0;i>t;++t)r=M[t],isNaN(r.x)&&(r.x=n("x",s)),isNaN(r.y)&&(r.y=n("y",v)),isNaN(r.px)&&(r.px=r.x),isNaN(r.py)&&(r.py=r.y);if(u=[],"function"==typeof h)for(t=0;c>t;++t)u[t]=+h.call(this,x[t],t);else for(t=0;c>t;++t)u[t]=h;if(o=[],"function"==typeof p)for(t=0;c>t;++t)o[t]=+p.call(this,x[t],t);else for(t=0;c>t;++t)o[t]=p;if(a=[],"function"==typeof g)for(t=0;i>t;++t)a[t]=+g.call(this,M[t],t);else for(t=0;i>t;++t)a[t]=g;return l.resume()},l.resume=function(){return l.alpha(.1)},l.stop=function(){return l.alpha(0)},l.drag=function(){return r||(r=ao.behavior.drag().origin(m).on("dragstart.force",Qr).on("drag.force",t).on("dragend.force",ni)),arguments.length?void this.on("mouseover.force",ti).on("mouseout.force",ei).call(r):r},ao.rebind(l,c,"on")};var ml=20,Ml=1,xl=1/0;ao.layout.hierarchy=function(){function n(i){var u,o=[i],a=[];for(i.depth=0;null!=(u=o.pop());)if(a.push(u),(c=e.call(n,u,u.depth))&&(l=c.length)){for(var l,c,f;--l>=0;)o.push(f=c[l]),f.parent=u,f.depth=u.depth+1;r&&(u.value=0),u.children=c}else r&&(u.value=+r.call(n,u,u.depth)||0),delete u.children;return oi(i,function(n){var e,i;t&&(e=n.children)&&e.sort(t),r&&(i=n.parent)&&(i.value+=n.value)}),a}var t=ci,e=ai,r=li;return n.sort=function(e){return arguments.length?(t=e,n):t},n.children=function(t){return arguments.length?(e=t,n):e},n.value=function(t){return arguments.length?(r=t,n):r},n.revalue=function(t){return r&&(ui(t,function(n){n.children&&(n.value=0)}),oi(t,function(t){var e;t.children||(t.value=+r.call(n,t,t.depth)||0),(e=t.parent)&&(e.value+=t.value)})),t},n},ao.layout.partition=function(){function n(t,e,r,i){var u=t.children;if(t.x=e,t.y=t.depth*i,t.dx=r,t.dy=i,u&&(o=u.length)){var o,a,l,c=-1;for(r=t.value?r/t.value:0;++cs?-1:1),g=ao.sum(c),v=g?(s-l*p)/g:0,d=ao.range(l),y=[];return null!=e&&d.sort(e===bl?function(n,t){return c[t]-c[n]}:function(n,t){return e(o[n],o[t])}),d.forEach(function(n){y[n]={data:o[n],value:a=c[n],startAngle:f,endAngle:f+=a*v+p,padAngle:h}}),y}var t=Number,e=bl,r=0,i=Ho,u=0;return n.value=function(e){return arguments.length?(t=e,n):t},n.sort=function(t){return arguments.length?(e=t,n):e},n.startAngle=function(t){return arguments.length?(r=t,n):r},n.endAngle=function(t){return arguments.length?(i=t,n):i},n.padAngle=function(t){return arguments.length?(u=t,n):u},n};var bl={};ao.layout.stack=function(){function n(a,l){if(!(h=a.length))return a;var c=a.map(function(e,r){return t.call(n,e,r)}),f=c.map(function(t){return t.map(function(t,e){return[u.call(n,t,e),o.call(n,t,e)]})}),s=e.call(n,f,l);c=ao.permute(c,s),f=ao.permute(f,s);var h,p,g,v,d=r.call(n,f,l),y=c[0].length;for(g=0;y>g;++g)for(i.call(n,c[0][g],v=d[g],f[0][g][1]),p=1;h>p;++p)i.call(n,c[p][g],v+=f[p-1][g][1],f[p][g][1]);return a}var t=m,e=gi,r=vi,i=pi,u=si,o=hi;return n.values=function(e){return arguments.length?(t=e,n):t},n.order=function(t){return arguments.length?(e="function"==typeof t?t:_l.get(t)||gi,n):e},n.offset=function(t){return arguments.length?(r="function"==typeof t?t:wl.get(t)||vi,n):r},n.x=function(t){return arguments.length?(u=t,n):u},n.y=function(t){return arguments.length?(o=t,n):o},n.out=function(t){return arguments.length?(i=t,n):i},n};var _l=ao.map({"inside-out":function(n){var t,e,r=n.length,i=n.map(di),u=n.map(yi),o=ao.range(r).sort(function(n,t){return i[n]-i[t]}),a=0,l=0,c=[],f=[];for(t=0;r>t;++t)e=o[t],l>a?(a+=u[e],c.push(e)):(l+=u[e],f.push(e));return f.reverse().concat(c)},reverse:function(n){return ao.range(n.length).reverse()},"default":gi}),wl=ao.map({silhouette:function(n){var t,e,r,i=n.length,u=n[0].length,o=[],a=0,l=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];r>a&&(a=r),o.push(r)}for(e=0;u>e;++e)l[e]=(a-o[e])/2;return l},wiggle:function(n){var t,e,r,i,u,o,a,l,c,f=n.length,s=n[0],h=s.length,p=[];for(p[0]=l=c=0,e=1;h>e;++e){for(t=0,i=0;f>t;++t)i+=n[t][e][1];for(t=0,u=0,a=s[e][0]-s[e-1][0];f>t;++t){for(r=0,o=(n[t][e][1]-n[t][e-1][1])/(2*a);t>r;++r)o+=(n[r][e][1]-n[r][e-1][1])/a;u+=o*n[t][e][1]}p[e]=l-=i?u/i*a:0,c>l&&(c=l)}for(e=0;h>e;++e)p[e]-=c;return p},expand:function(n){var t,e,r,i=n.length,u=n[0].length,o=1/i,a=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];if(r)for(t=0;i>t;t++)n[t][e][1]/=r;else for(t=0;i>t;t++)n[t][e][1]=o}for(e=0;u>e;++e)a[e]=0;return a},zero:vi});ao.layout.histogram=function(){function n(n,u){for(var o,a,l=[],c=n.map(e,this),f=r.call(this,c,u),s=i.call(this,f,c,u),u=-1,h=c.length,p=s.length-1,g=t?1:1/h;++u0)for(u=-1;++u=f[0]&&a<=f[1]&&(o=l[ao.bisect(s,a,1,p)-1],o.y+=g,o.push(n[u]));return l}var t=!0,e=Number,r=bi,i=Mi;return n.value=function(t){return arguments.length?(e=t,n):e},n.range=function(t){return arguments.length?(r=En(t),n):r},n.bins=function(t){return arguments.length?(i="number"==typeof t?function(n){return xi(n,t)}:En(t),n):i},n.frequency=function(e){return arguments.length?(t=!!e,n):t},n},ao.layout.pack=function(){function n(n,u){var o=e.call(this,n,u),a=o[0],l=i[0],c=i[1],f=null==t?Math.sqrt:"function"==typeof t?t:function(){return t};if(a.x=a.y=0,oi(a,function(n){n.r=+f(n.value)}),oi(a,Ni),r){var s=r*(t?1:Math.max(2*a.r/l,2*a.r/c))/2;oi(a,function(n){n.r+=s}),oi(a,Ni),oi(a,function(n){n.r-=s})}return Ci(a,l/2,c/2,t?1:1/Math.max(2*a.r/l,2*a.r/c)),o}var t,e=ao.layout.hierarchy().sort(_i),r=0,i=[1,1];return n.size=function(t){return arguments.length?(i=t,n):i},n.radius=function(e){return arguments.length?(t=null==e||"function"==typeof e?e:+e,n):t},n.padding=function(t){return arguments.length?(r=+t,n):r},ii(n,e)},ao.layout.tree=function(){function n(n,i){var f=o.call(this,n,i),s=f[0],h=t(s);if(oi(h,e),h.parent.m=-h.z,ui(h,r),c)ui(s,u);else{var p=s,g=s,v=s;ui(s,function(n){n.xg.x&&(g=n),n.depth>v.depth&&(v=n)});var d=a(p,g)/2-p.x,y=l[0]/(g.x+a(g,p)/2+d),m=l[1]/(v.depth||1);ui(s,function(n){n.x=(n.x+d)*y,n.y=n.depth*m})}return f}function t(n){for(var t,e={A:null,children:[n]},r=[e];null!=(t=r.pop());)for(var i,u=t.children,o=0,a=u.length;a>o;++o)r.push((u[o]=i={_:u[o],parent:t,children:(i=u[o].children)&&i.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:o}).a=i);return e.children[0]}function e(n){var t=n.children,e=n.parent.children,r=n.i?e[n.i-1]:null;if(t.length){Di(n);var u=(t[0].z+t[t.length-1].z)/2;r?(n.z=r.z+a(n._,r._),n.m=n.z-u):n.z=u}else r&&(n.z=r.z+a(n._,r._));n.parent.A=i(n,r,n.parent.A||e[0])}function r(n){n._.x=n.z+n.parent.m,n.m+=n.parent.m}function i(n,t,e){if(t){for(var r,i=n,u=n,o=t,l=i.parent.children[0],c=i.m,f=u.m,s=o.m,h=l.m;o=Ti(o),i=qi(i),o&&i;)l=qi(l),u=Ti(u),u.a=n,r=o.z+s-i.z-c+a(o._,i._),r>0&&(Ri(Pi(o,n,e),n,r),c+=r,f+=r),s+=o.m,c+=i.m,h+=l.m,f+=u.m;o&&!Ti(u)&&(u.t=o,u.m+=s-f),i&&!qi(l)&&(l.t=i,l.m+=c-h,e=n)}return e}function u(n){n.x*=l[0],n.y=n.depth*l[1]}var o=ao.layout.hierarchy().sort(null).value(null),a=Li,l=[1,1],c=null;return n.separation=function(t){return arguments.length?(a=t,n):a},n.size=function(t){return arguments.length?(c=null==(l=t)?u:null,n):c?null:l},n.nodeSize=function(t){return arguments.length?(c=null==(l=t)?null:u,n):c?l:null},ii(n,o)},ao.layout.cluster=function(){function n(n,u){var o,a=t.call(this,n,u),l=a[0],c=0;oi(l,function(n){var t=n.children;t&&t.length?(n.x=ji(t),n.y=Ui(t)):(n.x=o?c+=e(n,o):0,n.y=0,o=n)});var f=Fi(l),s=Hi(l),h=f.x-e(f,s)/2,p=s.x+e(s,f)/2;return oi(l,i?function(n){n.x=(n.x-l.x)*r[0],n.y=(l.y-n.y)*r[1]}:function(n){n.x=(n.x-h)/(p-h)*r[0],n.y=(1-(l.y?n.y/l.y:1))*r[1]}),a}var t=ao.layout.hierarchy().sort(null).value(null),e=Li,r=[1,1],i=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(i=null==(r=t),n):i?null:r},n.nodeSize=function(t){return arguments.length?(i=null!=(r=t),n):i?r:null},ii(n,t)},ao.layout.treemap=function(){function n(n,t){for(var e,r,i=-1,u=n.length;++it?0:t),e.area=isNaN(r)||0>=r?0:r}function t(e){var u=e.children;if(u&&u.length){var o,a,l,c=s(e),f=[],h=u.slice(),g=1/0,v="slice"===p?c.dx:"dice"===p?c.dy:"slice-dice"===p?1&e.depth?c.dy:c.dx:Math.min(c.dx,c.dy);for(n(h,c.dx*c.dy/e.value),f.area=0;(l=h.length)>0;)f.push(o=h[l-1]),f.area+=o.area,"squarify"!==p||(a=r(f,v))<=g?(h.pop(),g=a):(f.area-=f.pop().area,i(f,v,c,!1),v=Math.min(c.dx,c.dy),f.length=f.area=0,g=1/0);f.length&&(i(f,v,c,!0),f.length=f.area=0),u.forEach(t)}}function e(t){var r=t.children;if(r&&r.length){var u,o=s(t),a=r.slice(),l=[];for(n(a,o.dx*o.dy/t.value),l.area=0;u=a.pop();)l.push(u),l.area+=u.area,null!=u.z&&(i(l,u.z?o.dx:o.dy,o,!a.length),l.length=l.area=0);r.forEach(e)}}function r(n,t){for(var e,r=n.area,i=0,u=1/0,o=-1,a=n.length;++oe&&(u=e),e>i&&(i=e));return r*=r,t*=t,r?Math.max(t*i*g/r,r/(t*u*g)):1/0}function i(n,t,e,r){var i,u=-1,o=n.length,a=e.x,c=e.y,f=t?l(n.area/t):0; +if(t==e.dx){for((r||f>e.dy)&&(f=e.dy);++ue.dx)&&(f=e.dx);++ue&&(t=1),1>e&&(n=0),function(){var e,r,i;do e=2*Math.random()-1,r=2*Math.random()-1,i=e*e+r*r;while(!i||i>1);return n+t*e*Math.sqrt(-2*Math.log(i)/i)}},logNormal:function(){var n=ao.random.normal.apply(ao,arguments);return function(){return Math.exp(n())}},bates:function(n){var t=ao.random.irwinHall(n);return function(){return t()/n}},irwinHall:function(n){return function(){for(var t=0,e=0;n>e;e++)t+=Math.random();return t}}},ao.scale={};var Sl={floor:m,ceil:m};ao.scale.linear=function(){return Wi([0,1],[0,1],Mr,!1)};var kl={s:1,g:1,p:1,r:1,e:1};ao.scale.log=function(){return ru(ao.scale.linear().domain([0,1]),10,!0,[1,10])};var Nl=ao.format(".0e"),El={floor:function(n){return-Math.ceil(-n)},ceil:function(n){return-Math.floor(-n)}};ao.scale.pow=function(){return iu(ao.scale.linear(),1,[0,1])},ao.scale.sqrt=function(){return ao.scale.pow().exponent(.5)},ao.scale.ordinal=function(){return ou([],{t:"range",a:[[]]})},ao.scale.category10=function(){return ao.scale.ordinal().range(Al)},ao.scale.category20=function(){return ao.scale.ordinal().range(Cl)},ao.scale.category20b=function(){return ao.scale.ordinal().range(zl)},ao.scale.category20c=function(){return ao.scale.ordinal().range(Ll)};var Al=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(xn),Cl=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(xn),zl=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(xn),Ll=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(xn);ao.scale.quantile=function(){return au([],[])},ao.scale.quantize=function(){return lu(0,1,[0,1])},ao.scale.threshold=function(){return cu([.5],[0,1])},ao.scale.identity=function(){return fu([0,1])},ao.svg={},ao.svg.arc=function(){function n(){var n=Math.max(0,+e.apply(this,arguments)),c=Math.max(0,+r.apply(this,arguments)),f=o.apply(this,arguments)-Io,s=a.apply(this,arguments)-Io,h=Math.abs(s-f),p=f>s?0:1;if(n>c&&(g=c,c=n,n=g),h>=Oo)return t(c,p)+(n?t(n,1-p):"")+"Z";var g,v,d,y,m,M,x,b,_,w,S,k,N=0,E=0,A=[];if((y=(+l.apply(this,arguments)||0)/2)&&(d=u===ql?Math.sqrt(n*n+c*c):+u.apply(this,arguments),p||(E*=-1),c&&(E=tn(d/c*Math.sin(y))),n&&(N=tn(d/n*Math.sin(y)))),c){m=c*Math.cos(f+E),M=c*Math.sin(f+E),x=c*Math.cos(s-E),b=c*Math.sin(s-E);var C=Math.abs(s-f-2*E)<=Fo?0:1;if(E&&yu(m,M,x,b)===p^C){var z=(f+s)/2;m=c*Math.cos(z),M=c*Math.sin(z),x=b=null}}else m=M=0;if(n){_=n*Math.cos(s-N),w=n*Math.sin(s-N),S=n*Math.cos(f+N),k=n*Math.sin(f+N);var L=Math.abs(f-s+2*N)<=Fo?0:1;if(N&&yu(_,w,S,k)===1-p^L){var q=(f+s)/2;_=n*Math.cos(q),w=n*Math.sin(q),S=k=null}}else _=w=0;if(h>Uo&&(g=Math.min(Math.abs(c-n)/2,+i.apply(this,arguments)))>.001){v=c>n^p?0:1;var T=g,R=g;if(Fo>h){var D=null==S?[_,w]:null==x?[m,M]:Re([m,M],[S,k],[x,b],[_,w]),P=m-D[0],U=M-D[1],j=x-D[0],F=b-D[1],H=1/Math.sin(Math.acos((P*j+U*F)/(Math.sqrt(P*P+U*U)*Math.sqrt(j*j+F*F)))/2),O=Math.sqrt(D[0]*D[0]+D[1]*D[1]);R=Math.min(g,(n-O)/(H-1)),T=Math.min(g,(c-O)/(H+1))}if(null!=x){var I=mu(null==S?[_,w]:[S,k],[m,M],c,T,p),Y=mu([x,b],[_,w],c,T,p);g===T?A.push("M",I[0],"A",T,",",T," 0 0,",v," ",I[1],"A",c,",",c," 0 ",1-p^yu(I[1][0],I[1][1],Y[1][0],Y[1][1]),",",p," ",Y[1],"A",T,",",T," 0 0,",v," ",Y[0]):A.push("M",I[0],"A",T,",",T," 0 1,",v," ",Y[0])}else A.push("M",m,",",M);if(null!=S){var Z=mu([m,M],[S,k],n,-R,p),V=mu([_,w],null==x?[m,M]:[x,b],n,-R,p);g===R?A.push("L",V[0],"A",R,",",R," 0 0,",v," ",V[1],"A",n,",",n," 0 ",p^yu(V[1][0],V[1][1],Z[1][0],Z[1][1]),",",1-p," ",Z[1],"A",R,",",R," 0 0,",v," ",Z[0]):A.push("L",V[0],"A",R,",",R," 0 0,",v," ",Z[0])}else A.push("L",_,",",w)}else A.push("M",m,",",M),null!=x&&A.push("A",c,",",c," 0 ",C,",",p," ",x,",",b),A.push("L",_,",",w),null!=S&&A.push("A",n,",",n," 0 ",L,",",1-p," ",S,",",k);return A.push("Z"),A.join("")}function t(n,t){return"M0,"+n+"A"+n+","+n+" 0 1,"+t+" 0,"+-n+"A"+n+","+n+" 0 1,"+t+" 0,"+n}var e=hu,r=pu,i=su,u=ql,o=gu,a=vu,l=du;return n.innerRadius=function(t){return arguments.length?(e=En(t),n):e},n.outerRadius=function(t){return arguments.length?(r=En(t),n):r},n.cornerRadius=function(t){return arguments.length?(i=En(t),n):i},n.padRadius=function(t){return arguments.length?(u=t==ql?ql:En(t),n):u},n.startAngle=function(t){return arguments.length?(o=En(t),n):o},n.endAngle=function(t){return arguments.length?(a=En(t),n):a},n.padAngle=function(t){return arguments.length?(l=En(t),n):l},n.centroid=function(){var n=(+e.apply(this,arguments)+ +r.apply(this,arguments))/2,t=(+o.apply(this,arguments)+ +a.apply(this,arguments))/2-Io;return[Math.cos(t)*n,Math.sin(t)*n]},n};var ql="auto";ao.svg.line=function(){return Mu(m)};var Tl=ao.map({linear:xu,"linear-closed":bu,step:_u,"step-before":wu,"step-after":Su,basis:zu,"basis-open":Lu,"basis-closed":qu,bundle:Tu,cardinal:Eu,"cardinal-open":ku,"cardinal-closed":Nu,monotone:Fu});Tl.forEach(function(n,t){t.key=n,t.closed=/-closed$/.test(n)});var Rl=[0,2/3,1/3,0],Dl=[0,1/3,2/3,0],Pl=[0,1/6,2/3,1/6];ao.svg.line.radial=function(){var n=Mu(Hu);return n.radius=n.x,delete n.x,n.angle=n.y,delete n.y,n},wu.reverse=Su,Su.reverse=wu,ao.svg.area=function(){return Ou(m)},ao.svg.area.radial=function(){var n=Ou(Hu);return n.radius=n.x,delete n.x,n.innerRadius=n.x0,delete n.x0,n.outerRadius=n.x1,delete n.x1,n.angle=n.y,delete n.y,n.startAngle=n.y0,delete n.y0,n.endAngle=n.y1,delete n.y1,n},ao.svg.chord=function(){function n(n,a){var l=t(this,u,n,a),c=t(this,o,n,a);return"M"+l.p0+r(l.r,l.p1,l.a1-l.a0)+(e(l,c)?i(l.r,l.p1,l.r,l.p0):i(l.r,l.p1,c.r,c.p0)+r(c.r,c.p1,c.a1-c.a0)+i(c.r,c.p1,l.r,l.p0))+"Z"}function t(n,t,e,r){var i=t.call(n,e,r),u=a.call(n,i,r),o=l.call(n,i,r)-Io,f=c.call(n,i,r)-Io;return{r:u,a0:o,a1:f,p0:[u*Math.cos(o),u*Math.sin(o)],p1:[u*Math.cos(f),u*Math.sin(f)]}}function e(n,t){return n.a0==t.a0&&n.a1==t.a1}function r(n,t,e){return"A"+n+","+n+" 0 "+ +(e>Fo)+",1 "+t}function i(n,t,e,r){return"Q 0,0 "+r}var u=Me,o=xe,a=Iu,l=gu,c=vu;return n.radius=function(t){return arguments.length?(a=En(t),n):a},n.source=function(t){return arguments.length?(u=En(t),n):u},n.target=function(t){return arguments.length?(o=En(t),n):o},n.startAngle=function(t){return arguments.length?(l=En(t),n):l},n.endAngle=function(t){return arguments.length?(c=En(t),n):c},n},ao.svg.diagonal=function(){function n(n,i){var u=t.call(this,n,i),o=e.call(this,n,i),a=(u.y+o.y)/2,l=[u,{x:u.x,y:a},{x:o.x,y:a},o];return l=l.map(r),"M"+l[0]+"C"+l[1]+" "+l[2]+" "+l[3]}var t=Me,e=xe,r=Yu;return n.source=function(e){return arguments.length?(t=En(e),n):t},n.target=function(t){return arguments.length?(e=En(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},ao.svg.diagonal.radial=function(){var n=ao.svg.diagonal(),t=Yu,e=n.projection;return n.projection=function(n){return arguments.length?e(Zu(t=n)):t},n},ao.svg.symbol=function(){function n(n,r){return(Ul.get(t.call(this,n,r))||$u)(e.call(this,n,r))}var t=Xu,e=Vu;return n.type=function(e){return arguments.length?(t=En(e),n):t},n.size=function(t){return arguments.length?(e=En(t),n):e},n};var Ul=ao.map({circle:$u,cross:function(n){var t=Math.sqrt(n/5)/2;return"M"+-3*t+","+-t+"H"+-t+"V"+-3*t+"H"+t+"V"+-t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+-t+"V"+t+"H"+-3*t+"Z"},diamond:function(n){var t=Math.sqrt(n/(2*Fl)),e=t*Fl;return"M0,"+-t+"L"+e+",0 0,"+t+" "+-e+",0Z"},square:function(n){var t=Math.sqrt(n)/2;return"M"+-t+","+-t+"L"+t+","+-t+" "+t+","+t+" "+-t+","+t+"Z"},"triangle-down":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+e+"L"+t+","+-e+" "+-t+","+-e+"Z"},"triangle-up":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+-e+"L"+t+","+e+" "+-t+","+e+"Z"}});ao.svg.symbolTypes=Ul.keys();var jl=Math.sqrt(3),Fl=Math.tan(30*Yo);Co.transition=function(n){for(var t,e,r=Hl||++Zl,i=Ku(n),u=[],o=Ol||{time:Date.now(),ease:Nr,delay:0,duration:250},a=-1,l=this.length;++au;u++){i.push(t=[]);for(var e=this[u],a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return Wu(i,this.namespace,this.id)},Yl.tween=function(n,t){var e=this.id,r=this.namespace;return arguments.length<2?this.node()[r][e].tween.get(n):Y(this,null==t?function(t){t[r][e].tween.remove(n)}:function(i){i[r][e].tween.set(n,t)})},Yl.attr=function(n,t){function e(){this.removeAttribute(a)}function r(){this.removeAttributeNS(a.space,a.local)}function i(n){return null==n?e:(n+="",function(){var t,e=this.getAttribute(a);return e!==n&&(t=o(e,n),function(n){this.setAttribute(a,t(n))})})}function u(n){return null==n?r:(n+="",function(){var t,e=this.getAttributeNS(a.space,a.local);return e!==n&&(t=o(e,n),function(n){this.setAttributeNS(a.space,a.local,t(n))})})}if(arguments.length<2){for(t in n)this.attr(t,n[t]);return this}var o="transform"==n?$r:Mr,a=ao.ns.qualify(n);return Ju(this,"attr."+n,t,a.local?u:i)},Yl.attrTween=function(n,t){function e(n,e){var r=t.call(this,n,e,this.getAttribute(i));return r&&function(n){this.setAttribute(i,r(n))}}function r(n,e){var r=t.call(this,n,e,this.getAttributeNS(i.space,i.local));return r&&function(n){this.setAttributeNS(i.space,i.local,r(n))}}var i=ao.ns.qualify(n);return this.tween("attr."+n,i.local?r:e)},Yl.style=function(n,e,r){function i(){this.style.removeProperty(n)}function u(e){return null==e?i:(e+="",function(){var i,u=t(this).getComputedStyle(this,null).getPropertyValue(n);return u!==e&&(i=Mr(u,e),function(t){this.style.setProperty(n,i(t),r)})})}var o=arguments.length;if(3>o){if("string"!=typeof n){2>o&&(e="");for(r in n)this.style(r,n[r],e);return this}r=""}return Ju(this,"style."+n,e,u)},Yl.styleTween=function(n,e,r){function i(i,u){var o=e.call(this,i,u,t(this).getComputedStyle(this,null).getPropertyValue(n));return o&&function(t){this.style.setProperty(n,o(t),r)}}return arguments.length<3&&(r=""),this.tween("style."+n,i)},Yl.text=function(n){return Ju(this,"text",n,Gu)},Yl.remove=function(){var n=this.namespace;return this.each("end.transition",function(){var t;this[n].count<2&&(t=this.parentNode)&&t.removeChild(this)})},Yl.ease=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].ease:("function"!=typeof n&&(n=ao.ease.apply(ao,arguments)),Y(this,function(r){r[e][t].ease=n}))},Yl.delay=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].delay:Y(this,"function"==typeof n?function(r,i,u){r[e][t].delay=+n.call(r,r.__data__,i,u)}:(n=+n,function(r){r[e][t].delay=n}))},Yl.duration=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].duration:Y(this,"function"==typeof n?function(r,i,u){r[e][t].duration=Math.max(1,n.call(r,r.__data__,i,u))}:(n=Math.max(1,n),function(r){r[e][t].duration=n}))},Yl.each=function(n,t){var e=this.id,r=this.namespace;if(arguments.length<2){var i=Ol,u=Hl;try{Hl=e,Y(this,function(t,i,u){Ol=t[r][e],n.call(t,t.__data__,i,u)})}finally{Ol=i,Hl=u}}else Y(this,function(i){var u=i[r][e];(u.event||(u.event=ao.dispatch("start","end","interrupt"))).on(n,t)});return this},Yl.transition=function(){for(var n,t,e,r,i=this.id,u=++Zl,o=this.namespace,a=[],l=0,c=this.length;c>l;l++){a.push(n=[]);for(var t=this[l],f=0,s=t.length;s>f;f++)(e=t[f])&&(r=e[o][i],Qu(e,f,o,u,{time:r.time,ease:r.ease,delay:r.delay+r.duration,duration:r.duration})),n.push(e)}return Wu(a,o,u)},ao.svg.axis=function(){function n(n){n.each(function(){var n,c=ao.select(this),f=this.__chart__||e,s=this.__chart__=e.copy(),h=null==l?s.ticks?s.ticks.apply(s,a):s.domain():l,p=null==t?s.tickFormat?s.tickFormat.apply(s,a):m:t,g=c.selectAll(".tick").data(h,s),v=g.enter().insert("g",".domain").attr("class","tick").style("opacity",Uo),d=ao.transition(g.exit()).style("opacity",Uo).remove(),y=ao.transition(g.order()).style("opacity",1),M=Math.max(i,0)+o,x=Zi(s),b=c.selectAll(".domain").data([0]),_=(b.enter().append("path").attr("class","domain"),ao.transition(b));v.append("line"),v.append("text");var w,S,k,N,E=v.select("line"),A=y.select("line"),C=g.select("text").text(p),z=v.select("text"),L=y.select("text"),q="top"===r||"left"===r?-1:1;if("bottom"===r||"top"===r?(n=no,w="x",k="y",S="x2",N="y2",C.attr("dy",0>q?"0em":".71em").style("text-anchor","middle"),_.attr("d","M"+x[0]+","+q*u+"V0H"+x[1]+"V"+q*u)):(n=to,w="y",k="x",S="y2",N="x2",C.attr("dy",".32em").style("text-anchor",0>q?"end":"start"),_.attr("d","M"+q*u+","+x[0]+"H0V"+x[1]+"H"+q*u)),E.attr(N,q*i),z.attr(k,q*M),A.attr(S,0).attr(N,q*i),L.attr(w,0).attr(k,q*M),s.rangeBand){var T=s,R=T.rangeBand()/2;f=s=function(n){return T(n)+R}}else f.rangeBand?f=s:d.call(n,s,f);v.call(n,f,s),y.call(n,s,s)})}var t,e=ao.scale.linear(),r=Vl,i=6,u=6,o=3,a=[10],l=null;return n.scale=function(t){return arguments.length?(e=t,n):e},n.orient=function(t){return arguments.length?(r=t in Xl?t+"":Vl,n):r},n.ticks=function(){return arguments.length?(a=co(arguments),n):a},n.tickValues=function(t){return arguments.length?(l=t,n):l},n.tickFormat=function(e){return arguments.length?(t=e,n):t},n.tickSize=function(t){var e=arguments.length;return e?(i=+t,u=+arguments[e-1],n):i},n.innerTickSize=function(t){return arguments.length?(i=+t,n):i},n.outerTickSize=function(t){return arguments.length?(u=+t,n):u},n.tickPadding=function(t){return arguments.length?(o=+t,n):o},n.tickSubdivide=function(){return arguments.length&&n},n};var Vl="bottom",Xl={top:1,right:1,bottom:1,left:1};ao.svg.brush=function(){function n(t){t.each(function(){var t=ao.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",u).on("touchstart.brush",u),o=t.selectAll(".background").data([0]);o.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),t.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var a=t.selectAll(".resize").data(v,m);a.exit().remove(),a.enter().append("g").attr("class",function(n){return"resize "+n}).style("cursor",function(n){return $l[n]}).append("rect").attr("x",function(n){return/[ew]$/.test(n)?-3:null}).attr("y",function(n){return/^[ns]/.test(n)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),a.style("display",n.empty()?"none":null);var l,s=ao.transition(t),h=ao.transition(o);c&&(l=Zi(c),h.attr("x",l[0]).attr("width",l[1]-l[0]),r(s)),f&&(l=Zi(f),h.attr("y",l[0]).attr("height",l[1]-l[0]),i(s)),e(s)})}function e(n){n.selectAll(".resize").attr("transform",function(n){return"translate("+s[+/e$/.test(n)]+","+h[+/^s/.test(n)]+")"})}function r(n){n.select(".extent").attr("x",s[0]),n.selectAll(".extent,.n>rect,.s>rect").attr("width",s[1]-s[0])}function i(n){n.select(".extent").attr("y",h[0]),n.selectAll(".extent,.e>rect,.w>rect").attr("height",h[1]-h[0])}function u(){function u(){32==ao.event.keyCode&&(C||(M=null,L[0]-=s[1],L[1]-=h[1],C=2),S())}function v(){32==ao.event.keyCode&&2==C&&(L[0]+=s[1],L[1]+=h[1],C=0,S())}function d(){var n=ao.mouse(b),t=!1;x&&(n[0]+=x[0],n[1]+=x[1]),C||(ao.event.altKey?(M||(M=[(s[0]+s[1])/2,(h[0]+h[1])/2]),L[0]=s[+(n[0]f?(i=r,r=f):i=f),v[0]!=r||v[1]!=i?(e?a=null:o=null,v[0]=r,v[1]=i,!0):void 0}function m(){d(),k.style("pointer-events","all").selectAll(".resize").style("display",n.empty()?"none":null),ao.select("body").style("cursor",null),q.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),z(),w({type:"brushend"})}var M,x,b=this,_=ao.select(ao.event.target),w=l.of(b,arguments),k=ao.select(b),N=_.datum(),E=!/^(n|s)$/.test(N)&&c,A=!/^(e|w)$/.test(N)&&f,C=_.classed("extent"),z=W(b),L=ao.mouse(b),q=ao.select(t(b)).on("keydown.brush",u).on("keyup.brush",v);if(ao.event.changedTouches?q.on("touchmove.brush",d).on("touchend.brush",m):q.on("mousemove.brush",d).on("mouseup.brush",m),k.interrupt().selectAll("*").interrupt(),C)L[0]=s[0]-L[0],L[1]=h[0]-L[1];else if(N){var T=+/w$/.test(N),R=+/^n/.test(N);x=[s[1-T]-L[0],h[1-R]-L[1]],L[0]=s[T],L[1]=h[R]}else ao.event.altKey&&(M=L.slice());k.style("pointer-events","none").selectAll(".resize").style("display",null),ao.select("body").style("cursor",_.style("cursor")),w({type:"brushstart"}),d()}var o,a,l=N(n,"brushstart","brush","brushend"),c=null,f=null,s=[0,0],h=[0,0],p=!0,g=!0,v=Bl[0];return n.event=function(n){n.each(function(){var n=l.of(this,arguments),t={x:s,y:h,i:o,j:a},e=this.__chart__||t;this.__chart__=t,Hl?ao.select(this).transition().each("start.brush",function(){o=e.i,a=e.j,s=e.x,h=e.y,n({type:"brushstart"})}).tween("brush:brush",function(){var e=xr(s,t.x),r=xr(h,t.y);return o=a=null,function(i){s=t.x=e(i),h=t.y=r(i),n({type:"brush",mode:"resize"})}}).each("end.brush",function(){o=t.i,a=t.j,n({type:"brush",mode:"resize"}),n({type:"brushend"})}):(n({type:"brushstart"}),n({type:"brush",mode:"resize"}),n({type:"brushend"}))})},n.x=function(t){return arguments.length?(c=t,v=Bl[!c<<1|!f],n):c},n.y=function(t){return arguments.length?(f=t,v=Bl[!c<<1|!f],n):f},n.clamp=function(t){return arguments.length?(c&&f?(p=!!t[0],g=!!t[1]):c?p=!!t:f&&(g=!!t),n):c&&f?[p,g]:c?p:f?g:null},n.extent=function(t){var e,r,i,u,l;return arguments.length?(c&&(e=t[0],r=t[1],f&&(e=e[0],r=r[0]),o=[e,r],c.invert&&(e=c(e),r=c(r)),e>r&&(l=e,e=r,r=l),e==s[0]&&r==s[1]||(s=[e,r])),f&&(i=t[0],u=t[1],c&&(i=i[1],u=u[1]),a=[i,u],f.invert&&(i=f(i),u=f(u)),i>u&&(l=i,i=u,u=l),i==h[0]&&u==h[1]||(h=[i,u])),n):(c&&(o?(e=o[0],r=o[1]):(e=s[0],r=s[1],c.invert&&(e=c.invert(e),r=c.invert(r)),e>r&&(l=e,e=r,r=l))),f&&(a?(i=a[0],u=a[1]):(i=h[0],u=h[1],f.invert&&(i=f.invert(i),u=f.invert(u)),i>u&&(l=i,i=u,u=l))),c&&f?[[e,i],[r,u]]:c?[e,r]:f&&[i,u])},n.clear=function(){return n.empty()||(s=[0,0],h=[0,0],o=a=null),n},n.empty=function(){return!!c&&s[0]==s[1]||!!f&&h[0]==h[1]},ao.rebind(n,l,"on")};var $l={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},Bl=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]],Wl=ga.format=xa.timeFormat,Jl=Wl.utc,Gl=Jl("%Y-%m-%dT%H:%M:%S.%LZ");Wl.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?eo:Gl,eo.parse=function(n){var t=new Date(n);return isNaN(t)?null:t},eo.toString=Gl.toString,ga.second=On(function(n){return new va(1e3*Math.floor(n/1e3))},function(n,t){n.setTime(n.getTime()+1e3*Math.floor(t))},function(n){return n.getSeconds()}),ga.seconds=ga.second.range,ga.seconds.utc=ga.second.utc.range,ga.minute=On(function(n){return new va(6e4*Math.floor(n/6e4))},function(n,t){n.setTime(n.getTime()+6e4*Math.floor(t))},function(n){return n.getMinutes()}),ga.minutes=ga.minute.range,ga.minutes.utc=ga.minute.utc.range,ga.hour=On(function(n){var t=n.getTimezoneOffset()/60;return new va(36e5*(Math.floor(n/36e5-t)+t))},function(n,t){n.setTime(n.getTime()+36e5*Math.floor(t))},function(n){return n.getHours()}),ga.hours=ga.hour.range,ga.hours.utc=ga.hour.utc.range,ga.month=On(function(n){return n=ga.day(n),n.setDate(1),n},function(n,t){n.setMonth(n.getMonth()+t)},function(n){return n.getMonth()}),ga.months=ga.month.range,ga.months.utc=ga.month.utc.range;var Kl=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Ql=[[ga.second,1],[ga.second,5],[ga.second,15],[ga.second,30],[ga.minute,1],[ga.minute,5],[ga.minute,15],[ga.minute,30],[ga.hour,1],[ga.hour,3],[ga.hour,6],[ga.hour,12],[ga.day,1],[ga.day,2],[ga.week,1],[ga.month,1],[ga.month,3],[ga.year,1]],nc=Wl.multi([[".%L",function(n){return n.getMilliseconds()}],[":%S",function(n){return n.getSeconds()}],["%I:%M",function(n){return n.getMinutes()}],["%I %p",function(n){return n.getHours()}],["%a %d",function(n){return n.getDay()&&1!=n.getDate()}],["%b %d",function(n){return 1!=n.getDate()}],["%B",function(n){return n.getMonth()}],["%Y",zt]]),tc={range:function(n,t,e){return ao.range(Math.ceil(n/e)*e,+t,e).map(io)},floor:m,ceil:m};Ql.year=ga.year,ga.scale=function(){return ro(ao.scale.linear(),Ql,nc)};var ec=Ql.map(function(n){return[n[0].utc,n[1]]}),rc=Jl.multi([[".%L",function(n){return n.getUTCMilliseconds()}],[":%S",function(n){return n.getUTCSeconds()}],["%I:%M",function(n){return n.getUTCMinutes()}],["%I %p",function(n){return n.getUTCHours()}],["%a %d",function(n){return n.getUTCDay()&&1!=n.getUTCDate()}],["%b %d",function(n){return 1!=n.getUTCDate()}],["%B",function(n){return n.getUTCMonth()}],["%Y",zt]]);ec.year=ga.year.utc,ga.scale.utc=function(){return ro(ao.scale.linear(),ec,rc)},ao.text=An(function(n){return n.responseText}),ao.json=function(n,t){return Cn(n,"application/json",uo,t)},ao.html=function(n,t){return Cn(n,"text/html",oo,t)},ao.xml=An(function(n){return n.responseXML}),"function"==typeof define&&define.amd?(this.d3=ao,define(ao)):"object"==typeof module&&module.exports?module.exports=ao:this.d3=ao}(); \ No newline at end of file diff --git a/mo/webvowl/js/webvowl.app.js b/mo/webvowl/js/webvowl.app.js new file mode 100644 index 0000000..d82eddd --- /dev/null +++ b/mo/webvowl/js/webvowl.app.js @@ -0,0 +1,9457 @@ +webvowl.app = +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; + +/******/ // The require function +/******/ function __webpack_require__(moduleId) { + +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; + +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; + +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); + +/******/ // Flag the module as loaded +/******/ module.loaded = true; + +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } + + +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; + +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; + +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; + +/******/ // Load entry module and return exports +/******/ return __webpack_require__(0); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ 0: +/***/ (function(module, exports, __webpack_require__) { + + __webpack_require__(319); + __webpack_require__(321); + + module.exports = __webpack_require__(322); + + +/***/ }), + +/***/ 6: +/***/ (function(module, exports) { + + module.exports = d3; + +/***/ }), + +/***/ 91: +/***/ (function(module, exports, __webpack_require__) { + + var Symbol = __webpack_require__(92), + getRawTag = __webpack_require__(95), + objectToString = __webpack_require__(96); + + /** `Object#toString` result references. */ + var nullTag = '[object Null]', + undefinedTag = '[object Undefined]'; + + /** Built-in value references. */ + var symToStringTag = Symbol ? Symbol.toStringTag : undefined; + + /** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag && symToStringTag in Object(value)) + ? getRawTag(value) + : objectToString(value); + } + + module.exports = baseGetTag; + + +/***/ }), + +/***/ 92: +/***/ (function(module, exports, __webpack_require__) { + + var root = __webpack_require__(93); + + /** Built-in value references. */ + var Symbol = root.Symbol; + + module.exports = Symbol; + + +/***/ }), + +/***/ 93: +/***/ (function(module, exports, __webpack_require__) { + + var freeGlobal = __webpack_require__(94); + + /** Detect free variable `self`. */ + var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + + /** Used as a reference to the global object. */ + var root = freeGlobal || freeSelf || Function('return this')(); + + module.exports = root; + + +/***/ }), + +/***/ 94: +/***/ (function(module, exports) { + + /* WEBPACK VAR INJECTION */(function(global) {/** Detect free variable `global` from Node.js. */ + var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + + module.exports = freeGlobal; + + /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()))) + +/***/ }), + +/***/ 95: +/***/ (function(module, exports, __webpack_require__) { + + var Symbol = __webpack_require__(92); + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString = objectProto.toString; + + /** Built-in value references. */ + var symToStringTag = Symbol ? Symbol.toStringTag : undefined; + + /** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ + function getRawTag(value) { + var isOwn = hasOwnProperty.call(value, symToStringTag), + tag = value[symToStringTag]; + + try { + value[symToStringTag] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; + } + } + return result; + } + + module.exports = getRawTag; + + +/***/ }), + +/***/ 96: +/***/ (function(module, exports) { + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString = objectProto.toString; + + /** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ + function objectToString(value) { + return nativeObjectToString.call(value); + } + + module.exports = objectToString; + + +/***/ }), + +/***/ 103: +/***/ (function(module, exports, __webpack_require__) { + + var baseGetTag = __webpack_require__(91), + isObjectLike = __webpack_require__(104); + + /** `Object#toString` result references. */ + var symbolTag = '[object Symbol]'; + + /** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ + function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && baseGetTag(value) == symbolTag); + } + + module.exports = isSymbol; + + +/***/ }), + +/***/ 104: +/***/ (function(module, exports) { + + /** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ + function isObjectLike(value) { + return value != null && typeof value == 'object'; + } + + module.exports = isObjectLike; + + +/***/ }), + +/***/ 112: +/***/ (function(module, exports) { + + /** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ + var isArray = Array.isArray; + + module.exports = isArray; + + +/***/ }), + +/***/ 154: +/***/ (function(module, exports) { + + /** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; + } + + module.exports = arrayMap; + + +/***/ }), + +/***/ 219: +/***/ (function(module, exports, __webpack_require__) { + + var baseToString = __webpack_require__(220); + + /** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ + function toString(value) { + return value == null ? '' : baseToString(value); + } + + module.exports = toString; + + +/***/ }), + +/***/ 220: +/***/ (function(module, exports, __webpack_require__) { + + var Symbol = __webpack_require__(92), + arrayMap = __webpack_require__(154), + isArray = __webpack_require__(112), + isSymbol = __webpack_require__(103); + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0; + + /** Used to convert symbols to primitives and strings. */ + var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + + /** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ + function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isArray(value)) { + // Recursively convert values (susceptible to call stack limits). + return arrayMap(value, baseToString) + ''; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + } + + module.exports = baseToString; + + +/***/ }), + +/***/ 319: +/***/ (function(module, exports) { + + // removed by extract-text-webpack-plugin + +/***/ }), + +/***/ 321: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/* Taken from here: http://stackoverflow.com/a/17907562 */ + function getInternetExplorerVersion(){ + var ua, + re, + rv = -1; + + // check for edge + var isEdge = /(?:\b(MS)?IE\s+|\bTrident\/7\.0;.*\s+rv:|\bEdge\/)(\d+)/.test(navigator.userAgent); + if ( isEdge ) { + rv = parseInt("12"); + return rv; + } + + var isIE11 = /Trident.*rv[ :]*11\./.test(navigator.userAgent); + if ( isIE11 ) { + rv = parseInt("11"); + return rv; + } + if ( navigator.appName === "Microsoft Internet Explorer" ) { + ua = navigator.userAgent; + re = new RegExp("MSIE ([0-9]{1,}[\\.0-9]{0,})"); + if ( re.exec(ua) !== null ) { + rv = parseFloat(RegExp.$1); + } + } else if ( navigator.appName === "Netscape" ) { + ua = navigator.userAgent; + re = new RegExp("Trident/.*rv:([0-9]{1,}[\\.0-9]{0,})"); + if ( re.exec(ua) !== null ) { + rv = parseFloat(RegExp.$1); + } + } + return rv; + } + + function showBrowserWarningIfRequired(){ + var version = getInternetExplorerVersion(); + console.log("Browser Version =" + version); + if ( version > 0 && version <= 11 ) { + d3.select("#browserCheck").classed("hidden", false); + d3.select("#killWarning").classed("hidden", true); + d3.select("#optionsArea").classed("hidden", true); + d3.select("#logo").classed("hidden", true); + } + if ( version == 12 ) { + d3.select("#logo").classed("hidden", false); + d3.select("#browserCheck").classed("hidden", false); + // connect the button; + var pb_kill = d3.select("#killWarning"); + pb_kill.on("click", function (){ + console.log("hide the warning please"); + d3.select("#browserCheck").classed("hidden", true); + d3.select("#logo").style("padding", "10px"); + }); + } + else { + d3.select("#logo").classed("hidden", false); + d3.select("#browserCheck").classed("hidden", true); + } + + } + + module.exports = showBrowserWarningIfRequired; + showBrowserWarningIfRequired(); + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 322: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {String.prototype.replaceAll = function ( search, replacement ){ + var target = this; + return target.split(search).join(replacement); + }; + module.exports = function (){ + var newOntologyCounter = 1; + var app = {}, + graph = webvowl.graph(), + options = graph.graphOptions(), + languageTools = webvowl.util.languageTools(), + GRAPH_SELECTOR = "#graph", + // Modules for the webvowl app + exportMenu = __webpack_require__(323)(graph), + filterMenu = __webpack_require__(325)(graph), + gravityMenu = __webpack_require__(326)(graph), + modeMenu = __webpack_require__(327)(graph), + debugMenu = __webpack_require__(328)(graph), + ontologyMenu = __webpack_require__(329)(graph), + pauseMenu = __webpack_require__(333)(graph), + resetMenu = __webpack_require__(334)(graph), + searchMenu = __webpack_require__(335)(graph), + navigationMenu = __webpack_require__(336)(graph), + zoomSlider = __webpack_require__(337)(graph), + sidebar = __webpack_require__(338)(graph), + leftSidebar = __webpack_require__(339)(graph), + editSidebar = __webpack_require__(340)(graph), + configMenu = __webpack_require__(341)(graph), + loadingModule = __webpack_require__(342)(graph), + warningModule = __webpack_require__(343)(graph), + directInputMod = __webpack_require__(344)(graph), + + + // Graph modules + colorExternalsSwitch = webvowl.modules.colorExternalsSwitch(graph), + compactNotationSwitch = webvowl.modules.compactNotationSwitch(graph), + datatypeFilter = webvowl.modules.datatypeFilter(), + disjointFilter = webvowl.modules.disjointFilter(), + focuser = webvowl.modules.focuser(graph), + emptyLiteralFilter = webvowl.modules.emptyLiteralFilter(), + nodeDegreeFilter = webvowl.modules.nodeDegreeFilter(filterMenu), + nodeScalingSwitch = webvowl.modules.nodeScalingSwitch(graph), + objectPropertyFilter = webvowl.modules.objectPropertyFilter(), + pickAndPin = webvowl.modules.pickAndPin(), + selectionDetailDisplayer = webvowl.modules.selectionDetailsDisplayer(sidebar.updateSelectionInformation), + statistics = webvowl.modules.statistics(), + subclassFilter = webvowl.modules.subclassFilter(), + setOperatorFilter = webvowl.modules.setOperatorFilter(); + + + app.getOptions = function (){ + return webvowl.opts; + }; + app.getGraph = function (){ + return webvowl.gr; + }; + // app.afterInitializationCallback=undefined; + + + var executeFileDrop = false; + var wasMessageToShow = false; + var firstTime = false; + + function addFileDropEvents( selector ){ + var node = d3.select(selector); + + node.node().ondragover = function ( e ){ + e.preventDefault(); + + d3.select("#dragDropContainer").classed("hidden", false); + // get svg size + var w = graph.options().width(); + var h = graph.options().height(); + + // get event position; (using clientX and clientY); + var cx = e.clientX; + var cy = e.clientY; + + if ( firstTime === false ) { + var state = d3.select("#loading-info").classed("hidden"); + wasMessageToShow = !state; + firstTime = true; + d3.select("#loading-info").classed("hidden", true); // hide it so it does not conflict with drop event + var bb=d3.select("#drag_msg").node().getBoundingClientRect(); + var hs = bb.height; + var ws = bb.width; + + var icon_scale=Math.min(hs,ws); + icon_scale/=100; + + d3.select("#drag_icon_group").attr("transform", "translate ( " + 0.25 * ws + " " + 0.25 * hs + ")"); + d3.select("#drag_icon").attr("transform","matrix ("+icon_scale+",0,0,"+icon_scale+",0,0)"); + d3.select("#drag_icon_drop").attr("transform","matrix ("+icon_scale+",0,0,"+icon_scale+",0,0)"); + } + + + if ( (cx > 0.25 * w && cx < 0.75 * w) && (cy > 0.25 * h && cy < 0.75 * h) ) { + + d3.select("#drag_msg_text").node().innerHTML = "Drop it here."; + d3.select("#drag_msg").style("background-color", "#67bc0f"); + d3.select("#drag_msg").style("color", "#000000"); + executeFileDrop = true; + // d3.select("#drag_svg").transition() + // .duration(100) + // // .attr("-webkit-transform", "rotate(90)") + // // .attr("-moz-transform", "rotate(90)") + // // .attr("-o-transform", "rotate(90)") + // .attr("transform", "rotate(90)"); + + d3.select("#drag_icon").classed("hidden",true); + d3.select("#drag_icon_drop").classed("hidden",false); + + + } else { + d3.select("#drag_msg_text").node().innerHTML = "Drag ontology file here."; + d3.select("#drag_msg").style("background-color", "#fefefe"); + d3.select("#drag_msg").style("color", "#000000"); + executeFileDrop = false; + + d3.select("#drag_icon").classed("hidden",false); + d3.select("#drag_icon_drop").classed("hidden",true); + + + // d3.select("#drag_svg").transition() + // .duration(100) + // // .attr("-webkit-transform", "rotate(0)") + // // .attr("-moz-transform", "rotate(0)") + // // .attr("-o-transform", "rotate(0)") + // .attr("transform", "rotate(0)"); + // + } + + }; + node.node().ondrop = function ( ev ){ + ev.preventDefault(); + firstTime = false; + if ( executeFileDrop ) { + if ( ev.dataTransfer.items ) { + if ( ev.dataTransfer.items.length === 1 ) { + if ( ev.dataTransfer.items[0].kind === 'file' ) { + var file = ev.dataTransfer.items[0].getAsFile(); + graph.options().loadingModule().fromFileDrop(file.name, file); + } + } + else { + // >> WARNING not multiple file uploaded; + graph.options().warningModule().showMultiFileUploadWarning(); + } + } + } + d3.select("#dragDropContainer").classed("hidden", true); + }; + + node.node().ondragleave = function ( e ){ + var w = graph.options().width(); + var h = graph.options().height(); + + // get event position; (using clientX and clientY); + var cx = e.clientX; + var cy = e.clientY; + + var hidden = false; + firstTime = false; + + if ( cx < 0.1 * w || cx > 0.9 * w ) hidden = true; + if ( cy < 0.1 * h || cy > 0.9 * h ) hidden = true; + d3.select("#dragDropContainer").classed("hidden", hidden); + + d3.select("#loading-info").classed("hidden", !wasMessageToShow); // show it again + // check if it should be visible + var should_show=graph.options().loadingModule().getMessageVisibilityStatus(); + if (should_show===false){ + d3.select("#loading-info").classed("hidden", true); // hide it + } + }; + + } + + + app.initialize = function (){ + addFileDropEvents(GRAPH_SELECTOR); + + window.requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame || function ( f ){ + return setTimeout(f, 1000 / 60); + }; // simulate calling code 60 + window.cancelAnimationFrame = window.cancelAnimationFrame || window.mozCancelAnimationFrame || function ( requestID ){ + clearTimeout(requestID); + }; //fall back + + options.graphContainerSelector(GRAPH_SELECTOR); + options.selectionModules().push(focuser); + options.selectionModules().push(selectionDetailDisplayer); + options.selectionModules().push(pickAndPin); + + options.filterModules().push(emptyLiteralFilter); + options.filterModules().push(statistics); + + options.filterModules().push(nodeDegreeFilter); + options.filterModules().push(datatypeFilter); + options.filterModules().push(objectPropertyFilter); + options.filterModules().push(subclassFilter); + options.filterModules().push(disjointFilter); + options.filterModules().push(setOperatorFilter); + options.filterModules().push(nodeScalingSwitch); + options.filterModules().push(compactNotationSwitch); + options.filterModules().push(colorExternalsSwitch); + + d3.select(window).on("resize", adjustSize); + + exportMenu.setup(); + gravityMenu.setup(); + filterMenu.setup(datatypeFilter, objectPropertyFilter, subclassFilter, disjointFilter, setOperatorFilter, nodeDegreeFilter); + modeMenu.setup(pickAndPin, nodeScalingSwitch, compactNotationSwitch, colorExternalsSwitch); + pauseMenu.setup(); + sidebar.setup(); + loadingModule.setup(); + leftSidebar.setup(); + editSidebar.setup(); + debugMenu.setup(); + var agentVersion = getInternetExplorerVersion(); + if ( agentVersion > 0 && agentVersion <= 11 ) { + console.log("Agent version " + agentVersion); + console.log("This agent is not supported"); + d3.select("#browserCheck").classed("hidden", false); + d3.select("#killWarning").classed("hidden", true); + d3.select("#optionsArea").classed("hidden", true); + d3.select("#logo").classed("hidden", true); + } else { + d3.select("#logo").classed("hidden", false); + if ( agentVersion === 12 ) { + // allow Mircosoft Edge Browser but with warning + d3.select("#browserCheck").classed("hidden", false); + d3.select("#killWarning").classed("hidden", false); + } else { + d3.select("#browserCheck").classed("hidden", true); + } + + resetMenu.setup([gravityMenu, filterMenu, modeMenu, focuser, selectionDetailDisplayer, pauseMenu]); + searchMenu.setup(); + navigationMenu.setup(); + zoomSlider.setup(); + + // give the options the pointer to the some menus for import and export + options.literalFilter(emptyLiteralFilter); + options.nodeDegreeFilter(nodeDegreeFilter); + options.loadingModule(loadingModule); + options.filterMenu(filterMenu); + options.modeMenu(modeMenu); + options.gravityMenu(gravityMenu); + options.pausedMenu(pauseMenu); + options.pickAndPinModule(pickAndPin); + options.resetMenu(resetMenu); + options.searchMenu(searchMenu); + options.ontologyMenu(ontologyMenu); + options.navigationMenu(navigationMenu); + options.sidebar(sidebar); + options.leftSidebar(leftSidebar); + options.editSidebar(editSidebar); + options.exportMenu(exportMenu); + options.graphObject(graph); + options.zoomSlider(zoomSlider); + options.warningModule(warningModule); + options.directInputModule(directInputMod); + options.datatypeFilter(datatypeFilter); + options.objectPropertyFilter(objectPropertyFilter); + options.subclassFilter(subclassFilter); + options.setOperatorFilter(setOperatorFilter); + options.disjointPropertyFilter(disjointFilter); + options.focuserModule(focuser); + options.colorExternalsModule(colorExternalsSwitch); + options.compactNotationModule(compactNotationSwitch); + + ontologyMenu.setup(loadOntologyFromText); + configMenu.setup(); + + leftSidebar.showSidebar(0); + leftSidebar.hideCollapseButton(true); + + + graph.start(); + + var modeOp = d3.select("#modeOfOperationString"); + modeOp.style("font-size", "0.6em"); + modeOp.style("font-style", "italic"); + + adjustSize(); + var defZoom; + var w = graph.options().width(); + var h = graph.options().height(); + defZoom = Math.min(w, h) / 1000; + + var hideDebugOptions = true; + if ( hideDebugOptions === false ) { + graph.setForceTickFunctionWithFPS(); + } + + graph.setDefaultZoom(defZoom); + d3.selectAll(".debugOption").classed("hidden", hideDebugOptions); + + // prevent backspace reloading event + var htmlBody = d3.select("body"); + d3.select(document).on("keydown", function ( e ){ + if ( d3.event.keyCode === 8 && d3.event.target === htmlBody.node() ) { + // we could add here an alert + d3.event.preventDefault(); + } + // using ctrl+Shift+d as debug option + if ( d3.event.ctrlKey && d3.event.shiftKey && d3.event.keyCode === 68 ) { + graph.options().executeHiddenDebugFeatuers(); + d3.event.preventDefault(); + } + }); + if ( d3.select("#maxLabelWidthSliderOption") ) { + var setValue = !graph.options().dynamicLabelWidth(); + d3.select("#maxLabelWidthSlider").node().disabled = setValue; + d3.select("#maxLabelWidthvalueLabel").classed("disabledLabelForSlider", setValue); + d3.select("#maxLabelWidthDescriptionLabel").classed("disabledLabelForSlider", setValue); + } + + d3.select("#blockGraphInteractions").style("position", "absolute") + .style("top", "0") + .style("background-color", "#bdbdbd") + .style("opacity", "0.5") + .style("pointer-events", "auto") + .style("width", graph.options().width() + "px") + .style("height", graph.options().height() + "px") + .on("click", function (){ + d3.event.preventDefault(); + d3.event.stopPropagation(); + }) + .on("dblclick", function (){ + d3.event.preventDefault(); + d3.event.stopPropagation(); + }); + + d3.select("#direct-text-input").on("click", function (){ + directInputMod.setDirectInputMode(); + }); + d3.select("#blockGraphInteractions").node().draggable = false; + options.prefixModule(webvowl.util.prefixTools(graph)); + adjustSize(); + sidebar.updateOntologyInformation(undefined, statistics); + loadingModule.parseUrlAndLoadOntology(); // loads automatically the ontology provided by the parameters + options.debugMenu(debugMenu); + debugMenu.updateSettings(); + + // connect the reloadCachedVersionButton + d3.select("#reloadSvgIcon").on("click", function (){ + if ( d3.select("#reloadSvgIcon").node().disabled === true ) { + graph.options().ontologyMenu().clearCachedVersion(); + return; + } + d3.select("#reloadCachedOntology").classed("hidden", true); + graph.options().ontologyMenu().reloadCachedOntology(); + + }); + // add the initialized objects + webvowl.opts = options; + webvowl.gr = graph; + + } + }; + + + function loadOntologyFromText( jsonText, filename, alternativeFilename ){ + d3.select("#reloadCachedOntology").classed("hidden", true); + pauseMenu.reset(); + graph.options().navigationMenu().hideAllMenus(); + + if ( (jsonText === undefined && filename === undefined) || (jsonText.length === 0) ) { + loadingModule.notValidJsonFile(); + return; + } + graph.editorMode(); // updates the checkbox + var data; + if ( jsonText ) { + // validate JSON FILE + var validJSON; + try { + data = JSON.parse(jsonText); + validJSON = true; + } catch ( e ) { + validJSON = false; + } + if ( validJSON === false ) { + // the server output is not a valid json file + loadingModule.notValidJsonFile(); + return; + } + + if ( !filename ) { + // First look if an ontology title exists, otherwise take the alternative filename + var ontologyNames = data.header ? data.header.title : undefined; + var ontologyName = languageTools.textInLanguage(ontologyNames); + + if ( ontologyName ) { + filename = ontologyName; + } else { + filename = alternativeFilename; + } + } + } + + + // check if we have graph data + var classCount = 0; + if ( data.class !== undefined ) { + classCount = data.class.length; + } + + var loadEmptyOntologyForEditing = false; + if ( location.hash.indexOf("#new_ontology") !== -1 ) { + loadEmptyOntologyForEditing = true; + newOntologyCounter++; + d3.select("#empty").node().href = "#opts=editorMode=true;#new_ontology" + newOntologyCounter; + } + if ( classCount === 0 && graph.editorMode() === false && loadEmptyOntologyForEditing === false ) { + // generate message for the user; + loadingModule.emptyGraphContentError(); + } else { + loadingModule.validJsonFile(); + ontologyMenu.setCachedOntology(filename, jsonText); + exportMenu.setJsonText(jsonText); + options.data(data); + graph.options().loadingModule().setPercentMode(); + if ( loadEmptyOntologyForEditing === true ) { + graph.editorMode(true); + + } + graph.load(); + sidebar.updateOntologyInformation(data, statistics); + exportMenu.setFilename(filename); + graph.updateZoomSliderValueFromOutside(); + adjustSize(); + + var flagOfCheckBox = d3.select("#editorModeModuleCheckbox").node().checked; + graph.editorMode(flagOfCheckBox);// update gui + + } + } + + function adjustSize(){ + var graphContainer = d3.select(GRAPH_SELECTOR), + svg = graphContainer.select("svg"), + height = window.innerHeight - 40, + width = window.innerWidth - (window.innerWidth * 0.22); + + if ( sidebar.getSidebarVisibility() === "0" ) { + height = window.innerHeight - 40; + width = window.innerWidth; + } + + directInputMod.updateLayout(); + d3.select("#blockGraphInteractions").style("width", window.innerWidth + "px"); + d3.select("#blockGraphInteractions").style("height", window.innerHeight + "px"); + + d3.select("#WarningErrorMessagesContainer").style("width", width + "px"); + d3.select("#WarningErrorMessagesContainer").style("height", height + "px"); + + d3.select("#WarningErrorMessages").style("max-height", (height - 12) + "px"); + + graphContainer.style("height", height + "px"); + svg.attr("width", width) + .attr("height", height); + + options.width(width) + .height(height); + + graph.updateStyle(); + + if ( isTouchDevice() === true ) { + if ( graph.isEditorMode() === true ) + d3.select("#modeOfOperationString").node().innerHTML = "touch able device detected"; + graph.setTouchDevice(true); + + } else { + if ( graph.isEditorMode() === true ) + d3.select("#modeOfOperationString").node().innerHTML = "point & click device detected"; + graph.setTouchDevice(false); + } + + d3.select("#loadingInfo-container").style("height", 0.5 * (height - 80) + "px"); + loadingModule.checkForScreenSize(); + + adjustSliderSize(); + // update also the padding options of loading and the logo positions; + var warningDiv = d3.select("#browserCheck"); + if ( warningDiv.classed("hidden") === false ) { + var offset = 10 + warningDiv.node().getBoundingClientRect().height; + d3.select("#logo").style("padding", offset + "px 10px"); + } else { + // remove the dynamic padding from the logo element; + d3.select("#logo").style("padding", "10px"); + } + + // scrollbar tests; + var element = d3.select("#menuElementContainer").node(); + var maxScrollLeft = element.scrollWidth - element.clientWidth; + var leftButton = d3.select("#scrollLeftButton"); + var rightButton = d3.select("#scrollRightButton"); + if ( maxScrollLeft > 0 ) { + // show both and then check how far is bar; + rightButton.classed("hidden", false); + leftButton.classed("hidden", false); + navigationMenu.updateScrollButtonVisibility(); + } else { + // hide both; + rightButton.classed("hidden", true); + leftButton.classed("hidden", true); + } + + // adjust height of the leftSidebar element; + editSidebar.updateElementWidth(); + + + var hs = d3.select("#drag_msg").node().getBoundingClientRect().height; + var ws = d3.select("#drag_msg").node().getBoundingClientRect().width; + d3.select("#drag_icon_group").attr("transform", "translate ( " + 0.25 * ws + " " + 0.25 * hs + ")"); + + } + + function adjustSliderSize(){ + // TODO: refactor and put this into the slider it self + var height = window.innerHeight - 40; + var fullHeight = height; + var zoomOutPos = height - 30; + var sliderHeight = 150; + + // assuming DOM elements are generated in the index.html + // todo: refactor for independent usage of graph and app + if ( fullHeight < 150 ) { + // hide the slider button; + d3.select("#zoomSliderParagraph").classed("hidden", true); + d3.select("#zoomOutButton").classed("hidden", true); + d3.select("#zoomInButton").classed("hidden", true); + d3.select("#centerGraphButton").classed("hidden", true); + return; + } + d3.select("#zoomSliderParagraph").classed("hidden", false); + d3.select("#zoomOutButton").classed("hidden", false); + d3.select("#zoomInButton").classed("hidden", false); + d3.select("#centerGraphButton").classed("hidden", false); + + var zoomInPos = zoomOutPos - 20; + var centerPos = zoomInPos - 20; + if ( fullHeight < 280 ) { + // hide the slider button; + d3.select("#zoomSliderParagraph").classed("hidden", true);//var sliderPos=zoomOutPos-sliderHeight; + d3.select("#zoomOutButton").style("top", zoomOutPos + "px"); + d3.select("#zoomInButton").style("top", zoomInPos + "px"); + d3.select("#centerGraphButton").style("top", centerPos + "px"); + return; + } + + var sliderPos = zoomOutPos - sliderHeight; + zoomInPos = sliderPos - 20; + centerPos = zoomInPos - 20; + d3.select("#zoomSliderParagraph").classed("hidden", false); + d3.select("#zoomOutButton").style("top", zoomOutPos + "px"); + d3.select("#zoomInButton").style("top", zoomInPos + "px"); + d3.select("#centerGraphButton").style("top", centerPos + "px"); + d3.select("#zoomSliderParagraph").style("top", sliderPos + "px"); + } + + function isTouchDevice(){ + try { + document.createEvent("TouchEvent"); + return true; + } catch ( e ) { + return false; + } + } + + + function getInternetExplorerVersion(){ + var ua, + re, + rv = -1; + + // check for edge + var isEdge = /(?:\b(MS)?IE\s+|\bTrident\/7\.0;.*\s+rv:|\bEdge\/)(\d+)/.test(navigator.userAgent); + if ( isEdge ) { + rv = parseInt("12"); + return rv; + } + + var isIE11 = /Trident.*rv[ :]*11\./.test(navigator.userAgent); + if ( isIE11 ) { + rv = parseInt("11"); + return rv; + } + if ( navigator.appName === "Microsoft Internet Explorer" ) { + ua = navigator.userAgent; + re = new RegExp("MSIE ([0-9]{1,}[\\.0-9]{0,})"); + if ( re.exec(ua) !== null ) { + rv = parseFloat(RegExp.$1); + } + } else if ( navigator.appName === "Netscape" ) { + ua = navigator.userAgent; + re = new RegExp("Trident/.*rv:([0-9]{1,}[\\.0-9]{0,})"); + if ( re.exec(ua) !== null ) { + rv = parseFloat(RegExp.$1); + } + } + return rv; + } + + return app; + } + ; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 323: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains the logic for the export button. + * @returns {{}} + */ + module.exports = function ( graph ){ + + var exportMenu = {}, + exportSvgButton, + exportFilename, + exportJsonButton, + exportTurtleButton, + exportTexButton, + copyButton, + exportableJsonText; + + var exportTTLModule = __webpack_require__(324)(graph); + + + String.prototype.replaceAll = function ( search, replacement ){ + var target = this; + return target.split(search).join(replacement); + }; + + + /** + * Adds the export button to the website. + */ + exportMenu.setup = function (){ + exportSvgButton = d3.select("#exportSvg") + .on("click", exportSvg); + exportJsonButton = d3.select("#exportJson") + .on("click", exportJson); + + copyButton = d3.select("#copyBt") + .on("click", copyUrl); + + exportTexButton = d3.select("#exportTex") + .on("click", exportTex); + + exportTurtleButton = d3.select("#exportTurtle") + .on("click", exportTurtle); + + var menuEntry = d3.select("#m_export"); + menuEntry.on("mouseover", function (){ + var searchMenu = graph.options().searchMenu(); + searchMenu.hideSearchEntries(); + exportMenu.exportAsUrl(); + }); + }; + function exportTurtle(){ + var success = exportTTLModule.requestExport(); + var result = exportTTLModule.resultingTTL_Content(); + var ontoTitle = "NewOntology"; + console.log("Exporter was successful: " + success); + if ( success ) { + // console.log("The result is : " + result); + // var ontoTitle=graph.options().getGeneralMetaObjectProperty('title'); + // if (ontoTitle===undefined || ontoTitle.length===0) + // ontoTitle="NewOntology"; + // else{ + // // language object -.- + // ontoTitle.replace(" ","_") + // } + + // TODO: show TEXT in warning module? + + + // // write the data + var dataURI = "data:text/json;charset=utf-8," + encodeURIComponent(result); + + exportTurtleButton.attr("href", dataURI) + .attr("download", ontoTitle + ".ttl"); + + // okay restore old href? + // exportTurtleButton.attr("href", oldHref); + } else { + console.log("ShowWarning!"); + graph.options().warningModule().showExporterWarning(); + console.log("Stay on the page! " + window.location.href); + exportTurtleButton.attr("href", window.location.href); + d3.event.preventDefault(); // prevent the href to be called ( reloads the page otherwise ) + } + } + + exportMenu.setFilename = function ( filename ){ + exportFilename = filename || "export"; + }; + + exportMenu.setJsonText = function ( jsonText ){ + exportableJsonText = jsonText; + }; + + function copyUrl(){ + d3.select("#exportedUrl").node().focus(); + d3.select("#exportedUrl").node().select(); + document.execCommand("copy"); + graph.options().navigationMenu().hideAllMenus(); + d3.event.preventDefault(); // prevent the href to be called ( reloads the page otherwise ) + } + + function prepareOptionString( defOpts, currOpts ){ + var setOptions = 0; + var optsString = "opts="; + + for ( var name in defOpts ) { + // define key and value ; + if ( defOpts.hasOwnProperty(name) ) {// for travis warning + var def_value = defOpts[name]; + var cur_value = currOpts[name]; + if ( def_value !== cur_value ) { + optsString += name + "=" + cur_value + ";"; + setOptions++; + } + } + } + optsString += ""; + if ( setOptions === 0 ) { + return ""; + } + return optsString; + } + + exportMenu.exportAsUrl = function (){ + var currObj = {}; + currObj.sidebar = graph.options().sidebar().getSidebarVisibility(); + + // identify default value given by ontology; + var defOntValue = graph.options().filterMenu().getDefaultDegreeValue(); + var currentValue = graph.options().filterMenu().getDegreeSliderValue(); + if ( parseInt(defOntValue) === parseInt(currentValue) ) { + currObj.doc = -1; + } else { + currObj.doc = currentValue; + } + + currObj.cd = graph.options().classDistance(); + currObj.dd = graph.options().datatypeDistance(); + if ( graph.editorMode() === true ) { + currObj.editorMode = "true"; + } else { + currObj.editorMode = "false"; + } + currObj.filter_datatypes = String(graph.options().filterMenu().getCheckBoxValue("datatypeFilterCheckbox")); + currObj.filter_sco = String(graph.options().filterMenu().getCheckBoxValue("subclassFilterCheckbox")); + currObj.filter_disjoint = String(graph.options().filterMenu().getCheckBoxValue("disjointFilterCheckbox")); + currObj.filter_setOperator = String(graph.options().filterMenu().getCheckBoxValue("setoperatorFilterCheckbox")); + currObj.filter_objectProperties = String(graph.options().filterMenu().getCheckBoxValue("objectPropertyFilterCheckbox")); + currObj.mode_dynamic = String(graph.options().dynamicLabelWidth()); + currObj.mode_scaling = String(graph.options().modeMenu().getCheckBoxValue("nodescalingModuleCheckbox")); + currObj.mode_compact = String(graph.options().modeMenu().getCheckBoxValue("compactnotationModuleCheckbox")); + currObj.mode_colorExt = String(graph.options().modeMenu().getCheckBoxValue("colorexternalsModuleCheckbox")); + currObj.mode_multiColor = String(graph.options().modeMenu().colorModeState()); + currObj.mode_pnp = String(graph.options().modeMenu().getCheckBoxValue("pickandpinModuleCheckbox")); + currObj.debugFeatures = String(!graph.options().getHideDebugFeatures()); + currObj.rect = 0; + + var defObj = graph.options().initialConfig(); + var optsString = prepareOptionString(defObj, currObj); + var urlString = String(location); + var htmlElement; + // when everything is default then there is nothing to write + if ( optsString.length === 0 ) { + // building up parameter list; + + // remove the all options form location + var hashCode = location.hash; + urlString = urlString.split(hashCode)[0]; + + var lPos = hashCode.lastIndexOf("#"); + if ( lPos === -1 ) { + htmlElement = d3.select("#exportedUrl").node(); + htmlElement.value = String(location); + htmlElement.title = String(location); + return; // nothing to change in the location String + } + var newURL = hashCode.slice(lPos, hashCode.length); + htmlElement = d3.select("#exportedUrl").node(); + htmlElement.value = urlString + newURL; + htmlElement.title = urlString + newURL; + return; + } + + // generate the options string; + var numParameters = (urlString.match(/#/g) || []).length; + var newUrlString; + if ( numParameters === undefined || numParameters === 0 ) { + newUrlString = urlString + "#" + optsString; + } + if ( numParameters > 0 ) { + var tokens = urlString.split("#"); + var i; + if ( tokens[1].indexOf("opts=") >= 0 ) { + tokens[1] = optsString; + newUrlString = tokens[0]; + } else { + newUrlString = tokens[0] + "#"; + newUrlString += optsString; + } + // append parameters + for ( i = 1; i < tokens.length; i++ ) { + if ( tokens[i].length > 0 ) { + newUrlString += "#" + tokens[i]; + } + } + } + // building up parameter list; + htmlElement = d3.select("#exportedUrl").node(); + htmlElement.value = newUrlString; + htmlElement.title = newUrlString; + + }; + + function exportSvg(){ + graph.options().navigationMenu().hideAllMenus(); + // Get the d3js SVG element + var graphSvg = d3.select(graph.options().graphContainerSelector()).select("svg"), + graphSvgCode, + escapedGraphSvgCode, + dataURI; + + // inline the styles, so that the exported svg code contains the css rules + inlineVowlStyles(); + hideNonExportableElements(); + + graphSvgCode = graphSvg.attr("version", 1.1) + .attr("xmlns", "http://www.w3.org/2000/svg") + .node().parentNode.innerHTML; + + // Insert the reference to VOWL + graphSvgCode = "\n" + graphSvgCode; + + escapedGraphSvgCode = escapeUnicodeCharacters(graphSvgCode); + //btoa(); Creates a base-64 encoded ASCII string from a "string" of binary data. + dataURI = "data:image/svg+xml;base64," + btoa(escapedGraphSvgCode); + + + exportSvgButton.attr("href", dataURI) + .attr("download", exportFilename + ".svg"); + + // remove graphic styles for interaction to go back to normal + removeVowlInlineStyles(); + showNonExportableElements(); + graph.lazyRefresh(); + } + + function escapeUnicodeCharacters( text ){ + var textSnippets = [], + i, textLength = text.length, + character, + charCode; + + for ( i = 0; i < textLength; i++ ) { + character = text.charAt(i); + charCode = character.charCodeAt(0); + + if ( charCode < 128 ) { + textSnippets.push(character); + } else { + textSnippets.push("&#" + charCode + ";"); + } + } + + return textSnippets.join(""); + } + + function inlineVowlStyles(){ + setStyleSensitively(".text", [{ name: "font-family", value: "Helvetica, Arial, sans-serif" }, { + name: "font-size", + value: "12px" + }]); + setStyleSensitively(".subtext", [{ name: "font-size", value: "9px" }]); + setStyleSensitively(".text.instance-count", [{ name: "fill", value: "#666" }]); + setStyleSensitively(".external + text .instance-count", [{ name: "fill", value: "#aaa" }]); + setStyleSensitively(".cardinality", [{ name: "font-size", value: "10px" }]); + setStyleSensitively(".text, .embedded", [{ name: "pointer-events", value: "none" }]); + setStyleSensitively(".class, .object, .disjoint, .objectproperty, .disjointwith, .equivalentproperty, .transitiveproperty, .functionalproperty, .inversefunctionalproperty, .symmetricproperty, .allvaluesfromproperty, .somevaluesfromproperty", [{ + name: "fill", + value: "#acf" + }]); + setStyleSensitively(".label .datatype, .datatypeproperty", [{ name: "fill", value: "#9c6" }]); + setStyleSensitively(".rdf, .rdfproperty", [{ name: "fill", value: "#c9c" }]); + setStyleSensitively(".literal, .node .datatype", [{ name: "fill", value: "#fc3" }]); + setStyleSensitively(".deprecated, .deprecatedproperty", [{ name: "fill", value: "#ccc" }]); + setStyleSensitively(".external, .externalproperty", [{ name: "fill", value: "#36c" }]); + setStyleSensitively("path, .nofill", [{ name: "fill", value: "none" }]); + setStyleSensitively("marker path", [{ name: "fill", value: "#000" }]); + setStyleSensitively(".class, path, line, .fineline", [{ name: "stroke", value: "#000" }]); + setStyleSensitively(".white, .subclass, .subclassproperty, .external + text", [{ name: "fill", value: "#fff" }]); + setStyleSensitively(".class.hovered, .property.hovered, .cardinality.hovered, .cardinality.focused, circle.pin, .filled.hovered, .filled.focused", [{ + name: "fill", + value: "#f00" + }, { name: "cursor", value: "pointer" }]); + setStyleSensitively(".focused, path.hovered", [{ name: "stroke", value: "#f00" }]); + setStyleSensitively(".indirect-highlighting, .feature:hover", [{ name: "fill", value: "#f90" }]); + setStyleSensitively(".values-from", [{ name: "stroke", value: "#69c" }]); + setStyleSensitively(".symbol, .values-from.filled", [{ name: "fill", value: "#69c" }]); + setStyleSensitively(".class, path, line", [{ name: "stroke-width", value: "2" }]); + setStyleSensitively(".fineline", [{ name: "stroke-width", value: "1" }]); + setStyleSensitively(".dashed, .anonymous", [{ name: "stroke-dasharray", value: "8" }]); + setStyleSensitively(".dotted", [{ name: "stroke-dasharray", value: "3" }]); + setStyleSensitively("rect.focused, circle.focused", [{ name: "stroke-width", value: "4px" }]); + setStyleSensitively(".nostroke", [{ name: "stroke", value: "none" }]); + setStyleSensitively("marker path", [{ name: "stroke-dasharray", value: "100" }]); + } + + function setStyleSensitively( selector, styles ){ + var elements = d3.selectAll(selector); + if ( elements.empty() ) { + return; + } + + styles.forEach(function ( style ){ + elements.each(function (){ + var element = d3.select(this); + if ( !shouldntChangeInlineCss(element, style.name) ) { + element.style(style.name, style.value); + } + }); + }); + } + + function shouldntChangeInlineCss( element, style ){ + return style === "fill" && hasBackgroundColorSet(element); + } + + function hasBackgroundColorSet( element ){ + var data = element.datum(); + if ( data === undefined ) { + return false; + } + return data.backgroundColor && !!data.backgroundColor(); + } + + /** + * For example the pin of the pick&pin module should be invisible in the exported graphic. + */ + function hideNonExportableElements(){ + d3.selectAll(".hidden-in-export").style("display", "none"); + } + + function removeVowlInlineStyles(){ + d3.selectAll(".text, .subtext, .text.instance-count, .external + text .instance-count, .cardinality, .text, .embedded, .class, .object, .disjoint, .objectproperty, .disjointwith, .equivalentproperty, .transitiveproperty, .functionalproperty, .inversefunctionalproperty, .symmetricproperty, .allvaluesfromproperty, .somevaluesfromproperty, .label .datatype, .datatypeproperty, .rdf, .rdfproperty, .literal, .node .datatype, .deprecated, .deprecatedproperty, .external, .externalproperty, path, .nofill, .symbol, .values-from.filled, marker path, .class, path, line, .fineline, .white, .subclass, .subclassproperty, .external + text, .class.hovered, .property.hovered, .cardinality.hovered, .cardinality.focused, circle.pin, .filled.hovered, .filled.focused, .focused, path.hovered, .indirect-highlighting, .feature:hover, .values-from, .class, path, line, .fineline, .dashed, .anonymous, .dotted, rect.focused, circle.focused, .nostroke, marker path") + .each(function (){ + var element = d3.select(this); + + var inlineStyles = element.node().style; + for ( var styleName in inlineStyles ) { + if ( inlineStyles.hasOwnProperty(styleName) ) { + if ( shouldntChangeInlineCss(element, styleName) ) { + continue; + } + element.style(styleName, null); + } + } + + if ( element.datum && element.datum() !== undefined && element.datum().type ) { + if ( element.datum().type() === "rdfs:subClassOf" ) { + element.style("fill", null); + } + } + }); + + // repair svg icons in the menu; + var scrollContainer = d3.select("#menuElementContainer").node(); + var controlElements = scrollContainer.children; + var numEntries = controlElements.length; + + for ( var i = 0; i < numEntries; i++ ) { + var currentMenu = controlElements[i].id; + d3.select("#" + currentMenu).select("path").style("stroke-width", "0"); + d3.select("#" + currentMenu).select("path").style("fill", "#fff"); + } + + d3.select("#magnifyingGlass").style("stroke-width", "0"); + d3.select("#magnifyingGlass").style("fill", "#666"); + + } + + function showNonExportableElements(){ + d3.selectAll(".hidden-in-export").style("display", null); + } + + exportMenu.createJSON_exportObject = function (){ + var i, j, k; // an index variable for the for-loops + + /** get data for exporter **/ + if (!graph.options().data()) {return {};} // return an empty json object + // extract onotology information; + var unfilteredData = graph.getUnfilteredData(); + var ontologyComment = graph.options().data()._comment; + var metaObj = graph.options().getGeneralMetaObject(); + var header = graph.options().data().header; + + if ( metaObj.iri && metaObj.iri !== header.iri ) { + header.iri = metaObj.iri; + } + if ( metaObj.title && metaObj.title !== header.title ) { + header.title = metaObj.title; + } + if ( metaObj.version && metaObj.version !== header.version ) { + header.version = metaObj.version; + } + if ( metaObj.author && metaObj.author !== header.author ) { + header.author = metaObj.author; + } + if ( metaObj.description && metaObj.description !== header.description ) { + header.description = metaObj.description; + } + + + var exportText = {}; + exportText._comment = ontologyComment; + exportText.header = header; + exportText.namespace = graph.options().data().namespace; + if ( exportText.namespace === undefined ) { + exportText.namespace = []; // just an empty namespace array + } + // we do have now the unfiltered data which needs to be transfered to class/classAttribute and property/propertyAttribute + + + // var classAttributeString='classAttribute:[ \n'; + var nodes = unfilteredData.nodes; + var nLen = nodes.length; // hope for compiler unroll + var classObjects = []; + var classAttributeObjects = []; + for ( i = 0; i < nLen; i++ ) { + var classObj = {}; + var classAttr = {}; + classObj.id = nodes[i].id(); + classObj.type = nodes[i].type(); + classObjects.push(classObj); + + // define the attributes object + classAttr.id = nodes[i].id(); + classAttr.iri = nodes[i].iri(); + classAttr.baseIri = nodes[i].baseIri(); + classAttr.label = nodes[i].label(); + + if ( nodes[i].attributes().length > 0 ) { + classAttr.attributes = nodes[i].attributes(); + } + if ( nodes[i].comment() ) { + classAttr.comment = nodes[i].comment(); + } + if ( nodes[i].annotations() ) { + classAttr.annotations = nodes[i].annotations(); + } + if ( nodes[i].description() ) { + classAttr.description = nodes[i].description(); + } + + + if ( nodes[i].individuals().length > 0 ) { + var classIndividualElements = []; + var nIndividuals = nodes[i].individuals(); + for ( j = 0; j < nIndividuals.length; j++ ) { + var indObj = {}; + indObj.iri = nIndividuals[j].iri(); + indObj.baseIri = nIndividuals[j].baseIri(); + indObj.labels = nIndividuals[j].label(); + if ( nIndividuals[j].annotations() ) { + indObj.annotations = nIndividuals[j].annotations(); + } + if ( nIndividuals[j].description() ) { + indObj.description = nIndividuals[j].description(); + } + if ( nIndividuals[j].comment() ) { + indObj.comment = nIndividuals[j].comment(); + } + classIndividualElements.push(indObj); + } + classAttr.individuals = classIndividualElements; + } + + var equalsForAttributes = undefined; + if ( nodes[i].equivalents().length > 0 ) { + equalsForAttributes = []; + var equals = nodes[i].equivalents(); + for ( j = 0; j < equals.length; j++ ) { + var eqObj = {}; + var eqAttr = {}; + eqObj.id = equals[j].id(); + equalsForAttributes.push(equals[j].id()); + eqObj.type = equals[j].type(); + classObjects.push(eqObj); + + eqAttr.id = equals[j].id(); + eqAttr.iri = equals[j].iri(); + eqAttr.baseIri = equals[j].baseIri(); + eqAttr.label = equals[j].label(); + + if ( equals[j].attributes().length > 0 ) { + eqAttr.attributes = equals[j].attributes(); + } + if ( equals[j].comment() ) { + eqAttr.comment = equals[j].comment(); + } + if ( equals[j].individuals().length > 0 ) { + eqAttr.individuals = equals[j].individuals(); + } + if ( equals[j].annotations() ) { + eqAttr.annotations = equals[j].annotations(); + } + if ( equals[j].description() ) { + eqAttr.description = equals[j].description(); + } + + if ( equals[j].individuals().length > 0 ) { + var e_classIndividualElements = []; + var e_nIndividuals = equals[i].individuals(); + for ( k = 0; k < e_nIndividuals.length; k++ ) { + var e_indObj = {}; + e_indObj.iri = e_nIndividuals[k].iri(); + e_indObj.baseIri = e_nIndividuals[k].baseIri(); + e_indObj.labels = e_nIndividuals[k].label(); + + if ( e_nIndividuals[k].annotations() ) { + e_indObj.annotations = e_nIndividuals[k].annotations(); + } + if ( e_nIndividuals[k].description() ) { + e_indObj.description = e_nIndividuals[k].description(); + } + if ( e_nIndividuals[k].comment() ) { + e_indObj.comment = e_nIndividuals[k].comment(); + } + e_classIndividualElements.push(e_indObj); + } + eqAttr.individuals = e_classIndividualElements; + } + + classAttributeObjects.push(eqAttr); + } + } + if ( equalsForAttributes && equalsForAttributes.length > 0 ) { + classAttr.equivalent = equalsForAttributes; + } + + // classAttr.subClasses=nodes[i].subClasses(); // not needed + // classAttr.instances=nodes[i].instances(); + + // + // .complement(element.complement) + // .disjointUnion(element.disjointUnion) + // .description(element.description) + // .equivalents(element.equivalent) + // .intersection(element.intersection) + // .type(element.type) Ignore, because we predefined it + // .union(element.union) + classAttributeObjects.push(classAttr); + } + + /** -- properties -- **/ + var properties = unfilteredData.properties; + var pLen = properties.length; // hope for compiler unroll + var propertyObjects = []; + var propertyAttributeObjects = []; + + for ( i = 0; i < pLen; i++ ) { + var pObj = {}; + var pAttr = {}; + pObj.id = properties[i].id(); + pObj.type = properties[i].type(); + propertyObjects.push(pObj); + + // // define the attributes object + pAttr.id = properties[i].id(); + pAttr.iri = properties[i].iri(); + pAttr.baseIri = properties[i].baseIri(); + pAttr.label = properties[i].label(); + + if ( properties[i].attributes().length > 0 ) { + pAttr.attributes = properties[i].attributes(); + } + if ( properties[i].comment() ) { + pAttr.comment = properties[i].comment(); + } + + if ( properties[i].annotations() ) { + pAttr.annotations = properties[i].annotations(); + } + if ( properties[i].maxCardinality() ) { + pAttr.maxCardinality = properties[i].maxCardinality(); + } + if ( properties[i].minCardinality() ) { + pAttr.minCardinality = properties[i].minCardinality(); + } + if ( properties[i].cardinality() ) { + pAttr.cardinality = properties[i].cardinality(); + } + if ( properties[i].description() ) { + pAttr.description = properties[i].description(); + } + + pAttr.domain = properties[i].domain().id(); + pAttr.range = properties[i].range().id(); + // sub properties; + if ( properties[i].subproperties() ) { + var subProps = properties[i].subproperties(); + var subPropsIdArray = []; + for ( j = 0; j < subProps.length; j++ ) { + if ( subProps[j].id ) + subPropsIdArray.push(subProps[j].id()); + } + pAttr.subproperty = subPropsIdArray; + } + + // super properties + if ( properties[i].superproperties() ) { + var superProps = properties[i].superproperties(); + var superPropsIdArray = []; + for ( j = 0; j < superProps.length; j++ ) { + if ( superProps[j].id ) + superPropsIdArray.push(superProps[j].id()); + } + pAttr.superproperty = superPropsIdArray; + } + + // check for inverse element + if ( properties[i].inverse() ) { + if ( properties[i].inverse().id ) + pAttr.inverse = properties[i].inverse().id(); + } + propertyAttributeObjects.push(pAttr); + } + + exportText.class = classObjects; + exportText.classAttribute = classAttributeObjects; + exportText.property = propertyObjects; + exportText.propertyAttribute = propertyAttributeObjects; + + + var nodeElements = graph.graphNodeElements(); // get visible nodes + var propElements = graph.graphLabelElements(); // get visible labels + // var jsonObj = JSON.parse(exportableJsonText); // reparse the original input json + + /** modify comment **/ + var comment = exportText._comment; + var additionalString = " [Additional Information added by WebVOWL Exporter Version: " + "1.1.7" + "]"; + // adding new string to comment only if it does not exist + if ( comment.indexOf(additionalString) === -1 ) { + exportText._comment = comment + " [Additional Information added by WebVOWL Exporter Version: " + "1.1.7" + "]"; + } + + var classAttribute = exportText.classAttribute; + var propAttribute = exportText.propertyAttribute; + /** remove previously stored variables **/ + for ( i = 0; i < classAttribute.length; i++ ) { + var classObj_del = classAttribute[i]; + delete classObj_del.pos; + delete classObj_del.pinned; + } + var propertyObj; + for ( i = 0; i < propAttribute.length; i++ ) { + propertyObj = propAttribute[i]; + delete propertyObj.pos; + delete propertyObj.pinned; + } + /** add new variables to jsonObj **/ + // class attribute variables + nodeElements.each(function ( node ){ + var nodeId = node.id(); + for ( i = 0; i < classAttribute.length; i++ ) { + var classObj = classAttribute[i]; + if ( classObj.id === nodeId ) { + // store relative positions + classObj.pos = [parseFloat(node.x.toFixed(2)), parseFloat(node.y.toFixed(2))]; + if ( node.pinned() ) + classObj.pinned = true; + break; + } + } + }); + // property attribute variables + for ( j = 0; j < propElements.length; j++ ) { + var correspondingProp = propElements[j].property(); + for ( i = 0; i < propAttribute.length; i++ ) { + propertyObj = propAttribute[i]; + if ( propertyObj.id === correspondingProp.id() ) { + propertyObj.pos = [parseFloat(propElements[j].x.toFixed(2)), parseFloat(propElements[j].y.toFixed(2))]; + if ( propElements[j].pinned() ) + propertyObj.pinned = true; + break; + } + } + } + /** create the variable for settings and set their values **/ + exportText.settings = {}; + + // Global Settings + var zoom = graph.scaleFactor(); + var paused = graph.paused(); + var translation = [parseFloat(graph.translation()[0].toFixed(2)), parseFloat(graph.translation()[1].toFixed(2))]; + exportText.settings.global = {}; + exportText.settings.global.zoom = zoom.toFixed(2); + exportText.settings.global.translation = translation; + exportText.settings.global.paused = paused; + + // shared variable declaration + var cb_text; + var isEnabled; + var cb_obj; + + // Gravity Settings + var classDistance = graph.options().classDistance(); + var datatypeDistance = graph.options().datatypeDistance(); + exportText.settings.gravity = {}; + exportText.settings.gravity.classDistance = classDistance; + exportText.settings.gravity.datatypeDistance = datatypeDistance; + + // Filter Settings + var fMenu = graph.options().filterMenu(); + var fContainer = fMenu.getCheckBoxContainer(); + var cbCont = []; + for ( i = 0; i < fContainer.length; i++ ) { + cb_text = fContainer[i].checkbox.attr("id"); + isEnabled = fContainer[i].checkbox.property("checked"); + cb_obj = {}; + cb_obj.id = cb_text; + cb_obj.checked = isEnabled; + cbCont.push(cb_obj); + } + var degreeSliderVal = fMenu.getDegreeSliderValue(); + exportText.settings.filter = {}; + exportText.settings.filter.checkBox = cbCont; + exportText.settings.filter.degreeSliderValue = degreeSliderVal; + + // Modes Settings + var mMenu = graph.options().modeMenu(); + var mContainer = mMenu.getCheckBoxContainer(); + var cb_modes = []; + for ( i = 0; i < mContainer.length; i++ ) { + cb_text = mContainer[i].attr("id"); + isEnabled = mContainer[i].property("checked"); + cb_obj = {}; + cb_obj.id = cb_text; + cb_obj.checked = isEnabled; + cb_modes.push(cb_obj); + } + var colorSwitchState = mMenu.colorModeState(); + exportText.settings.modes = {}; + exportText.settings.modes.checkBox = cb_modes; + exportText.settings.modes.colorSwitchState = colorSwitchState; + + var exportObj = {}; + // todo: [ ] find better way for ordering the objects + // hack for ordering of objects, so settings is after metrics + exportObj._comment = exportText._comment; + exportObj.header = exportText.header; + exportObj.namespace = exportText.namespace; + exportObj.metrics = exportText.metrics; + exportObj.settings = exportText.settings; + exportObj.class = exportText.class; + exportObj.classAttribute = exportText.classAttribute; + exportObj.property = exportText.property; + exportObj.propertyAttribute = exportText.propertyAttribute; + + return exportObj; + }; + + function exportJson(){ + graph.options().navigationMenu().hideAllMenus(); + /** check if there is data **/ + if ( !exportableJsonText ) { + alert("No graph data available."); + // Stop the redirection to the path of the href attribute + d3.event.preventDefault(); + return; + } + + var exportObj = exportMenu.createJSON_exportObject(); + + // make a string again; + var exportText = JSON.stringify(exportObj, null, ' '); + // write the data + var dataURI = "data:text/json;charset=utf-8," + encodeURIComponent(exportText); + var jsonExportFileName = exportFilename; + + if ( !jsonExportFileName.endsWith(".json") ) + jsonExportFileName += ".json"; + exportJsonButton.attr("href", dataURI) + .attr("download", jsonExportFileName); + } + + var curveFunction = d3.svg.line() + .x(function ( d ){ + return d.x; + }) + .y(function ( d ){ + return d.y; + }) + .interpolate("cardinal"); + var loopFunction = d3.svg.line() + .x(function ( d ){ + return d.x; + }) + .y(function ( d ){ + return d.y; + }) + .interpolate("cardinal") + .tension(-1); + + function exportTex(){ + var zoom = graph.scaleFactor(); + var grTranslate = graph.translation(); + var bbox = graph.getBoundingBoxForTex(); + var comment = " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n"; + comment += " % Generated with the experimental alpha version of the TeX exporter of WebVOWL (version 1.1.3) %%% \n"; + comment += " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\n"; + comment += " % The content can be used as import in other TeX documents. \n"; + comment += " % Parent document has to use the following packages \n"; + comment += " % \\usepackage{tikz} \n"; + comment += " % \\usepackage{helvet} \n"; + comment += " % \\usetikzlibrary{decorations.markings,decorations.shapes,decorations,arrows,automata,backgrounds,petri,shapes.geometric} \n"; + comment += " % \\usepackage{xcolor} \n\n"; + comment += " %%%%%%%%%%%%%%% Example Parent Document %%%%%%%%%%%%%%%%%%%%%%%\n"; + comment += " %\\documentclass{article} \n"; + comment += " %\\usepackage{tikz} \n"; + comment += " %\\usepackage{helvet} \n"; + comment += " %\\usetikzlibrary{decorations.markings,decorations.shapes,decorations,arrows,automata,backgrounds,petri,shapes.geometric} \n"; + comment += " %\\usepackage{xcolor} \n\n"; + comment += " %\\begin{document} \n"; + comment += " %\\section{Example} \n"; + comment += " % This is an example. \n"; + comment += " % \\begin{figure} \n"; + comment += " % \\input{} % << tex file name for the graph \n"; + comment += " % \\caption{A generated graph with TKIZ using alpha version of the TeX exporter of WebVOWL (version 1.1.3) } \n"; + comment += " % \\end{figure} \n"; + comment += " %\\end{document} \n"; + comment += " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\n"; + + + var texString = comment + "\\definecolor{imageBGCOLOR}{HTML}{FFFFFF} \n" + + "\\definecolor{owlClassColor}{HTML}{AACCFF}\n" + + "\\definecolor{owlObjectPropertyColor}{HTML}{AACCFF}\n" + + "\\definecolor{owlExternalClassColor}{HTML}{AACCFF}\n" + + "\\definecolor{owlDatatypePropertyColor}{HTML}{99CC66}\n" + + "\\definecolor{owlDatatypeColor}{HTML}{FFCC33}\n" + + "\\definecolor{owlThingColor}{HTML}{FFFFFF}\n" + + "\\definecolor{valuesFrom}{HTML}{6699CC}\n" + + "\\definecolor{rdfPropertyColor}{HTML}{CC99CC}\n" + + "\\definecolor{unionColor}{HTML}{6699cc}\n" + + "\\begin{center} \n" + + "\\resizebox{\\linewidth}{!}{\n" + + + "\\begin{tikzpicture}[framed]\n" + + "\\clip (" + bbox[0] + "pt , " + bbox[1] + "pt ) rectangle (" + bbox[2] + "pt , " + bbox[3] + "pt);\n" + + "\\tikzstyle{dashed}=[dash pattern=on 4pt off 4pt] \n" + + "\\tikzstyle{dotted}=[dash pattern=on 2pt off 2pt] \n" + + "\\fontfamily{sans-serif}{\\fontsize{12}{12}\\selectfont}\n \n"; + + + texString += "\\tikzset{triangleBlack/.style = {fill=black, draw=black, line width=1pt,scale=0.7,regular polygon, regular polygon sides=3} }\n"; + texString += "\\tikzset{triangleWhite/.style = {fill=white, draw=black, line width=1pt,scale=0.7,regular polygon, regular polygon sides=3} }\n"; + texString += "\\tikzset{triangleBlue/.style = {fill=valuesFrom, draw=valuesFrom, line width=1pt,scale=0.7,regular polygon, regular polygon sides=3} }\n"; + + texString += "\\tikzset{Diamond/.style = {fill=white, draw=black, line width=2pt,scale=1.2,regular polygon, regular polygon sides=4} }\n"; + + + texString += "\\tikzset{Literal/.style={rectangle,align=center,\n" + + "font={\\fontsize{12pt}{12}\\selectfont \\sffamily },\n" + + "black, draw=black, dashed, line width=1pt, fill=owlDatatypeColor, minimum width=80pt,\n" + + "minimum height = 20pt}}\n\n"; + + texString += "\\tikzset{Datatype/.style={rectangle,align=center,\n" + + "font={\\fontsize{12pt}{12}\\selectfont \\sffamily },\n" + + "black, draw=black, line width=1pt, fill=owlDatatypeColor, minimum width=80pt,\n" + + "minimum height = 20pt}}\n\n"; + + + texString += "\\tikzset{owlClass/.style={circle, inner sep=0mm,align=center, \n" + + "font={\\fontsize{12pt}{12}\\selectfont \\sffamily },\n" + + "black, draw=black, line width=1pt, fill=owlClassColor, minimum size=101pt}}\n\n"; + + texString += "\\tikzset{anonymousClass/.style={circle, inner sep=0mm,align=center, \n" + + "font={\\fontsize{12pt}{12}\\selectfont \\sffamily },\n" + + "black, dashed, draw=black, line width=1pt, fill=owlClassColor, minimum size=101pt}}\n\n"; + + + texString += "\\tikzset{owlThing/.style={circle, inner sep=0mm,align=center,\n" + + "font={\\fontsize{12pt}{12}\\selectfont \\sffamily },\n" + + "black, dashed, draw=black, line width=1pt, fill=owlThingColor, minimum size=62pt}}\n\n"; + + + texString += "\\tikzset{owlObjectProperty/.style={rectangle,align=center,\n" + + "inner sep=0mm,\n" + + "font={\\fontsize{12pt}{12}\\selectfont \\sffamily },\n" + + "fill=owlObjectPropertyColor, minimum width=80pt,\n" + + "minimum height = 25pt}}\n\n"; + + texString += "\\tikzset{rdfProperty/.style={rectangle,align=center,\n" + + "inner sep=0mm,\n" + + "font={\\fontsize{12pt}{12}\\selectfont \\sffamily },\n" + + "fill=rdfPropertyColor, minimum width=80pt,\n" + + "minimum height = 25pt}}\n\n"; + + + texString += "\\tikzset{owlDatatypeProperty/.style={rectangle,align=center,\n" + + "fill=owlDatatypePropertyColor, minimum width=80pt,\n" + + "inner sep=0mm,\n" + + "font={\\fontsize{12pt}{12}\\selectfont \\sffamily },\n" + + "minimum height = 25pt}}\n\n"; + + texString += "\\tikzset{rdfsSubClassOf/.style={rectangle,align=center,\n" + + "font={\\fontsize{12pt}{12}\\selectfont \\sffamily },\n" + + "inner sep=0mm,\n" + + "fill=imageBGCOLOR, minimum width=80pt,\n" + + "minimum height = 25pt}}\n\n"; + + texString += "\\tikzset{unionOf/.style={circle, inner sep=0mm,align=center,\n" + + "font={\\fontsize{12pt}{12}\\selectfont \\sffamily },\n" + + "black, draw=black, line width=1pt, fill=unionColor, minimum size=25pt}}\n\n"; + + texString += "\\tikzset{disjointWith/.style={circle, inner sep=0mm,align=center,\n" + + "font={\\fontsize{12pt}{12}\\selectfont \\sffamily },\n" + + "black, draw=black, line width=1pt, fill=unionColor, minimum size=20pt}}\n\n"; + + + texString += "\\tikzset{owlEquivalentClass/.style={circle,align=center,\n" + + "font={\\fontsize{12pt}{12}\\selectfont \\sffamily },\n" + + "inner sep=0mm,\n" + + "black, solid, draw=black, line width=3pt, fill=owlExternalClassColor, minimum size=101pt,\n" + + "postaction = {draw,line width=1pt, white}}}\n\n"; + + // draw a bounding box; + + // get bbox coordinates; + + + graph.options().navigationMenu().hideAllMenus(); + /** check if there is data **/ + if ( !exportableJsonText ) { + alert("No graph data available."); + // Stop the redirection to the path of the href attribute + d3.event.preventDefault(); + return; + } + + var i = 0, identifier; + + /** get data for exporter **/ + var nodeElements = graph.graphNodeElements(); // get visible nodes + var propElements = graph.graphLabelElements(); // get visible labels + var links = graph.graphLinkElements(); + + // export only nodes; + // draw Links; + for ( i = 0; i < links.length; i++ ) { + var link = links[i]; + // console.log("\n****************\nInverstigating Link for property "+link.property().labelForCurrentLanguage()); + + var prop = link.property(); + var dx, dy, px, py, rx, ry; + var colorStr = "black"; + var linkDomainIntersection; + var linkRangeIntersection; + var center; + var linkStyle = ""; + var isLoop = ""; + var curvePoint; + var pathStart; + var pathEnd; + var controlPoints; + var len; + var ahAngle; + var pathLen; + var markerOffset = 7; + + var arrowType = "triangleBlack"; + var linkWidth = ",line width=2pt"; + if ( prop.linkType ) { + if ( prop.linkType() === "dotted" ) { + //stroke-dasharray: 3; + linkStyle = ", dotted "; + arrowType = "triangleWhite"; + } + if ( prop.linkType() === "dashed" ) { + //stroke-dasharray: 3; + linkStyle = ", dashed "; + } + + if ( prop.linkType() === "values-from" ) { + colorStr = "valuesFrom"; + } + + } + + var startX, startY, endX, endY, normX, normY, lg; + + if ( link.layers().length === 1 && !link.loops() ) { + + linkDomainIntersection = graph.math().calculateIntersection(link.range(), link.domain(), 1); + linkRangeIntersection = graph.math().calculateIntersection(link.domain(), link.range(), 1); + center = graph.math().calculateCenter(linkDomainIntersection, linkRangeIntersection); + dx = linkDomainIntersection.x; + dy = -linkDomainIntersection.y; + px = center.x; + py = -center.y; + rx = linkRangeIntersection.x; + ry = -linkRangeIntersection.y; + + + pathStart = linkDomainIntersection; + curvePoint = center; + pathEnd = linkRangeIntersection; + + var nx = rx - px; + var ny = ry - py; + + // normalize ; + len = Math.sqrt(nx * nx + ny * ny); + + nx = nx / len; + ny = ny / len; + + ahAngle = Math.atan2(ny, nx) * (180 / Math.PI); + normX = nx; + normY = ny; + } + else { + if ( link.isLoop() ) { + isLoop = ", tension=3"; + controlPoints = graph.math().calculateLoopPoints(link); + pathStart = controlPoints[0]; + curvePoint = controlPoints[1]; + pathEnd = controlPoints[2]; + } else { + curvePoint = link.label(); + pathStart = graph.math().calculateIntersection(curvePoint, link.domain(), 1); + pathEnd = graph.math().calculateIntersection(curvePoint, link.range(), 1); + } + dx = pathStart.x; + dy = -pathStart.y; + px = curvePoint.x; + py = -curvePoint.y; + rx = pathEnd.x; + ry = -pathEnd.y; + } + + texString += "\\draw [" + colorStr + linkStyle + linkWidth + isLoop + "] plot [smooth] coordinates {(" + + dx + "pt, " + dy + "pt) (" + px + "pt, " + py + "pt) (" + rx + "pt, " + ry + "pt)};\n"; + + + if ( link.property().markerElement() === undefined ) continue; + + // add arrow head; + + + if ( link.property().type() === "owl:someValuesFrom" || link.property().type() === "owl:allValuesFrom" ) { + arrowType = "triangleBlue"; + } + + lg = link.pathObj(); + pathLen = Math.floor(lg.node().getTotalLength()); + var p1 = lg.node().getPointAtLength(pathLen - 4); + var p2 = lg.node().getPointAtLength(pathLen); + var markerCenter = lg.node().getPointAtLength(pathLen - 6); + + if ( link.property().type() === "setOperatorProperty" ) { + p1 = lg.node().getPointAtLength(4); + p2 = lg.node().getPointAtLength(0); + markerCenter = lg.node().getPointAtLength(8); + arrowType = "Diamond"; + } + + startX = p1.x; + startY = p1.y; + endX = p2.x; + endY = p2.y; + normX = endX - startX; + normY = endY - startY; + len = Math.sqrt(normX * normX + normY * normY); + normX = normX / len; + normY = normY / len; + + ahAngle = -1.0 * Math.atan2(normY, normX) * (180 / Math.PI); + ahAngle -= 90; + if ( link.property().type() === "setOperatorProperty" ) { + ahAngle -= 45; + } + // console.log(link.property().labelForCurrentLanguage()+ ": "+normX+ " "+normY +" "+ahAngle); + rx = markerCenter.x; + ry = markerCenter.y; + if ( link.layers().length === 1 && !link.loops() ) { + // markerOffset=-1*m + ry = -1 * ry; + texString += "\\node[" + arrowType + ", rotate=" + ahAngle + "] at (" + rx + "pt, " + ry + "pt) (single_marker" + i + ") {};\n "; + } else { + ry = -1 * ry; + texString += "\\node[" + arrowType + ", rotate=" + ahAngle + "] at (" + rx + "pt, " + ry + "pt) (marker" + i + ") {};\n "; + } + + // if (link.isLoop()){ + // rotAngle=-10+angle * (180 / Math.PI); + // } + + // add cardinality; + var cardinalityText = link.property().generateCardinalityText(); + if ( cardinalityText && cardinalityText.length > 0 ) { + var cardinalityCenter = lg.node().getPointAtLength(pathLen - 18); + var cx = cardinalityCenter.x - (10 * normY); + var cy = cardinalityCenter.y + (10 * normX); // using orthonormal y Coordinate + cy *= -1.0; + var textColor = "black"; + if ( cardinalityText.indexOf("A") > -1 ) { + cardinalityText = "$\\forall$"; + } + if ( cardinalityText.indexOf("E") > -1 ) { + cardinalityText = "$\\exists$"; + } + + + texString += "\\node[font={\\fontsize{12pt}{12}\\selectfont \\sffamily },text=" + textColor + "] at (" + cx + "pt, " + cy + "pt) (cardinalityText" + i + ") {" + cardinalityText + "};\n "; + } + + + if ( link.property().inverse() ) { + lg = link.pathObj(); + pathLen = Math.floor(lg.node().getTotalLength()); + var p1_inv = lg.node().getPointAtLength(4); + var p2_inv = lg.node().getPointAtLength(0); + var markerCenter_inv = lg.node().getPointAtLength(6); + startX = p1_inv.x; + startY = p1_inv.y; + endX = p2_inv.x; + endY = p2_inv.y; + normX = endX - startX; + normY = endY - startY; + len = Math.sqrt(normX * normX + normY * normY); + normX = normX / len; + normY = normY / len; + + ahAngle = -1.0 * Math.atan2(normY, normX) * (180 / Math.PI); + ahAngle -= 90; + // console.log("INV>>\n "+link.property().inverse().labelForCurrentLanguage()+ ": "+normX+ " "+normY +" "+ahAngle); + rx = markerCenter_inv.x; + ry = markerCenter_inv.y; + if ( link.layers().length === 1 && !link.loops() ) { + // markerOffset=-1*m + ry = -1 * ry; + texString += "\\node[" + arrowType + ", rotate=" + ahAngle + "] at (" + rx + "pt, " + ry + "pt) (INV_single_marker" + i + ") {};\n "; + } else { + ry = -1 * ry; + texString += "\\node[" + arrowType + ", rotate=" + ahAngle + "] at (" + rx + "pt, " + ry + "pt) (INV_marker" + i + ") {};\n "; + } + } + + + } + + + nodeElements.each(function ( node ){ + + px = node.x; + py = -node.y; + identifier = node.labelForCurrentLanguage(); + // console.log("Writing : "+ identifier); + if ( identifier === undefined ) identifier = ""; + var qType = "owlClass"; + if ( node.type() === "owl:Thing" || node.type() === "owl:Nothing" ) + qType = "owlThing"; + + if ( node.type() === "owl:equivalentClass" ) { + qType = "owlEquivalentClass"; + } + var textColorStr = ""; + if ( node.textBlock ) { + var txtColor = node.textBlock()._textBlock().style("fill"); + if ( txtColor === "rgb(0, 0, 0)" ) { + textColorStr = ", text=black"; + } + if ( txtColor === "rgb(255, 255, 255)" ) { + textColorStr = ", text=white"; + } + + + var tspans = node.textBlock()._textBlock().node().children; + if ( tspans[0] ) { + identifier = tspans[0].innerHTML; + if ( node.individuals() && node.individuals().length === parseInt(tspans[0].innerHTML) ) { + identifier = "{\\color{gray} " + tspans[0].innerHTML + " }"; + } + for ( var t = 1; t < tspans.length; t++ ) { + if ( node.individuals() && node.individuals().length === parseInt(tspans[t].innerHTML) ) { + identifier += "\\\\ {\\color{gray} " + tspans[t].innerHTML + " }"; + } else { + identifier += "\\\\ {\\small " + tspans[t].innerHTML + " }"; + } + } + } + } + if ( node.type() === "rdfs:Literal" ) { + qType = "Literal"; + } + if ( node.type() === "rdfs:Datatype" ) { + qType = "Datatype"; + } + if ( node.attributes().indexOf("anonymous") !== -1 ) { + qType = "anonymousClass"; + } + + + if ( node.type() === "owl:unionOf" || node.type() === "owl:complementOf" || node.type() === "owl:disjointUnionOf" || node.type() === "owl:intersectionOf" ) + qType = "owlClass"; + + var bgColorStr = ""; + var widthString = ""; + + if ( node.type() === "rdfs:Literal" || node.type() === "rdfs:Datatype" ) { + var width = node.width(); + widthString = ",minimum width=" + width + "pt"; + } + else { + widthString = ",minimum size=" + 2 * node.actualRadius() + "pt"; + + } + if ( node.backgroundColor() ) { + var bgColor = node.backgroundColor(); + bgColor.toUpperCase(); + bgColor = bgColor.slice(1, bgColor.length); + texString += "\\definecolor{Node" + i + "_COLOR}{HTML}{" + bgColor + "} \n "; + bgColorStr = ", fill=Node" + i + "_COLOR "; + } + if ( node.attributes().indexOf("deprecated") > -1 ) { + texString += "\\definecolor{Node" + i + "_COLOR}{HTML}{CCCCCC} \n "; + bgColorStr = ", fill=Node" + i + "_COLOR "; + } + + var leftPos = px - 7; + var rightPos = px + 7; + var txtOffset = py + 20; + if ( node.type() !== "owl:unionOf" || node.type() !== "owl:disjointUnionOf" ) { + texString += "\\node[" + qType + " " + widthString + " " + bgColorStr + " " + textColorStr + "] at (" + px + "pt, " + py + "pt) (Node" + i + ") {" + identifier.replaceAll("_", "\\_ ") + "};\n"; + } + if ( node.type() === "owl:unionOf" ) { + // add symbol to it; + texString += "\\node[" + qType + " " + widthString + " " + bgColorStr + " " + textColorStr + "] at (" + px + "pt, " + py + "pt) (Node" + i + ") {};\n"; + texString += "\\node[unionOf , text=black] at (" + leftPos + "pt, " + py + "pt) (SymbolNode" + i + ") {};\n"; + texString += "\\node[unionOf , text=black] at (" + rightPos + "pt, " + py + "pt) (SymbolNode" + i + ") {};\n"; + texString += "\\node[unionOf ,fill=none , text=black] at (" + leftPos + "pt, " + py + "pt) (SymbolNode" + i + ") {};\n"; + texString += "\\node[text=black] at (" + px + "pt, " + py + "pt) (unionText13) {$\\mathbf{\\cup}$};\n"; + texString += "\\node[font={\\fontsize{12pt}{12}\\selectfont \\sffamily }" + textColorStr + "] at (" + px + "pt, " + txtOffset + "pt) (Node_text" + i + ") {" + identifier.replaceAll("_", "\\_ ") + "};\n"; + } + // OWL DISJOINT UNION OF + if ( node.type() === "owl:disjointUnionOf" ) { + texString += "\\node[" + qType + " " + widthString + " " + bgColorStr + " " + textColorStr + "] at (" + px + "pt, " + py + "pt) (Node" + i + ") {};\n"; + texString += "\\node[unionOf , text=black] at (" + leftPos + "pt, " + py + "pt) (SymbolNode" + i + ") {};\n"; + texString += "\\node[unionOf , text=black] at (" + rightPos + "pt, " + py + "pt) (SymbolNode" + i + ") {};\n"; + texString += "\\node[unionOf ,fill=none , text=black] at (" + leftPos + "pt, " + py + "pt) (SymbolNode" + i + ") {};\n"; + texString += "\\node[font={\\fontsize{12pt}{12}\\selectfont \\sffamily }" + textColorStr + "] at (" + px + "pt, " + py + "pt) (disjointUnoinText" + i + ") {1};\n"; + texString += "\\node[font={\\fontsize{12pt}{12}\\selectfont \\sffamily }" + textColorStr + "] at (" + px + "pt, " + txtOffset + "pt) (Node_text" + i + ") {" + identifier.replaceAll("_", "\\_ ") + "};\n"; + } + // OWL COMPLEMENT OF + if ( node.type() === "owl:complementOf" ) { + // add symbol to it; + texString += "\\node[" + qType + " " + widthString + " " + bgColorStr + " " + textColorStr + "] at (" + px + "pt, " + py + "pt) (Node" + i + ") {};\n"; + texString += "\\node[unionOf , text=black] at (" + px + "pt, " + py + "pt) (SymbolNode" + i + ") {};\n"; + texString += "\\node[font={\\fontsize{18pt}{18}\\selectfont \\sffamily }" + textColorStr + "] at (" + px + "pt, " + py + "pt) (unionText13) {$\\neg$};\n"; + texString += "\\node[font={\\fontsize{12pt}{12}\\selectfont \\sffamily }" + textColorStr + "] at (" + px + "pt, " + txtOffset + "pt) (Node_text" + i + ") {" + identifier.replaceAll("_", "\\_ ") + "};\n"; + } + // OWL INTERSECTION OF + if ( node.type() === "owl:intersectionOf" ) { + texString += "\\node[" + qType + " " + widthString + " " + bgColorStr + " " + textColorStr + "] at (" + px + "pt, " + py + "pt) (Node" + i + ") {};\n"; + texString += "\\node[unionOf , text=black] at (" + leftPos + "pt, " + py + "pt) (SymbolNode" + i + ") {};\n"; + texString += "\\node[unionOf , text=black] at (" + rightPos + "pt, " + py + "pt) (SymbolNode" + i + ") {};\n"; + texString += "\\node[unionOf ,fill=none , text=black] at (" + leftPos + "pt, " + py + "pt) (SymbolNode" + i + ") {};\n"; + + // add now the outer colors; + texString += "\\filldraw[even odd rule,fill=owlClassColor,line width=1pt] (" + leftPos + "pt, " + py + "pt) circle (12.5pt) (" + rightPos + "pt, " + py + "pt) circle (12.5pt);\n "; + + // add texts + texString += "\\node[font={\\fontsize{12pt}{12}\\selectfont \\sffamily }" + textColorStr + "] at (" + px + "pt, " + py + "pt) (intersectionText" + i + ") {$\\cap$};\n"; + texString += "\\node[font={\\fontsize{12pt}{12}\\selectfont \\sffamily }" + textColorStr + "] at (" + px + "pt, " + txtOffset + "pt) (Node_text" + i + ") {" + identifier.replaceAll("_", "\\_ ") + "};\n"; + + } + + + i++; + + }); + for ( i = 0; i < propElements.length; i++ ) { + var correspondingProp = propElements[i].property(); + var p_px = propElements[i].x; + var p_py = -propElements[i].y; + identifier = correspondingProp.labelForCurrentLanguage(); + if ( identifier === undefined ) identifier = ""; + var textColorStr = ""; + if ( correspondingProp.textBlock && correspondingProp.textBlock() ) { + var txtColor = correspondingProp.textBlock()._textBlock().style("fill"); + // console.log("PropertyTextColor="+txtColor); + if ( txtColor === "rgb(0, 0, 0)" ) { + textColorStr = ", text=black"; + } + if ( txtColor === "rgb(255, 255, 255)" ) { + textColorStr = ", text=white"; + } + var tspans = correspondingProp.textBlock()._textBlock().node().children; + + // identifier=node.textBlock()._textBlock().text(); + // console.log(tspans); + if ( tspans[0] ) { + identifier = tspans[0].innerHTML; + + for ( var t = 1; t < tspans.length; t++ ) { + var spanText = tspans[t].innerHTML; + if ( spanText.indexOf("(") > -1 ) { + identifier += "\\\\ {\\small " + tspans[t].innerHTML + " }"; + } + else { + identifier += "\\\\ " + tspans[t].innerHTML; + } + } + } + else { + } + } + if ( correspondingProp.type() === "setOperatorProperty" ) { + continue; // this property does not have a label + } + var qType = "owlObjectProperty"; + if ( correspondingProp.type() === "owl:DatatypeProperty" ) { + qType = "owlDatatypeProperty"; + } + if ( correspondingProp.type() === "rdfs:subClassOf" ) { + qType = "rdfsSubClassOf"; + } + if ( correspondingProp.type() === "rdf:Property" ) { + qType = "rdfProperty"; + } + + + var bgColorStr = ""; + if ( correspondingProp.backgroundColor() ) { + // console.log("Found backGround color"); + var bgColor = correspondingProp.backgroundColor(); + //console.log(bgColor); + bgColor.toUpperCase(); + bgColor = bgColor.slice(1, bgColor.length); + texString += "\\definecolor{property" + i + "_COLOR}{HTML}{" + bgColor + "} \n "; + bgColorStr = ", fill=property" + i + "_COLOR "; + } + if ( correspondingProp.attributes().indexOf("deprecated") > -1 ) { + texString += "\\definecolor{property" + i + "_COLOR}{HTML}{CCCCCC} \n "; + bgColorStr = ", fill=property" + i + "_COLOR "; + } + + var widthString = ""; + var width = correspondingProp.textWidth(); + widthString = ",minimum width=" + width + "pt"; + + + // OWL INTERSECTION OF + if ( correspondingProp.type() === "owl:disjointWith" ) { + var leftPos = p_px - 12; + var rightPos = p_px + 12; + var txtOffset = p_py - 20; + texString += "\\node[" + qType + " " + widthString + " " + bgColorStr + " " + textColorStr + "] at (" + p_px + "pt, " + p_py + "pt) (Node" + i + ") {};\n"; + texString += "\\node[disjointWith , text=black] at (" + leftPos + "pt, " + p_py + "pt) (SymbolNode" + i + ") {};\n"; + texString += "\\node[disjointWith , text=black] at (" + rightPos + "pt, " + p_py + "pt) (SymbolNode" + i + ") {};\n"; + texString += "\\node[font={\\fontsize{12pt}{12}\\selectfont \\sffamily }" + textColorStr + "] at (" + p_px + "pt, " + txtOffset + "pt) (Node_text" + i + ") {"; + if ( graph.options().compactNotation() === false ) { + texString += "(disjoint)"; + } + texString += "};\n"; + continue; + } + + + if ( correspondingProp.inverse() ) { + var inv_correspondingProp = correspondingProp.inverse(); + // create the rendering element for the inverse property; + var inv_identifier = inv_correspondingProp.labelForCurrentLanguage(); + if ( inv_identifier === undefined ) inv_identifier = ""; + var inv_textColorStr = ""; + //console.log(inv_correspondingProp); + //console.log(inv_correspondingProp.textBlock()); + + if ( inv_correspondingProp.textBlock && inv_correspondingProp.textBlock() ) { + + var inv_txtColor = inv_correspondingProp.textBlock()._textBlock().style("fill"); + // console.log("PropertyTextColor="+inv_txtColor); + if ( inv_txtColor === "rgb(0, 0, 0)" ) { + inv_textColorStr = ", text=black"; + } + if ( inv_txtColor === "rgb(255, 255, 255)" ) { + inv_textColorStr = ", text=white"; + } + var inv_tspans = inv_correspondingProp.textBlock()._textBlock().node().children; + + // identifier=node.textBlock()._textBlock().text(); + // console.log(inv_tspans); + if ( inv_tspans[0] ) { + inv_identifier = inv_tspans[0].innerHTML; + + for ( var inv_t = 1; inv_t < inv_tspans.length; inv_t++ ) { + var ispanText = inv_tspans[inv_t].innerHTML; + if ( ispanText.indexOf("(") > -1 ) { + inv_identifier += "\\\\ {\\small " + inv_tspans[inv_t].innerHTML + " }"; + } else { + inv_identifier += "\\\\ " + inv_tspans[inv_t].innerHTML; + } + } + } + } + var inv_qType = "owlObjectProperty"; + var inv_bgColorStr = ""; + + if ( inv_correspondingProp.backgroundColor() ) { + // console.log("Found backGround color"); + var inv_bgColor = inv_correspondingProp.backgroundColor(); + // console.log(inv_bgColor); + inv_bgColor.toUpperCase(); + inv_bgColor = inv_bgColor.slice(1, inv_bgColor.length); + texString += "\\definecolor{inv_property" + i + "_COLOR}{HTML}{" + inv_bgColor + "} \n "; + inv_bgColorStr = ", fill=inv_property" + i + "_COLOR "; + } + if ( inv_correspondingProp.attributes().indexOf("deprecated") > -1 ) { + texString += "\\definecolor{inv_property" + i + "_COLOR}{HTML}{CCCCCC} \n "; + inv_bgColorStr = ", fill=inv_property" + i + "_COLOR "; + } + + var inv_widthString = ""; + var inv_width = inv_correspondingProp.textWidth(); + + var pOY1 = p_py - 14; + var pOY2 = p_py + 14; + inv_widthString = ",minimum width=" + inv_width + "pt"; + texString += "% Createing Inverse Property \n"; + texString += "\\node[" + inv_qType + " " + inv_widthString + " " + inv_bgColorStr + " " + inv_textColorStr + "] at (" + p_px + "pt, " + pOY1 + "pt) (property" + i + ") {" + inv_identifier.replaceAll("_", "\\_ ") + "};\n"; + texString += "% " + inv_qType + " vs " + qType + "\n"; + texString += "% " + inv_widthString + " vs " + widthString + "\n"; + texString += "% " + inv_bgColorStr + " vs " + bgColorStr + "\n"; + texString += "% " + inv_textColorStr + " vs " + textColorStr + "\n"; + + texString += "\\node[" + qType + " " + widthString + " " + bgColorStr + " " + textColorStr + "] at (" + p_px + "pt, " + pOY2 + "pt) (property" + i + ") {" + identifier.replaceAll("_", "\\_ ") + "};\n"; + + } else { + texString += "\\node[" + qType + " " + widthString + " " + bgColorStr + " " + textColorStr + "] at (" + p_px + "pt, " + p_py + "pt) (property" + i + ") {" + identifier.replaceAll("_", "\\_ ") + "};\n"; + } + } + + texString += "\\end{tikzpicture}\n}\n \\end{center}\n"; + + // console.log("Tex Output\n"+ texString); + var dataURI = "data:text/json;charset=utf-8," + encodeURIComponent(texString); + exportTexButton.attr("href", dataURI) + .attr("download", exportFilename + ".tex"); + + + } + + function calculateRadian( angle ){ + angle = angle % 360; + if ( angle < 0 ) { + angle = angle + 360; + } + return (Math.PI * angle) / 180; + } + + function calculateAngle( radian ){ + return radian * (180 / Math.PI); + } + + return exportMenu; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 324: +/***/ (function(module, exports) { + + /** + * Contains the logic for the export button. + * @returns {{}} + */ + module.exports = function ( graph ){ + var exportTTLModule = {}; + var resultingTTLContent = ""; + var currentNodes; + var currentProperties; + var currentAxioms; + var Map_ID2Node = {}; + var Map_ID2Prop = {}; + var prefixModule = webvowl.util.prefixTools(graph); + + exportTTLModule.requestExport = function (){ + prefixModule.updatePrefixModel(); + resultingTTLContent = ""; + currentNodes = graph.getClassDataForTtlExport(); + var i; + for ( i = 0; i < currentNodes.length; i++ ) { + Map_ID2Node[currentNodes[i].id()] = currentNodes[i]; + } + currentProperties = graph.getPropertyDataForTtlExport(); + + for ( i = 0; i < currentProperties.length; i++ ) { + Map_ID2Prop[currentProperties[i].id()] = currentProperties[i]; + } + + + prepareHeader(); + preparePrefixList(); + prepareOntologyDef(); + resultingTTLContent += "#################################################################\r\n\r\n"; + preparePrefixRepresentation(); + var property_success = exportProperties(); + var class_success = exportClasses(); + currentNodes = null; + currentProperties = null; + Map_ID2Node = {}; + Map_ID2Prop = {}; + if ( property_success === false || class_success === false ) + return false; + return true; + + }; + + function preparePrefixRepresentation(){ + var i; + var allNodes = graph.getUnfilteredData().nodes; + var allProps = graph.getUnfilteredData().properties; + for ( i = 0; i < allNodes.length; i++ ) { + var nodeIRI = prefixModule.getPrefixRepresentationForFullURI(allNodes[i].iri()); + if ( prefixModule.validURL(nodeIRI) === true ) + allNodes[i].prefixRepresentation = "<" + nodeIRI + ">"; + else + allNodes[i].prefixRepresentation = nodeIRI; + } + for ( i = 0; i < allProps.length; i++ ) { + var propIRI = prefixModule.getPrefixRepresentationForFullURI(allProps[i].iri()); + if ( prefixModule.validURL(propIRI) === true ) + allProps[i].prefixRepresentation = "<" + propIRI + ">"; + else + allProps[i].prefixRepresentation = propIRI; + } + } + + function exportProperties(){ + if ( currentProperties.length === 0 ) return; // we dont need to write that + resultingTTLContent += "### Property Definitions (Number of Property) " + currentProperties.length + " ###\r\n"; + for ( var i = 0; i < currentProperties.length; i++ ) { + + resultingTTLContent += "# --------------------------- Property " + i + "------------------------- \r\n"; + var addedElement = extractPropertyDescription(currentProperties[i]); + resultingTTLContent += addedElement; + //@ workaround for not supported elements + if ( addedElement.indexOf("WHYEMPTYNAME") !== -1 ) { + return false; + } + } + return true; + } + + + function exportClasses(){ + if ( currentNodes.length === 0 ) return; // we dont need to write that + resultingTTLContent += "### Class Definitions (Number of Classes) " + currentNodes.length + " ###\r\n"; + for ( var i = 0; i < currentNodes.length; i++ ) { + // check for node type here and return false + resultingTTLContent += "# --------------------------- Class " + i + "------------------------- \r\n"; + var addedElement = extractClassDescription(currentNodes[i]); + resultingTTLContent += addedElement; + + if ( addedElement.indexOf("WHYEMPTYNAME") !== -1 ) { + return false; + } + } + return true; + } + + function getPresentAttribute( selectedElement, element ){ + var attr = selectedElement.attributes(); + return (attr.indexOf(element) >= 0); + } + + function extractClassDescription( node ){ + var subject = node.prefixRepresentation; + var predicate = "rdf:type"; + var object = node.type(); + if ( node.type() === "owl:equivalentClass" ) + object = "owl:Class"; + if ( node.type() === "owl:disjointUnionOf" ) + object = "owl:Class"; + if ( node.type() === "owl:unionOf" ) + object = "owl:Class"; + var arrayOfNodes = []; + var arrayOfUnionNodes = []; + + if ( node.union() ) { + var union = node.union(); + for ( var u = 0; u < union.length; u++ ) { + var u_node = Map_ID2Node[union[u]]; + arrayOfUnionNodes.push(u_node); + } + } + + if ( node.disjointUnion() ) { + var distUnion = node.disjointUnion(); + for ( var du = 0; du < distUnion.length; du++ ) { + var du_node = Map_ID2Node[distUnion[du]]; + arrayOfNodes.push(du_node); + } + } + + var objectDef = subject + " " + predicate + " " + object; + if ( getPresentAttribute(node, "deprecated") === true ) { + objectDef += ", owl:DeprecatedProperty"; + } + // equivalent class handeled using type itself! + + // check for equivalent classes; + var indent = getIndent(subject); + objectDef += "; \r\n"; + for ( var e = 0; e < node.equivalents().length; e++ ) { + var eqIRI = prefixModule.getPrefixRepresentationForFullURI(node.equivalents()[e].iri()); + var eqNode_prefRepresentation = ""; + if ( prefixModule.validURL(eqIRI) === true ) + eqNode_prefRepresentation = "<" + eqIRI + ">"; + else + eqNode_prefRepresentation = eqIRI; + objectDef += indent + " owl:equivalentClass " + eqNode_prefRepresentation + " ;\r\n"; + } + + // if (getPresentAttribute(node,"equivalent")===true){ + // objectDef+=", owl:EquivalentClass"; + // } + + // add Comments + + if ( node.commentForCurrentLanguage() ) { + + objectDef += indent + " rdfs:comment \"" + node.commentForCurrentLanguage() + "\" ;\r\n"; + } + + if ( node.annotations() ) { + var annotations = node.annotations(); + for ( var an in annotations ) { + if ( annotations.hasOwnProperty(an) ) { + var anArrayObj = annotations[an]; + var anObj = anArrayObj[0]; + var an_ident = anObj.identifier; + var an_val = anObj.value; + + if ( an_ident === "isDefinedBy" ) { + objectDef += indent + " rdfs:isDefinedBy <" + an_val + "> ;\r\n"; + } + if ( an_ident === "term_status" ) { + objectDef += indent + " vs:term_status \"" + an_val + "\" ;\r\n"; + } + } + } + } + + + if ( arrayOfNodes.length > 0 ) { + // add disjoint unionOf + objectDef += indent + " owl:disjointUnionOf ("; + for ( var duE = 0; duE < arrayOfNodes.length; duE++ ) { + var duIri = prefixModule.getPrefixRepresentationForFullURI(arrayOfNodes[duE].iri()); + var duNode_prefRepresentation = ""; + if ( prefixModule.validURL(duIri) === true ) + duNode_prefRepresentation = "<" + duIri + ">"; + else + duNode_prefRepresentation = duIri; + objectDef += indent + indent + duNode_prefRepresentation + " \n"; + } + objectDef += ") ;\r\n"; + } + + if ( arrayOfUnionNodes.length > 0 ) { + // add disjoint unionOf + objectDef += indent + " rdfs:subClassOf [ rdf:type owl:Class ; \r\n"; + objectDef += indent + indent + " owl:unionOf ( "; + + for ( var uE = 0; uE < arrayOfUnionNodes.length; uE++ ) { + + if ( arrayOfUnionNodes[uE] && arrayOfUnionNodes[uE].iri() ) { + var uIri = prefixModule.getPrefixRepresentationForFullURI(arrayOfUnionNodes[uE].iri()); + var uNode_prefRepresentation = ""; + if ( prefixModule.validURL(uIri) === true ) + uNode_prefRepresentation = "<" + uIri + ">"; + else + uNode_prefRepresentation = uIri; + objectDef += indent + indent + indent + uNode_prefRepresentation + " \n"; + } + } + objectDef += ") ;\r\n"; + + + } + + + var allProps = graph.getUnfilteredData().properties; + var myProperties = []; + var i; + for ( i = 0; i < allProps.length; i++ ) { + if ( allProps[i].domain() === node && + ( allProps[i].type() === "rdfs:subClassOf" || + allProps[i].type() === "owl:allValuesFrom" || + allProps[i].type() === "owl:someValuesFrom") + ) { + myProperties.push(allProps[i]); + } + // special case disjoint with>> both domain and range get that property + if ( (allProps[i].domain() === node) && + allProps[i].type() === "owl:disjointWith" ) { + myProperties.push(allProps[i]); + } + + } + for ( i = 0; i < myProperties.length; i++ ) { + // depending on the property we have to do some things; + + // special case + if ( myProperties[i].type() === "owl:someValuesFrom" ) { + objectDef += indent + " rdfs:subClassOf [ rdf:type owl:Restriction ; \r\n"; + objectDef += indent + " owl:onProperty " + myProperties[i].prefixRepresentation + ";\r\n"; + if ( myProperties[i].range().type() !== "owl:Thing" ) { + objectDef += indent + " owl:someValuesFrom " + myProperties[i].range().prefixRepresentation + "\r\n"; + } + objectDef += indent + " ];\r\n"; + continue; + } + + if ( myProperties[i].type() === "owl:allValuesFrom" ) { + objectDef += indent + " rdfs:subClassOf [ rdf:type owl:Restriction ; \r\n"; + objectDef += indent + " owl:onProperty " + myProperties[i].prefixRepresentation + ";\r\n"; + if ( myProperties[i].range().type() !== "owl:Thing" ) { + objectDef += indent + " owl:allValuesFrom " + myProperties[i].range().prefixRepresentation + "\r\n"; + } + objectDef += indent + " ];\r\n"; + continue; + } + + if ( myProperties[i].range().type() !== "owl:Thing" ) { + objectDef += indent + " " + myProperties[i].prefixRepresentation + + " " + myProperties[i].range().prefixRepresentation + " ;\r\n"; + + + } + } + + + objectDef += general_Label_languageExtractor(indent, node.label(), "rdfs:label", true); + return objectDef; + + } + + function extractPropertyDescription( property ){ + var subject = property.prefixRepresentation; + if ( subject.length === 0 ) { + console.log("THIS SHOULD NOT HAPPEN"); + var propIRI = prefixModule.getPrefixRepresentationForFullURI(property.iri()); + console.log("FOUND " + propIRI); + + + } + var predicate = "rdf:type"; + var object = property.type(); + + var objectDef = subject + " " + predicate + " " + object; + if ( getPresentAttribute(property, "deprecated") === true ) { + objectDef += ", owl:DeprecatedProperty"; + } + if ( getPresentAttribute(property, "functional") === true ) { + objectDef += ", owl:FunctionalProperty"; + } + if ( getPresentAttribute(property, "inverse functional") === true ) { + objectDef += ", owl:InverseFunctionalProperty"; + } + if ( getPresentAttribute(property, "symmetric") === true ) { + objectDef += ", owl:SymmetricProperty"; + } + if ( getPresentAttribute(property, "transitive") === true ) { + objectDef += ", owl:TransitiveProperty"; + } + var indent = getIndent(subject); + + if ( property.inverse() ) { + objectDef += "; \r\n"; + objectDef += indent + " owl:inverseOf " + property.inverse().prefixRepresentation; + } + + // check for domain and range; + + + var closeStatement = false; + var domain = property.domain(); + var range = property.range(); + + + objectDef += " ;\r\n"; + + + if ( property.commentForCurrentLanguage() ) { + + objectDef += indent + " rdfs:comment \"" + property.commentForCurrentLanguage() + "\" ;\r\n"; + } + + if ( property.superproperties() ) { + var superProps = property.superproperties(); + for ( var sP = 0; sP < superProps.length; sP++ ) { + var sPelement = superProps[sP]; + objectDef += indent + "rdfs:subPropertyOf " + sPelement.prefixRepresentation + ";\r\n"; + } + // for (var an in annotations){ + // if (annotations.hasOwnProperty(an)){ + // var anArrayObj=annotations[an]; + // var anObj=anArrayObj[0]; + // var an_ident=anObj.identifier; + // var an_val=anObj.value; + // console.log(an_ident + " "+ an_val); + // + // if (an_ident==="isDefinedBy"){ + // objectDef+=indent+" rdfs:isDefinedBy <"+an_val+"> ;\r\n"; + // } + // if (an_ident==="term_status"){ + // objectDef+=indent+" vs:term_status \""+an_val+"\" ;\r\n"; + // } + // } + // } + + } + + if ( property.annotations() ) { + var annotations = property.annotations(); + for ( var an in annotations ) { + if ( annotations.hasOwnProperty(an) ) { + var anArrayObj = annotations[an]; + var anObj = anArrayObj[0]; + var an_ident = anObj.identifier; + var an_val = anObj.value; + + if ( an_ident === "isDefinedBy" ) { + objectDef += indent + " rdfs:isDefinedBy <" + an_val + "> ;\r\n"; + } + if ( an_ident === "term_status" ) { + objectDef += indent + " vs:term_status \"" + an_val + "\" ;\r\n"; + } + } + } + } + + + if ( domain.type() === "owl:Thing" && range.type() === "owl:Thing" ) { + // we do not write domain and range + if ( typeof property.label() !== "object" && property.label().length === 0 ) { + closeStatement = true; + } + } + + + if ( closeStatement === true ) { + var uobjectDef = objectDef.substring(0, objectDef.length - 2); + objectDef = uobjectDef + " . \r\n"; + return objectDef; + } + // objectDef+="; \r\n"; + var labelDescription; + + + if ( domain.type() === "owl:Thing" && range.type() === "owl:Thing" ) { + labelDescription = general_Label_languageExtractor(indent, property.label(), "rdfs:label", true); + objectDef += labelDescription; + } + else { + // do not close the statement; + labelDescription = general_Label_languageExtractor(indent, property.label(), "rdfs:label"); + objectDef += labelDescription; + if ( domain.type() !== "owl:Thing" ) { + objectDef += indent + " rdfs:domain " + domain.prefixRepresentation + ";\r\n"; + } + if ( range.type() !== "owl:Thing" ) { + objectDef += indent + " rdfs:range " + range.prefixRepresentation + ";\r\n"; + } + + // close statement now; + + var s_needUpdate = objectDef; + var s_lastPtr = s_needUpdate.lastIndexOf(";"); + objectDef = s_needUpdate.substring(0, s_lastPtr) + " . \r\n"; + } + + return objectDef; + + } + + + exportTTLModule.resultingTTL_Content = function (){ + return resultingTTLContent; + }; + + function getIndent( name ){ + if ( name === undefined ) { + return "WHYEMPTYNAME?"; + } + return new Array(name.length + 1).join(" "); + } + + function prepareHeader(){ + resultingTTLContent += "#################################################################\r\n"; + resultingTTLContent += "### Generated with the experimental alpha version of the TTL exporter of WebVOWL (version 1.1.7) " + + " http://visualdataweb.de/webvowl/ ###\r\n"; + resultingTTLContent += "#################################################################\r\n\r\n"; + + } + + function preparePrefixList(){ + var ontoIri = graph.options().getGeneralMetaObjectProperty('iri'); + var prefixList = graph.options().prefixList(); + var prefixDef = []; + prefixDef.push('@prefix : \t\t<' + ontoIri + '> .'); + for ( var name in prefixList ) { + if ( prefixList.hasOwnProperty(name) ) { + prefixDef.push('@prefix ' + name + ': \t\t<' + prefixList[name] + '> .'); + } + } + prefixDef.push('@base \t\t\t<' + ontoIri + '> .\r\n'); + + for ( var i = 0; i < prefixDef.length; i++ ) { + resultingTTLContent += prefixDef[i] + '\r\n'; + } + } + + function prepareOntologyDef(){ + var ontoIri = graph.options().getGeneralMetaObjectProperty('iri'); + var indent = getIndent('<' + ontoIri + '>'); + resultingTTLContent += '<' + ontoIri + '> rdf:type owl:Ontology ;\r\n' + + getOntologyTitle(indent) + + getOntologyDescription(indent) + + getOntologyVersion(indent) + + getOntologyAuthor(indent); + + // close the statement; + var s_needUpdate = resultingTTLContent; + var s_lastPtr = s_needUpdate.lastIndexOf(";"); + resultingTTLContent = s_needUpdate.substring(0, s_lastPtr) + " . \r\n"; + } + + function getOntologyTitle( indent ){ + return general_languageExtractor(indent, "title", "dc:title"); + } + + function getOntologyDescription( indent ){ + return general_languageExtractor(indent, "description", "dc:description"); + } + + function getOntologyAuthor( indent ){ + var languageElement = graph.options().getGeneralMetaObjectProperty('author'); + if ( languageElement ) { + if ( typeof languageElement !== "object" ) { + if ( languageElement.length === 0 ) + return ""; // an empty string + var aString = indent + " dc:creator " + '"' + languageElement + '";\r\n'; + return aString; + } + // we assume this thing is an array; + var authorString = indent + " dc:creator " + '"'; + for ( var i = 0; i < languageElement.length - 1; i++ ) { + authorString += languageElement[i] + ", "; + } + authorString += languageElement[languageElement.length - 1] + '";\r\n'; + return authorString; + } else { + return ""; // an empty string + } + } + + function getOntologyVersion( indent ){ + var languageElement = graph.options().getGeneralMetaObjectProperty('version'); + if ( languageElement ) { + if ( typeof languageElement !== "object" ) { + if ( languageElement.length === 0 ) + return ""; // an empty string + } + return general_languageExtractor(indent, "version", "owl:versionInfo"); + } else return ""; // an empty string + } + + function general_languageExtractor( indent, metaObjectDescription, annotationDescription, endStatement ){ + var languageElement = graph.options().getGeneralMetaObjectProperty(metaObjectDescription); + + if ( typeof languageElement === 'object' ) { + + var resultingLanguages = []; + for ( var name in languageElement ) { + if ( languageElement.hasOwnProperty(name) ) { + var content = languageElement[name]; + if ( name === "undefined" ) { + resultingLanguages.push(indent + " " + annotationDescription + ' "' + content + '"@en; \r\n'); + } + else { + resultingLanguages.push(indent + " " + annotationDescription + ' "' + content + '"@' + name + '; \r\n'); + } + } + } + // create resulting titles; + + var resultingString = ""; + for ( var i = 0; i < resultingLanguages.length; i++ ) { + resultingString += resultingLanguages[i]; + } + if ( endStatement && endStatement === true ) { + var needUpdate = resultingString; + var lastPtr = needUpdate.lastIndexOf(";"); + return needUpdate.substring(0, lastPtr) + ". \r\n"; + } else { + return resultingString; + } + + } else { + if ( endStatement && endStatement === true ) { + var s_needUpdate = indent + " " + annotationDescription + ' "' + languageElement + '"@en; \r\n'; + var s_lastPtr = s_needUpdate.lastIndexOf(";"); + return s_needUpdate.substring(0, s_lastPtr) + " . \r\n"; + } + return indent + " " + annotationDescription + ' "' + languageElement + '"@en;\r\n'; + } + } + + function general_Label_languageExtractor( indent, label, annotationDescription, endStatement ){ + var languageElement = label; + + if ( typeof languageElement === 'object' ) { + var resultingLanguages = []; + for ( var name in languageElement ) { + if ( languageElement.hasOwnProperty(name) ) { + var content = languageElement[name]; + if ( name === "undefined" ) { + resultingLanguages.push(indent + " " + annotationDescription + ' "' + content + '"@en; \r\n'); + } + else { + resultingLanguages.push(indent + " " + annotationDescription + ' "' + content + '"@' + name + '; \r\n'); + } + } + } + // create resulting titles; + var resultingString = ""; + for ( var i = 0; i < resultingLanguages.length; i++ ) { + resultingString += resultingLanguages[i]; + } + if ( endStatement && endStatement === true ) { + var needUpdate = resultingString; + var lastPtr = needUpdate.lastIndexOf(";"); + return needUpdate.substring(0, lastPtr) + " . \r\n"; + } else { + return resultingString; + } + + } else { + if ( endStatement && endStatement === true ) { + var s_needUpdate = indent + " " + annotationDescription + ' "' + languageElement + '"@en; \r\n'; + var s_lastPtr = s_needUpdate.lastIndexOf(";"); + return s_needUpdate.substring(0, s_lastPtr) + " . \r\n"; + } + return indent + " " + annotationDescription + ' "' + languageElement + '"@en; \r\n'; + } + } + + return exportTTLModule; + }; + + +/***/ }), + +/***/ 325: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains the logic for connecting the filters with the website. + * + * @param graph required for calling a refresh after a filter change + * @returns {{}} + */ + module.exports = function ( graph ){ + + var filterMenu = {}, + checkboxData = [], + menuElement = d3.select("#m_filter"), + menuControl = d3.select("#c_filter a"), + nodeDegreeContainer = d3.select("#nodeDegreeFilteringOption"), + graphDegreeLevel, + defaultDegreeValue = 0, + degreeSlider; + + filterMenu.setDefaultDegreeValue = function ( val ){ + defaultDegreeValue = val; + }; + filterMenu.getDefaultDegreeValue = function (){ + return defaultDegreeValue; + }; + + filterMenu.getGraphObject = function (){ + return graph; + }; + /** some getter function **/ + filterMenu.getCheckBoxContainer = function (){ + return checkboxData; + }; + + filterMenu.getDegreeSliderValue = function (){ + return degreeSlider.property("value"); + }; + /** + * Connects the website with graph filters. + * @param datatypeFilter filter for all datatypes + * @param objectPropertyFilter filter for all object properties + * @param subclassFilter filter for all subclasses + * @param disjointFilter filter for all disjoint with properties + * @param setOperatorFilter filter for all set operators with properties + * @param nodeDegreeFilter filters nodes by their degree + */ + filterMenu.setup = function ( datatypeFilter, objectPropertyFilter, subclassFilter, disjointFilter, setOperatorFilter, nodeDegreeFilter ){ + // TODO: is this here really necessarry? << new menu visualization style? + menuControl.on("mouseover", function (){ + var searchMenu = graph.options().searchMenu(); + searchMenu.hideSearchEntries(); + }); + menuControl.on("mouseleave", function (){ + filterMenu.highlightForDegreeSlider(false); + }); + + addFilterItem(datatypeFilter, "datatype", "Datatype properties", "#datatypeFilteringOption"); + addFilterItem(objectPropertyFilter, "objectProperty", "Object properties", "#objectPropertyFilteringOption"); + addFilterItem(subclassFilter, "subclass", "Solitary subclasses", "#subclassFilteringOption"); + addFilterItem(disjointFilter, "disjoint", "Class disjointness", "#disjointFilteringOption"); + addFilterItem(setOperatorFilter, "setoperator", "Set operators", "#setOperatorFilteringOption"); + + addNodeDegreeFilter(nodeDegreeFilter, nodeDegreeContainer); + addAnimationFinishedListener(); + }; + + + function addFilterItem( filter, identifier, pluralNameOfFilteredItems, selector ){ + var filterContainer, + filterCheckbox; + + filterContainer = d3.select(selector) + .append("div") + .classed("checkboxContainer", true); + + filterCheckbox = filterContainer.append("input") + .classed("filterCheckbox", true) + .attr("id", identifier + "FilterCheckbox") + .attr("type", "checkbox") + .property("checked", filter.enabled()); + + // Store for easier resetting + checkboxData.push({ checkbox: filterCheckbox, defaultState: filter.enabled() }); + + filterCheckbox.on("click", function ( silent ){ + // There might be no parameters passed because of a manual + // invocation when resetting the filters + var isEnabled = filterCheckbox.property("checked"); + filter.enabled(isEnabled); + if ( silent !== true ) { + // updating graph when silent is false or the parameter is not given. + graph.update(); + } + }); + + filterContainer.append("label") + .attr("for", identifier + "FilterCheckbox") + .text(pluralNameOfFilteredItems); + } + + function addNodeDegreeFilter( nodeDegreeFilter, container ){ + nodeDegreeFilter.setMaxDegreeSetter(function ( maxDegree ){ + degreeSlider.attr("max", maxDegree); + setSliderValue(degreeSlider, Math.min(maxDegree, degreeSlider.property("value"))); + }); + + nodeDegreeFilter.setDegreeGetter(function (){ + return degreeSlider.property("value"); + }); + + nodeDegreeFilter.setDegreeSetter(function ( value ){ + setSliderValue(degreeSlider, value); + }); + + var sliderContainer, + sliderValueLabel; + + sliderContainer = container.append("div") + .classed("distanceSliderContainer", true); + + degreeSlider = sliderContainer.append("input") + .attr("id", "nodeDegreeDistanceSlider") + .attr("type", "range") + .attr("min", 0) + .attr("step", 1); + + sliderContainer.append("label") + .classed("description", true) + .attr("for", "nodeDegreeDistanceSlider") + .text("Degree of collapsing"); + + sliderValueLabel = sliderContainer.append("label") + .classed("value", true) + .attr("for", "nodeDegreeDistanceSlider") + .text(0); + + + degreeSlider.on("change", function ( silent ){ + if ( silent !== true ) { + graph.update(); + graphDegreeLevel = degreeSlider.property("value"); + } + }); + + + degreeSlider.on("input", function (){ + var degree = degreeSlider.property("value"); + sliderValueLabel.text(degree); + }); + + + // adding wheel events + degreeSlider.on("wheel", handleWheelEvent); + degreeSlider.on("focusout", function (){ + if ( degreeSlider.property("value") !== graphDegreeLevel ) { + graph.update(); + } + }); + } + + function handleWheelEvent(){ + var wheelEvent = d3.event; + + var offset; + if ( wheelEvent.deltaY < 0 ) offset = 1; + if ( wheelEvent.deltaY > 0 ) offset = -1; + var maxDeg = parseInt(degreeSlider.attr("max")); + var oldVal = parseInt(degreeSlider.property("value")); + var newSliderValue = oldVal + offset; + if ( oldVal !== newSliderValue && (newSliderValue >= 0 && newSliderValue <= maxDeg) ) { + // only update when they are different [reducing redundant updates] + // set the new value and emit an update signal + degreeSlider.property("value", newSliderValue); + degreeSlider.on("input")();// <<-- sets the text value + graph.update(); + } + d3.event.preventDefault(); + } + + function setSliderValue( slider, value ){ + slider.property("value", value).on("input")(); + } + + /** + * Resets the filters (and also filtered elements) to their default. + */ + filterMenu.reset = function (){ + checkboxData.forEach(function ( checkboxData ){ + var checkbox = checkboxData.checkbox, + enabledByDefault = checkboxData.defaultState, + isChecked = checkbox.property("checked"); + + if ( isChecked !== enabledByDefault ) { + checkbox.property("checked", enabledByDefault); + // Call onclick event handlers programmatically + checkbox.on("click")(); + } + }); + + setSliderValue(degreeSlider, 0); + degreeSlider.on("change")(); + }; + + function addAnimationFinishedListener(){ + menuControl.node().addEventListener("animationend", function (){ + menuControl.classed("buttonPulse", false); + menuControl.classed("filterMenuButtonHighlight", true); + + }); + } + + filterMenu.killButtonAnimation = function (){ + menuControl.classed("buttonPulse", false); + menuControl.classed("filterMenuButtonHighlight", false); + }; + + + filterMenu.highlightForDegreeSlider = function ( enable ){ + if ( !arguments.length ) { + enable = true; + } + menuControl.classed("highlighted", enable); + nodeDegreeContainer.classed("highlighted", enable); + // pulse button handling + if ( menuControl.classed("buttonPulse") === true && enable === true ) { + menuControl.classed("buttonPulse", false); + var timer = setTimeout(function (){ + menuControl.classed("buttonPulse", enable); + clearTimeout(timer); + // after the time is done, remove the pulse but stay highlighted + }, 100); + } else { + menuControl.classed("buttonPulse", enable); + menuControl.classed("filterMenuButtonHighlight", enable); + } + }; + + + /** importer functions **/ + // setting manually the values of the filter + // no update of the gui settings, these are updated in updateSettings + filterMenu.setCheckBoxValue = function ( id, checked ){ + for ( var i = 0; i < checkboxData.length; i++ ) { + var cbdId = checkboxData[i].checkbox.attr("id"); + if ( cbdId === id ) { + checkboxData[i].checkbox.property("checked", checked); + break; + } + } + }; + + filterMenu.getCheckBoxValue = function ( id ){ + for ( var i = 0; i < checkboxData.length; i++ ) { + var cbdId = checkboxData[i].checkbox.attr("id"); + if ( cbdId === id ) { + return checkboxData[i].checkbox.property("checked"); + + } + } + }; + // set the value of the slider + filterMenu.setDegreeSliderValue = function ( val ){ + degreeSlider.property("value", val); + }; + + filterMenu.getDegreeSliderValue = function (){ + return degreeSlider.property("value"); + }; + + // update the gui without invoking graph update (calling silent onclick function) + filterMenu.updateSettings = function (){ + var silent = true; + var sliderValue = degreeSlider.property("value"); + if ( sliderValue > 0 ) { + filterMenu.highlightForDegreeSlider(true); + } else { + filterMenu.highlightForDegreeSlider(false); + } + checkboxData.forEach(function ( checkboxData ){ + var checkbox = checkboxData.checkbox; + checkbox.on("click")(silent); + }); + + degreeSlider.on("input")(); + degreeSlider.on("change")(); + + }; + + return filterMenu; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 326: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains the logic for setting up the gravity sliders. + * + * @param graph the associated webvowl graph + * @returns {{}} + */ + module.exports = function ( graph ){ + + var gravityMenu = {}, + sliders = [], + options = graph.graphOptions(), + defaultCharge = options.charge(); + + + /** + * Adds the gravity sliders to the website. + */ + gravityMenu.setup = function (){ + var menuEntry = d3.select("#m_gravity"); + menuEntry.on("mouseover", function (){ + var searchMenu = graph.options().searchMenu(); + searchMenu.hideSearchEntries(); + }); + addDistanceSlider("#classSliderOption", "class", "Class distance", options.classDistance); + addDistanceSlider("#datatypeSliderOption", "datatype", "Datatype distance", options.datatypeDistance); + }; + + function addDistanceSlider( selector, identifier, label, distanceFunction ){ + var defaultLinkDistance = distanceFunction(); + + var sliderContainer, + sliderValueLabel; + + sliderContainer = d3.select(selector) + .append("div") + .datum({ distanceFunction: distanceFunction }) // connect the options-function with the slider + .classed("distanceSliderContainer", true); + + var slider = sliderContainer.append("input") + .attr("id", identifier + "DistanceSlider") + .attr("type", "range") + .attr("min", 10) + .attr("max", 600) + .attr("value", distanceFunction()) + .attr("step", 10); + + sliderContainer.append("label") + .classed("description", true) + .attr("for", identifier + "DistanceSlider") + .text(label); + + sliderValueLabel = sliderContainer.append("label") + .classed("value", true) + .attr("for", identifier + "DistanceSlider") + .text(distanceFunction()); + + // Store slider for easier resetting + sliders.push(slider); + + slider.on("focusout", function (){ + graph.updateStyle(); + }); + + slider.on("input", function (){ + var distance = slider.property("value"); + distanceFunction(distance); + adjustCharge(defaultLinkDistance); + sliderValueLabel.text(distance); + graph.updateStyle(); + }); + + // add wheel event to the slider + slider.on("wheel", function (){ + var wheelEvent = d3.event; + var offset; + if ( wheelEvent.deltaY < 0 ) offset = 10; + if ( wheelEvent.deltaY > 0 ) offset = -10; + var oldVal = parseInt(slider.property("value")); + var newSliderValue = oldVal + offset; + if ( newSliderValue !== oldVal ) { + slider.property("value", newSliderValue); + distanceFunction(newSliderValue); + slider.on("input")(); // << set text and update the graphStyles + } + d3.event.preventDefault(); + }); + } + + function adjustCharge( defaultLinkDistance ){ + var greaterDistance = Math.max(options.classDistance(), options.datatypeDistance()), + ratio = greaterDistance / defaultLinkDistance, + newCharge = defaultCharge * ratio; + + options.charge(newCharge); + } + + /** + * Resets the gravity sliders to their default. + */ + gravityMenu.reset = function (){ + sliders.forEach(function ( slider ){ + slider.property("value", function ( d ){ + // Simply reload the distance from the options + return d.distanceFunction(); + }); + slider.on("input")(); + }); + }; + + + return gravityMenu; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 327: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains the logic for connecting the modes with the website. + * + * @param graph the graph that belongs to these controls + * @returns {{}} + */ + module.exports = function ( graph ){ + + var SAME_COLOR_MODE = { text: "Multicolor", type: "same" }; + var GRADIENT_COLOR_MODE = { text: "Multicolor", type: "gradient" }; + + var modeMenu = {}, + checkboxes = [], + colorModeSwitch; + + var dynamicLabelWidthCheckBox; + // getter and setter for the state of color modes + modeMenu.colorModeState = function ( s ){ + if ( !arguments.length ) return colorModeSwitch.datum().active; + colorModeSwitch.datum().active = s; + return modeMenu; + }; + + + modeMenu.setDynamicLabelWidth = function ( val ){ + dynamicLabelWidthCheckBox.property("checked", val); + }; + // getter for checkboxes + modeMenu.getCheckBoxContainer = function (){ + return checkboxes; + }; + // getter for the color switch [needed? ] + modeMenu.colorModeSwitch = function (){ + return colorModeSwitch; + }; + + /** + * Connects the website with the available graph modes. + */ + modeMenu.setup = function ( pickAndPin, nodeScaling, compactNotation, colorExternals ){ + var menuEntry = d3.select("#m_modes"); + menuEntry.on("mouseover", function (){ + var searchMenu = graph.options().searchMenu(); + searchMenu.hideSearchEntries(); + }); + addCheckBoxD("labelWidth", "Dynamic label width", "#dynamicLabelWidth", graph.options().dynamicLabelWidth, 1); + addCheckBox("editorMode", "Editing ", "#editMode", graph.editorMode); + addModeItem(pickAndPin, "pickandpin", "Pick & pin", "#pickAndPinOption", false); + addModeItem(nodeScaling, "nodescaling", "Node scaling", "#nodeScalingOption", true); + addModeItem(compactNotation, "compactnotation", "Compact notation", "#compactNotationOption", true); + var container = addModeItem(colorExternals, "colorexternals", "Color externals", "#colorExternalsOption", true); + colorModeSwitch = addExternalModeSelection(container, colorExternals); + }; + function addCheckBoxD( identifier, modeName, selector, onChangeFunc, updateLvl ){ + var moduleOptionContainer = d3.select(selector) + .append("div") + .classed("checkboxContainer", true); + + var moduleCheckbox = moduleOptionContainer.append("input") + .classed("moduleCheckbox", true) + .attr("id", identifier + "ModuleCheckbox") + .attr("type", "checkbox") + .property("checked", onChangeFunc()); + + moduleCheckbox.on("click", function ( d ){ + var isEnabled = moduleCheckbox.property("checked"); + onChangeFunc(isEnabled); + d3.select("#maxLabelWidthSlider").node().disabled = !isEnabled; + d3.select("#maxLabelWidthvalueLabel").classed("disabledLabelForSlider", !isEnabled); + d3.select("#maxLabelWidthDescriptionLabel").classed("disabledLabelForSlider", !isEnabled); + + if ( updateLvl > 0 ) { + graph.animateDynamicLabelWidth(); + // graph.lazyRefresh(); + } + }); + moduleOptionContainer.append("label") + .attr("for", identifier + "ModuleCheckbox") + .text(modeName); + if ( identifier === "editorMode" ) { + moduleOptionContainer.append("label") + .attr("style", "font-size:10px;padding-top:3px") + .text("(experimental)"); + } + + dynamicLabelWidthCheckBox = moduleCheckbox; + } + + function addCheckBox( identifier, modeName, selector, onChangeFunc ){ + var moduleOptionContainer = d3.select(selector) + .append("div") + .classed("checkboxContainer", true); + + var moduleCheckbox = moduleOptionContainer.append("input") + .classed("moduleCheckbox", true) + .attr("id", identifier + "ModuleCheckbox") + .attr("type", "checkbox") + .property("checked", onChangeFunc()); + + moduleCheckbox.on("click", function ( d ){ + var isEnabled = moduleCheckbox.property("checked"); + onChangeFunc(isEnabled); + if ( isEnabled === true ) + graph.showEditorHintIfNeeded(); + }); + moduleOptionContainer.append("label") + .attr("for", identifier + "ModuleCheckbox") + .text(modeName); + if ( identifier === "editorMode" ) { + moduleOptionContainer.append("label") + .attr("style", "font-size:10px;padding-top:3px") + .text(" (experimental)"); + } + } + + function addModeItem( module, identifier, modeName, selector, updateGraphOnClick ){ + var moduleOptionContainer, + moduleCheckbox; + + moduleOptionContainer = d3.select(selector) + .append("div") + .classed("checkboxContainer", true) + .datum({ module: module, defaultState: module.enabled() }); + + moduleCheckbox = moduleOptionContainer.append("input") + .classed("moduleCheckbox", true) + .attr("id", identifier + "ModuleCheckbox") + .attr("type", "checkbox") + .property("checked", module.enabled()); + + // Store for easier resetting all modes + checkboxes.push(moduleCheckbox); + + moduleCheckbox.on("click", function ( d, silent ){ + var isEnabled = moduleCheckbox.property("checked"); + d.module.enabled(isEnabled); + if ( updateGraphOnClick && silent !== true ) { + graph.executeColorExternalsModule(); + graph.executeCompactNotationModule(); + graph.lazyRefresh(); + } + }); + + moduleOptionContainer.append("label") + .attr("for", identifier + "ModuleCheckbox") + .text(modeName); + + return moduleOptionContainer; + } + + function addExternalModeSelection( container, colorExternalsMode ){ + var button = container.append("button").datum({ active: false }).classed("color-mode-switch", true); + applyColorModeSwitchState(button, colorExternalsMode); + + button.on("click", function ( silent ){ + var data = button.datum(); + data.active = !data.active; + applyColorModeSwitchState(button, colorExternalsMode); + if ( colorExternalsMode.enabled() && silent !== true ) { + graph.executeColorExternalsModule(); + graph.lazyRefresh(); + } + }); + + return button; + } + + function applyColorModeSwitchState( element, colorExternalsMode ){ + var isActive = element.datum().active; + var activeColorMode = getColorModeByState(isActive); + + element.classed("active", isActive) + .text(activeColorMode.text); + + if ( colorExternalsMode ) { + colorExternalsMode.colorModeType(activeColorMode.type); + } + } + + function getColorModeByState( isActive ){ + return isActive ? GRADIENT_COLOR_MODE : SAME_COLOR_MODE; + } + + /** + * Resets the modes to their default. + */ + modeMenu.reset = function (){ + checkboxes.forEach(function ( checkbox ){ + var defaultState = checkbox.datum().defaultState, + isChecked = checkbox.property("checked"); + + if ( isChecked !== defaultState ) { + checkbox.property("checked", defaultState); + // Call onclick event handlers programmatically + checkbox.on("click")(checkbox.datum()); + } + + // Reset the module that is connected with the checkbox + checkbox.datum().module.reset(); + }); + + // set the switch to active and simulate disabling + colorModeSwitch.datum().active = true; + colorModeSwitch.on("click")(); + }; + + /** importer functions **/ + // setting manually the values of the filter + // no update of the gui settings, these are updated in updateSettings + modeMenu.setCheckBoxValue = function ( id, checked ){ + for ( var i = 0; i < checkboxes.length; i++ ) { + var cbdId = checkboxes[i].attr("id"); + + if ( cbdId === id ) { + checkboxes[i].property("checked", checked); + break; + } + } + }; + modeMenu.getCheckBoxValue = function ( id ){ + for ( var i = 0; i < checkboxes.length; i++ ) { + var cbdId = checkboxes[i].attr("id"); + if ( cbdId === id ) { + return checkboxes[i].property("checked"); + } + } + }; + + modeMenu.setColorSwitchState = function ( state ){ + // need the !state because we simulate later a click + modeMenu.colorModeState(!state); + }; + modeMenu.setColorSwitchStateUsingURL = function ( state ){ + // need the !state because we simulate later a click + modeMenu.colorModeState(!state); + colorModeSwitch.on("click")(true); + }; + + + modeMenu.updateSettingsUsingURL = function (){ + var silent = true; + checkboxes.forEach(function ( checkbox ){ + checkbox.on("click")(checkbox.datum(), silent); + }); + }; + + modeMenu.updateSettings = function (){ + var silent = true; + checkboxes.forEach(function ( checkbox ){ + checkbox.on("click")(checkbox.datum(), silent); + }); + // this simulates onclick and inverts its state + colorModeSwitch.on("click")(silent); + }; + return modeMenu; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 328: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {module.exports = function ( graph ){ + var debugMenu = {}, + checkboxes = []; + + + var hoverFlag = false; + var specialCbx; + debugMenu.setup = function (){ + var menuEntry = d3.select("#debugMenuHref"); + + menuEntry.on("mouseover", function (){ + if ( hoverFlag === false ) { + var searchMenu = graph.options().searchMenu(); + searchMenu.hideSearchEntries(); + specialCbx.on("click")(true); + if ( graph.editorMode() === false ) { + d3.select("#useAccuracyHelper").style("color", "#979797"); + d3.select("#useAccuracyHelper").style("pointer-events", "none"); + + // regardless the state on which useAccuracyHelper is , we are not in editing mode -> disable it + d3.select("#showDraggerObject").style("color", "#979797"); + d3.select("#showDraggerObject").style("pointer-events", "none"); + } else { + d3.select("#useAccuracyHelper").style("color", "#2980b9"); + d3.select("#useAccuracyHelper").style("pointer-events", "auto"); + } + hoverFlag = true; + } + }); + menuEntry.on("mouseout", function (){ + hoverFlag = false; + }); + + + specialCbx = addCheckBox("useAccuracyHelper", "Use accuracy helper", "#useAccuracyHelper", graph.options().useAccuracyHelper, + function ( enabled, silent ){ + if ( !enabled ) { + d3.select("#showDraggerObject").style("color", "#979797"); + d3.select("#showDraggerObject").style("pointer-events", "none"); + d3.select("#showDraggerObjectConfigCheckbox").node().checked = false; + } else { + d3.select("#showDraggerObject").style("color", "#2980b9"); + d3.select("#showDraggerObject").style("pointer-events", "auto"); + } + + if ( silent === true ) return; + graph.lazyRefresh(); + graph.updateDraggerElements(); + } + ); + addCheckBox("showDraggerObject", "Show accuracy helper", "#showDraggerObject", graph.options().showDraggerObject, + function ( enabled, silent ){ + if ( silent === true ) return; + graph.lazyRefresh(); + graph.updateDraggerElements(); + }); + addCheckBox("showFPS_Statistics", "Show rendering statistics", "#showFPS_Statistics", graph.options().showRenderingStatistic, + function ( enabled, silent ){ + + if ( graph.options().getHideDebugFeatures() === false ) { + d3.select("#FPS_Statistics").classed("hidden", !enabled); + } else { + d3.select("#FPS_Statistics").classed("hidden", true); + } + + + }); + addCheckBox("showModeOfOperation", "Show input modality", "#showModeOfOperation", graph.options().showInputModality, + function ( enabled ){ + if ( graph.options().getHideDebugFeatures() === false ) { + d3.select("#modeOfOperationString").classed("hidden", !enabled); + } else { + d3.select("#modeOfOperationString").classed("hidden", true); + } + }); + + + }; + + + function addCheckBox( identifier, modeName, selector, onChangeFunc, _callbackFunction ){ + var configOptionContainer = d3.select(selector) + .append("div") + .classed("checkboxContainer", true); + var configCheckbox = configOptionContainer.append("input") + .classed("moduleCheckbox", true) + .attr("id", identifier + "ConfigCheckbox") + .attr("type", "checkbox") + .property("checked", onChangeFunc()); + + + configCheckbox.on("click", function ( silent ){ + var isEnabled = configCheckbox.property("checked"); + onChangeFunc(isEnabled); + _callbackFunction(isEnabled, silent); + + }); + checkboxes.push(configCheckbox); + configOptionContainer.append("label") + .attr("for", identifier + "ConfigCheckbox") + .text(modeName); + + return configCheckbox; + } + + debugMenu.setCheckBoxValue = function ( identifier, value ){ + for ( var i = 0; i < checkboxes.length; i++ ) { + var cbdId = checkboxes[i].attr("id"); + if ( cbdId === identifier ) { + checkboxes[i].property("checked", value); + break; + } + } + }; + + debugMenu.getCheckBoxValue = function ( id ){ + for ( var i = 0; i < checkboxes.length; i++ ) { + var cbdId = checkboxes[i].attr("id"); + if ( cbdId === id ) { + return checkboxes[i].property("checked"); + } + } + }; + + debugMenu.updateSettings = function (){ + d3.selectAll(".debugOption").classed("hidden", graph.options().getHideDebugFeatures()); + + var silent = true; + checkboxes.forEach(function ( checkbox ){ + checkbox.on("click")(silent); + }); + if ( graph.editorMode() === false ) { + + d3.select("#useAccuracyHelper").style("color", "#979797"); + d3.select("#useAccuracyHelper").style("pointer-events", "none"); + + // regardless the state on which useAccuracyHelper is , we are not in editing mode -> disable it + d3.select("#showDraggerObject").style("color", "#979797"); + d3.select("#showDraggerObject").style("pointer-events", "none"); + } else { + + d3.select("#useAccuracyHelper").style("color", "#2980b9"); + d3.select("#useAccuracyHelper").style("pointer-events", "auto"); + } + + }; + + return debugMenu; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 329: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var unescape = __webpack_require__(330); + + module.exports = function ( graph ){ + + var ontologyMenu = {}, + loadingInfo = d3.select("#loading-info"), + loadingProgress = d3.select("#loading-progress"), + + ontologyMenuTimeout, + fileToLoad, + stopTimer = false, + loadingError = false, + loadingStatusTimer, + conversion_sessionId, + cachedConversions = {}, + loadingModule, + loadOntologyFromText; + var currentLoadedOntologyName = ""; + + String.prototype.beginsWith = function ( string ){ + return (this.indexOf(string) === 0); + }; + + ontologyMenu.getLoadingFunction = function (){ + return loadOntologyFromText; + }; + + ontologyMenu.clearCachedVersion = function (){ + if ( cachedConversions[currentLoadedOntologyName] ) { + cachedConversions[currentLoadedOntologyName] = undefined; + } + }; + + + ontologyMenu.reloadCachedOntology = function (){ + ontologyMenu.clearCachedVersion(); + graph.clearGraphData(); + loadingModule.parseUrlAndLoadOntology(false); + }; + + ontologyMenu.cachedOntology = function ( ontoName ){ + currentLoadedOntologyName = ontoName; + if ( cachedConversions[ontoName] ) { + var locStr = String(location.hash); + d3.select("#reloadSvgIcon").node().disabled = false; + graph.showReloadButtonAfterLayoutOptimization(true); + if ( locStr.indexOf("#file") > -1 ) { + d3.select("#reloadSvgIcon").node().disabled = true; + d3.select("#reloadCachedOntology").node().title = "reloading original version not possible, please reload the file"; + d3.select("#reloadSvgIcon").classed("disabledReloadElement", true); + d3.select("#svgStringText").style("fill", "gray"); + d3.select("#svgStringText").classed("noselect", true); + } + else { + d3.select("#reloadCachedOntology").node().title = "generate new visualization and overwrite cached ontology"; + d3.select("#reloadSvgIcon").classed("disabledReloadElement", false); + d3.select("#svgStringText").style("fill", "black"); + d3.select("#svgStringText").classed("noselect", true); + } + } else { + graph.showReloadButtonAfterLayoutOptimization(false); + + } + return cachedConversions[ontoName]; + }; + ontologyMenu.setCachedOntology = function ( ontoName, ontoContent ){ + cachedConversions[ontoName] = ontoContent; + currentLoadedOntologyName = ontoName; + }; + + ontologyMenu.getErrorStatus = function (){ + return loadingError; + }; + + ontologyMenu.setup = function ( _loadOntologyFromText ){ + loadOntologyFromText = _loadOntologyFromText; + loadingModule = graph.options().loadingModule(); + var menuEntry = d3.select("#m_select"); + menuEntry.on("mouseover", function (){ + var searchMenu = graph.options().searchMenu(); + searchMenu.hideSearchEntries(); + }); + + setupConverterButtons(); + setupUploadButton(); + + var descriptionButton = d3.select("#error-description-button").datum({ open: false }); + descriptionButton.on("click", function ( data ){ + var errorContainer = d3.select("#error-description-container"); + var errorDetailsButton = d3.select(this); + + // toggle the state + data.open = !data.open; + var descriptionVisible = data.open; + if ( descriptionVisible ) { + errorDetailsButton.text("Hide error details"); + } else { + errorDetailsButton.text("Show error details"); + } + errorContainer.classed("hidden", !descriptionVisible); + }); + + setupUriListener(); + loadingModule.setOntologyMenu(ontologyMenu); + }; + + + function setupUriListener(){ + // reload ontology when hash parameter gets changed manually + d3.select(window).on("hashchange", function (){ + var oldURL = d3.event.oldURL, newURL = d3.event.newURL; + if ( oldURL !== newURL ) { + // don't reload when just the hash parameter gets appended + if ( newURL === oldURL + "#" ) { + return; + } + updateNavigationHrefs(); + loadingModule.parseUrlAndLoadOntology(); + } + }); + updateNavigationHrefs(); + } + + ontologyMenu.stopLoadingTimer = function (){ + stopTimer = true; + clearTimeout(loadingStatusTimer); + }; + + /** + * Quick fix: update all anchor tags that are used as buttons because a click on them + * changes the url and this will load an other ontology. + */ + function updateNavigationHrefs(){ + d3.selectAll("#menuElementContainer > li > a").attr("href", location.hash || "#"); + } + + ontologyMenu.setIriText = function ( text ){ + d3.select("#iri-converter-input").node().value = text; + d3.select("#iri-converter-button").attr("disabled", false); + d3.select("#iri-converter-form").on("submit")(); + }; + + ontologyMenu.clearDetailInformation = function (){ + var bpContainer = d3.select("#bulletPoint_container"); + var htmlCollection = bpContainer.node().children; + var numEntries = htmlCollection.length; + + for ( var i = 0; i < numEntries; i++ ) { + htmlCollection[0].remove(); + } + }; + ontologyMenu.append_message = function ( msg ){ + // forward call + append_message(msg); + }; + function append_message( msg ){ + var bpContainer = d3.select("#bulletPoint_container"); + var div = bpContainer.append("div"); + div.node().innerHTML = msg; + loadingModule.scrollDownDetails(); + } + + ontologyMenu.append_message_toLastBulletPoint = function ( msg ){ + // forward call + append_message_toLastBulletPoint(msg); + }; + + ontologyMenu.append_bulletPoint = function ( msg ){ + // forward call + append_bulletPoint(msg); + }; + function append_message_toLastBulletPoint( msg ){ + var bpContainer = d3.select("#bulletPoint_container"); + var htmlCollection = bpContainer.node().getElementsByTagName("LI"); + var lastItem = htmlCollection.length - 1; + if ( lastItem >= 0 ) { + var oldText = htmlCollection[lastItem].innerHTML; + htmlCollection[lastItem].innerHTML = oldText + msg; + } + loadingModule.scrollDownDetails(); + } + + function append_bulletPoint( msg ){ + var bp_container = d3.select("#bulletPoint_container"); + var bp = bp_container.append("li"); + bp.node().innerHTML = msg; + d3.select("#currentLoadingStep").node().innerHTML = msg; + loadingModule.scrollDownDetails(); + } + + + function setupConverterButtons(){ + var iriConverterButton = d3.select("#iri-converter-button"); + var iriConverterInput = d3.select("#iri-converter-input"); + + iriConverterInput.on("input", function (){ + keepOntologySelectionOpenShortly(); + + var inputIsEmpty = iriConverterInput.property("value") === ""; + iriConverterButton.attr("disabled", inputIsEmpty || undefined); + }).on("click", function (){ + keepOntologySelectionOpenShortly(); + }); + + d3.select("#iri-converter-form").on("submit", function (){ + var inputName = iriConverterInput.property("value"); + + // remove first spaces + var clearedName = inputName.replace(/%20/g, " "); + while ( clearedName.beginsWith(" ") ) { + clearedName = clearedName.substr(1, clearedName.length); + } + // remove ending spaces + while ( clearedName.endsWith(" ") ) { + clearedName = clearedName.substr(0, clearedName.length - 1); + } + // check if iri is actually an url for a json file (ends with .json) + // create lowercase filenames; + inputName = clearedName; + var lc_iri = inputName.toLowerCase(); + if ( lc_iri.endsWith(".json") ) { + location.hash = "url=" + inputName; + iriConverterInput.property("value", ""); + iriConverterInput.on("input")(); + } else { + location.hash = "iri=" + inputName; + iriConverterInput.property("value", ""); + iriConverterInput.on("input")(); + } + d3.event.preventDefault(); + return false; + }); + } + + function setupUploadButton(){ + var input = d3.select("#file-converter-input"), + inputLabel = d3.select("#file-converter-label"), + uploadButton = d3.select("#file-converter-button"); + + input.on("change", function (){ + var selectedFiles = input.property("files"); + if ( selectedFiles.length <= 0 ) { + inputLabel.text("Select ontology file"); + uploadButton.property("disabled", true); + } else { + inputLabel.text(selectedFiles[0].name); + fileToLoad = selectedFiles[0].name; + uploadButton.property("disabled", false); + uploadButton.node().click(); + // close menu; + graph.options().navigationMenu().hideAllMenus(); + } + }); + + uploadButton.on("click", function (){ + var selectedFile = input.property("files")[0]; + if ( !selectedFile ) { + return false; + } + var newHashParameter = "file=" + selectedFile.name; + // Trigger the reupload manually, because the iri is not changing + if ( location.hash === "#" + newHashParameter ) { + loadingModule.parseUrlAndLoadOntology(); + } else { + location.hash = newHashParameter; + } + }); + } + + function setLoadingStatusInfo( message ){ + // check if there is a owl2vowl li item; + var o2vConverterContainer = d3.select("#o2vConverterContainer"); + if ( !o2vConverterContainer.node() ) { + var bp_container = d3.select("#bulletPoint_container"); + var div = bp_container.append("div"); + o2vConverterContainer = div.append("ul"); + o2vConverterContainer.attr("id", "o2vConverterContainer"); + o2vConverterContainer.style("margin-left", "-25px"); + } + // clear o2vConverterContainer; + var htmlCollection = o2vConverterContainer.node().children; + var numEntries = htmlCollection.length; + for ( var i = 0; i < numEntries; i++ ) { + htmlCollection[0].remove(); + } + // split tokens provided by o2v messages + var tokens = message.split("* "); + var liForToken; + for ( var t = 0; t < tokens.length; t++ ) { + var tokenMessage = tokens[t]; + // create li for tokens; + if ( tokenMessage.length > 0 ) { + liForToken = o2vConverterContainer.append("li"); + liForToken.attr("type", "disc"); + liForToken.node().innerHTML = tokenMessage.replace(/\n/g, "
    "); + } + } + if ( liForToken ) + liForToken.node().innerHTML += "
    "; + + loadingModule.scrollDownDetails(); + } + + ontologyMenu.setLoadingStatusInfo = function ( message ){ + // forward call + setLoadingStatusInfo(message); + }; + + function getLoadingStatusOnceCallBacked( callback, parameter ){ + d3.xhr("loadingStatus?sessionId=" + conversion_sessionId, "application/text", function ( error, request ){ + if ( error ) { + console.log("ontologyMenu getLoadingStatusOnceCallBacked throws error"); + console.log("---------Error -----------"); + console.log(error); + console.log("---------Request -----------"); + console.log(request); + } + setLoadingStatusInfo(request.responseText); + callback(parameter); + }); + } + + function getLoadingStatusTimeLooped(){ + d3.xhr("loadingStatus?sessionId=" + conversion_sessionId, "application/text", function ( error, request ){ + if ( error ) { + console.log("ontologyMenu getLoadingStatusTimeLooped throws error"); + console.log("---------Error -----------"); + console.log(error); + console.log("---------Request -----------"); + console.log(request); + } + if ( stopTimer === false ) { + setLoadingStatusInfo(request.responseText); + timedLoadingStatusLogger(); + } + }); + } + + function timedLoadingStatusLogger(){ + clearTimeout(loadingStatusTimer); + if ( stopTimer === false ) { + loadingStatusTimer = setTimeout(function (){ + getLoadingStatusTimeLooped(); + }, 1000); + } + } + + function callbackUpdateLoadingMessage( msg ){ + d3.xhr("loadingStatus", "application/text", function ( error, request ){ + if ( request !== undefined ) { + setLoadingStatusInfo(request.responseText + "
    " + msg); + } else { + append_message(msg); + } + }); + } + + ontologyMenu.setConversionID = function ( id ){ + conversion_sessionId = id; + }; + + ontologyMenu.callbackLoad_Ontology_FromIRI = function ( parameter ){ + var relativePath = parameter[0]; + var ontoName = parameter[1]; + var localThreadId = parameter[2]; + stopTimer = false; + timedLoadingStatusLogger(); + d3.xhr(relativePath, "application/json", function ( error, request ){ + var loadingSuccessful = !error; + // check if error occurred or responseText is empty + if ( (error !== null && error.status === 500) || (request && request.responseText.length === 0) ) { + clearTimeout(loadingStatusTimer); + stopTimer = true; + getLoadingStatusOnceCallBacked(callbackFromIRI_URL_ERROR, [error, request, localThreadId]); + } + var jsonText; + if ( loadingSuccessful ) { + clearTimeout(loadingStatusTimer); + stopTimer = true; + jsonText = request.responseText; + getLoadingStatusOnceCallBacked(callbackFromIRI_Success, [jsonText, ontoName, localThreadId]); + } + }); + }; + + + ontologyMenu.callbackLoad_Ontology_From_DirectInput = function ( text, parameter ){ + var input = text; + var sessionId = parameter[1]; + stopTimer = false; + timedLoadingStatusLogger(); + + var formData = new FormData(); + formData.append("input", input); + formData.append("sessionId", sessionId); + var xhr = new XMLHttpRequest(); + + xhr.open("POST", "directInput", true); + xhr.onload = function (){ + clearTimeout(loadingStatusTimer); + stopTimer = true; + getLoadingStatusOnceCallBacked(callbackForConvert, [xhr, input, sessionId]); + }; + timedLoadingStatusLogger(); + xhr.send(formData); + + }; + function callbackFromIRI_Success( parameter ){ + var local_conversionId = parameter[2]; + if ( local_conversionId !== conversion_sessionId ) { + console.log("The conversion process for file:" + parameter[1] + " has been canceled!"); + ontologyMenu.conversionFinished(local_conversionId); + return; + } + loadingModule.loadFromOWL2VOWL(parameter[0], parameter[1]); + ontologyMenu.conversionFinished(); + + } + + function callbackFromDirectInput_Success( parameter ){ + var local_conversionId = parameter[1]; + if ( local_conversionId !== conversion_sessionId ) { + console.log("The conversion process for file:" + parameter[1] + " has been canceled!"); + ontologyMenu.conversionFinished(local_conversionId); + return; + } + loadingModule.loadFromOWL2VOWL(parameter[0], "DirectInputConversionID" + local_conversionId); + ontologyMenu.conversionFinished(); + + } + + ontologyMenu.getConversionId = function (){ + return conversion_sessionId; + }; + + ontologyMenu.callbackLoad_JSON_FromURL = function ( parameter ){ + var relativePath = parameter[0]; + var ontoName = parameter[1]; + var local_conversionId = parameter[2]; + stopTimer = false; + timedLoadingStatusLogger(); + d3.xhr(relativePath, "application/json", function ( error, request ){ + var loadingSuccessful = !error; + // check if error occurred or responseText is empty + if ( (error !== null && error.status === 500) || (request && request.responseText.length === 0) ) { + clearTimeout(loadingStatusTimer); + stopTimer = true; + loadingSuccessful = false; + console.log(request); + console.log(request.responseText.length); + getLoadingStatusOnceCallBacked(callbackFromJSON_URL_ERROR, [error, request, local_conversionId]); + } + if ( loadingSuccessful ) { + clearTimeout(loadingStatusTimer); + stopTimer = true; + var jsonText = request.responseText; + getLoadingStatusOnceCallBacked(callbackFromJSON_Success, [jsonText, ontoName, local_conversionId]); + } + }); + }; + + function callbackFromJSON_Success( parameter ){ + var local_conversionId = parameter[2]; + if ( local_conversionId !== conversion_sessionId ) { + console.log("The conversion process for file:" + parameter[1] + " has been canceled!"); + return; + } + loadingModule.loadFromOWL2VOWL(parameter[0], parameter[1]); + } + + function callbackFromJSON_URL_ERROR( parameter ){ + var error = parameter[0]; + var request = parameter[1]; + var local_conversionId = parameter[2]; + if ( local_conversionId !== conversion_sessionId ) { + console.log("This thread has been canceled!!"); + ontologyMenu.conversionFinished(local_conversionId); + return; + } + callbackUpdateLoadingMessage("
    Failed to convert the file. " + + " Ontology could not be loaded.
    Is it a valid OWL ontology? Please check with OWL Validator"); + + if ( error !== null && error.status === 500 ) { + append_message("Could not find ontology at the URL"); + } + if ( request && request.responseText.length === 0 ) { + append_message("Received empty graph"); + } + graph.handleOnLoadingError(); + ontologyMenu.conversionFinished(); + } + + + function callbackFromIRI_URL_ERROR( parameter ){ + var error = parameter[0]; + var request = parameter[1]; + var local_conversionId = parameter[2]; + if ( local_conversionId !== conversion_sessionId ) { + console.log("This thread has been canceled!!"); + ontologyMenu.conversionFinished(local_conversionId); + return; + } + callbackUpdateLoadingMessage("
    Failed to convert the file. " + + " Ontology could not be loaded.
    Is it a valid OWL ontology? Please check with OWL Validator"); + + if ( error !== null && error.status === 500 ) { + append_message("Could not find ontology at the URL"); + } + if ( request && request.responseText.length === 0 ) { + append_message("Received empty graph"); + } + graph.handleOnLoadingError(); + ontologyMenu.conversionFinished(); + } + + function callbackFromDirectInput_ERROR( parameter ){ + + var error = parameter[0]; + var request = parameter[1]; + var local_conversionId = parameter[2]; + if ( local_conversionId !== conversion_sessionId ) { + console.log("The loading process for direct input has been canceled!"); + return; + } + // callbackUpdateLoadingMessage("
    Failed to convert the file. "+ + // "Ontology could not be loaded.
    Is it a valid OWL ontology? Please check with OWL Validator"); + if ( error !== null && error.status === 500 ) { + append_message("Could not convert direct input"); + } + if ( request && request.responseText.length === 0 ) { + append_message("Received empty graph"); + } + + graph.handleOnLoadingError(); + ontologyMenu.conversionFinished(); + } + + ontologyMenu.callbackLoadFromOntology = function ( selectedFile, filename, local_threadId ){ + callbackLoadFromOntology(selectedFile, filename, local_threadId); + }; + + function callbackLoadFromOntology( selectedFile, filename, local_threadId ){ + stopTimer = false; + timedLoadingStatusLogger(); + + var formData = new FormData(); + formData.append("ontology", selectedFile); + formData.append("sessionId", local_threadId); + var xhr = new XMLHttpRequest(); + + xhr.open("POST", "convert", true); + xhr.onload = function (){ + clearTimeout(loadingStatusTimer); + stopTimer = true; + console.log(xhr); + getLoadingStatusOnceCallBacked(callbackForConvert, [xhr, filename, local_threadId]); + }; + timedLoadingStatusLogger(); + xhr.send(formData); + } + + function callbackForConvert( parameter ){ + var xhr = parameter[0]; + var filename = parameter[1]; + var local_threadId = parameter[2]; + if ( local_threadId !== conversion_sessionId ) { + console.log("The conversion process for file:" + filename + " has been canceled!"); + ontologyMenu.conversionFinished(local_threadId); + return; + } + if ( xhr.status === 200 ) { + loadingModule.loadFromOWL2VOWL(xhr.responseText, filename); + ontologyMenu.conversionFinished(); + } else { + var uglyJson=xhr.responseText; + var jsonResut=JSON.parse(uglyJson); + var niceJSON=JSON.stringify(jsonResut, 'null', ' '); + niceJSON= niceJSON.replace(new RegExp('\r?\n','g'), '
    '); + callbackUpdateLoadingMessage("Failed to convert the file. " + + "
    Server answer:
    "+ + "
    "+niceJSON+ "
    "+ + "Ontology could not be loaded.
    Is it a valid OWL ontology? Please check with OWL Validator"); + + graph.handleOnLoadingError(); + ontologyMenu.conversionFinished(); + } + } + + ontologyMenu.conversionFinished = function ( id ){ + var local_id = conversion_sessionId; + if ( id ) { + local_id = id; + } + d3.xhr("conversionDone?sessionId=" + local_id, "application/text", function ( error, request ){ + if ( error ) { + console.log("ontologyMenu conversionFinished throws error"); + console.log("---------Error -----------"); + console.log(error); + console.log("---------Request -----------"); + console.log(request); + } + }); + }; + + function keepOntologySelectionOpenShortly(){ + // Events in the menu should not be considered + var ontologySelection = d3.select("#select .toolTipMenu"); + ontologySelection.on("click", function (){ + d3.event.stopPropagation(); + }).on("keydown", function (){ + d3.event.stopPropagation(); + }); + + ontologySelection.style("display", "block"); + + function disableKeepingOpen(){ + ontologySelection.style("display", undefined); + + clearTimeout(ontologyMenuTimeout); + d3.select(window).on("click", undefined).on("keydown", undefined); + ontologySelection.on("mouseover", undefined); + } + + // Clear the timeout to handle fast calls of this function + clearTimeout(ontologyMenuTimeout); + ontologyMenuTimeout = setTimeout(function (){ + disableKeepingOpen(); + }, 3000); + + // Disable forced open selection on interaction + d3.select(window).on("click", function (){ + disableKeepingOpen(); + }).on("keydown", function (){ + disableKeepingOpen(); + }); + + ontologySelection.on("mouseover", function (){ + disableKeepingOpen(); + }); + } + + ontologyMenu.showLoadingStatus = function ( visible ){ + if ( visible === true ) { + displayLoadingIndicators(); + } + else { + hideLoadingInformations(); + } + }; + + function displayLoadingIndicators(){ + d3.select("#layoutLoadingProgressBarContainer").classed("hidden", false); + loadingInfo.classed("hidden", false); + loadingProgress.classed("hidden", false); + } + + function hideLoadingInformations(){ + loadingInfo.classed("hidden", true); + } + + return ontologyMenu; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 330: +/***/ (function(module, exports, __webpack_require__) { + + var toString = __webpack_require__(219), + unescapeHtmlChar = __webpack_require__(331); + + /** Used to match HTML entities and HTML characters. */ + var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g, + reHasEscapedHtml = RegExp(reEscapedHtml.source); + + /** + * The inverse of `_.escape`; this method converts the HTML entities + * `&`, `<`, `>`, `"`, and `'` in `string` to + * their corresponding characters. + * + * **Note:** No other HTML entities are unescaped. To unescape additional + * HTML entities use a third-party library like [_he_](https://mths.be/he). + * + * @static + * @memberOf _ + * @since 0.6.0 + * @category String + * @param {string} [string=''] The string to unescape. + * @returns {string} Returns the unescaped string. + * @example + * + * _.unescape('fred, barney, & pebbles'); + * // => 'fred, barney, & pebbles' + */ + function unescape(string) { + string = toString(string); + return (string && reHasEscapedHtml.test(string)) + ? string.replace(reEscapedHtml, unescapeHtmlChar) + : string; + } + + module.exports = unescape; + + +/***/ }), + +/***/ 331: +/***/ (function(module, exports, __webpack_require__) { + + var basePropertyOf = __webpack_require__(332); + + /** Used to map HTML entities to characters. */ + var htmlUnescapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + ''': "'" + }; + + /** + * Used by `_.unescape` to convert HTML entities to characters. + * + * @private + * @param {string} chr The matched character to unescape. + * @returns {string} Returns the unescaped character. + */ + var unescapeHtmlChar = basePropertyOf(htmlUnescapes); + + module.exports = unescapeHtmlChar; + + +/***/ }), + +/***/ 332: +/***/ (function(module, exports) { + + /** + * The base implementation of `_.propertyOf` without support for deep paths. + * + * @private + * @param {Object} object The object to query. + * @returns {Function} Returns the new accessor function. + */ + function basePropertyOf(object) { + return function(key) { + return object == null ? undefined : object[key]; + }; + } + + module.exports = basePropertyOf; + + +/***/ }), + +/***/ 333: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains the logic for the pause and resume button. + * + * @param graph the associated webvowl graph + * @returns {{}} + */ + module.exports = function ( graph ){ + + var pauseMenu = {}, + pauseButton; + + + /** + * Adds the pause button to the website. + */ + pauseMenu.setup = function (){ + var menuEntry = d3.select("#pauseOption"); + menuEntry.on("mouseover", function (){ + var searchMenu = graph.options().searchMenu(); + searchMenu.hideSearchEntries(); + }); + pauseButton = d3.select("#pause-button") + .datum({ paused: false }) + .on("click", function ( d ){ + graph.paused(!d.paused); + d.paused = !d.paused; + updatePauseButton(); + pauseButton.classed("highlighted", d.paused); + }); + // Set these properties the first time manually + updatePauseButton(); + }; + + pauseMenu.setPauseValue = function ( value ){ + pauseButton.datum().paused = value; + graph.paused(value); + pauseButton.classed("highlighted", value); + updatePauseButton(); + }; + + function updatePauseButton(){ + updatePauseButtonClass(); + updatePauseButtonText(); + } + + function updatePauseButtonClass(){ + pauseButton.classed("paused", function ( d ){ + return d.paused; + }); + } + + function updatePauseButtonText(){ + if ( pauseButton.datum().paused ) { + pauseButton.text("Resume"); + } else { + pauseButton.text("Pause"); + } + } + + pauseMenu.reset = function (){ + // resuming + pauseMenu.setPauseValue(false); + }; + + + return pauseMenu; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 334: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains the logic for the reset button. + * + * @param graph the associated webvowl graph + * @returns {{}} + */ + module.exports = function ( graph ){ + + var resetMenu = {}, + options = graph.graphOptions(), + resettableModules, + untouchedOptions = webvowl.options(); + + + /** + * Adds the reset button to the website. + * @param _resettableModules modules that can be resetted + */ + resetMenu.setup = function ( _resettableModules ){ + resettableModules = _resettableModules; + d3.select("#reset-button").on("click", resetGraph); + var menuEntry = d3.select("#resetOption"); + menuEntry.on("mouseover", function (){ + var searchMenu = graph.options().searchMenu(); + searchMenu.hideSearchEntries(); + }); + }; + + function resetGraph(){ + graph.resetSearchHighlight(); + graph.options().searchMenu().clearText(); + options.classDistance(untouchedOptions.classDistance()); + options.datatypeDistance(untouchedOptions.datatypeDistance()); + options.charge(untouchedOptions.charge()); + options.gravity(untouchedOptions.gravity()); + options.linkStrength(untouchedOptions.linkStrength()); + graph.reset(); + + resettableModules.forEach(function ( module ){ + module.reset(); + }); + + graph.updateStyle(); + } + + + return resetMenu; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 335: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains the search "engine" + * + * @param graph the associated webvowl graph + * @returns {{}} + */ + module.exports = function ( graph ){ + var searchMenu = {}, + dictionary = [], + entryNames = [], + searchLineEdit, + mergedStringsList, + mergedIdList, + maxEntries = 6, + dictionaryUpdateRequired = true, + labelDictionary, + inputText, + viewStatusOfSearchEntries = false; + + var results = []; + var resultID = []; + var c_locate = d3.select("#locateSearchResult"); + var c_search = d3.select("#c_search"); + var m_search = d3.select("#m_search"); // << dropdown container; + + + String.prototype.beginsWith = function ( string ){ + return (this.indexOf(string) === 0); + }; + + searchMenu.requestDictionaryUpdate = function (){ + dictionaryUpdateRequired = true; + // clear possible pre searched entries + var htmlCollection = m_search.node().children; + var numEntries = htmlCollection.length; + + for ( var i = 0; i < numEntries; i++ ) + htmlCollection[0].remove(); + searchLineEdit.node().value = ""; + }; + + + function updateSearchDictionary(){ + labelDictionary = graph.getUpdateDictionary(); + dictionaryUpdateRequired = false; + dictionary = []; + entryNames = []; + var idList = []; + var stringList = []; + + var i; + for ( i = 0; i < labelDictionary.length; i++ ) { + var lEntry = labelDictionary[i].labelForCurrentLanguage(); + idList.push(labelDictionary[i].id()); + stringList.push(lEntry); + // add all equivalents to the search space; + if ( labelDictionary[i].equivalents && labelDictionary[i].equivalents().length > 0 ) { + var eqs = labelDictionary[i].equivalentsString(); + var eqsLabels = eqs.split(", "); + for ( var e = 0; e < eqsLabels.length; e++ ) { + idList.push(labelDictionary[i].id()); + stringList.push(eqsLabels[e]); + } + } + } + + mergedStringsList = []; + mergedIdList = []; + var indexInStringList = -1; + var currentString; + var currentObjectId; + + for ( i = 0; i < stringList.length; i++ ) { + if ( i === 0 ) { + // just add the elements + mergedStringsList.push(stringList[i]); + mergedIdList.push([]); + mergedIdList[0].push(idList[i]); + continue; + } + else { + currentString = stringList[i]; + currentObjectId = idList[i]; + indexInStringList = mergedStringsList.indexOf(currentString); + } + if ( indexInStringList === -1 ) { + mergedStringsList.push(stringList[i]); + mergedIdList.push([]); + var lastEntry = mergedIdList.length; + mergedIdList[lastEntry - 1].push(currentObjectId); + } else { + mergedIdList[indexInStringList].push(currentObjectId); + } + } + + for ( i = 0; i < mergedStringsList.length; i++ ) { + var aString = mergedStringsList[i]; + var correspondingIdList = mergedIdList[i]; + var idListResult = "[ "; + for ( var j = 0; j < correspondingIdList.length; j++ ) { + idListResult = idListResult + correspondingIdList[j].toString(); + idListResult = idListResult + ", "; + } + idListResult = idListResult.substring(0, idListResult.length - 2); + idListResult = idListResult + " ]"; + + dictionary.push(aString); + entryNames.push(aString); + } + } + + searchMenu.setup = function (){ + // clear dictionary; + dictionary = []; + searchLineEdit = d3.select("#search-input-text"); + searchLineEdit.on("input", userInput); + searchLineEdit.on("keydown", userNavigation); + searchLineEdit.on("click", toggleSearchEntryView); + searchLineEdit.on("mouseover", hoverSearchEntryView); + + c_locate.on("click", function (){ + graph.locateSearchResult(); + }); + + c_locate.on("mouseover", function (){ + searchMenu.hideSearchEntries(); + }); + + }; + + function hoverSearchEntryView(){ + updateSelectionStatusFlags(); + searchMenu.showSearchEntries(); + } + + function toggleSearchEntryView(){ + if ( viewStatusOfSearchEntries ) { + searchMenu.hideSearchEntries(); + } else { + searchMenu.showSearchEntries(); + } + } + + searchMenu.hideSearchEntries = function (){ + m_search.style("display", "none"); + viewStatusOfSearchEntries = false; + }; + + searchMenu.showSearchEntries = function (){ + m_search.style("display", "block"); + viewStatusOfSearchEntries = true; + }; + + function ValidURL( str ){ + var urlregex = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/; + return urlregex.test(str); + + } + + + function updateSelectionStatusFlags(){ + if ( searchLineEdit.node().value.length === 0 ) { + createSearchEntries(); + return; + } + handleAutoCompletion(); + } + + function userNavigation(){ + if ( dictionaryUpdateRequired ) { + updateSearchDictionary(); + } + + var htmlCollection = m_search.node().children; + var numEntries = htmlCollection.length; + + + var move = 0; + var i; + var selectedEntry = -1; + for ( i = 0; i < numEntries; i++ ) { + var atr = htmlCollection[i].getAttribute('class'); + if ( atr === "dbEntrySelected" ) { + selectedEntry = i; + } + } + if ( d3.event.keyCode === 13 ) { + if ( selectedEntry >= 0 && selectedEntry < numEntries ) { + // simulate onClick event + htmlCollection[selectedEntry].onclick(); + searchMenu.hideSearchEntries(); + } + else if ( numEntries === 0 ) { + inputText = searchLineEdit.node().value; + // check if input text ends or begins with with space + // remove first spaces + var clearedText = inputText.replace(/%20/g, " "); + while ( clearedText.beginsWith(" ") ) { + clearedText = clearedText.substr(1, clearedText.length); + } + // remove ending spaces + while ( clearedText.endsWith(" ") ) { + clearedText = clearedText.substr(0, clearedText.length - 1); + } + var iri = clearedText.replace(/ /g, "%20"); + + var valid = ValidURL(iri); + // validate url: + if ( valid ) { + var ontM = graph.options().ontologyMenu(); + ontM.setIriText(iri); + searchLineEdit.node().value = ""; + } + else { + console.log(iri + " is not a valid URL!"); + } + } + } + if ( d3.event.keyCode === 38 ) { + move = -1; + searchMenu.showSearchEntries(); + } + if ( d3.event.keyCode === 40 ) { + move = +1; + searchMenu.showSearchEntries(); + } + + var newSelection = selectedEntry + move; + if ( newSelection !== selectedEntry ) { + + if ( newSelection < 0 && selectedEntry <= 0 ) { + htmlCollection[0].setAttribute('class', "dbEntrySelected"); + } + + if ( newSelection >= numEntries ) { + htmlCollection[selectedEntry].setAttribute('class', "dbEntrySelected"); + } + if ( newSelection >= 0 && newSelection < numEntries ) { + htmlCollection[newSelection].setAttribute('class', "dbEntrySelected"); + if ( selectedEntry >= 0 ) + htmlCollection[selectedEntry].setAttribute('class', "dbEntry"); + } + } + } + + searchMenu.getSearchString = function (){ + return searchLineEdit.node().value; + }; + + + function clearSearchEntries(){ + var htmlCollection = m_search.node().children; + var numEntries = htmlCollection.length; + for ( var i = 0; i < numEntries; i++ ) { + htmlCollection[0].remove(); + } + results = []; + resultID = []; + + } + + function createSearchEntries(){ + inputText = searchLineEdit.node().value; + var i; + var lc_text = inputText.toLowerCase(); + var token; + + for ( i = 0; i < dictionary.length; i++ ) { + var tokenElement = dictionary[i]; + if ( tokenElement === undefined ) { + //@WORKAROUND : nodes with undefined labels are skipped + //@FIX: these nodes are now not added to the dictionary + continue; + } + token = dictionary[i].toLowerCase(); + if ( token.indexOf(lc_text) > -1 ) { + results.push(dictionary[i]); + resultID.push(i); + } + } + } + + function measureTextWidth( text, textStyle ){ + // Set a default value + if ( !textStyle ) { + textStyle = "text"; + } + var d = d3.select("body") + .append("div") + .attr("class", textStyle) + .attr("id", "width-test") // tag this element to identify it + .attr("style", "position:absolute; float:left; white-space:nowrap; visibility:hidden;") + .text(text), + w = document.getElementById("width-test").offsetWidth; + d.remove(); + return w; + } + + function cropText( input ){ + var maxWidth = 250; + var textStyle = "dbEntry"; + var truncatedText = input; + var textWidth; + var ratio; + var newTruncatedTextLength; + while ( true ) { + textWidth = measureTextWidth(truncatedText, textStyle); + if ( textWidth <= maxWidth ) { + break; + } + + ratio = textWidth / maxWidth; + newTruncatedTextLength = Math.floor(truncatedText.length / ratio); + + // detect if nothing changes + if ( truncatedText.length === newTruncatedTextLength ) { + break; + } + + truncatedText = truncatedText.substring(0, newTruncatedTextLength); + } + + if ( input.length > truncatedText.length ) { + return input.substring(0, truncatedText.length - 6); + } + return input; + } + + function createDropDownElements(){ + var numEntries; + var copyRes = results; + var i; + var token; + var newResults = []; + var newResultsIds = []; + + var lc_text = searchLineEdit.node().value.toLowerCase(); + // set the number of shown results to be maxEntries or less; + numEntries = results.length; + if ( numEntries > maxEntries ) + numEntries = maxEntries; + + + for ( i = 0; i < numEntries; i++ ) { + // search for the best entry + var indexElement = 1000000; + var lengthElement = 1000000; + var bestElement = -1; + for ( var j = 0; j < copyRes.length; j++ ) { + token = copyRes[j].toLowerCase(); + var tIe = token.indexOf(lc_text); + var tLe = token.length; + if ( tIe > -1 && tIe <= indexElement && tLe <= lengthElement ) { + bestElement = j; + indexElement = tIe; + lengthElement = tLe; + } + } + newResults.push(copyRes[bestElement]); + newResultsIds.push(resultID[bestElement]); + copyRes[bestElement] = ""; + } + + // add the results to the entry menu + //****************************************** + numEntries = results.length; + if ( numEntries > maxEntries ) + numEntries = maxEntries; + + var filteredOutElements = 0; + for ( i = 0; i < numEntries; i++ ) { + //add results to the dropdown menu + var testEntry = document.createElement('li'); + testEntry.setAttribute('elementID', newResultsIds[i]); + testEntry.onclick = handleClick(newResultsIds[i]); + testEntry.setAttribute('class', "dbEntry"); + + var entries = mergedIdList[newResultsIds[i]]; + var eLen = entries.length; + + var croppedText = cropText(newResults[i]); + + var el0 = entries[0]; + var allSame = true; + var nodeMap = graph.getNodeMapForSearch(); + var visible = eLen; + if ( eLen > 1 ) { + for ( var q = 0; q < eLen; q++ ) { + if ( nodeMap[entries[q]] === undefined ) { + visible--; + } + } + } + + for ( var a = 0; a < eLen; a++ ) { + if ( el0 !== entries[a] ) { + allSame = false; + } + } + if ( croppedText !== newResults[i] ) { + // append ...(#numElements) if needed + if ( eLen > 1 && allSame === false ) { + if ( eLen !== visible ) + croppedText += "... (" + visible + "/" + eLen + ")"; + } + else { + croppedText += "..."; + } + testEntry.title = newResults[i]; + } + else { + if ( eLen > 1 && allSame === false ) { + if ( eLen !== visible ) + croppedText += " (" + visible + "/" + eLen + ")"; + else + croppedText += " (" + eLen + ")"; + } + } + + var searchEntryNode = d3.select(testEntry); + if ( eLen === 1 || allSame === true ) { + if ( nodeMap[entries[0]] === undefined ) { + searchEntryNode.style("color", "#979797"); + testEntry.title = newResults[i] + "\nElement is filtered out."; + testEntry.onclick = function (){ + }; + d3.select(testEntry).style("cursor", "default"); + filteredOutElements++; + } + } else { + if ( visible < 1 ) { + searchEntryNode.style("color", "#979797"); + testEntry.onclick = function (){ + }; + testEntry.title = newResults[i] + "\nAll elements are filtered out."; + d3.select(testEntry).style("cursor", "default"); + filteredOutElements++; + } else { + searchEntryNode.style("color", ""); + } + if ( visible < eLen && visible > 1 ) { + testEntry.title = newResults[i] + "\n" + visible + "/" + eLen + " elements are visible."; + } + } + searchEntryNode.node().innerHTML = croppedText; + m_search.node().appendChild(testEntry); + } + } + + + function handleAutoCompletion(){ + /** pre condition: autoCompletion has already a valid text**/ + clearSearchEntries(); + createSearchEntries(); + createDropDownElements(); + } + + function userInput(){ + c_locate.classed("highlighted", false); + c_locate.node().title = "Nothing to locate"; + + if ( dictionaryUpdateRequired ) { + updateSearchDictionary(); + } + graph.resetSearchHighlight(); + + if ( dictionary.length === 0 ) { + console.log("dictionary is empty"); + return; + } + inputText = searchLineEdit.node().value; + + clearSearchEntries(); + if ( inputText.length !== 0 ) { + createSearchEntries(); + createDropDownElements(); + } + + searchMenu.showSearchEntries(); + } + + function handleClick( elementId ){ + + return function (){ + var id = elementId; + var correspondingIds = mergedIdList[id]; + + // autoComplete the text for the user + var autoComStr = entryNames[id]; + searchLineEdit.node().value = autoComStr; + + graph.resetSearchHighlight(); + graph.highLightNodes(correspondingIds); + c_locate.node().title = "Locate search term"; + if ( autoComStr !== inputText ) { + handleAutoCompletion(); + } + searchMenu.hideSearchEntries(); + }; + } + + searchMenu.clearText = function (){ + searchLineEdit.node().value = ""; + c_locate.classed("highlighted", false); + c_locate.node().title = "Nothing to locate"; + var htmlCollection = m_search.node().children; + var numEntries = htmlCollection.length; + for ( var i = 0; i < numEntries; i++ ) { + htmlCollection[0].remove(); + } + }; + + return searchMenu; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 336: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains the navigation "engine" + * + * @param graph the associated webvowl graph + * @returns {{}} + */ + module.exports = function ( graph ){ + var navigationMenu = {}, + scrollContainer = d3.select("#menuElementContainer").node(), + menuContainer = d3.select("#menuContainer").node(), + leftButton = d3.select("#scrollLeftButton"), + rightButton = d3.select("#scrollRightButton"), + scrolLeftValue, + scrollMax, + currentlyVisibleMenu, + currentlyHoveredEntry, + touchedElement = false, + t_scrollLeft, + t_scrollRight, + c_select = [], + m_select = []; + + + function clearAllTimers(){ + cancelAnimationFrame(t_scrollLeft); + cancelAnimationFrame(t_scrollRight); + } + + function timed_scrollRight(){ + scrolLeftValue += 5; + scrollContainer.scrollLeft = scrolLeftValue; + navigationMenu.updateScrollButtonVisibility(); + if ( scrolLeftValue >= scrollMax ) { + clearAllTimers(); + return; + } + t_scrollRight = requestAnimationFrame(timed_scrollRight); + + } + + function timed_scrollLeft(){ + scrolLeftValue -= 5; + scrollContainer.scrollLeft = scrolLeftValue; + navigationMenu.updateScrollButtonVisibility(); + if ( scrolLeftValue <= 0 ) { + clearAllTimers(); + return; + } + t_scrollRight = requestAnimationFrame(timed_scrollLeft); + } + + // collect all menu entries and stuff; + function setupControlsAndMenus(){ + // HEURISTIC : to match the menus and their controllers we remove the first 2 letters and match + c_select = []; + m_select = []; + + var c_temp = []; + var m_temp = []; + var i; + var controlElements = scrollContainer.children; + var numEntries = controlElements.length; + + for ( i = 0; i < numEntries; i++ ) { + c_temp.push(controlElements[i].id.slice(2)); + } + + var menuElements = menuContainer.children; + numEntries = menuElements.length; + for ( i = 0; i < numEntries; i++ ) { + m_temp.push(menuElements[i].id.slice(2)); + } + + numEntries = controlElements.length; + for ( i = 0; i < numEntries; i++ ) { + c_select[i] = "c_" + c_temp[i]; + if ( m_temp.indexOf(c_temp[i]) > -1 ) { + m_select[i] = "m_" + c_temp[i]; + } else { + m_select[i] = undefined; + } + // create custom behavior for click, touch, and hover + d3.select("#" + c_select[i]).on("mouseover", menuElementOnHovered); + d3.select("#" + c_select[i]).on("mouseout", menuElementOutHovered); + + d3.select("#" + c_select[i]).on("click", menuElementClicked); + d3.select("#" + c_select[i]).on("touchstart", menuElementTouched); + + } + + // connect to mouseWheel + d3.select("#menuElementContainer").on("wheel", function (){ + var wheelEvent = d3.event; + var offset; + if ( wheelEvent.deltaY < 0 ) offset = 20; + if ( wheelEvent.deltaY > 0 ) offset = -20; + scrollContainer.scrollLeft += offset; + navigationMenu.hideAllMenus(); + navigationMenu.updateScrollButtonVisibility(); + }); + + // connect scrollIndicator Buttons; + d3.select("#scrollRightButton").on("mousedown", function (){ + scrolLeftValue = scrollContainer.scrollLeft; + navigationMenu.hideAllMenus(); + t_scrollRight = requestAnimationFrame(timed_scrollRight); + + }).on("touchstart", function (){ + scrolLeftValue = scrollContainer.scrollLeft; + navigationMenu.hideAllMenus(); + t_scrollRight = requestAnimationFrame(timed_scrollRight); + }).on("mouseup", clearAllTimers) + .on("touchend", clearAllTimers) + .on("touchcancel", clearAllTimers); + + d3.select("#scrollLeftButton").on("mousedown", function (){ + scrolLeftValue = scrollContainer.scrollLeft; + navigationMenu.hideAllMenus(); + t_scrollLeft = requestAnimationFrame(timed_scrollLeft); + }).on("touchstart", function (){ + scrolLeftValue = scrollContainer.scrollLeft; + navigationMenu.hideAllMenus(); + t_scrollLeft = requestAnimationFrame(timed_scrollLeft); + }).on("mouseup", clearAllTimers) + .on("touchend", clearAllTimers) + .on("touchcancel", clearAllTimers); + + // connect the scroll functionality; + d3.select("#menuElementContainer").on("scroll", function (){ + navigationMenu.updateScrollButtonVisibility(); + navigationMenu.hideAllMenus(); + }); + } + + function menuElementOnHovered(){ + navigationMenu.hideAllMenus(); + if ( touchedElement ) { + return; + } + showSingleMenu(this.id); + } + + function menuElementOutHovered(){ + hoveroutedControMenu(this.id); + } + + function menuElementClicked(){ + var m_element = m_select[c_select.indexOf(this.id)]; + if ( m_element ) { + var menuElement = d3.select("#" + m_element); + if ( menuElement ) { + if ( menuElement.style("display") === "block" ) { + menuElement.style("display", "none");// hide it + } else { + showSingleMenu(this.id); + } + } + } + } + + function menuElementTouched(){ + // it sets a flag that we have touched it, + // since d3. propagates the event for touch as hover and then click, we block the hover event + touchedElement = true; + } + + + function hoveroutedControMenu( controllerID ){ + currentlyHoveredEntry = d3.select("#" + controllerID); + if ( controllerID !== "c_search" ) { + d3.select("#" + controllerID).select("path").style("stroke-width", "0"); + d3.select("#" + controllerID).select("path").style("fill", "#fff"); + } + + } + + function showSingleMenu( controllerID ){ + currentlyHoveredEntry = d3.select("#" + controllerID).node(); + // get the corresponding menu element for this controller + var m_element = m_select[c_select.indexOf(controllerID)]; + if ( m_element ) { + if ( controllerID !== "c_search" ) { + + d3.select("#" + controllerID).select("path").style("stroke-width", "0"); + d3.select("#" + controllerID).select("path").style("fill", "#bdc3c7"); + } + // show it if we have a menu + currentlyVisibleMenu = d3.select("#" + m_element); + currentlyVisibleMenu.style("display", "block"); + if ( m_element === "m_export" ) + graph.options().exportMenu().exportAsUrl(); + updateMenuPosition(); + } + } + + function updateMenuPosition(){ + if ( currentlyHoveredEntry ) { + var leftOffset = currentlyHoveredEntry.offsetLeft; + var scrollOffset = scrollContainer.scrollLeft; + var totalOffset = leftOffset - scrollOffset; + var finalOffset = Math.max(0, totalOffset); + var fullContainer_width = scrollContainer.getBoundingClientRect().width; + var elementWidth = currentlyVisibleMenu.node().getBoundingClientRect().width; + // make priority > first check if we are right + if ( finalOffset + elementWidth > fullContainer_width ) { + finalOffset = fullContainer_width - elementWidth; + } + // fix priority; + finalOffset = Math.max(0, finalOffset); + currentlyVisibleMenu.style("left", finalOffset + "px"); + + // // check if outside the viewport + // var menuWidth=currentlyHoveredEntry.getBoundingClientRect().width; + // var bt_width=36; + // if (totalOffset+menuWidthfullContainer_width){ + // navigationMenu.hideAllMenus(); + // currentlyHoveredEntry=undefined; + // } + } + } + + navigationMenu.hideAllMenus = function (){ + d3.selectAll(".toolTipMenu").style("display", "none"); // hiding all menus + }; + + navigationMenu.updateScrollButtonVisibility = function (){ + scrollMax = scrollContainer.scrollWidth - scrollContainer.clientWidth - 2; + if ( scrollContainer.scrollLeft === 0 ) { + leftButton.classed("hidden", true); + } else { + leftButton.classed("hidden", false); + } + + if ( scrollContainer.scrollLeft > scrollMax ) { + rightButton.classed("hidden", true); + } else { + rightButton.classed("hidden", false); + } + + }; + + navigationMenu.setup = function (){ + setupControlsAndMenus(); + // make sure that the menu elements follow their controller and also their restrictions + // some hovering behavior -- lets the menu disappear when hovered in graph or sidebar; + d3.select("#graph").on("mouseover", function (){ + navigationMenu.hideAllMenus(); + }); + d3.select("#generalDetails").on("mouseover", function (){ + navigationMenu.hideAllMenus(); + }); + }; + + return navigationMenu; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 337: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** The zoom Slider **/ + module.exports = function ( graph ){ + var zoomSlider = {}; + var minMag = graph.options().minMagnification(), + maxMag = graph.options().maxMagnification(), + defZoom, + t_zoomOut, + t_zoomIn, + zoomValue, + showSlider = true, + w = graph.options().width(), + h = graph.options().height(), + slider; + + defZoom = Math.min(w, h) / 1000; + + function clearAllTimers(){ + cancelAnimationFrame(t_zoomOut); + cancelAnimationFrame(t_zoomIn); + } + + function timed_zoomOut(){ + zoomValue = 0.98 * zoomValue; + // fail saves + if ( zoomValue < minMag ) { + zoomValue = minMag; + } + graph.setSliderZoom(zoomValue); + t_zoomOut = requestAnimationFrame(timed_zoomOut); + } + + function timed_zoomIn(){ + zoomValue = 1.02 * zoomValue; + // fail saves + if ( zoomValue > maxMag ) { + zoomValue = maxMag; + } + graph.setSliderZoom(zoomValue); + t_zoomIn = requestAnimationFrame(timed_zoomIn); + } + + zoomSlider.setup = function (){ + slider = d3.select("#zoomSliderParagraph").append("input") + .datum({}) + .attr("id", "zoomSliderElement") + .attr("type", "range") + .attr("value", defZoom) + .attr("min", minMag) + .attr("max", maxMag) + .attr("step", (maxMag - minMag) / 40) + .attr("title", "zoom factor") + .on("input", function (){ + zoomSlider.zooming(); + }); + + d3.select("#zoomOutButton").on("mousedown", function (){ + graph.options().navigationMenu().hideAllMenus(); + zoomValue = graph.scaleFactor(); + t_zoomOut = requestAnimationFrame(timed_zoomOut); + }) + .on("touchstart", function (){ + graph.options().navigationMenu().hideAllMenus(); + zoomValue = graph.scaleFactor(); + t_zoomOut = requestAnimationFrame(timed_zoomOut); + }) + .on("mouseup", clearAllTimers) + .on("touchend", clearAllTimers) + .on("touchcancel", clearAllTimers) + .attr("title", "zoom out"); + + d3.select("#zoomInButton").on("mousedown", function (){ + graph.options().navigationMenu().hideAllMenus(); + zoomValue = graph.scaleFactor(); + t_zoomIn = requestAnimationFrame(timed_zoomIn); + }) + .on("touchstart", function (){ + graph.options().navigationMenu().hideAllMenus(); + zoomValue = graph.scaleFactor(); + t_zoomIn = requestAnimationFrame(timed_zoomIn); + }) + .on("mouseup", clearAllTimers) + .on("touchend", clearAllTimers) + .on("touchcancel", clearAllTimers) + .attr("title", "zoom in"); + + d3.select("#centerGraphButton").on("click", function (){ + graph.options().navigationMenu().hideAllMenus(); + graph.forceRelocationEvent(); + }).attr("title", "center graph"); + + }; + + zoomSlider.showSlider = function ( val ){ + if ( !arguments.length ) return showSlider; + d3.select("#zoomSlider").classed("hidden", !val); + showSlider = val; + }; + + zoomSlider.zooming = function (){ + graph.options().navigationMenu().hideAllMenus(); + var zoomValue = slider.property("value"); + slider.attr("value", zoomValue); + graph.setSliderZoom(zoomValue); + }; + + zoomSlider.updateZoomSliderValue = function ( val ){ + if ( slider ) { + slider.attr("value", val); + slider.property("value", val); + } + }; + + return zoomSlider; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 338: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains the logic for the sidebar. + * @param graph the graph that belongs to these controls + * @returns {{}} + */ + module.exports = function ( graph ){ + + var sidebar = {}, + languageTools = webvowl.util.languageTools(), + elementTools = webvowl.util.elementTools(), + // Required for reloading when the language changes + ontologyInfo, + visibleSidebar = 1, + lastSelectedElement, + + detailArea = d3.select("#detailsArea"), + graphArea = d3.select("#canvasArea"), + menuArea = d3.select("#swipeBarContainer"), + collapseButton = d3.select("#sidebarExpandButton"); + + /** + * Setup the menu bar. + */ + + + function setupCollapsing(){ + // adapted version of this example: http://www.normansblog.de/simple-jquery-accordion/ + function collapseContainers( containers ){ + containers.classed("hidden", true); + } + + function expandContainers( containers ){ + containers.classed("hidden", false); + } + + var triggers = d3.selectAll(".accordion-trigger"); + + // Collapse all inactive triggers on startup + collapseContainers(d3.selectAll(".accordion-trigger:not(.accordion-trigger-active) + div")); + + triggers.on("click", function (){ + var selectedTrigger = d3.select(this), + activeTriggers = d3.selectAll(".accordion-trigger-active"); + + if ( selectedTrigger.classed("accordion-trigger-active") ) { + // Collapse the active (which is also the selected) trigger + collapseContainers(d3.select(selectedTrigger.node().nextElementSibling)); + selectedTrigger.classed("accordion-trigger-active", false); + } else { + // Collapse the other trigger ... + collapseContainers(d3.selectAll(".accordion-trigger-active + div")); + activeTriggers.classed("accordion-trigger-active", false); + // ... and expand the selected one + expandContainers(d3.select(selectedTrigger.node().nextElementSibling)); + selectedTrigger.classed("accordion-trigger-active", true); + } + }); + } + + sidebar.clearOntologyInformation = function (){ + + d3.select("#title").text("No title available"); + d3.select("#about").attr("href", "#").attr("target", "_blank").text("not given"); + d3.select("#version").text("--"); + d3.select("#authors").text("--"); + d3.select("#description").text("No description available."); + var container = d3.select("#ontology-metadata"); + container.selectAll("*").remove(); + d3.select("#classCount") + .text("0"); + d3.select("#objectPropertyCount") + .text("0"); + d3.select("#datatypePropertyCount") + .text("0"); + d3.select("#individualCount") + .text("0"); + d3.select("#nodeCount") + .text("0"); + d3.select("#edgeCount") + .text("0"); + + // clear selectedNode info + var isTriggerActive = d3.select("#selection-details-trigger").classed("accordion-trigger-active"); + if ( isTriggerActive ) { + // close accordion + d3.select("#selection-details-trigger").node().click(); + } + showSelectionAdvice(); + + }; + + /** + * Updates the information of the passed ontology. + * @param data the graph data + * @param statistics the statistics module + */ + sidebar.updateOntologyInformation = function ( data, statistics ){ + data = data || {}; + ontologyInfo = data.header || {}; + + updateGraphInformation(); + displayGraphStatistics(undefined, statistics); + displayMetadata(ontologyInfo.other); + + // Reset the sidebar selection + sidebar.updateSelectionInformation(undefined); + + setLanguages(ontologyInfo.languages); + }; + + function setLanguages( languages ){ + languages = languages || []; + + // Put the default and unset label on top of the selection labels + languages.sort(function ( a, b ){ + if ( a === webvowl.util.constants().LANG_IRIBASED ) { + return -1; + } else if ( b === webvowl.util.constants().LANG_IRIBASED ) { + return 1; + } + if ( a === webvowl.util.constants().LANG_UNDEFINED ) { + return -1; + } else if ( b === webvowl.util.constants().LANG_UNDEFINED ) { + return 1; + } + return a.localeCompare(b); + }); + + var languageSelection = d3.select("#language") + .on("change", function (){ + graph.language(d3.event.target.value); + updateGraphInformation(); + sidebar.updateSelectionInformation(lastSelectedElement); + }); + + languageSelection.selectAll("option").remove(); + languageSelection.selectAll("option") + .data(languages) + .enter().append("option") + .attr("value", function ( d ){ + return d; + }) + .text(function ( d ){ + return d; + }); + + if ( !trySelectDefaultLanguage(languageSelection, languages, "en") ) { + if ( !trySelectDefaultLanguage(languageSelection, languages, webvowl.util.constants().LANG_UNDEFINED) ) { + trySelectDefaultLanguage(languageSelection, languages, webvowl.util.constants().LANG_IRIBASED); + } + } + } + + function trySelectDefaultLanguage( selection, languages, language ){ + var langIndex = languages.indexOf(language); + if ( langIndex >= 0 ) { + selection.property("selectedIndex", langIndex); + graph.language(language); + return true; + } + + return false; + } + + function updateGraphInformation(){ + var title = languageTools.textInLanguage(ontologyInfo.title, graph.language()); + d3.select("#title").text(title || "No title available"); + d3.select("#about").attr("href", ontologyInfo.iri).attr("target", "_blank").text(ontologyInfo.iri); + d3.select("#version").text(ontologyInfo.version || "--"); + var authors = ontologyInfo.author; + if ( typeof authors === "string" ) { + // Stay compatible with author info as strings after change in january 2015 + d3.select("#authors").text(authors); + } else if ( authors instanceof Array ) { + d3.select("#authors").text(authors.join(", ")); + } else { + d3.select("#authors").text("--"); + } + + var description = languageTools.textInLanguage(ontologyInfo.description, graph.language()); + d3.select("#description").text(description || "No description available."); + } + + function displayGraphStatistics( deliveredMetrics, statistics ){ + // Metrics are optional and may be undefined + deliveredMetrics = deliveredMetrics || {}; + + d3.select("#classCount") + .text(deliveredMetrics.classCount || statistics.classCount()); + d3.select("#objectPropertyCount") + .text(deliveredMetrics.objectPropertyCount || statistics.objectPropertyCount()); + d3.select("#datatypePropertyCount") + .text(deliveredMetrics.datatypePropertyCount || statistics.datatypePropertyCount()); + d3.select("#individualCount") + .text(deliveredMetrics.totalIndividualCount || statistics.totalIndividualCount()); + d3.select("#nodeCount") + .text(statistics.nodeCount()); + d3.select("#edgeCount") + .text(statistics.edgeCount()); + } + + function displayMetadata( metadata ){ + var container = d3.select("#ontology-metadata"); + container.selectAll("*").remove(); + + listAnnotations(container, metadata); + + if ( container.selectAll(".annotation").size() <= 0 ) { + container.append("p").text("No annotations available."); + } + } + + function listAnnotations( container, annotationObject ){ + annotationObject = annotationObject || {}; //todo + + // Collect the annotations in an array for simpler processing + var annotations = []; + for ( var annotation in annotationObject ) { + if ( annotationObject.hasOwnProperty(annotation) ) { + annotations.push(annotationObject[annotation][0]); + } + } + + container.selectAll(".annotation").remove(); + container.selectAll(".annotation").data(annotations).enter().append("p") + .classed("annotation", true) + .classed("statisticDetails", true) + .text(function ( d ){ + return d.identifier + ":"; + }) + .append("span") + .each(function ( d ){ + appendIriLabel(d3.select(this), d.value, d.type === "iri" ? d.value : undefined); + }); + } + + /** + * Update the information of the selected node. + * @param selectedElement the selection or null if nothing is selected + */ + sidebar.updateSelectionInformation = function ( selectedElement ){ + lastSelectedElement = selectedElement; + + // Click event was prevented when dragging + if ( d3.event && d3.event.defaultPrevented ) { + return; + } + + var isTriggerActive = d3.select("#selection-details-trigger").classed("accordion-trigger-active"); + if ( selectedElement && !isTriggerActive ) { + d3.select("#selection-details-trigger").node().click(); + } else if ( !selectedElement && isTriggerActive ) { + showSelectionAdvice(); + return; + } + + if ( elementTools.isProperty(selectedElement) ) { + displayPropertyInformation(selectedElement); + } else if ( elementTools.isNode(selectedElement) ) { + displayNodeInformation(selectedElement); + } + }; + + function showSelectionAdvice(){ + setSelectionInformationVisibility(false, false, true); + } + + function setSelectionInformationVisibility( showClasses, showProperties, showAdvice ){ + d3.select("#classSelectionInformation").classed("hidden", !showClasses); + d3.select("#propertySelectionInformation").classed("hidden", !showProperties); + d3.select("#noSelectionInformation").classed("hidden", !showAdvice); + } + + function displayPropertyInformation( property ){ + showPropertyInformations(); + + setIriLabel(d3.select("#propname"), property.labelForCurrentLanguage(), property.iri()); + d3.select("#typeProp").text(property.type()); + + if ( property.inverse() !== undefined ) { + d3.select("#inverse").classed("hidden", false); + setIriLabel(d3.select("#inverse span"), property.inverse().labelForCurrentLanguage(), property.inverse().iri()); + } else { + d3.select("#inverse").classed("hidden", true); + } + + var equivalentIriSpan = d3.select("#propEquivUri"); + listNodeArray(equivalentIriSpan, property.equivalents()); + + listNodeArray(d3.select("#subproperties"), property.subproperties()); + listNodeArray(d3.select("#superproperties"), property.superproperties()); + + if ( property.minCardinality() !== undefined ) { + d3.select("#infoCardinality").classed("hidden", true); + d3.select("#minCardinality").classed("hidden", false); + d3.select("#minCardinality span").text(property.minCardinality()); + d3.select("#maxCardinality").classed("hidden", false); + + if ( property.maxCardinality() !== undefined ) { + d3.select("#maxCardinality span").text(property.maxCardinality()); + } else { + d3.select("#maxCardinality span").text("*"); + } + + } else if ( property.cardinality() !== undefined ) { + d3.select("#minCardinality").classed("hidden", true); + d3.select("#maxCardinality").classed("hidden", true); + d3.select("#infoCardinality").classed("hidden", false); + d3.select("#infoCardinality span").text(property.cardinality()); + } else { + d3.select("#infoCardinality").classed("hidden", true); + d3.select("#minCardinality").classed("hidden", true); + d3.select("#maxCardinality").classed("hidden", true); + } + + setIriLabel(d3.select("#domain"), property.domain().labelForCurrentLanguage(), property.domain().iri()); + setIriLabel(d3.select("#range"), property.range().labelForCurrentLanguage(), property.range().iri()); + + displayAttributes(property.attributes(), d3.select("#propAttributes")); + + setTextAndVisibility(d3.select("#propDescription"), property.descriptionForCurrentLanguage()); + setTextAndVisibility(d3.select("#propComment"), property.commentForCurrentLanguage()); + + listAnnotations(d3.select("#propertySelectionInformation"), property.annotations()); + } + + function showPropertyInformations(){ + setSelectionInformationVisibility(false, true, false); + } + + function setIriLabel( element, name, iri ){ + var parent = d3.select(element.node().parentNode); + + if ( name ) { + element.selectAll("*").remove(); + appendIriLabel(element, name, iri); + parent.classed("hidden", false); + } else { + parent.classed("hidden", true); + } + } + + function appendIriLabel( element, name, iri ){ + var tag; + + if ( iri ) { + tag = element.append("a") + .attr("href", iri) + .attr("title", iri) + .attr("target", "_blank"); + } else { + tag = element.append("span"); + } + tag.text(name); + } + + function displayAttributes( attributes, textSpan ){ + var spanParent = d3.select(textSpan.node().parentNode); + + if ( attributes && attributes.length > 0 ) { + // Remove redundant redundant attributes for sidebar + removeElementFromArray("object", attributes); + removeElementFromArray("datatype", attributes); + removeElementFromArray("rdf", attributes); + } + + if ( attributes && attributes.length > 0 ) { + textSpan.text(attributes.join(", ")); + + spanParent.classed("hidden", false); + } else { + spanParent.classed("hidden", true); + } + } + + function removeElementFromArray( element, array ){ + var index = array.indexOf(element); + if ( index > -1 ) { + array.splice(index, 1); + } + } + + function displayNodeInformation( node ){ + showClassInformations(); + + setIriLabel(d3.select("#name"), node.labelForCurrentLanguage(), node.iri()); + + /* Equivalent stuff. */ + var equivalentIriSpan = d3.select("#classEquivUri"); + listNodeArray(equivalentIriSpan, node.equivalents()); + + d3.select("#typeNode").text(node.type()); + listNodeArray(d3.select("#individuals"), node.individuals()); + + /* Disjoint stuff. */ + var disjointNodes = d3.select("#disjointNodes"); + var disjointNodesParent = d3.select(disjointNodes.node().parentNode); + + if ( node.disjointWith() !== undefined ) { + disjointNodes.selectAll("*").remove(); + + node.disjointWith().forEach(function ( element, index ){ + if ( index > 0 ) { + disjointNodes.append("span").text(", "); + } + appendIriLabel(disjointNodes, element.labelForCurrentLanguage(), element.iri()); + }); + + disjointNodesParent.classed("hidden", false); + } else { + disjointNodesParent.classed("hidden", true); + } + + displayAttributes(node.attributes(), d3.select("#classAttributes")); + + setTextAndVisibility(d3.select("#nodeDescription"), node.descriptionForCurrentLanguage()); + setTextAndVisibility(d3.select("#nodeComment"), node.commentForCurrentLanguage()); + + listAnnotations(d3.select("#classSelectionInformation"), node.annotations()); + } + + function showClassInformations(){ + setSelectionInformationVisibility(true, false, false); + } + + function listNodeArray( textSpan, nodes ){ + var spanParent = d3.select(textSpan.node().parentNode); + + if ( nodes && nodes.length ) { + textSpan.selectAll("*").remove(); + nodes.forEach(function ( element, index ){ + if ( index > 0 ) { + textSpan.append("span").text(", "); + } + appendIriLabel(textSpan, element.labelForCurrentLanguage(), element.iri()); + }); + + spanParent.classed("hidden", false); + } else { + spanParent.classed("hidden", true); + } + } + + function setTextAndVisibility( label, value ){ + var parentNode = d3.select(label.node().parentNode); + var hasValue = !!value; + if ( value ) { + label.text(value); + } + parentNode.classed("hidden", !hasValue); + } + + /** Collapsible Sidebar functions; **/ + + sidebar.showSidebar = function ( val, init ){ + // make val to bool + if ( val === 1 ) { + visibleSidebar = true; + collapseButton.node().innerHTML = ">"; + detailArea.classed("hidden", true); + if ( init === true ) { + detailArea.classed("hidden", !visibleSidebar); + graphArea.style("width", "78%"); + graphArea.style("-webkit-animation-name", "none"); + + menuArea.style("width", "78%"); + menuArea.style("-webkit-animation-name", "none"); + + d3.select("#WarningErrorMessagesContainer").style("width", "78%"); + d3.select("#WarningErrorMessagesContainer").style("-webkit-animation-name", "none"); + } else { + graphArea.style("width", "78%"); + graphArea.style("-webkit-animation-name", "sbCollapseAnimation"); + graphArea.style("-webkit-animation-duration", "0.5s"); + + menuArea.style("width", "78%"); + menuArea.style("-webkit-animation-name", "sbCollapseAnimation"); + menuArea.style("-webkit-animation-duration", "0.5s"); + + d3.select("#WarningErrorMessagesContainer").style("width", "78%"); + d3.select("#WarningErrorMessagesContainer").style("-webkit-animation-name", "warn_ExpandRightBarAnimation"); + d3.select("#WarningErrorMessagesContainer").style("-webkit-animation-duration", "0.5s"); + } + graph.options().width(window.innerWidth - (window.innerWidth * 0.22)); + graph.options().navigationMenu().updateScrollButtonVisibility(); + } + if ( val === 0 ) { + visibleSidebar = false; + detailArea.classed("hidden", true); + + collapseButton.node().innerHTML = "<"; + // adjust the layout + if ( init === true ) { + graphArea.style("width", "100%"); + graphArea.style("-webkit-animation-name", "none"); + + menuArea.style("width", "100%"); + menuArea.style("-webkit-animation-name", "none"); + + d3.select("#WarningErrorMessagesContainer").style("width", "100%"); + d3.select("#WarningErrorMessagesContainer").style("-webkit-animation-name", "none"); + } else { + graphArea.style("width", "100%"); + graphArea.style("-webkit-animation-name", "sbExpandAnimation"); + graphArea.style("-webkit-animation-duration", "0.5s"); + + menuArea.style("width", "100%"); + menuArea.style("-webkit-animation-name", "sbExpandAnimation"); + menuArea.style("-webkit-animation-duration", "0.5s"); + + d3.select("#WarningErrorMessagesContainer").style("width", "100%"); + d3.select("#WarningErrorMessagesContainer").style("-webkit-animation-name", "warn_CollapseRightBarAnimation"); + d3.select("#WarningErrorMessagesContainer").style("-webkit-animation-duration", "0.5s"); + + } + graph.options().width(window.innerWidth); + graph.updateCanvasContainerSize(); + graph.options().navigationMenu().updateScrollButtonVisibility(); + } + }; + + sidebar.isSidebarVisible = function (){ + return visibleSidebar; + }; + + sidebar.updateSideBarVis = function ( init ){ + var vis = sidebar.getSidebarVisibility(); + sidebar.showSidebar(parseInt(vis), init); + }; + + sidebar.getSidebarVisibility = function (){ + var isHidden = detailArea.classed("hidden"); + if ( isHidden === false ) return String(1); + if ( isHidden === true ) return String(0); + }; + + sidebar.initSideBarAnimation = function (){ + graphArea.node().addEventListener("animationend", function (){ + detailArea.classed("hidden", !visibleSidebar); + graph.updateCanvasContainerSize(); + graph.options().navigationMenu().updateScrollButtonVisibility(); + }); + }; + + sidebar.setup = function (){ + setupCollapsing(); + sidebar.initSideBarAnimation(); + + collapseButton.on("click", function (){ + graph.options().navigationMenu().hideAllMenus(); + var settingValue = parseInt(sidebar.getSidebarVisibility()); + if ( settingValue === 1 ) sidebar.showSidebar(0); + else sidebar.showSidebar(1); + }); + }; + + + sidebar.updateShowedInformation = function (){ + var editMode = graph.editorMode(); + d3.select("#generalDetails").classed("hidden", editMode); + d3.select("#generalDetailsEdit").classed("hidden", !editMode); + + // store the meta information in graph.options() + + // todo: update edit meta info + graph.options().editSidebar().updateGeneralOntologyInfo(); + + // todo: update showed meta info; + graph.options().sidebar().updateGeneralOntologyInfo(); + + }; + + sidebar.updateGeneralOntologyInfo = function (){ + // get it from graph.options + var generalMetaObj = graph.options().getGeneralMetaObject(); + var preferredLanguage = graph && graph.language ? graph.language() : null; + if ( generalMetaObj.hasOwnProperty("title") ) { + // title has language to it -.- + if ( typeof generalMetaObj.title === "object" ) { + d3.select("#title").node().value = languageTools.textInLanguage(generalMetaObj.title, preferredLanguage); + } else { + d3.select("#title").node().innerHTML = generalMetaObj.title; + } + + } + if ( generalMetaObj.hasOwnProperty("iri") ) d3.select("#about").node().innerHTML = generalMetaObj.iri; + if ( generalMetaObj.hasOwnProperty("iri") ) d3.select("#about").node().href = generalMetaObj.iri; + if ( generalMetaObj.hasOwnProperty("version") ) d3.select("#version").node().innerHTML = generalMetaObj.version; + if ( generalMetaObj.hasOwnProperty("author") ) d3.select("#authors").node().innerHTML = generalMetaObj.author; + // this could also be an object >> + if ( generalMetaObj.hasOwnProperty("description") ) { + if ( typeof generalMetaObj.description === "object" ) { + d3.select("#description").node().innerHTML = languageTools.textInLanguage(generalMetaObj.description, preferredLanguage); + } + else { + d3.select("#description").node().innerHTML = generalMetaObj.description; + } + } + }; + + + return sidebar; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 339: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains the logic for the sidebar. + * @param graph the graph that belongs to these controls + * @returns {{}} + */ + module.exports = function ( graph ){ + + var leftSidebar = {}, + languageTools = webvowl.util.languageTools(), + elementTools = webvowl.util.elementTools(); + var collapseButton = d3.select("#leftSideBarCollapseButton"); + var visibleSidebar = 0; + var backupVisibility = 0; + var sideBarContent = d3.select("#leftSideBarContent"); + var sideBarContainer = d3.select("#containerForLeftSideBar"); + var defaultClassSelectionContainers = []; + var defaultDatatypeSelectionContainers = []; + var defaultPropertySelectionContainers = []; + + leftSidebar.setup = function (){ + setupCollapsing(); + leftSidebar.initSideBarAnimation(); + + collapseButton.on("click", function (){ + graph.options().navigationMenu().hideAllMenus(); + var settingValue = parseInt(leftSidebar.getSidebarVisibility()); + if ( settingValue === 0 ) leftSidebar.showSidebar(1); + else leftSidebar.showSidebar(0); + backupVisibility = settingValue; + }); + + setupSelectionContainers(); + d3.select("#WarningErrorMessages").node().addEventListener("animationend", function (){ + d3.select("#WarningErrorMessages").style("-webkit-animation-name", "none"); + }); + + }; + + leftSidebar.hideCollapseButton = function ( val ){ + sideBarContainer.classed("hidden", val); + }; + + + function unselectAllElements( container ){ + for ( var i = 0; i < container.length; i++ ) + container[i].classed("defaultSelected", false); + } + + function selectThisDefaultElement( element ){ + d3.select(element).classed("defaultSelected", true); + } + + function updateDefaultNameInAccordion( element, identifier ){ + var elementDescription = ""; + if ( identifier === "defaultClass" ) elementDescription = "Class: "; + if ( identifier === "defaultDatatype" ) elementDescription = "Datatype: "; + if ( identifier === "defaultProperty" ) elementDescription = "Property: "; + + d3.select("#" + identifier).node().innerHTML = elementDescription + element.innerHTML; + d3.select("#" + identifier).node().title = element.innerHTML; + } + + function classSelectorFunction(){ + unselectAllElements(defaultClassSelectionContainers); + selectThisDefaultElement(this); + updateDefaultNameInAccordion(this, "defaultClass"); + } + + function datatypeSelectorFunction(){ + unselectAllElements(defaultDatatypeSelectionContainers); + selectThisDefaultElement(this); + updateDefaultNameInAccordion(this, "defaultDatatype"); + } + + function propertySelectorFunction(){ + unselectAllElements(defaultPropertySelectionContainers); + selectThisDefaultElement(this); + updateDefaultNameInAccordion(this, "defaultProperty"); + } + + + function setupSelectionContainers(){ + var classContainer = d3.select("#classContainer"); + var datatypeContainer = d3.select("#datatypeContainer"); + var propertyContainer = d3.select("#propertyContainer"); + // create the supported elements + + var defaultClass = "owl:Class"; + var defaultDatatype = "rdfs:Literal"; + var defaultProperty = "owl:objectProperty"; + + var supportedClasses = graph.options().supportedClasses(); + var supportedDatatypes = graph.options().supportedDatatypes(); + var supportedProperties = graph.options().supportedProperties(); + var i; + + for ( i = 0; i < supportedClasses.length; i++ ) { + var aClassSelectionContainer; + aClassSelectionContainer = classContainer.append("div"); + aClassSelectionContainer.classed("containerForDefaultSelection", true); + aClassSelectionContainer.classed("noselect", true); + aClassSelectionContainer.node().id = "selectedClass" + supportedClasses[i]; + aClassSelectionContainer.node().innerHTML = supportedClasses[i]; + + if ( supportedClasses[i] === defaultClass ) { + selectThisDefaultElement(aClassSelectionContainer.node()); + } + aClassSelectionContainer.on("click", classSelectorFunction); + defaultClassSelectionContainers.push(aClassSelectionContainer); + } + + for ( i = 0; i < supportedDatatypes.length; i++ ) { + var aDTSelectionContainer = datatypeContainer.append("div"); + aDTSelectionContainer.classed("containerForDefaultSelection", true); + aDTSelectionContainer.classed("noselect", true); + aDTSelectionContainer.node().id = "selectedDatatype" + supportedDatatypes[i]; + aDTSelectionContainer.node().innerHTML = supportedDatatypes[i]; + + if ( supportedDatatypes[i] === defaultDatatype ) { + selectThisDefaultElement(aDTSelectionContainer.node()); + } + aDTSelectionContainer.on("click", datatypeSelectorFunction); + defaultDatatypeSelectionContainers.push(aDTSelectionContainer); + } + for ( i = 0; i < supportedProperties.length; i++ ) { + var aPropSelectionContainer = propertyContainer.append("div"); + aPropSelectionContainer.classed("containerForDefaultSelection", true); + aPropSelectionContainer.classed("noselect", true); + aPropSelectionContainer.node().id = "selectedClass" + supportedProperties[i]; + aPropSelectionContainer.node().innerHTML = supportedProperties[i]; + aPropSelectionContainer.on("click", propertySelectorFunction); + if ( supportedProperties[i] === defaultProperty ) { + selectThisDefaultElement(aPropSelectionContainer.node()); + } + defaultPropertySelectionContainers.push(aPropSelectionContainer); + } + } + + function setupCollapsing(){ + // adapted version of this example: http://www.normansblog.de/simple-jquery-accordion/ + function collapseContainers( containers ){ + containers.classed("hidden", true); + } + + function expandContainers( containers ){ + containers.classed("hidden", false); + } + + var triggers = d3.selectAll(".accordion-trigger"); + + // Collapse all inactive triggers on startup + // collapseContainers(d3.selectAll(".accordion-trigger:not(.accordion-trigger-active) + div")); + + triggers.on("click", function (){ + var selectedTrigger = d3.select(this); + if ( selectedTrigger.classed("accordion-trigger-active") ) { + // Collapse the active (which is also the selected) trigger + collapseContainers(d3.select(selectedTrigger.node().nextElementSibling)); + selectedTrigger.classed("accordion-trigger-active", false); + } else { + // Collapse the other trigger ... + // collapseContainers(d3.selectAll(".accordion-trigger-active + div")); + // activeTriggers.classed("accordion-trigger-active", false); + // ... and expand the selected one + expandContainers(d3.select(selectedTrigger.node().nextElementSibling)); + selectedTrigger.classed("accordion-trigger-active", true); + } + }); + } + + + leftSidebar.isSidebarVisible = function (){ + return visibleSidebar; + }; + + leftSidebar.updateSideBarVis = function ( init ){ + var vis = leftSidebar.getSidebarVisibility(); + leftSidebar.showSidebar(parseInt(vis), init); + }; + + leftSidebar.initSideBarAnimation = function (){ + sideBarContainer.node().addEventListener("animationend", function (){ + sideBarContent.classed("hidden", !visibleSidebar); + if ( visibleSidebar === true ) { + sideBarContainer.style("width", "200px"); + sideBarContent.classed("hidden", false); + d3.select("#leftSideBarCollapseButton").style("left", "200px"); + d3.select("#leftSideBarCollapseButton").classed("hidden", false); + d3.select("#WarningErrorMessages").style("left", "100px"); + } + else { + sideBarContainer.style("width", "0px"); + d3.select("#leftSideBarCollapseButton").style("left", "0px"); + d3.select("#WarningErrorMessages").style("left", "0px"); + d3.select("#leftSideBarCollapseButton").classed("hidden", false); + + } + graph.updateCanvasContainerSize(); + graph.options().navigationMenu().updateScrollButtonVisibility(); + }); + }; + + leftSidebar.showSidebar = function ( val, init ){ + // make val to bool + var collapseButton = d3.select("#leftSideBarCollapseButton"); + if ( init === true ) { + visibleSidebar = (backupVisibility === 0); + sideBarContent.classed("hidden", !visibleSidebar); + sideBarContainer.style("-webkit-animation-name", "none"); + d3.select("#WarningErrorMessages").style("-webkit-animation-name", "none"); + if ( visibleSidebar === true ) { + sideBarContainer.style("width", "200px"); + sideBarContent.classed("hidden", false); + d3.select("#leftSideBarCollapseButton").style("left", "200px"); + d3.select("#leftSideBarCollapseButton").classed("hidden", false); + d3.select("#WarningErrorMessages").style("left", "100px"); + collapseButton.node().innerHTML = "<"; + } + + else { + sideBarContainer.style("width", "0px"); + d3.select("#WarningErrorMessages").style("left", "0px"); + d3.select("#leftSideBarCollapseButton").style("left", "0px"); + d3.select("#leftSideBarCollapseButton").classed("hidden", false); + collapseButton.node().innerHTML = ">"; + } + + graph.updateCanvasContainerSize(); + graph.options().navigationMenu().updateScrollButtonVisibility(); + return; + } + + d3.select("#leftSideBarCollapseButton").classed("hidden", true); + + if ( val === 1 ) { + visibleSidebar = true; + collapseButton.node().innerHTML = "<"; + // call expand animation; + sideBarContainer.style("-webkit-animation-name", "l_sbExpandAnimation"); + sideBarContainer.style("-webkit-animation-duration", "0.5s"); + // prepare the animation; + + d3.select("#WarningErrorMessages").style("-webkit-animation-name", "warn_ExpandLeftBarAnimation"); + d3.select("#WarningErrorMessages").style("-webkit-animation-duration", "0.5s"); + + } + if ( val === 0 ) { + visibleSidebar = false; + sideBarContent.classed("hidden", true); + collapseButton.node().innerHTML = ">"; + // call collapse animation + sideBarContainer.style("-webkit-animation-name", "l_sbCollapseAnimation"); + sideBarContainer.style("-webkit-animation-duration", "0.5s"); + d3.select("#WarningErrorMessages").style("-webkit-animation-name", "warn_CollapseLeftBarAnimation"); + d3.select("#WarningErrorMessages").style("-webkit-animation-duration", "0.5s"); + d3.select("#WarningErrorMessages").style("left", "0"); + } + + }; + + leftSidebar.getSidebarVisibility = function (){ + var isHidden = sideBarContent.classed("hidden"); + if ( isHidden === false ) return String(1); + if ( isHidden === true ) return String(0); + }; + + return leftSidebar; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 340: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains the logic for the sidebar. + * @param graph the graph that belongs to these controls + * @returns {{}} + */ + module.exports = function ( graph ){ + + var editSidebar = {}, + languageTools = webvowl.util.languageTools(), + elementTools = webvowl.util.elementTools(); + + var prefixModule = webvowl.util.prefixTools(graph); + var selectedElementForCharacteristics; + var oldPrefix, oldPrefixURL; + var prefix_editMode = false; + + + editSidebar.clearMetaObjectValue = function (){ + d3.select("#titleEditor").node().value = ""; + d3.select("#iriEditor").node().value = ""; + d3.select("#versionEditor").node().value = ""; + d3.select("#authorsEditor").node().value = ""; + d3.select("#descriptionEditor").node().value = ""; + // todo add clear description; + }; + + + editSidebar.updatePrefixUi = function (){ + editSidebar.updateElementWidth(); + var prefixListContainer = d3.select("#prefixURL_Container"); + while ( prefixListContainer.node().firstChild ) { + prefixListContainer.node().removeChild(prefixListContainer.node().firstChild); + } + setupPrefixList(); + }; + + editSidebar.setup = function (){ + setupCollapsing(); + setupPrefixList(); + setupAddPrefixButton(); + setupSupportedDatatypes(); + + + d3.select("#titleEditor") + .on("change", function (){ + graph.options().addOrUpdateGeneralObjectEntry("title", d3.select("#titleEditor").node().value); + }) + .on("keydown", function (){ + d3.event.stopPropagation(); + if ( d3.event.keyCode === 13 ) { + d3.event.preventDefault(); + graph.options().addOrUpdateGeneralObjectEntry("title", d3.select("#titleEditor").node().value); + } + }); + d3.select("#iriEditor") + .on("change", function (){ + if ( graph.options().addOrUpdateGeneralObjectEntry("iri", d3.select("#iriEditor").node().value) === false ) { + // restore value + d3.select("#iriEditor").node().value = graph.options().getGeneralMetaObjectProperty('iri'); + } + }) + .on("keydown", function (){ + d3.event.stopPropagation(); + if ( d3.event.keyCode === 13 ) { + d3.event.preventDefault(); + if ( graph.options().addOrUpdateGeneralObjectEntry("iri", d3.select("#iriEditor").node().value) === false ) { + // restore value + d3.select("#iriEditor").node().value = graph.options().getGeneralMetaObjectProperty('iri'); + } + } + }); + d3.select("#versionEditor") + .on("change", function (){ + graph.options().addOrUpdateGeneralObjectEntry("version", d3.select("#versionEditor").node().value); + }) + .on("keydown", function (){ + d3.event.stopPropagation(); + if ( d3.event.keyCode === 13 ) { + d3.event.preventDefault(); + graph.options().addOrUpdateGeneralObjectEntry("version", d3.select("#versionEditor").node().value); + } + }); + d3.select("#authorsEditor") + .on("change", function (){ + graph.options().addOrUpdateGeneralObjectEntry("author", d3.select("#authorsEditor").node().value); + }) + .on("keydown", function (){ + d3.event.stopPropagation(); + if ( d3.event.keyCode === 13 ) { + d3.event.preventDefault(); + graph.options().addOrUpdateGeneralObjectEntry("author", d3.select("#authorsEditor").node().value); + } + }); + d3.select("#descriptionEditor") + .on("change", function (){ + graph.options().addOrUpdateGeneralObjectEntry("description", d3.select("#descriptionEditor").node().value); + }); + + editSidebar.updateElementWidth(); + + }; + + function setupSupportedDatatypes(){ + var datatypeEditorSelection = d3.select("#typeEditor_datatype").node(); + var supportedDatatypes = ["undefined", "xsd:boolean", "xsd:double", "xsd:integer", "xsd:string"]; + for ( var i = 0; i < supportedDatatypes.length; i++ ) { + var optB = document.createElement('option'); + optB.innerHTML = supportedDatatypes[i]; + datatypeEditorSelection.appendChild(optB); + } + } + + function highlightDeleteButton( enable, name ){ + var deletePath = d3.select("#del_pathFor_" + name); + var deleteRect = d3.select("#del_rectFor_" + name); + + if ( enable === false ) { + deletePath.node().style = "stroke: #f00;"; + deleteRect.style("cursor", "auto"); + } else { + deletePath.node().style = "stroke: #ff972d;"; + deleteRect.style("cursor", "pointer"); + } + } + + + function highlightEditButton( enable, name, fill ){ + var editPath = d3.select("#pathFor_" + name); + var editRect = d3.select("#rectFor_" + name); + + if ( enable === false ) { + if ( fill ) + editPath.node().style = "fill: #fff; stroke : #fff; stroke-width : 1px"; + else + editPath.node().style = " stroke : #fff; stroke-width : 1px"; + + editRect.style("cursor", "auto"); + } else { + if ( fill ) + editPath.node().style = "fill: #ff972d; stroke : #ff972d; stroke-width : 1px"; + else + editPath.node().style = "stroke : #ff972d; stroke-width : 1px"; + editRect.style("cursor", "pointer"); + } + + } + + function setupAddPrefixButton(){ + var btn = d3.select("#addPrefixButton"); + btn.on("click", function (){ + + // check if we are still in editMode? + if ( prefix_editMode === false ) { + // create new line entry; + var name = "emptyPrefixEntry"; + var prefixListContainer = d3.select("#prefixURL_Container"); + var prefixEditContainer = prefixListContainer.append("div"); + prefixEditContainer.classed("prefixIRIElements", true); + prefixEditContainer.node().id = "prefixContainerFor_" + name; + + var IconContainer = prefixEditContainer.append("div"); + IconContainer.style("position", "absolute"); + IconContainer.node().id = "containerFor_" + name; + var editButton = IconContainer.append("svg"); + editButton.style("width", "14px"); + editButton.style("height", "20px"); + // editButton.classed("editPrefixButton", true); + editButton.classed("noselect", true); + //editButton.node().innerHTML = "\u2714"; + editButton.node().id = "editButtonFor_" + name; + + editButton.node().elementStyle = "save"; + editButton.node().selectorName = name; + var editIcon = editButton.append("g"); + var editRect = editIcon.append("rect"); + var editPath = editIcon.append("path"); + editIcon.node().id = "iconFor_" + name; + editPath.node().id = "pathFor_" + name; + editRect.node().id = "rectFor_" + name; + + editIcon.node().selectorName = name; + editPath.node().selectorName = name; + editRect.node().selectorName = name; + IconContainer.node().title = "Save new prefix and IRI"; + + editPath.classed("editPrefixIcon"); + editPath.style("stroke", "#fff"); + editPath.style("stroke-width", "1px"); + editPath.style("fill", "#fff"); + editRect.attr("width", "14px"); + editRect.attr("height", "14px"); + editRect.style("fill", "#18202A"); + editRect.attr("transform", "matrix(1,0,0,1,-3,4)"); + + editButton.selectAll("g").on("mouseover", function (){ + highlightEditButton(true, this.selectorName, true); + }); + editButton.selectAll("g").on("mouseout", function (){ + highlightEditButton(false, this.selectorName, true); + }); + // Check mark + // M9 16.2L4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4L9 16.2z + // pencil + // M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z + editPath.attr("d", "M9 16.2L4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4L9 16.2z"); + editPath.attr("transform", "matrix(0.45,0,0,0.45,0,5)"); + + var prefInput = prefixEditContainer.append("input"); + prefInput.classed("prefixInput", true); + prefInput.node().type = "text"; + prefInput.node().id = "prefixInputFor_" + name; + prefInput.node().autocomplete = "off"; + prefInput.node().value = ""; + prefInput.style("margin-left", "14px"); + + var prefURL = prefixEditContainer.append("input"); + prefURL.classed("prefixURL", true); + prefURL.node().type = "text"; + prefURL.node().id = "prefixURLFor_" + name; + prefURL.node().autocomplete = "off"; + prefURL.node().value = ""; + + prefInput.node().disabled = false; + prefURL.node().disabled = false; + prefix_editMode = true; + var deleteContainer = prefixEditContainer.append("div"); + deleteContainer.style("float", "right"); + var deleteButton = deleteContainer.append("svg"); + deleteButton.node().id = "deleteButtonFor_" + name; + deleteContainer.node().title = "Delete prefix and IRI"; + deleteButton.style("width", "10px"); + deleteButton.style("height", "20px"); + var deleteIcon = deleteButton.append("g"); + var deleteRect = deleteIcon.append("rect"); + var deletePath = deleteIcon.append("path"); + deleteIcon.node().id = "del_iconFor_" + name; + deletePath.node().id = "del_pathFor_" + name; + deleteRect.node().id = "del_rectFor_" + name; + + deleteIcon.node().selectorName = name; + deletePath.node().selectorName = name; + deleteRect.node().selectorName = name; + + + deletePath.style("stroke", "#f00"); + deleteRect.attr("width", "10px"); + deleteRect.attr("height", "14px"); + deleteRect.style("fill", "#18202A"); + deleteRect.attr("transform", "matrix(1,0,0,1,-3,4)"); + + + deletePath.attr("d", "M19 6.41L17.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 12z"); + deletePath.attr("transform", "matrix(0.45,0,0,0.45,0,5)"); + + deleteButton.selectAll("g").on("mouseover", function (){ + highlightDeleteButton(true, this.selectorName); + }); + deleteButton.selectAll("g").on("mouseout", function (){ + highlightDeleteButton(false, this.selectorName); + }); + + + // connect the buttons; + editButton.on("click", enablePrefixEdit); + deleteButton.on("click", deletePrefixLine); + + editSidebar.updateElementWidth(); + // swap focus to prefixInput + prefInput.node().focus(); + oldPrefix = name; + oldPrefixURL = ""; + d3.select("#addPrefixButton").node().innerHTML = "Save Prefix"; + } else { + d3.select("#editButtonFor_emptyPrefixEntry").on("click")(d3.select("#editButtonFor_emptyPrefixEntry").node()); + } + + }); + + } + + function setupPrefixList(){ + if ( graph.isEditorMode() === false ) return; + var prefixListContainer = d3.select("#prefixURL_Container"); + var prefixElements = graph.options().prefixList(); + for ( var name in prefixElements ) { + if ( prefixElements.hasOwnProperty(name) ) { + var prefixEditContainer = prefixListContainer.append("div"); + prefixEditContainer.classed("prefixIRIElements", true); + prefixEditContainer.node().id = "prefixContainerFor_" + name; + + // create edit button which enables the input fields + var IconContainer = prefixEditContainer.append("div"); + IconContainer.style("position", "absolute"); + IconContainer.node().id = "containerFor_" + name; + var editButton = IconContainer.append("svg"); + editButton.style("width", "14px"); + editButton.style("height", "20px"); + editButton.classed("noselect", true); + editButton.node().id = "editButtonFor_" + name; + IconContainer.node().title = "Edit prefix and IRI"; + editButton.node().elementStyle = "save"; + editButton.node().selectorName = name; + + editButton.node().id = "editButtonFor_" + name; + editButton.node().elementStyle = "edit"; + var editIcon = editButton.append("g"); + var editRect = editIcon.append("rect"); + var editPath = editIcon.append("path"); + editIcon.node().id = "iconFor_" + name; + editPath.node().id = "pathFor_" + name; + editRect.node().id = "rectFor_" + name; + + editIcon.node().selectorName = name; + editPath.node().selectorName = name; + editRect.node().selectorName = name; + + + editPath.classed("editPrefixIcon"); + editPath.style("stroke", "#fff"); + editPath.style("stroke-width", "1px"); + editRect.attr("width", "14px"); + editRect.attr("height", "14px"); + editRect.style("fill", "#18202A"); + editRect.attr("transform", "matrix(1,0,0,1,-3,4)"); + + editButton.selectAll("g").on("mouseover", function (){ + var sender = this; + var fill = false; + var enable = true; + var f_editPath = d3.select("#pathFor_" + sender.selectorName); + var f_editRect = d3.select("#rectFor_" + sender.selectorName); + + if ( enable === false ) { + if ( fill ) + f_editPath.node().style = "fill: #fff; stroke : #fff; stroke-width : 1px"; + else + f_editPath.node().style = " stroke : #fff; stroke-width : 1px"; + + f_editRect.style("cursor", "auto"); + } else { + if ( fill ) + f_editPath.node().style = "fill: #ff972d; stroke : #ff972d; stroke-width : 1px"; + else + f_editPath.node().style = "stroke : #ff972d; stroke-width : 1px"; + f_editRect.style("cursor", "pointer"); + } + }); + editButton.selectAll("g").on("mouseout", function (){ + var sender = this; + var fill = false; + var enable = false; + var f_editPath = d3.select("#pathFor_" + sender.selectorName); + var f_editRect = d3.select("#rectFor_" + sender.selectorName); + + if ( enable === false ) { + if ( fill ) + f_editPath.node().style = "fill: #fff; stroke : #fff; stroke-width : 1px"; + else + f_editPath.node().style = " stroke : #fff; stroke-width : 1px"; + + f_editRect.style("cursor", "auto"); + } else { + if ( fill ) + f_editPath.node().style = "fill: #ff972d; stroke : #ff972d; stroke-width : 1px"; + else + f_editPath.node().style = "stroke : #ff972d; stroke-width : 1px"; + f_editRect.style("cursor", "pointer"); + } + }); + + editPath.attr("d", "M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z"); + editPath.attr("transform", "matrix(-0.45,0,0,0.45,10,5)"); + + // create input field for prefix + var prefInput = prefixEditContainer.append("input"); + prefInput.classed("prefixInput", true); + prefInput.node().type = "text"; + prefInput.node().id = "prefixInputFor_" + name; + prefInput.node().autocomplete = "off"; + prefInput.node().value = name; + prefInput.style("margin-left", "14px"); + + // create input field for prefix url + var prefURL = prefixEditContainer.append("input"); + prefURL.classed("prefixURL", true); + prefURL.node().type = "text"; + prefURL.node().id = "prefixURLFor_" + name; + prefURL.node().autocomplete = "off"; + prefURL.node().value = prefixElements[name]; + prefURL.node().title = prefixElements[name]; + // disable the input fields (already defined elements can be edited later) + prefInput.node().disabled = true; + prefURL.node().disabled = true; + + // create the delete button + var deleteContainer = prefixEditContainer.append("div"); + deleteContainer.style("float", "right"); + var deleteButton = deleteContainer.append("svg"); + deleteButton.node().id = "deleteButtonFor_" + name; + deleteContainer.node().title = "Delete prefix and IRI"; + deleteButton.style("width", "10px"); + deleteButton.style("height", "20px"); + var deleteIcon = deleteButton.append("g"); + var deleteRect = deleteIcon.append("rect"); + var deletePath = deleteIcon.append("path"); + deleteIcon.node().id = "del_iconFor_" + name; + deletePath.node().id = "del_pathFor_" + name; + deleteRect.node().id = "del_rectFor_" + name; + + deleteIcon.node().selectorName = name; + deletePath.node().selectorName = name; + deleteRect.node().selectorName = name; + + + deletePath.style("stroke", "#f00"); + deleteRect.attr("width", "10px"); + deleteRect.attr("height", "14px"); + deleteRect.style("fill", "#18202A"); + deleteRect.attr("transform", "matrix(1,0,0,1,-3,4)"); + + + deletePath.attr("d", "M19 6.41L17.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 12z"); + deletePath.attr("transform", "matrix(0.45,0,0,0.45,0,5)"); + + deleteButton.selectAll("g").on("mouseover", function (){ + var selector = this; + var enable = true; + var f_deletePath = d3.select("#del_pathFor_" + selector.selectorName); + var f_deleteRect = d3.select("#del_rectFor_" + selector.selectorName); + + if ( enable === false ) { + f_deletePath.node().style = "stroke: #f00;"; + f_deleteRect.style("cursor", "auto"); + } else { + f_deletePath.node().style = "stroke: #ff972d;"; + f_deleteRect.style("cursor", "pointer"); + } + }); + deleteButton.selectAll("g").on("mouseout", function (){ + var selector = this; + var enable = false; + var f_deletePath = d3.select("#del_pathFor_" + selector.selectorName); + var f_deleteRect = d3.select("#del_rectFor_" + selector.selectorName); + + if ( enable === false ) { + f_deletePath.node().style = "stroke: #f00;"; + f_deleteRect.style("cursor", "auto"); + } else { + f_deletePath.node().style = "stroke: #ff972d;"; + f_deleteRect.style("cursor", "pointer"); + } + }); + + + editButton.on("click", enablePrefixEdit); + deleteButton.on("click", deletePrefixLine); + + // EXPERIMENTAL + + if ( name === "rdf" || + name === "rdfs" || + name === "xsd" || name === "dc" || + name === "owl" + ) { + // make them invis so the spacing does not change + IconContainer.classed("hidden", true); + deleteContainer.classed("hidden", true); + } + } + } + prefixModule.updatePrefixModel(); + } + + function deletePrefixLine(){ + if ( this.disabled === true ) return; + d3.select("#addPrefixButton").node().innerHTML = "Add Prefix"; + var selector = this.id.split("_")[1]; + d3.select("#prefixContainerFor_" + selector).remove(); + graph.options().removePrefix(selector); + prefix_editMode = false; // < 0 ) { + var basePref = graph.options().prefixList()[pr]; + if ( basePref === undefined ) { + console.log("ERROR __________________"); + graph.options().warningModule().showWarning("Invalid Element IRI", + "Could not resolve prefix '" + basePref + "'", + "Restoring previous IRI for Element" + element.iri(), 1, false); + d3.select("#element_iriEditor").node().value = element.iri(); + return; + + } + // check if url is not empty + + if ( name.length === 0 ) { + graph.options().warningModule().showWarning("Invalid Element IRI", + "Input IRI is EMPTY", + "Restoring previous IRI for Element" + element.iri(), 1, false); + console.log("NO INPUT PROVIDED"); + d3.select("#element_iriEditor").node().value = element.iri(); + return; + + } + url = basePref + name; + } + else { + url = base + name; + } + } else { + if ( url.length === 0 ) { + // + console.log("NO INPUT PROVIDED"); + d3.select("#element_iriEditor").node().value = element.iri(); + return; + } + // failed to identify anything useful + console.log("Tryig to use the input!"); + url = base + url; + } + } + return url; + } + + function changeIriForElement( element ){ + var url = getURLFROMPrefixedVersion(element); + var base = graph.options().getGeneralMetaObjectProperty("iri"); + var sanityCheckResult; + if ( elementTools.isNode(element) ) { + + sanityCheckResult = graph.checkIfIriClassAlreadyExist(url); + if ( sanityCheckResult === false ) { + element.iri(url); + } else { + // throw warnign + graph.options().warningModule().showWarning("Already seen this class", + "Input IRI: " + url + " for element: " + element.labelForCurrentLanguage() + " already been set", + "Restoring previous IRI for Element : " + element.iri(), 2, false, sanityCheckResult); + + editSidebar.updateSelectionInformation(element); + return; + + } + } + if ( elementTools.isProperty(element) === true ) { + sanityCheckResult = editSidebar.checkProperIriChange(element, url); + if ( sanityCheckResult !== false ) { + graph.options().warningModule().showWarning("Already seen this property", + "Input IRI: " + url + " for element: " + element.labelForCurrentLanguage() + " already been set", + "Restoring previous IRI for Element : " + element.iri(), 1, false, sanityCheckResult); + + editSidebar.updateSelectionInformation(element); + return; + } + } + + // if (element.existingPropertyIRI(url)===true){ + // console.log("I Have seen this Particular URL already "+url); + // graph.options().warningModule().showWarning("Already Seen This one ", + // "Input IRI For Element"+ element.labelForCurrentLanguage()+" already been set ", + // "Restoring previous IRI for Element"+element.iri(),1,false); + // d3.select("#element_iriEditor").node().value=graph.options().prefixModule().getPrefixRepresentationForFullURI(element.iri()); + // editSidebar.updateSelectionInformation(element); + // return; + // } + + element.iri(url); + if ( identifyExternalCharacteristicForElement(base, url) === true ) { + addAttribute(element, "external"); + // background color for external element; + element.backgroundColor("#36C"); + element.redrawElement(); + element.redrawLabelText(); + // handle visual selection + + } else { + removeAttribute(element, "external"); + // background color for external element; + element.backgroundColor(undefined); + element.redrawElement(); + element.redrawLabelText(); + + } + + if ( element.focused() ) { + graph.options().focuserModule().handle(element, true); // unfocus + graph.options().focuserModule().handle(element, true); // focus + } + // graph.options().focuserModule().handle(undefined); + + + d3.select("#element_iriEditor").node().value = prefixModule.getPrefixRepresentationForFullURI(url); + editSidebar.updateSelectionInformation(element); + } + + function validURL( str ){ + var urlregex = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/; + return urlregex.test(str); + } + + + function changeLabelForElement( element ){ + element.label(d3.select("#element_labelEditor").node().value); + element.redrawLabelText(); + } + + editSidebar.updateEditDeleteButtonIds = function ( oldPrefix, newPrefix ){ + d3.select("#prefixInputFor_" + oldPrefix).node().id = "prefixInputFor_" + newPrefix; + d3.select("#prefixURLFor_" + oldPrefix).node().id = "prefixURLFor_" + newPrefix; + d3.select("#deleteButtonFor_" + oldPrefix).node().id = "deleteButtonFor_" + newPrefix; + d3.select("#editButtonFor_" + oldPrefix).node().id = "editButtonFor_" + newPrefix; + + d3.select("#prefixContainerFor_" + oldPrefix).node().id = "prefixContainerFor_" + newPrefix; + }; + + editSidebar.checkForExistingURL = function ( url ){ + var i; + var allProps = graph.getUnfilteredData().properties; + for ( i = 0; i < allProps.length; i++ ) { + if ( allProps[i].iri() === url ) return true; + } + return false; + + }; + editSidebar.checkProperIriChange = function ( element, url ){ + console.log("Element changed Label"); + console.log("Testing URL " + url); + if ( element.type() === "rdfs:subClassOf" || element.type() === "owl:disjointWith" ) { + console.log("ignore this for now, already handled in the type and domain range changer"); + } else { + var i; + var allProps = graph.getUnfilteredData().properties; + for ( i = 0; i < allProps.length; i++ ) { + if ( allProps[i] === element ) continue; + if ( allProps[i].iri() === url ) return allProps[i]; + } + } + return false; + }; + + editSidebar.updateSelectionInformation = function ( element ){ + + if ( element === undefined ) { + // show hint; + d3.select("#selectedElementProperties").classed("hidden", true); + d3.select("#selectedElementPropertiesEmptyHint").classed("hidden", false); + selectedElementForCharacteristics = null; + editSidebar.updateElementWidth(); + } + else { + d3.select("#selectedElementProperties").classed("hidden", false); + d3.select("#selectedElementPropertiesEmptyHint").classed("hidden", true); + d3.select("#typeEditForm_datatype").classed("hidden", true); + + // set the element IRI, and labels + d3.select("#element_iriEditor").node().value = element.iri(); + d3.select("#element_labelEditor").node().value = element.labelForCurrentLanguage(); + d3.select("#element_iriEditor").node().title = element.iri(); + + d3.select("#element_iriEditor") + .on("change", function (){ + var elementIRI = element.iri(); + var prefixed = graph.options().prefixModule().getPrefixRepresentationForFullURI(elementIRI); + if ( prefixed === d3.select("#element_iriEditor").node().value ) { + console.log("Iri is identical, nothing has changed!"); + return; + } + + changeIriForElement(element); + }) + .on("keydown", function (){ + d3.event.stopPropagation(); + if ( d3.event.keyCode === 13 ) { + d3.event.preventDefault(); + console.log("IRI CHANGED Via ENTER pressed"); + changeIriForElement(element); + d3.select("#element_iriEditor").node().title = element.iri(); + } + }); + + var forceIRISync = defaultIriValue(element); + d3.select("#element_labelEditor") + .on("change", function (){ + var sanityCheckResult; + console.log("Element changed Label"); + var url = getURLFROMPrefixedVersion(element); + if ( element.iri() !== url ) { + if ( elementTools.isProperty(element) === true ) { + sanityCheckResult = editSidebar.checkProperIriChange(element, url); + if ( sanityCheckResult !== false ) { + graph.options().warningModule().showWarning("Already seen this property", + "Input IRI: " + url + " for element: " + element.labelForCurrentLanguage() + " already been set", + "Continuing with duplicate property!", 1, false, sanityCheckResult); + editSidebar.updateSelectionInformation(element); + return; + } + } + + if ( elementTools.isNode(element) === true ) { + sanityCheckResult = graph.checkIfIriClassAlreadyExist(url); + if ( sanityCheckResult !== false ) { + graph.options().warningModule().showWarning("Already seen this Class", + "Input IRI: " + url + " for element: " + element.labelForCurrentLanguage() + " already been set", + "Restoring previous IRI for Element : " + element.iri(), 2, false, sanityCheckResult); + + editSidebar.updateSelectionInformation(element); + return; + } + } + element.iri(url); + } + changeLabelForElement(element); + editSidebar.updateSelectionInformation(element); // prevents that it will be changed if node is still active + }) + .on("keydown", function (){ + d3.event.stopPropagation(); + if ( d3.event.keyCode === 13 ) { + d3.event.preventDefault(); + var sanityCheckResult; + console.log("Element changed Label"); + var url = getURLFROMPrefixedVersion(element); + if ( element.iri() !== url ) { + if ( elementTools.isProperty(element) === true ) { + sanityCheckResult = editSidebar.checkProperIriChange(element, url); + if ( sanityCheckResult !== false ) { + graph.options().warningModule().showWarning("Already seen this property", + "Input IRI: " + url + " for element: " + element.labelForCurrentLanguage() + " already been set", + "Continuing with duplicate property!", 1, false, sanityCheckResult); + + editSidebar.updateSelectionInformation(element); + return; + } + } + + if ( elementTools.isNode(element) === true ) { + sanityCheckResult = graph.checkIfIriClassAlreadyExist(url); + if ( sanityCheckResult !== false ) { + graph.options().warningModule().showWarning("Already seen this Class", + "Input IRI: " + url + " for element: " + element.labelForCurrentLanguage() + " already been set", + "Restoring previous IRI for Element : " + element.iri(), 2, false, sanityCheckResult); + + editSidebar.updateSelectionInformation(element); + return; + } + } + element.iri(url); + } + changeLabelForElement(element); + } + }) + .on("keyup", function (){ + if ( forceIRISync ) { + var labelName = d3.select("#element_labelEditor").node().value; + var resourceName = labelName.replaceAll(" ", "_"); + var syncedIRI = element.baseIri() + resourceName; + + //element.iri(syncedIRI); + d3.select("#element_iriEditor").node().title = element.iri(); + d3.select("#element_iriEditor").node().value = prefixModule.getPrefixRepresentationForFullURI(syncedIRI); + } + }); + // check if we are allowed to change IRI OR LABEL + d3.select("#element_iriEditor").node().disabled = false; + d3.select("#element_labelEditor").node().disabled = false; + + if ( element.type() === "rdfs:subClassOf" ) { + d3.select("#element_iriEditor").node().value = "http://www.w3.org/2000/01/rdf-schema#subClassOf"; + d3.select("#element_iriEditor").node().title = "http://www.w3.org/2000/01/rdf-schema#subClassOf"; + d3.select("#element_labelEditor").node().value = "Subclass of"; + d3.select("#element_iriEditor").node().disabled = true; + d3.select("#element_labelEditor").node().disabled = true; + } + if ( element.type() === "owl:Thing" ) { + d3.select("#element_iriEditor").node().value = "http://www.w3.org/2002/07/owl#Thing"; + d3.select("#element_iriEditor").node().title = "http://www.w3.org/2002/07/owl#Thing"; + d3.select("#element_labelEditor").node().value = "Thing"; + d3.select("#element_iriEditor").node().disabled = true; + d3.select("#element_labelEditor").node().disabled = true; + } + + if ( element.type() === "owl:disjointWith" ) { + d3.select("#element_iriEditor").node().value = "http://www.w3.org/2002/07/owl#disjointWith"; + d3.select("#element_iriEditor").node().title = "http://www.w3.org/2002/07/owl#disjointWith"; + d3.select("#element_iriEditor").node().disabled = true; + d3.select("#element_labelEditor").node().disabled = true; + } + + if ( element.type() === "rdfs:Literal" ) { + d3.select("#element_iriEditor").node().value = "http://www.w3.org/2000/01/rdf-schema#Literal"; + d3.select("#element_iriEditor").node().title = "http://www.w3.org/2000/01/rdf-schema#Literal"; + d3.select("#element_iriEditor").node().disabled = true; + d3.select("#element_labelEditor").node().disabled = true; + element.iri("http://www.w3.org/2000/01/rdf-schema#Literal"); + } + if ( element.type() === "rdfs:Datatype" ) { + var datatypeEditorSelection = d3.select("#typeEditor_datatype"); + d3.select("#typeEditForm_datatype").classed("hidden", false); + element.iri("http://www.w3.org/2000/01/rdf-schema#Datatype"); + d3.select("#element_iriEditor").node().value = "http://www.w3.org/2000/01/rdf-schema#Datatype"; + d3.select("#element_iriEditor").node().title = "http://www.w3.org/2000/01/rdf-schema#Datatype"; + d3.select("#element_iriEditor").node().disabled = true; + d3.select("#element_labelEditor").node().disabled = true; + + datatypeEditorSelection.node().value = element.dType(); + if ( datatypeEditorSelection.node().value === "undefined" ) { + d3.select("#element_iriEditor").node().disabled = true; // always prevent IRI modifications + d3.select("#element_labelEditor").node().disabled = false; + } + // reconnect the element + datatypeEditorSelection.on("change", function (){ + changeDatatypeType(element); + }); + } + + // add type selector + var typeEditorSelection = d3.select("#typeEditor").node(); + var htmlCollection = typeEditorSelection.children; + var numEntries = htmlCollection.length; + var i; + var elementPrototypes = getElementPrototypes(element); + for ( i = 0; i < numEntries; i++ ) + typeEditorSelection.removeChild(htmlCollection[0]); + + for ( i = 0; i < elementPrototypes.length; i++ ) { + var optA = document.createElement('option'); + optA.innerHTML = elementPrototypes[i]; + typeEditorSelection.appendChild(optA); + } + // set the proper value in the selection + typeEditorSelection.value = element.type(); + d3.select("#typeEditor").on("change", function (){ + elementTypeSelectionChanged(element); + }); + + + // add characteristics selection + var needChar = elementNeedsCharacteristics(element); + d3.select("#property_characteristics_Container").classed("hidden", !needChar); + if ( needChar === true ) { + addElementsCharacteristics(element); + } + var fullURI = d3.select("#element_iriEditor").node().value; + d3.select("#element_iriEditor").node().value = prefixModule.getPrefixRepresentationForFullURI(fullURI); + d3.select("#element_iriEditor").node().title = fullURI; + editSidebar.updateElementWidth(); + } + + }; + + editSidebar.updateGeneralOntologyInfo = function (){ + var preferredLanguage = graph && graph.language ? graph.language() : null; + + // get it from graph.options + var generalMetaObj = graph.options().getGeneralMetaObject(); + if ( generalMetaObj.hasOwnProperty("title") ) { + // title has language to it -.- + if ( typeof generalMetaObj.title === "object" ) { + d3.select("#titleEditor").node().value = languageTools.textInLanguage(generalMetaObj.title, preferredLanguage); + } else + d3.select("#titleEditor").node().value = generalMetaObj.title; + } + if ( generalMetaObj.hasOwnProperty("iri") ) d3.select("#iriEditor").node().value = generalMetaObj.iri; + if ( generalMetaObj.hasOwnProperty("version") ) d3.select("#versionEditor").node().value = generalMetaObj.version; + if ( generalMetaObj.hasOwnProperty("author") ) d3.select("#authorsEditor").node().value = generalMetaObj.author; + + + if ( generalMetaObj.hasOwnProperty("description") ) { + + if ( typeof generalMetaObj.description === "object" ) + d3.select("#descriptionEditor").node().value = + languageTools.textInLanguage(generalMetaObj.description, preferredLanguage); + else + d3.select("#descriptionEditor").node().value = generalMetaObj.description; + } + else + d3.select("#descriptionEditor").node().value = "No Description"; + }; + + editSidebar.updateElementWidth = function (){ + var height = window.innerHeight - 40; + var lsb_offset = d3.select("#logo").node().getBoundingClientRect().height + 5; + var lsb_height = height - lsb_offset; + d3.select("#containerForLeftSideBar").style("top", lsb_offset + "px"); + d3.select("#leftSideBarCollapseButton").style("top", lsb_offset + "px"); + d3.select("#containerForLeftSideBar").style("height", lsb_height + "px"); + + var div_width = d3.select("#generalDetailsEdit").node().getBoundingClientRect().width; + div_width += 10; + + var title_labelWidth = d3.select("#titleEditor-label").node().getBoundingClientRect().width + 20; + var iri_labelWidth = d3.select("#iriEditor-label").node().getBoundingClientRect().width + 20; + var version_labelWidth = d3.select("#versionEditor-label").node().getBoundingClientRect().width + 20; + var author_labelWidth = d3.select("#authorsEditor-label").node().getBoundingClientRect().width + 20; + //find max width; + var maxW = 0; + maxW = Math.max(maxW, title_labelWidth); + maxW = Math.max(maxW, iri_labelWidth); + maxW = Math.max(maxW, version_labelWidth); + maxW = Math.max(maxW, author_labelWidth); + + var meta_inputWidth = div_width - maxW - 10; + + d3.select("#titleEditor").style("width", meta_inputWidth + "px"); + d3.select("#iriEditor").style("width", meta_inputWidth + "px"); + d3.select("#versionEditor").style("width", meta_inputWidth + "px"); + d3.select("#authorsEditor").style("width", meta_inputWidth + "px"); + + + var elementIri_width = d3.select("#element_iriEditor-label").node().getBoundingClientRect().width + 20; + var elementLabel_width = d3.select("#element_labelEditor-label").node().getBoundingClientRect().width + 20; + var elementType_width = d3.select("#typeEditor-label").node().getBoundingClientRect().width + 20; + var elementDType_width = d3.select("#typeEditor_datatype-label").node().getBoundingClientRect().width + 20; + + maxW = 0; + maxW = Math.max(maxW, elementIri_width); + maxW = Math.max(maxW, elementLabel_width); + maxW = Math.max(maxW, elementType_width); + maxW = Math.max(maxW, elementDType_width); + var selectedElement_inputWidth = div_width - maxW - 10; + + d3.select("#element_iriEditor").style("width", selectedElement_inputWidth + "px"); + d3.select("#element_labelEditor").style("width", selectedElement_inputWidth + "px"); + d3.select("#typeEditor").style("width", selectedElement_inputWidth + 4 + "px"); + d3.select("#typeEditor_datatype").style("width", selectedElement_inputWidth + 4 + "px"); + + // update prefix Element width; + var containerWidth = d3.select("#containerForPrefixURL").node().getBoundingClientRect().width; + if ( containerWidth !== 0 ) { + var inputs = d3.selectAll(".prefixInput"); + if ( inputs.node() ) { + var prefixWidth = d3.selectAll(".prefixInput").node().getBoundingClientRect().width; + d3.selectAll(".prefixURL").style("width", containerWidth - prefixWidth - 45 + "px"); + } + } + }; + + function addElementsCharacteristics( element ){ + // save selected element for checkbox handler + selectedElementForCharacteristics = element; + var i; + // KILL old elements + var charSelectionNode = d3.select("#property_characteristics_Selection"); + var htmlCollection = charSelectionNode.node().children; + if ( htmlCollection ) { + var numEntries = htmlCollection.length; + for ( var q = 0; q < numEntries; q++ ) { + charSelectionNode.node().removeChild(htmlCollection[0]); + } + } + // datatypes kind of ignored by the elementsNeedCharacteristics function + // so we need to check if we are a node or not + if ( element.attributes().indexOf("external") > -1 ) { + // add external span to the div; + var externalCharSpan = charSelectionNode.append("span"); + externalCharSpan.classed("spanForCharSelection", true); + externalCharSpan.node().innerHTML = "external"; + } + var filterContainer, + filterCheckbox; + if ( elementTools.isNode(element) === true ) { + // add the deprecated characteristic; + var arrayOfNodeChars = ["deprecated"]; + for ( i = 0; i < arrayOfNodeChars.length; i++ ) { + filterContainer = charSelectionNode + .append("div") + .classed("checkboxContainer", true) + .style("padding-top", "2px"); + + filterCheckbox = filterContainer.append("input") + .classed("filterCheckbox", true) + .attr("id", "CharacteristicsCheckbox" + i) + .attr("type", "checkbox") + .attr("characteristics", arrayOfNodeChars[i]) + .property("checked", getPresentAttribute(element, arrayOfNodeChars[i])); + // + filterContainer.append("label") + .attr("for", "CharacteristicsCheckbox" + i) + .text(arrayOfNodeChars[i]); + + filterCheckbox.on("click", handleCheckBoxClick); + + } + } + + else { + // add the deprecated characteristic; + var arrayOfPropertyChars = ["deprecated", "inverse functional", "functional", "transitive"]; + if ( elementTools.isDatatypeProperty(element) === true ) { + arrayOfPropertyChars = ["deprecated", "functional"]; + } + for ( i = 0; i < arrayOfPropertyChars.length; i++ ) { + filterContainer = charSelectionNode + .append("div") + .classed("checkboxContainer", true) + .style("padding-top", "2px"); + + filterCheckbox = filterContainer.append("input") + .classed("filterCheckbox", true) + .attr("id", "CharacteristicsCheckbox" + i) + .attr("type", "checkbox") + .attr("characteristics", arrayOfPropertyChars[i]) + .property("checked", getPresentAttribute(element, arrayOfPropertyChars[i])); + // + filterContainer.append("label") + .attr("for", "CharacteristicsCheckbox" + i) + .text(arrayOfPropertyChars[i]); + + filterCheckbox.on("click", handleCheckBoxClick); + + } + } + + + } + + function getPresentAttribute( selectedElement, element ){ + return (selectedElement.attributes().indexOf(element) >= 0); + } + + function handleCheckBoxClick(){ + var checked = this.checked; + var char = this.getAttribute("characteristics"); + if ( checked === true ) { + addAttribute(selectedElementForCharacteristics, char); + } else { + removeAttribute(selectedElementForCharacteristics, char); + } + // graph.executeColorExternalsModule(); + selectedElementForCharacteristics.redrawElement(); + // workaround to have the node still be focused as rendering element + selectedElementForCharacteristics.focused(false); + selectedElementForCharacteristics.toggleFocus(); + + } + + + function addAttribute( selectedElement, char ){ + if ( selectedElement.attributes().indexOf(char) === -1 ) { + // not found add it + var attr = selectedElement.attributes(); + attr.push(char); + selectedElement.attributes(attr); + }// indications string update; + if ( selectedElement.indications().indexOf(char) === -1 ) { + var indications = selectedElement.indications(); + indications.push(char); + selectedElement.indications(indications); + } + // add visual attributes + var visAttr; + if ( selectedElement.visualAttributes().indexOf(char) === -1 ) { + visAttr = selectedElement.visualAttributes(); + visAttr.push(char); + selectedElement.visualAttributes(visAttr); + } + if ( getPresentAttribute(selectedElement, "external") && getPresentAttribute(selectedElement, "deprecated") ) { + visAttr = selectedElement.visualAttributes(); + var visInd = visAttr.indexOf("external"); + if ( visInd > -1 ) { + visAttr.splice(visInd, 1); + } + selectedElement.visualAttributes(visAttr); + } + + } + + function removeAttribute( selectedElement, element ){ + var attr = selectedElement.attributes(); + var indications = selectedElement.indications(); + var visAttr = selectedElement.visualAttributes(); + var attrInd = attr.indexOf(element); + if ( attrInd >= 0 ) { + attr.splice(attrInd, 1); + } + var indInd = indications.indexOf(element); + if ( indInd > -1 ) { + indications.splice(indInd, 1); + } + var visInd = visAttr.indexOf(element); + if ( visInd > -1 ) { + visAttr.splice(visInd, 1); + } + selectedElement.attributes(attr); + selectedElement.indications(indications); + selectedElement.visualAttributes(visAttr); + if ( element === "deprecated" ) { + // set its to its original Style + //typeBaseThign + // todo : fix all different types + if ( selectedElement.type() === "owl:Class" ) selectedElement.styleClass("class"); + if ( selectedElement.type() === "owl:DatatypeProperty" ) selectedElement.styleClass("datatypeproperty"); + if ( selectedElement.type() === "owl:ObjectProperty" ) selectedElement.styleClass("objectproperty"); + if ( selectedElement.type() === "owl:disjointWith" ) selectedElement.styleClass("disjointwith"); + } + } + + + function elementNeedsCharacteristics( element ){ + //TODO: Add more types + if ( element.type() === "owl:Thing" || + element.type() === "rdfs:subClassOf" || + element.type() === "rdfs:Literal" || + element.type() === "rdfs:Datatype" || + element.type() === "rdfs:disjointWith" ) + return false; + + // if (element.attributes().indexOf("external")|| + // element.attributes().indexOf("deprecated")) + // return true; + return true; + + } + + function elementTypeSelectionChanged( element ){ + if ( elementTools.isNode(element) ) { + if ( graph.changeNodeType(element) === false ) { + //restore old value + + if ( elementTools.isDatatype(element) === true ) { + + } + editSidebar.updateSelectionInformation(element); + } + } + + if ( elementTools.isProperty(element) ) { + if ( graph.changePropertyType(element) === false ) { + //restore old value + editSidebar.updateSelectionInformation(element); + + } + } + + } + + function getElementPrototypes( selectedElement ){ + var availiblePrototypes = []; + // TODO the text should be also complied with the prefixes loaded into the ontology + if ( elementTools.isProperty(selectedElement) ) { + if ( selectedElement.type() === "owl:DatatypeProperty" ) + availiblePrototypes.push("owl:DatatypeProperty"); + else { + availiblePrototypes.push("owl:ObjectProperty"); + // handling loops ! + if ( selectedElement.domain() !== selectedElement.range() ) { + availiblePrototypes.push("rdfs:subClassOf"); + } + availiblePrototypes.push("owl:disjointWith"); + availiblePrototypes.push("owl:allValuesFrom"); + availiblePrototypes.push("owl:someValuesFrom"); + } + return availiblePrototypes; + } + if ( selectedElement.renderType() === "rect" ) { + availiblePrototypes.push("rdfs:Literal"); + availiblePrototypes.push("rdfs:Datatype"); + } else { + availiblePrototypes.push("owl:Class"); + availiblePrototypes.push("owl:Thing"); + // TODO: ADD MORE TYPES + // availiblePrototypes.push("owl:complementOf"); + // availiblePrototypes.push("owl:disjointUnionOf"); + } + return availiblePrototypes; + } + + + function setupCollapsing(){ + // TODO : Decision , for now I want to have the control over the collapse expand operation of the + // TODO : elements, otherwise the old approach will also randomly collapse other containers + + // adapted version of this example: http://www.normansblog.de/simple-jquery-accordion/ + function collapseContainers( containers ){ + containers.classed("hidden", true); + } + + function expandContainers( containers ){ + containers.classed("hidden", false); + } + + var triggers = d3.selectAll(".accordion-trigger"); + + // Collapse all inactive triggers on startup + // collapseContainers(d3.selectAll(".accordion-trigger:not(.accordion-trigger-active) + div")); + + triggers.on("click", function (){ + var selectedTrigger = d3.select(this); + if ( selectedTrigger.classed("accordion-trigger-active") ) { + // Collapse the active (which is also the selected) trigger + collapseContainers(d3.select(selectedTrigger.node().nextElementSibling)); + selectedTrigger.classed("accordion-trigger-active", false); + } else { + // Collapse the other trigger ... + // collapseContainers(d3.selectAll(".accordion-trigger-active + div")); + + // ... and expand the selected one + expandContainers(d3.select(selectedTrigger.node().nextElementSibling)); + selectedTrigger.classed("accordion-trigger-active", true); + } + editSidebar.updateElementWidth(); + }); + } + + return editSidebar; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 341: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {module.exports = function ( graph ){ + var configMenu = {}, + checkboxes = []; + + + configMenu.setup = function (){ + var menuEntry = d3.select("#m_modes"); + menuEntry.on("mouseover", function (){ + var searchMenu = graph.options().searchMenu(); + searchMenu.hideSearchEntries(); + }); + + addCheckBox("showZoomSlider", "Zoom controls", "#zoomSliderOption", graph.options().zoomSlider().showSlider, 0); + addLabelWidthSlider("#maxLabelWidthSliderOption", "maxLabelWidth", "Max label width", graph.options().maxLabelWidth); + }; + + + function addLabelWidthSlider( selector, identifier, label, onChangeFunction ){ + var sliderContainer, + sliderValueLabel; + + sliderContainer = d3.select(selector) + .append("div") + .classed("distanceSliderContainer", true); + + var slider = sliderContainer.append("input") + .attr("id", identifier + "Slider") + .attr("type", "range") + .attr("min", 20) + .attr("max", 600) + .attr("value", onChangeFunction()) + .attr("step", 10); + sliderContainer.append("label") + .classed("description", true) + .attr("for", identifier + "Slider") + .attr("id", identifier + "DescriptionLabel") + .text(label); + sliderValueLabel = sliderContainer.append("label") + .classed("value", true) + .attr("for", identifier + "Slider") + .attr("id", identifier + "valueLabel") + .text(onChangeFunction()); + + slider.on("input", function (){ + var value = slider.property("value"); + onChangeFunction(value); + sliderValueLabel.text(value); + if ( graph.options().dynamicLabelWidth() === true ) + graph.animateDynamicLabelWidth(); + }); + + // add wheel event to the slider + slider.on("wheel", function (){ + if ( slider.node().disabled === true ) return; + var wheelEvent = d3.event; + var offset; + if ( wheelEvent.deltaY < 0 ) offset = 10; + if ( wheelEvent.deltaY > 0 ) offset = -10; + var oldVal = parseInt(slider.property("value")); + var newSliderValue = oldVal + offset; + if ( newSliderValue !== oldVal ) { + slider.property("value", newSliderValue); + onChangeFunction(newSliderValue); + slider.on("input")(); // << set text and update the graphStyles + } + d3.event.preventDefault(); + }); + } + + function addCheckBox( identifier, modeName, selector, onChangeFunc, updateLvl ){ + var configOptionContainer = d3.select(selector) + .append("div") + .classed("checkboxContainer", true); + var configCheckbox = configOptionContainer.append("input") + .classed("moduleCheckbox", true) + .attr("id", identifier + "ConfigCheckbox") + .attr("type", "checkbox") + .property("checked", onChangeFunc()); + + + configCheckbox.on("click", function ( silent ){ + var isEnabled = configCheckbox.property("checked"); + onChangeFunc(isEnabled); + if ( silent !== true ) { + // updating graph when silent is false or the parameter is not given. + if ( updateLvl === 1 ) { + graph.lazyRefresh(); + //graph.redrawWithoutForce + } + if ( updateLvl === 2 ) { + graph.update(); + } + + if ( updateLvl === 3 ) { + graph.updateDraggerElements(); + } + } + + }); + checkboxes.push(configCheckbox); + configOptionContainer.append("label") + .attr("for", identifier + "ConfigCheckbox") + .text(modeName); + } + + configMenu.setCheckBoxValue = function ( identifier, value ){ + for ( var i = 0; i < checkboxes.length; i++ ) { + var cbdId = checkboxes[i].attr("id"); + if ( cbdId === identifier ) { + checkboxes[i].property("checked", value); + break; + } + } + }; + + configMenu.getCheckBoxValue = function ( id ){ + for ( var i = 0; i < checkboxes.length; i++ ) { + var cbdId = checkboxes[i].attr("id"); + if ( cbdId === id ) { + return checkboxes[i].property("checked"); + } + } + }; + + configMenu.updateSettings = function (){ + var silent = true; + checkboxes.forEach(function ( checkbox ){ + checkbox.on("click")(silent); + }); + }; + + return configMenu; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 342: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {module.exports = function ( graph ){ + /** some constants **/ + var PREDEFINED = 0, + FILE_UPLOAD = 1, + JSON_URL = 2, + IRI_URL = 3; + + var PROGRESS_BAR_ERROR = 0, + PROGRESS_BAR_BUSY = 1, + PROGRESS_BAR_PERCENT = 2, + progressBarMode = 1; + + var loadingWasSuccessFul = false; + var missingImportsWarning = false; + var showLoadingDetails = false; + var visibilityStatus = true; + + var DEFAULT_JSON_NAME = "ontology"; // This file is loaded by default + var conversion_sessionId; + + /** variable defs **/ + var loadingModule = {}, + menuContainer = d3.select("#loading-info"), + loadingInfoContainer = d3.select("#loadingInfo-container"), + detailsButton = d3.select("#show-loadingInfo-button"), + closeButton = d3.select("#loadingIndicator_closeButton"), + ontologyMenu, + ontologyIdentifierFromURL; + + /** functon defs **/ + loadingModule.checkForScreenSize = function (){ + // checks for window size and adjusts the loading indicator + var w = graph.options().width(), + h = graph.options().height(); + + if ( w < 270 ) { + d3.select("#loading-info").classed("hidden", true); + } else { + // check if it should be visible + if ( visibilityStatus === true ) { + d3.select("#loading-info").classed("hidden", false); + } else { + d3.select("#loading-info").classed("hidden", true); + } + } + if ( h < 150 ) { + d3.select("#loadingInfo_msgBox").classed("hidden", true); + } else { + d3.select("#loadingInfo_msgBox").classed("hidden", false); + } + if ( h < 80 ) { + d3.select("#progressBarContext").classed("hidden", true); + d3.select("#layoutLoadingProgressBarContainer").style("height", "20px"); + } else { + d3.select("#progressBarContext").classed("hidden", false); + d3.select("#layoutLoadingProgressBarContainer").style("height", "50px"); + } + }; + + loadingModule.getMessageVisibilityStatus = function (){ + return visibilityStatus; + }; + + loadingModule.getProgressBarMode = function (){ + return progressBarMode; + }; + + loadingModule.successfullyLoadedOntology = function (){ + return loadingWasSuccessFul; + }; + + loadingModule.missingImportsWarning = function (){ + return missingImportsWarning; + }; + + loadingModule.setOntologyMenu = function ( m ){ + ontologyMenu = m; + }; + + loadingModule.showErrorDetailsMessage = function (){ + loadingModule.showLoadingIndicator(); + loadingModule.expandDetails(); + d3.select("#loadingIndicator_closeButton").classed("hidden", true); + loadingModule.scrollDownDetails(); + }; + + loadingModule.showWarningDetailsMessage = function (){ + d3.select("#currentLoadingStep").style("color", "#ff0"); + loadingModule.showLoadingIndicator(); + loadingModule.expandDetails(); + d3.select("#loadingIndicator_closeButton").classed("hidden", false); + loadingModule.scrollDownDetails(); + }; + + loadingModule.scrollDownDetails = function (){ + var scrollingElement = d3.select("#loadingInfo-container").node(); + scrollingElement.scrollTop = scrollingElement.scrollHeight; + }; + + loadingModule.hideLoadingIndicator = function (){ + d3.select("#loading-info").classed("hidden", true); + visibilityStatus = false; + }; + + loadingModule.showLoadingIndicator = function (){ + d3.select("#loading-info").classed("hidden", false); + visibilityStatus = true; + + }; + + /** -- SETUP -- **/ + loadingModule.setup = function (){ + // create connections for close and details button; + loadingInfoContainer.classed("hidden", !showLoadingDetails); + detailsButton.on("click", function (){ + showLoadingDetails = !showLoadingDetails; + loadingInfoContainer.classed("hidden", !showLoadingDetails); + detailsButton.classed("accordion-trigger-active", showLoadingDetails); + }); + + closeButton.on("click", function (){ + menuContainer.classed("hidden", true); + }); + loadingModule.setBusyMode(); + }; + + loadingModule.updateSize = function (){ + showLoadingDetails = !(loadingInfoContainer.classed("hidden")); + loadingInfoContainer.classed("hidden", !showLoadingDetails); + detailsButton.classed("accordion-trigger-active", showLoadingDetails); + }; + + loadingModule.getDetailsState = function (){ + return showLoadingDetails; + }; + + loadingModule.expandDetails = function (){ + showLoadingDetails = true; + loadingInfoContainer.classed("hidden", !showLoadingDetails); + detailsButton.classed("accordion-trigger-active", showLoadingDetails); + }; + + loadingModule.collapseDetails = function (){ + showLoadingDetails = false; + loadingInfoContainer.classed("hidden", !showLoadingDetails); + detailsButton.classed("accordion-trigger-active", showLoadingDetails); + }; + + loadingModule.setBusyMode = function (){ + d3.select("#currentLoadingStep").style("color", "#fff"); + d3.select("#progressBarValue").node().innherHTML = ""; + d3.select("#progressBarValue").style("width", "20%"); + d3.select("#progressBarValue").classed("busyProgressBar", true); + progressBarMode = PROGRESS_BAR_BUSY; + }; + + loadingModule.setSuccessful = function (){ + d3.select("#currentLoadingStep").style("color", "#0f0"); + }; + + loadingModule.setErrorMode = function (){ + d3.select("#currentLoadingStep").style("color", "#f00"); + d3.select("#progressBarValue").style("width", "0%"); + d3.select("#progressBarValue").classed("busyProgressBar", false); + d3.select("#progressBarValue").node().innherHTML = ""; + progressBarMode = PROGRESS_BAR_ERROR; + }; + + loadingModule.setPercentMode = function (){ + d3.select("#currentLoadingStep").style("color", "#fff"); + d3.select("#progressBarValue").classed("busyProgressBar", false); + d3.select("#progressBarValue").node().innherHTML = "0%"; + d3.select("#progressBarValue").style("width", "0%"); + progressBarMode = PROGRESS_BAR_PERCENT; + }; + + loadingModule.setPercentValue = function ( val ){ + d3.select("#progressBarValue").node().innherHTML = val; + }; + + loadingModule.emptyGraphContentError = function (){ + graph.clearGraphData(); + ontologyMenu.append_message_toLastBulletPoint("failed"); + ontologyMenu.append_message_toLastBulletPoint("
    Error: Received empty graph"); + loadingWasSuccessFul = false; + graph.handleOnLoadingError(); + loadingModule.setErrorMode(); + }; + + loadingModule.isThreadCanceled = function (){ + + }; + + loadingModule.initializeLoader = function ( storeCache ){ + if ( storeCache === true && graph.getCachedJsonObj() !== null ) { + // save cached ontology; + var cachedContent = JSON.stringify(graph.getCachedJsonObj()); + var cachedName = ontologyIdentifierFromURL; + ontologyMenu.setCachedOntology(cachedName, cachedContent); + } + conversion_sessionId = -10000; + ontologyMenu.setConversionID(conversion_sessionId); + ontologyMenu.stopLoadingTimer(); + graph.clearGraphData(); + loadingModule.setBusyMode(); + loadingModule.showLoadingIndicator(); + loadingModule.collapseDetails(); + missingImportsWarning = false; + d3.select("#loadingIndicator_closeButton").classed("hidden", true); + ontologyMenu.clearDetailInformation(); + }; + + /** ------------------ URL Interpreter -------------- **/ + loadingModule.parseUrlAndLoadOntology = function ( storeCache ){ + var autoStore = true; + if ( storeCache === false ) { + autoStore = false; + } + + graph.clearAllGraphData(); + loadingModule.initializeLoader(autoStore); + var urlString = String(location); + var parameterArray = identifyParameter(urlString); + ontologyIdentifierFromURL = DEFAULT_JSON_NAME; + loadGraphOptions(parameterArray); // identifies and loads configuration values + var loadingMethod = identifyOntologyLoadingMethod(ontologyIdentifierFromURL); + d3.select("#progressBarValue").node().innerHTML = " "; + switch ( loadingMethod ) { + case 0: + loadingModule.from_presetOntology(ontologyIdentifierFromURL); + break; + case 1: + loadingModule.from_FileUpload(ontologyIdentifierFromURL); + break; + case 2: + loadingModule.from_JSON_URL(ontologyIdentifierFromURL); + break; + case 3: + loadingModule.from_IRI_URL(ontologyIdentifierFromURL); + break; + default: + console.log("Could not identify loading method , or not IMPLEMENTED YET"); + } + }; + + /** ------------------- LOADING --------------------- **/ + // the loading module splits into 3 branches + // 1] PresetOntology Loading + // 2] File Upload + // 3] Load From URL / IRI + + loadingModule.from_JSON_URL = function ( fileName ){ + var filename = decodeURIComponent(fileName.slice("url=".length)); + ontologyIdentifierFromURL = filename; + + var ontologyContent = ""; + if ( ontologyMenu.cachedOntology(filename) ) { + ontologyMenu.append_bulletPoint("Loading already cached ontology: " + filename); + ontologyContent = ontologyMenu.cachedOntology(filename); + loadingWasSuccessFul = true; // cached Ontology should be true; + parseOntologyContent(ontologyContent); + + } else { + // involve the o2v conveter; + ontologyMenu.append_message("Retrieving ontology from JSON URL " + filename); + requestServerTimeStampForJSON_URL(ontologyMenu.callbackLoad_JSON_FromURL, ["read?json=" + filename, filename]); + } + }; + + function requestServerTimeStampForJSON_URL( callback, parameter ){ + d3.xhr("serverTimeStamp", "application/text", function ( error, request ){ + if ( error ) { + // could not get server timestamp -> no connection to owl2vowl + ontologyMenu.append_bulletPoint("Could not establish connection to OWL2VOWL service"); + fallbackForJSON_URL(callback, parameter); + } else { + conversion_sessionId = request.responseText; + ontologyMenu.setConversionID(conversion_sessionId); + parameter.push(conversion_sessionId); + callback(parameter); + } + }); + + } + + loadingModule.requestServerTimeStampForDirectInput = function ( callback, text ){ + d3.xhr("serverTimeStamp", "application/text", function ( error, request ){ + if ( error ) { + // could not get server timestamp -> no connection to owl2vowl + ontologyMenu.append_bulletPoint("Could not establish connection to OWL2VOWL service"); + loadingModule.setErrorMode(); + ontologyMenu.append_message_toLastBulletPoint("
    Could not connect to OWL2VOWL service "); + loadingModule.showErrorDetailsMessage(); + d3.select("#progressBarValue").style("width", "0%"); + d3.select("#progressBarValue").classed("busyProgressBar", false); + d3.select("#progressBarValue").text("0%"); + + } else { + conversion_sessionId = request.responseText; + ontologyMenu.setConversionID(conversion_sessionId); + callback(text, ["conversionID" + conversion_sessionId, conversion_sessionId]); + } + }); + }; + + loadingModule.from_IRI_URL = function ( fileName ){ + // owl2vowl converters the given ontology url and returns json file; + var filename = decodeURIComponent(fileName.slice("iri=".length)); + ontologyIdentifierFromURL = filename; + + var ontologyContent = ""; + if ( ontologyMenu.cachedOntology(filename) ) { + ontologyMenu.append_bulletPoint("Loading already cached ontology: " + filename); + ontologyContent = ontologyMenu.cachedOntology(filename); + loadingWasSuccessFul = true; // cached Ontology should be true; + parseOntologyContent(ontologyContent); + } else { + // involve the o2v conveter; + var encoded = encodeURIComponent(filename); + ontologyMenu.append_bulletPoint("Retrieving ontology from IRI: " + filename); + requestServerTimeStampForIRI_Converte(ontologyMenu.callbackLoad_Ontology_FromIRI, ["convert?iri=" + encoded, filename]); + } + }; + + loadingModule.fromFileDrop = function ( fileName, file ){ + d3.select("#progressBarValue").node().innerHTML = " "; + loadingModule.initializeLoader(false); + + ontologyMenu.append_bulletPoint("Retrieving ontology from dropped file: " + fileName); + var ontologyContent = ""; + + // two options here + //1] Direct Json Upload + if ( fileName.match(/\.json$/) ) { + ontologyMenu.setConversionID(-10000); + var reader = new FileReader(); + reader.readAsText(file); + reader.onload = function (){ + ontologyContent = reader.result; + ontologyIdentifierFromURL = fileName; + parseOntologyContent(ontologyContent); + }; + } else { + //2] File Upload to OWL2VOWL Converter + // 1) check if we can get a timeStamp; + var parameterArray = [file, fileName]; + requestServerTimeStamp(ontologyMenu.callbackLoadFromOntology, parameterArray); + } + }; + + + loadingModule.from_FileUpload = function ( fileName ){ + loadingModule.setBusyMode(); + var filename = decodeURIComponent(fileName.slice("file=".length)); + ontologyIdentifierFromURL = filename; + var ontologyContent = ""; + if ( ontologyMenu.cachedOntology(filename) ) { + ontologyMenu.append_bulletPoint("Loading already cached ontology: " + filename); + ontologyContent = ontologyMenu.cachedOntology(filename); + loadingWasSuccessFul = true; // cached Ontology should be true; + parseOntologyContent(ontologyContent); + + } else { + // d3.select("#currentLoadingStep").node().innerHTML="Loading ontology from file "+ filename; + ontologyMenu.append_bulletPoint("Retrieving ontology from file: " + filename); + // get the file + var selectedFile = d3.select("#file-converter-input").property("files")[0]; + // No selection -> this was triggered by the iri. Unequal names -> reuploading another file + if ( !selectedFile || (filename && (filename !== selectedFile.name)) ) { + ontologyMenu.append_message_toLastBulletPoint("
    No cached version of \"" + filename + "\" was found.
    Please reupload the file."); + loadingModule.setErrorMode(); + d3.select("#progressBarValue").classed("busyProgressBar", false); + graph.handleOnLoadingError(); + return; + } else { + filename = selectedFile.name; + } + + + // two options here + //1] Direct Json Upload + if ( filename.match(/\.json$/) ) { + ontologyMenu.setConversionID(-10000); + var reader = new FileReader(); + reader.readAsText(selectedFile); + reader.onload = function (){ + ontologyContent = reader.result; + ontologyIdentifierFromURL = filename; + parseOntologyContent(ontologyContent); + }; + } else { + //2] File Upload to OWL2VOWL Converter + // 1) check if we can get a timeStamp; + var parameterArray = [selectedFile, filename]; + requestServerTimeStamp(ontologyMenu.callbackLoadFromOntology, parameterArray); + } + } + }; + + function fallbackForJSON_URL( callback, parameter ){ + ontologyMenu.append_message_toLastBulletPoint("
    Trying to convert with other communication protocol."); + callback(parameter); + + } + + function fallbackConversion( parameter ){ + ontologyMenu.append_message_toLastBulletPoint("
    Trying to convert with other communication protocol."); + var file = parameter[0]; + var name = parameter[1]; + var formData = new FormData(); + formData.append("ontology", file); + + var xhr = new XMLHttpRequest(); + xhr.open("POST", "convert", true); + var ontologyContent = ""; + xhr.onload = function (){ + if ( xhr.status === 200 ) { + ontologyContent = xhr.responseText; + ontologyMenu.setCachedOntology(name, ontologyContent); + ontologyIdentifierFromURL = name; + missingImportsWarning = true; // using this variable for warnings + ontologyMenu.append_message_toLastBulletPoint("
    Success, but you are using a deprecated OWL2VOWL service!"); + parseOntologyContent(ontologyContent); + } + }; + + // check what this thing is doing; + xhr.onreadystatechange = function (){ + if ( xhr.readyState === 4 && xhr.status === 0 ) { + ontologyMenu.append_message_toLastBulletPoint("
    Old protocol also failed to establish connection to OWL2VOWL service!"); + loadingModule.setErrorMode(); + ontologyMenu.append_bulletPoint("Failed to load ontology"); + ontologyMenu.append_message_toLastBulletPoint("
    Could not connect to OWL2VOWL service "); + loadingModule.showErrorDetailsMessage(); + } + }; + xhr.send(formData); + } + + function requestServerTimeStampForIRI_Converte( callback, parameterArray ){ + d3.xhr("serverTimeStamp", "application/text", function ( error, request ){ + loadingModule.setBusyMode(); + if ( error ) { + // could not get server timestamp -> no connection to owl2vowl + ontologyMenu.append_bulletPoint("Could not establish connection to OWL2VOWL service"); + loadingModule.setErrorMode(); + ontologyMenu.append_bulletPoint("Failed to load ontology"); + ontologyMenu.append_message_toLastBulletPoint("
    Could not connect to OWL2VOWL service "); + loadingModule.showErrorDetailsMessage(); + } else { + conversion_sessionId = request.responseText; + ontologyMenu.setConversionID(conversion_sessionId); + // update paramater for new communication paradigm + parameterArray[0] = parameterArray[0] + "&sessionId=" + conversion_sessionId; + parameterArray.push(conversion_sessionId); + callback(parameterArray); + } + }); + } + + function requestServerTimeStamp( callback, parameterArray ){ + d3.xhr("serverTimeStamp", "application/text", function ( error, request ){ + if ( error ) { + // could not get server timestamp -> no connection to owl2vowl + ontologyMenu.append_bulletPoint("Could not establish connection to OWL2VOWL service"); + fallbackConversion(parameterArray); // tries o2v version0.3.4 communication + } else { + conversion_sessionId = request.responseText; + ontologyMenu.setConversionID(conversion_sessionId); + console.log("Request Session ID:" + conversion_sessionId); + callback(parameterArray[0], parameterArray[1], conversion_sessionId); + } + }); + } + + loadingModule.directInput = function ( text ){ + ontologyMenu.clearDetailInformation(); + parseOntologyContent(text); + }; + + loadingModule.loadFromOWL2VOWL = function ( ontoContent, filename ){ + loadingWasSuccessFul = false; + + var old = d3.select("#bulletPoint_container").node().innerHTML; + if ( old.indexOf("(with warnings)") !== -1 ) { + missingImportsWarning = true; + } + + if ( ontologyMenu.cachedOntology(ontoContent) ) { + ontologyMenu.append_bulletPoint("Loading already cached ontology: " + filename); + parseOntologyContent(ontoContent); + } else { // set parse the ontology content; + parseOntologyContent(ontoContent); + } + }; + + loadingModule.from_presetOntology = function ( selectedOntology ){ + ontologyMenu.append_bulletPoint("Retrieving ontology: " + selectedOntology); + loadPresetOntology(selectedOntology); + }; + + function loadPresetOntology( ontology ){ + // check if already cached in ontology menu? + var f2r; + var loadingNewOntologyForEditor=false; + if ( ontology.indexOf("new_ontology") !== -1 ) { + loadingModule.hideLoadingIndicator(); + graph.showEditorHintIfNeeded(); + f2r = "./data/new_ontology.json"; + loadingNewOntologyForEditor=true; + } + + loadingWasSuccessFul = false; + var ontologyContent = ""; + if ( ontologyMenu.cachedOntology(ontology) ) { + ontologyMenu.append_bulletPoint("Loading already cached ontology: " + ontology); + ontologyContent = ontologyMenu.cachedOntology(ontology); + loadingWasSuccessFul = true; // cached Ontology should be true; + loadingModule.showLoadingIndicator(); + parseOntologyContent(ontologyContent); + + } else { + // read the file name + + var fileToRead = "./data/" + ontology + ".json"; + if ( f2r ) { + fileToRead = f2r; + } // overwrite the newOntology Index + // read file + d3.xhr(fileToRead, "application/json", function ( error, request ){ + var loadingSuccessful = !error; + if ( loadingSuccessful ) { + ontologyContent = request.responseText; + parseOntologyContent(ontologyContent); + } else { + + if (loadingNewOntologyForEditor){ + ontologyContent = '{\n' + + ' "_comment": "Empty ontology for WebVOWL Editor",\n' + + ' "header": {\n' + + ' "languages": [\n' + + ' "en"\n' + + ' ],\n' + + ' "baseIris": [\n' + + ' "http://www.w3.org/2000/01/rdf-schema"\n' + + ' ],\n' + + ' "iri": "http://visualdataweb.org/newOntology/",\n' + + ' "title": {\n' + + ' "en": "New ontology"\n' + + ' },\n' + + ' "description": {\n' + + ' "en": "New ontology description"\n' + + ' }\n' + + ' },\n' + + ' "namespace": [],\n' + + ' "metrics": {\n' + + ' "classCount": 0,\n' + + ' "datatypeCount": 0,\n' + + ' "objectPropertyCount": 0,\n' + + ' "datatypePropertyCount": 0,\n' + + ' "propertyCount": 0,\n' + + ' "nodeCount": 0,\n' + + ' "individualCount": 0\n' + + ' }\n' + + '}\n'; + parseOntologyContent(ontologyContent); + }else{ + // some error occurred + ontologyMenu.append_bulletPoint("Failed to load: " + ontology); + if (error.status===0){ // assumption this is CORS error when running locally (error status == 0) + ontologyMenu.append_message_toLastBulletPoint(" ERROR STATUS: " + error.status); + if (window.location.toString().startsWith("file:/")){ + ontologyMenu.append_message_toLastBulletPoint("

    WebVOWL runs in a local instance.

    "); + ontologyMenu.append_message_toLastBulletPoint("

    CORS prevents to automatically load files on host system.

    "); + ontologyMenu.append_message_toLastBulletPoint("

    You can load preprocessed ontologies (i.e. VOWL-JSON files) using the upload feature in the ontology menu or by dragging the files and dropping them on the canvas.

    "); + ontologyMenu.append_message_toLastBulletPoint("

    Hint: Note that the conversion of ontologies into the VOWL-JSON format is not part of WebVOWL but requires an additional converter such as OWL2VOWL.

    "); + ontologyMenu.append_message_toLastBulletPoint("

    Ontologies can be created using the editor mode (i.e. activate editing mode in Modes menu and create a new ontology using the Ontology menu.

    "); + } + }else { + ontologyMenu.append_message_toLastBulletPoint(" ERROR STATUS: " + error.status); + } + + + + graph.handleOnLoadingError(); + loadingModule.setErrorMode(); + } + } + }); + } + } + + + /** -- PARSE JSON CONTENT -- **/ + function parseOntologyContent( content ){ + + ontologyMenu.append_bulletPoint("Reading ontology graph ... "); + var _loader = ontologyMenu.getLoadingFunction(); + _loader(content, ontologyIdentifierFromURL, "noAlternativeNameYet"); + } + + loadingModule.notValidJsonFile = function (){ + graph.clearGraphData(); + ontologyMenu.append_message_toLastBulletPoint(" failed"); + ontologyMenu.append_message_toLastBulletPoint("
    Error: Received empty graph"); + loadingWasSuccessFul = false; + graph.handleOnLoadingError(); + + }; + + loadingModule.validJsonFile = function (){ + ontologyMenu.append_message_toLastBulletPoint("done"); + loadingWasSuccessFul = true; + }; + + + /** --- HELPER FUNCTIONS **/ + + function identifyParameter( url ){ + var numParameters = (url.match(/#/g) || []).length; + // create parameters array + var paramArray = []; + if ( numParameters > 0 ) { + var tokens = url.split("#"); + // skip the first token since it is the address of the server + for ( var i = 1; i < tokens.length; i++ ) { + if ( tokens[i].length === 0 ) { + // this token belongs actually to the last paramArray + paramArray[paramArray.length - 1] = paramArray[paramArray.length - 1] + "#"; + } else { + paramArray.push(tokens[i]); + } + } + } + return paramArray; + } + + + function loadGraphOptions( parameterArray ){ + var optString = "opts="; + + function loadDefaultConfig(){ + graph.options().setOptionsFromURL(graph.options().defaultConfig(), false); + } + + function loadCustomConfig( opts ){ + var changeEditingFlag = false; + var defObj = graph.options().defaultConfig(); + for ( var i = 0; i < opts.length; i++ ) { + var keyVal = opts[i].split('='); + if ( keyVal[0] === "editorMode" ) { + changeEditingFlag = true; + } + defObj[keyVal[0]] = keyVal[1]; + } + graph.options().setOptionsFromURL(defObj, changeEditingFlag); + } + + function identifyOptions( paramArray ){ + if ( paramArray[0].indexOf(optString) >= 0 ) { + // parse the parameters; + var parameterLength = paramArray[0].length; + var givenOptionsStr = paramArray[0].substr(5, parameterLength - 6); + var optionsArray = givenOptionsStr.split(';'); + loadCustomConfig(optionsArray); + } else { + ontologyIdentifierFromURL = paramArray[0]; + loadDefaultConfig(); + } + } + + function identifyOptionsAndOntology( paramArray ){ + + if ( paramArray[0].indexOf(optString) >= 0 ) { + // parse the parameters; + var parameterLength = paramArray[0].length; + var givenOptionsStr = paramArray[0].substr(5, parameterLength - 6); + var optionsArray = givenOptionsStr.split(';'); + loadCustomConfig(optionsArray); + } else { + loadDefaultConfig(); + } + ontologyIdentifierFromURL = paramArray[1]; + } + + switch ( parameterArray.length ) { + case 0: + loadDefaultConfig(); + break; + case 1: + identifyOptions(parameterArray); + break; + case 2: + identifyOptionsAndOntology(parameterArray); + break; + default : + console.log("To many input parameters , loading default config"); + loadDefaultConfig(); + ontologyIdentifierFromURL = "ERROR_TO_MANY_INPUT_PARAMETERS"; + } + } + + + function identifyOntologyLoadingMethod( url ){ + var iriKey = "iri="; + var urlKey = "url="; + var fileKey = "file="; + + var method = -1; + if ( url.substr(0, fileKey.length) === fileKey ) { + method = FILE_UPLOAD; + } else if ( url.substr(0, urlKey.length) === urlKey ) { + method = JSON_URL; + } else if ( url.substr(0, iriKey.length) === iriKey ) { + method = IRI_URL; + } else { + method = PREDEFINED; + } + return method; + } + + return loadingModule; + } + ; + + + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 343: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {module.exports = function ( graph ){ + /** variable defs **/ + var warningModule = {}; + var superContainer = d3.select("#WarningErrorMessages"); + var _messageContainers = []; + var _messageContext = []; + var _visibleStatus = []; + + var _filterHintId; + var _editorHintId; + var _messageId = -1; + superContainer.style("display", "inline-block"); + var cssStyleIndex = 0; + var styleSelectorIndex = 2; + + + // helper for standalone webvowl in chrome + function createCSSSelector( name, rules ){ + var style = document.createElement('style'); + style.type = 'text/css'; + document.getElementsByTagName('head')[0].appendChild(style); + if ( !(style.sheet || {}).insertRule ) + (style.styleSheet || style.sheet).addRule(name, rules); + else + style.sheet.insertRule(name + "{" + rules + "}", 0); + } + + + function findCSS_Index(){ + createCSSSelector("@keyframes msg_CollapseAnimation", " 0% { top: 0; } 100% { top: -400px;}"); + console.log(document.styleSheets ); + } + + findCSS_Index(); + + warningModule.addMessageBox = function (){ + + // add a container; + _messageId++; + var messageContainer = d3.select("#WarningErrorMessages").append("div"); + messageContainer.node().id = "messageContainerId_" + _messageId; + + var messageContext = messageContainer.append("div"); + messageContext.node().id = "messageContextId_" + _messageId; + messageContext.style("top", "0"); + messageContainer.style("position", "relative"); + messageContainer.style("width", "100%"); + //save in array + _messageContainers.push(messageContainer); + _messageContext.push(messageContext); + + // add animation to the container + messageContainer.node().addEventListener("animationend", _msgContainer_animationEnd); + + // set visible flag that is used in end of animation + _visibleStatus[_messageId] = true; + return _messageId; + }; + + function _msgContainer_animationEnd(){ + var containerId = this.id; + var tokens = containerId.split("_")[1]; + var mContainer = d3.select("#" + containerId); + // get number of children + mContainer.classed("hidden", !_visibleStatus[tokens]); + // clean up DOM + if ( !_visibleStatus[tokens] ) { + mContainer.remove(); + _messageContext[tokens] = null; + _messageContainers[tokens] = null; + } + // remove event listener + var c = d3.select(this); + // c.node().removeEventListener("animationend",_msgContainer_animationEnd); + } + + warningModule.createMessageContext = function ( id ){ + var warningContainer = _messageContext[id]; + var moduleContainer = _messageContainers[id]; + var generalHint = warningContainer.append('div'); + generalHint.node().innerHTML = ""; + _editorHintId = id; + /** Editing mode activated. You can now modify an existing ontology or create a new one via the ontology menu. You can save any ontology using the export menu (and exporting it as TTL file).**/ + generalHint.node().innerHTML += "Editing mode activated.
    " + + "You can now modify an existing ontology or create a new one via the ontology menu.
    " + + "You can save any ontology using the export menu (and exporting it as TTL file)."; + + generalHint.style("padding", "5px"); + generalHint.style("line-height", "1.2em"); + generalHint.style("font-size", "1.2em"); + + + var ul = warningContainer.append('ul'); + ul.append('li').node().innerHTML = "Create a class with double click / tap on empty canvas area."; + ul.append('li').node().innerHTML = "Edit names with double click / tap on element."; + ul.append('li').node().innerHTML = "Selection of default constructors is provided in the left sidebar."; + ul.append('li').node().innerHTML = "Additional editing functionality is provided in the right sidebar."; + + + var gotItButton = warningContainer.append("label"); + gotItButton.node().id = "killWarningErrorMessages_" + id; + gotItButton.node().innerHTML = "Got It"; + gotItButton.on("click", warningModule.closeMessage); + + moduleContainer.classed("hidden", false); + moduleContainer.style("-webkit-animation-name", "warn_ExpandAnimation"); + moduleContainer.style("-webkit-animation-duration", "0.5s"); + }; + + warningModule.showMessage = function ( id ){ + var moduleContainer = _messageContainers[id]; + moduleContainer.classed("hidden", false); + moduleContainer.style("-webkit-animation-name", "warn_ExpandAnimation"); + moduleContainer.style("-webkit-animation-duration", "0.5s"); + }; + + warningModule.closeMessage = function ( id ){ + var nId; + if ( id === undefined ) { + var givenId = this.id; + nId = givenId.split("_")[1]; + } else { + nId = id; + } + if ( id && id.indexOf("_") !== -1 ) { + nId = id.split("_")[1]; + } + _visibleStatus[nId] = false; + // get module; + var moduleContainer = _messageContainers[nId]; + moduleContainer.style("-webkit-animation-name", "warn_CollapseAnimation"); + moduleContainer.style("-webkit-animation-duration", "0.5s"); + + var m_height = moduleContainer.node().getBoundingClientRect().height; + + // find my id in the children + var pNode = moduleContainer.node().parentNode; + + var followingChildren = []; + var pChild = pNode.children; + var pChild_len = pChild.length; + var containerId = moduleContainer.node().id; + var found_me = false; + for ( var i = 0; i < pChild_len; i++ ) { + if ( found_me === true ) { + followingChildren.push(pChild[i].id); + } + + if ( containerId === pChild[i].id ) { + found_me = true; + } + } + + for ( var fc = 0; fc < followingChildren.length; fc++ ) { + var child = d3.select("#" + followingChildren[fc]); + // get the document style and overwrite it; + var superCss = document.styleSheets[styleSelectorIndex].cssRules[cssStyleIndex]; + // remove the existing 0% and 100% rules + superCss.deleteRule("0%"); + superCss.deleteRule("100%"); + + superCss.appendRule("0% {top: 0;}"); + superCss.appendRule("100% {top: -" + m_height + "px;"); + + child.style("-webkit-animation-name", "msg_CollapseAnimation"); + child.style("-webkit-animation-duration", "0.5s"); + child.node().addEventListener("animationend", _child_animationEnd); + } + }; + + function _child_animationEnd(){ + var c = d3.select(this); + c.style("-webkit-animation-name", ""); + c.style("-webkit-animation-duration", ""); + c.node().removeEventListener("animationend", _child_animationEnd); + } + + warningModule.closeFilterHint = function (){ + if ( _messageContainers[_filterHintId] ) { + _messageContainers[_filterHintId].classed("hidden", true); + _messageContainers[_filterHintId].remove(); + _messageContainers[_filterHintId] = null; + _messageContext[_filterHintId] = null; + _visibleStatus[_filterHintId] = false; + } + }; + + warningModule.showEditorHint = function (){ + var id = warningModule.addMessageBox(); + warningModule.createMessageContext(id); + }; + + warningModule.showExporterWarning=function (){ + warningModule.showWarning("Can not export ontology", "Detected unsupported ontology axioms, (e.g. owl:Union)", "Ontology is not exported", 1, false); + }; + + + + warningModule.responseWarning = function ( header, reason, action, callback, parameterArray, forcedWarning ){ + var id = warningModule.addMessageBox(); + var warningContainer = _messageContext[id]; + var moduleContainer = _messageContainers[id]; + _visibleStatus[id] = true; + d3.select("#blockGraphInteractions").classed("hidden", false); + var graphWidth = 0.5 * graph.options().width(); + + if ( header.length > 0 ) { + var head = warningContainer.append("div"); + head.style("padding", "5px"); + var titleHeader = head.append("div"); + // some classes + titleHeader.style("display", "inline-flex"); + titleHeader.node().innerHTML = "Warning:"; + titleHeader.style("padding-right", "3px"); + var msgHeader = head.append("div"); + // some classes + msgHeader.style("display", "inline-flex"); + msgHeader.style("max-width", graphWidth + "px"); + + msgHeader.node().innerHTML = header; + } + if ( reason.length > 0 ) { + var reasonContainer = warningContainer.append("div"); + reasonContainer.style("padding", "5px"); + var reasonHeader = reasonContainer.append("div"); + // some classes + reasonHeader.style("display", "inline-flex"); + reasonHeader.style("padding-right", "3px"); + + reasonHeader.node().innerHTML = "Reason:"; + var msgReason = reasonContainer.append("div"); + // some classes + msgReason.style("display", "inline-flex"); + msgReason.style("max-width", graphWidth + "px"); + msgReason.node().innerHTML = reason; + } + if ( action.length > 0 ) { + var actionContainer = warningContainer.append("div"); + actionContainer.style("padding", "5px"); + var actionHeader = actionContainer.append("div"); + // some classes + actionHeader.style("display", "inline-flex"); + actionHeader.style("padding-right", "8px"); + actionHeader.node().innerHTML = "Action:"; + var msgAction = actionContainer.append("div"); + // some classes + msgAction.style("display", "inline-flex"); + msgAction.style("max-width", graphWidth + "px"); + msgAction.node().innerHTML = action; + } + + var gotItButton = warningContainer.append("label"); + gotItButton.node().id = "killWarningErrorMessages_" + id; + gotItButton.node().innerHTML = "Continue"; + gotItButton.on("click", function (){ + warningModule.closeMessage(this.id); + d3.select("#blockGraphInteractions").classed("hidden", true); + callback(parameterArray[0], parameterArray[1], parameterArray[2], parameterArray[3]); + }); + warningContainer.append("span").node().innerHTML = "|"; + var cancelButton = warningContainer.append("label"); + cancelButton.node().id = "cancelButton_" + id; + cancelButton.node().innerHTML = "Cancel"; + cancelButton.on("click", function (){ + warningModule.closeMessage(this.id); + d3.select("#blockGraphInteractions").classed("hidden", true); + }); + moduleContainer.classed("hidden", false); + moduleContainer.style("-webkit-animation-name", "warn_ExpandAnimation"); + moduleContainer.style("-webkit-animation-duration", "0.5s"); + }; + + warningModule.showFilterHint = function (){ + var id = warningModule.addMessageBox(); + var warningContainer = _messageContext[id]; + var moduleContainer = _messageContainers[id]; + _visibleStatus[id] = true; + + _filterHintId = id; + var generalHint = warningContainer.append('div'); + /** Editing mode activated. You can now modify an existing ontology or create a new one via the ontology menu. You can save any ontology using the export menu (and exporting it as TTL file).**/ + generalHint.node().innerHTML = "Collapsing filter activated.
    " + + "The number of visualized elements has been automatically reduced.
    " + + "Use the degree of collapsing slider in the filter menu to adjust the visualization.

    " + + "Note: A performance decrease could be experienced with a growing amount of visual elements in the graph."; + + + generalHint.style("padding", "5px"); + generalHint.style("line-height", "1.2em"); + generalHint.style("font-size", "1.2em"); + + var gotItButton = warningContainer.append("label"); + gotItButton.node().id = "killFilterMessages_" + id; + gotItButton.node().innerHTML = "Got It"; + gotItButton.on("click", warningModule.closeMessage); + + moduleContainer.classed("hidden", false); + moduleContainer.style("-webkit-animation-name", "warn_ExpandAnimation"); + moduleContainer.style("-webkit-animation-duration", "0.5s"); + }; + + warningModule.showMultiFileUploadWarning = function (){ + var id = warningModule.addMessageBox(); + var warningContainer = _messageContext[id]; + var moduleContainer = _messageContainers[id]; + _visibleStatus[id] = true; + + _filterHintId = id; + var generalHint = warningContainer.append('div'); + + generalHint.node().innerHTML = "Uploading multiple files is not supported.
    "; + + generalHint.style("padding", "5px"); + generalHint.style("line-height", "1.2em"); + generalHint.style("font-size", "1.2em"); + + var gotItButton = warningContainer.append("label"); + gotItButton.node().id = "killFilterMessages_" + id; + gotItButton.node().innerHTML = "Got It"; + gotItButton.on("click", warningModule.closeMessage); + + moduleContainer.classed("hidden", false); + moduleContainer.style("-webkit-animation-name", "warn_ExpandAnimation"); + moduleContainer.style("-webkit-animation-duration", "0.5s"); + }; + + warningModule.showWarning = function ( header, reason, action, type, forcedWarning, additionalOpts ){ + var id = warningModule.addMessageBox(); + var warningContainer = _messageContext[id]; + var moduleContainer = _messageContainers[id]; + _visibleStatus[id] = true; + + // add new one; + var graphWidth = 0.5 * graph.options().width(); + + if ( header.length > 0 ) { + var head = warningContainer.append("div"); + head.style("padding", "5px"); + var titleHeader = head.append("div"); + // some classes + titleHeader.style("display", "inline-flex"); + titleHeader.node().innerHTML = "Warning:"; + titleHeader.style("padding-right", "3px"); + var msgHeader = head.append("div"); + // some classes + msgHeader.style("display", "inline-flex"); + msgHeader.style("max-width", graphWidth + "px"); + + msgHeader.node().innerHTML = header; + } + if ( reason.length > 0 ) { + var reasonContainer = warningContainer.append("div"); + reasonContainer.style("padding", "5px"); + var reasonHeader = reasonContainer.append("div"); + // some classes + reasonHeader.style("display", "inline-flex"); + reasonHeader.style("padding-right", "3px"); + + reasonHeader.node().innerHTML = "Reason:"; + var msgReason = reasonContainer.append("div"); + // some classes + msgReason.style("display", "inline-flex"); + msgReason.style("max-width", graphWidth + "px"); + msgReason.node().innerHTML = reason; + } + if ( action.length > 0 ) { + var actionContainer = warningContainer.append("div"); + actionContainer.style("padding", "5px"); + var actionHeader = actionContainer.append("div"); + // some classes + actionHeader.style("display", "inline-flex"); + actionHeader.style("padding-right", "8px"); + actionHeader.node().innerHTML = "Action:"; + var msgAction = actionContainer.append("div"); + // some classes + msgAction.style("display", "inline-flex"); + msgAction.style("max-width", graphWidth + "px"); + msgAction.node().innerHTML = action; + } + + var gotItButton; + if ( type === 1 ) { + gotItButton = warningContainer.append("label"); + gotItButton.node().id = "killWarningErrorMessages_" + id; + gotItButton.node().innerHTML = "Got It"; + gotItButton.on("click", warningModule.closeMessage); + } + + if ( type === 2 ) { + gotItButton = warningContainer.append("label"); + gotItButton.node().id = "killWarningErrorMessages_" + id; + gotItButton.node().innerHTML = "Got It"; + gotItButton.on("click", warningModule.closeMessage); + warningContainer.append("span").node().innerHTML = "|"; + var zoomToElementButton = warningContainer.append("label"); + zoomToElementButton.node().id = "zoomElementThing_" + id; + zoomToElementButton.node().innerHTML = "Zoom to element "; + zoomToElementButton.on("click", function (){ + // assume the additional Element is for halo; + graph.zoomToElementInGraph(additionalOpts); + }); + warningContainer.append("span").node().innerHTML = "|"; + var ShowElementButton = warningContainer.append("label"); + ShowElementButton.node().id = "showElementThing_" + id; + ShowElementButton.node().innerHTML = "Indicate element"; + ShowElementButton.on("click", function (){ + // assume the additional Element is for halo; + if ( additionalOpts.halo() === false ) { + additionalOpts.drawHalo(); + graph.updatePulseIds([additionalOpts.id()]); + } else { + additionalOpts.removeHalo(); + additionalOpts.drawHalo(); + graph.updatePulseIds([additionalOpts.id()]); + } + }); + } + moduleContainer.classed("hidden", false); + moduleContainer.style("-webkit-animation-name", "warn_ExpandAnimation"); + moduleContainer.style("-webkit-animation-duration", "0.5s"); + moduleContainer.classed("hidden", false); + }; + + return warningModule; + }; + + + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 344: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {module.exports = function ( graph ){ + /** variable defs **/ + var directInputModule = {}; + var inputContainer = d3.select("#DirectInputContent"); + inputContainer.style("top", "0"); + inputContainer.style("position", "absolute"); + var textArea = d3.select("#directInputTextArea"); + var visibleContainer = false; + + inputContainer.style("border", "1px solid black"); + inputContainer.style("padding", "5px"); + inputContainer.style("background", "#fff"); + + + // connect upload and close button; + directInputModule.handleDirectUpload = function (){ + + var text = textArea.node().value; + var jsonOBJ; + try { + jsonOBJ = JSON.parse(text); + graph.options().loadingModule().directInput(text); + // close if successful + if ( jsonOBJ.class.length > 0 ) { + directInputModule.setDirectInputMode(false); + } + } + catch ( e ) { + try { + // Initialize; + graph.options().loadingModule().initializeLoader(); + graph.options().loadingModule().requestServerTimeStampForDirectInput( + graph.options().ontologyMenu().callbackLoad_Ontology_From_DirectInput, text + ); + } catch ( error2 ) { + console.log("Error " + error2); + d3.select("#Error_onLoad").classed("hidden", false); + d3.select("#Error_onLoad").node().innerHTML = "Failed to convert the input!"; + } + } + }; + + directInputModule.handleCloseButton = function (){ + directInputModule.setDirectInputMode(false); + }; + + directInputModule.updateLayout = function (){ + var w = graph.options().width(); + var h = graph.options().height(); + textArea.style("width", 0.4 * w + "px"); + textArea.style("height", 0.7 * h + "px"); + }; + + directInputModule.setDirectInputMode = function ( val ){ + if ( !val ) { + visibleContainer = !visibleContainer; + } + else { + visibleContainer = val; + } + // update visibility; + directInputModule.updateLayout(); + d3.select("#Error_onLoad").classed("hidden", true); + inputContainer.classed("hidden", !visibleContainer); + }; + + + d3.select("#directUploadBtn").on("click", directInputModule.handleDirectUpload); + d3.select("#close_directUploadBtn").on("click", directInputModule.handleCloseButton); + + return directInputModule; + }; + + + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }) + +/******/ }); diff --git a/mo/webvowl/js/webvowl.js b/mo/webvowl/js/webvowl.js new file mode 100644 index 0000000..cf6ea16 --- /dev/null +++ b/mo/webvowl/js/webvowl.js @@ -0,0 +1,25345 @@ +webvowl = +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; + +/******/ // The require function +/******/ function __webpack_require__(moduleId) { + +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; + +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; + +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); + +/******/ // Flag the module as loaded +/******/ module.loaded = true; + +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } + + +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; + +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; + +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; + +/******/ // Load entry module and return exports +/******/ return __webpack_require__(0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { + + __webpack_require__(1); + + var nodeMap = __webpack_require__(5)(); + var propertyMap = __webpack_require__(40)(); + + + var webvowl = {}; + webvowl.graph = __webpack_require__(57); + webvowl.options = __webpack_require__(64); + webvowl.version = "1.1.7"; + + webvowl.util = {}; + webvowl.util.constants = __webpack_require__(12); + webvowl.util.languageTools = __webpack_require__(11); + webvowl.util.elementTools = __webpack_require__(63); + webvowl.util.prefixTools = __webpack_require__(72); + webvowl.modules = {}; + webvowl.modules.colorExternalsSwitch = __webpack_require__(73); + webvowl.modules.compactNotationSwitch = __webpack_require__(74); + webvowl.modules.datatypeFilter = __webpack_require__(75); + webvowl.modules.disjointFilter = __webpack_require__(77); + webvowl.modules.focuser = __webpack_require__(78); + webvowl.modules.emptyLiteralFilter = __webpack_require__(79); + webvowl.modules.nodeDegreeFilter = __webpack_require__(80); + webvowl.modules.nodeScalingSwitch = __webpack_require__(81); + webvowl.modules.objectPropertyFilter = __webpack_require__(82); + webvowl.modules.pickAndPin = __webpack_require__(83); + webvowl.modules.selectionDetailsDisplayer = __webpack_require__(315); + webvowl.modules.setOperatorFilter = __webpack_require__(316); + webvowl.modules.statistics = __webpack_require__(317); + webvowl.modules.subclassFilter = __webpack_require__(318); + + + webvowl.nodes = {}; + nodeMap.entries().forEach(function ( entry ){ + mapEntryToIdentifier(webvowl.nodes, entry); + }); + + webvowl.properties = {}; + propertyMap.entries().forEach(function ( entry ){ + mapEntryToIdentifier(webvowl.properties, entry); + }); + + function mapEntryToIdentifier( map, entry ){ + var identifier = entry.key.replace(":", "").toLowerCase(); + map[identifier] = entry.value; + } + + + module.exports = webvowl; + + +/***/ }), +/* 1 */ +/***/ (function(module, exports) { + + // removed by extract-text-webpack-plugin + +/***/ }), +/* 2 */, +/* 3 */, +/* 4 */, +/* 5 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var nodes = []; + nodes.push(__webpack_require__(7)); + nodes.push(__webpack_require__(18)); + nodes.push(__webpack_require__(19)); + nodes.push(__webpack_require__(26)); + nodes.push(__webpack_require__(27)); + nodes.push(__webpack_require__(28)); + nodes.push(__webpack_require__(29)); + nodes.push(__webpack_require__(30)); + nodes.push(__webpack_require__(31)); + nodes.push(__webpack_require__(32)); + nodes.push(__webpack_require__(33)); + nodes.push(__webpack_require__(34)); + nodes.push(__webpack_require__(38)); + nodes.push(__webpack_require__(39)); + + var map = d3.map(nodes, function ( Prototype ){ + return new Prototype().type(); + }); + + module.exports = function (){ + return map; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 6 */ +/***/ (function(module, exports) { + + module.exports = d3; + +/***/ }), +/* 7 */ +/***/ (function(module, exports, __webpack_require__) { + + var RoundNode = __webpack_require__(8); + + module.exports = (function (){ + + var o = function ( graph ){ + RoundNode.apply(this, arguments); + + this.attributes(["external"]) + .type("ExternalClass"); + }; + o.prototype = Object.create(RoundNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 8 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseNode = __webpack_require__(9); + var CenteringTextElement = __webpack_require__(14); + var drawTools = __webpack_require__(17)(); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseNode.apply(this, arguments); + + var that = this, + collapsible = false, + radius = 50, + collapsingGroupElement, + pinGroupElement, + haloGroupElement = null, + rectangularRepresentation = false, + renderingElement, + textBlock; + + this.setRectangularRepresentation = function ( val ){ + rectangularRepresentation = val; + }; + this.getRectangularRepresentation = function (){ + return rectangularRepresentation; + }; + + this.getHalos = function (){ + return haloGroupElement; + }; + + // Properties + this.collapsible = function ( p ){ + if ( !arguments.length ) return collapsible; + collapsible = p; + return this; + }; + + this.textBlock = function ( p ){ + if ( !arguments.length ) return textBlock; + textBlock = p; + return this; + }; + + /** + * This might not be equal to the actual radius, because the instance count is used for its calculation. + * @param p + * @returns {*} + */ + this.radius = function ( p ){ + if ( !arguments.length ) return radius; + radius = p; + return this; + }; + + + // Functions + this.setHoverHighlighting = function ( enable ){ + that.nodeElement().selectAll("circle").classed("hovered", enable); + }; + + this.textWidth = function ( yOffset ){ + var availableWidth = this.actualRadius() * 2; + + // if the text is not placed in the center of the circle, it can't have the full width + if ( yOffset ) { + var relativeOffset = Math.abs(yOffset) / this.actualRadius(); + var isOffsetInsideOfNode = relativeOffset <= 1; + + if ( isOffsetInsideOfNode ) { + availableWidth = Math.cos(relativeOffset) * availableWidth; + } else { + availableWidth = 0; + } + } + + return availableWidth; + }; + + this.toggleFocus = function (){ + that.focused(!that.focused()); + if ( that.nodeElement() ) + that.nodeElement().select("circle").classed("focused", that.focused()); + graph.resetSearchHighlight(); + graph.options().searchMenu().clearText(); + + }; + + this.actualRadius = function (){ + if ( !graph.options().scaleNodesByIndividuals() || that.individuals().length <= 0 ) { + return that.radius(); + } else { + // we could "listen" for radius and maxIndividualCount changes, but this is easier + var MULTIPLIER = 8, + additionalRadius = Math.log(that.individuals().length + 1) * MULTIPLIER + 5; + + return that.radius() + additionalRadius; + } + }; + + this.distanceToBorder = function (){ + return that.actualRadius(); + }; + + this.removeHalo = function (){ + if ( that.halo() ) { + that.halo(false); + if ( haloGroupElement ) { + haloGroupElement.remove(); + } + } + }; + + this.drawHalo = function ( pulseAnimation ){ + that.halo(true); + if ( rectangularRepresentation === true ) { + haloGroupElement = drawTools.drawRectHalo(that.nodeElement(), 80, 80, 5); + } else { + haloGroupElement = drawTools.drawHalo(that.nodeElement(), that.actualRadius(), this.removeHalo); + } + if ( pulseAnimation === false ) { + var pulseItem = haloGroupElement.selectAll(".searchResultA"); + pulseItem.classed("searchResultA", false); + pulseItem.classed("searchResultB", true); + pulseItem.attr("animationRunning", false); + } + }; + + /** + * Draws the pin on a round node on a position depending on its radius. + */ + this.drawPin = function (){ + that.pinned(true); + var dx = (-3.5 / 5) * that.actualRadius(), + dy = (-7 / 10) * that.actualRadius(); + pinGroupElement = drawTools.drawPin(that.nodeElement(), dx, dy, this.removePin, graph.options().showDraggerObject, graph.options().useAccuracyHelper()); + + + }; + + /** + * Removes the pin and refreshs the graph to update the force layout. + */ + this.removePin = function (){ + that.pinned(false); + if ( pinGroupElement ) { + pinGroupElement.remove(); + } + graph.updateStyle(); + }; + + this.drawCollapsingButton = function (){ + + collapsingGroupElement = that.nodeElement() + .append("g") + .classed("hidden-in-export", true) + .attr("transform", function (){ + var dx = (-2 / 5) * that.actualRadius(), + dy = (1 / 2) * that.actualRadius(); + return "translate(" + dx + "," + dy + ")"; + }); + + collapsingGroupElement.append("rect") + .classed("class pin feature", true) + .attr("x", 0) + .attr("y", 0) + .attr("width", 40) + .attr("height", 24); + + collapsingGroupElement.append("line") + .attr("x1", 13) + .attr("y1", 12) + .attr("x2", 27) + .attr("y2", 12); + + collapsingGroupElement.append("line") + .attr("x1", 20) + .attr("y1", 6) + .attr("x2", 20) + .attr("y2", 18); + }; + + /** + * Draws a circular node. + * @param parentElement the element to which this node will be appended + * @param [additionalCssClasses] additional css classes + */ + this.draw = function ( parentElement, additionalCssClasses ){ + var cssClasses = that.collectCssClasses(); + that.nodeElement(parentElement); + + var bgColor = that.backgroundColor(); + if ( bgColor === null ) bgColor = undefined; + if ( that.attributes().indexOf("deprecated") > -1 ) { + bgColor = undefined; + } + if ( additionalCssClasses instanceof Array ) { + cssClasses = cssClasses.concat(additionalCssClasses); + } + if ( rectangularRepresentation === true ) { + renderingElement = drawTools.appendRectangularClass(parentElement, 80, 80, cssClasses, that.labelForCurrentLanguage(), bgColor); + } else { + renderingElement = drawTools.appendCircularClass(parentElement, that.actualRadius(), cssClasses, that.labelForCurrentLanguage(), bgColor); + } + that.postDrawActions(parentElement); + }; + + this.redrawElement = function (){ + renderingElement.remove(); + textBlock.remove(); + var bgColor = that.backgroundColor(); + if ( that.attributes().indexOf("deprecated") > -1 ) { + bgColor = undefined; + } + + var cssClasses = that.collectCssClasses(); + + if ( rectangularRepresentation === true ) { + renderingElement = drawTools.appendRectangularClass(that.nodeElement(), 80, 80, cssClasses, that.labelForCurrentLanguage(), bgColor); + } else { + renderingElement = drawTools.appendCircularClass(that.nodeElement(), that.actualRadius(), cssClasses, that.labelForCurrentLanguage(), bgColor); + } + that.postDrawActions(that.nodeElement()); + }; + /** + * Common actions that should be invoked after drawing a node. + */ + this.postDrawActions = function (){ + that.textBlock(createTextBlock()); + + that.addMouseListeners(); + if ( that.pinned() ) { + that.drawPin(); + } + if ( that.halo() ) { + that.drawHalo(false); + } + if ( that.collapsible() ) { + that.drawCollapsingButton(); + } + }; + + this.redrawLabelText = function (){ + that.textBlock().remove(); + that.textBlock(createTextBlock()); + renderingElement.select("title").text(that.labelForCurrentLanguage()); + }; + function createTextBlock(){ + var bgColor = that.backgroundColor(); + if ( that.attributes().indexOf("deprecated") > -1 ) + bgColor = undefined; + + var textBlock = new CenteringTextElement(that.nodeElement(), bgColor); + + var equivalentsString = that.equivalentsString(); + var suffixForFollowingEquivalents = equivalentsString ? "," : ""; + + textBlock.addText(that.labelForCurrentLanguage(), "", suffixForFollowingEquivalents); + textBlock.addEquivalents(equivalentsString); + if ( !graph.options().compactNotation() ) { + textBlock.addSubText(that.indicationString()); + } + textBlock.addInstanceCount(that.individuals().length); + + return textBlock; + } + + this.equivalentsString = function (){ + var equivalentClasses = that.equivalents(); + if ( !equivalentClasses ) { + return; + } + + return equivalentClasses + .map(function ( node ){ + return node.labelForCurrentLanguage(); + }) + .join(", "); + }; + }; + o.prototype = Object.create(BaseNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 9 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var BaseElement = __webpack_require__(10); + var forceLayoutNodeFunctions = __webpack_require__(13)(); + + module.exports = (function (){ + + var Base = function ( graph ){ + BaseElement.apply(this, arguments); + + var that = this, + // Basic attributes + complement, + disjointUnion, + disjointWith, + individuals = [], + intersection, + union, + links, + rendertype = "round", + // Additional attributes + maxIndividualCount, + fobj, // foreigner object for editing + ignoreLocalHoverEvents = false, + backupFullIri, + // Element containers + nodeElement; + + // array to store my properties; // we will need this also later for semantic zooming stuff + var assignedProperties = []; + that.editingTextElement = false; + + this.isPropertyAssignedToThisElement = function ( property ){ + // this goes via IRIS + console.log("Element IRI :" + property.iri()); + if ( property.type() === "rdfs:subClassOf" ) + for ( var i = 0; i < assignedProperties.length; i++ ) { + var iriEl = assignedProperties[i].iri(); + if ( property.iri() === iriEl ) { + return true; + } + if ( property.type() === "rdfs:subClassOf" && assignedProperties[i].type() === "rdfs:subClassOf" ) + return true; + if ( property.type() === "owl:disjointWith" && assignedProperties[i].type() === "owl:disjointWith" ) + return true; + + } + return false; + }; + + + this.existingPropertyIRI = function ( url ){ + // this goes via IRIS + for ( var i = 0; i < assignedProperties.length; i++ ) { + var iriEl = assignedProperties[i].iri(); + if ( iriEl === url ) { + return true; + } + } + return false; + }; + + this.addProperty = function ( property ){ + if ( assignedProperties.indexOf(property) === -1 ) { + assignedProperties.push(property); + } + }; + + this.removePropertyElement = function ( property ){ + // console.log("Calling removing old property!"+ property.iri()); + if ( assignedProperties.indexOf(property) !== -1 ) { + // console.log("Found it!"); + assignedProperties.splice(assignedProperties.indexOf(property), 1); + } + }; + this.getMyProperties = function (){ + return assignedProperties; + }; + this.copyOtherProperties = function ( otherProperties ){ + assignedProperties = otherProperties; + }; + + this.copyInformation = function ( other ){ + console.log(other.labelForCurrentLanguage()); + if ( other.type() !== "owl:Thing" ) + that.label(other.label()); + that.complement(other.complement()); + that.iri(other.iri()); + that.copyOtherProperties(other.getMyProperties()); + that.baseIri(other.baseIri()); + if ( other.type() === "owl:Class" ) { + that.backupLabel(other.label()); + // console.log("copied backup label"+that.backupLabel()); + } + if ( other.backupLabel() !== undefined ) { + that.backupLabel(other.backupLabel()); + } + }; + + this.enableEditing = function ( autoEditing ){ + if ( autoEditing === false ) + return; + that.raiseDoubleClickEdit(true); + }; + + this.raiseDoubleClickEdit = function ( forceIRISync ){ + d3.selectAll(".foreignelements").remove(); + if ( nodeElement === undefined || this.type() === "owl:Thing" || this.type() === "rdfs:Literal" ) { + console.log("No Container found"); + return; + } + if ( fobj !== undefined ) { + nodeElement.selectAll(".foreignelements").remove(); + } + + backupFullIri = undefined; + graph.options().focuserModule().handle(undefined); + graph.options().focuserModule().handle(that); + // add again the editing elements to that one + if ( graph.isTouchDevice() === true ) { + graph.activateHoverElements(true, that, true); + } + that.editingTextElement = true; + ignoreLocalHoverEvents = true; + that.nodeElement().selectAll("circle").classed("hoveredForEditing", true); + graph.killDelayedTimer(); + graph.ignoreOtherHoverEvents(false); + fobj = nodeElement.append("foreignObject") + .attr("x", -0.5 * (that.textWidth() - 2)) + .attr("y", -12) + .attr("height", 30) + .attr("class", "foreignelements") + .on("dragstart", function (){ + return false; + }) // remove drag operations of text element) + .attr("width", that.textWidth() - 2); + + var editText = fobj.append("xhtml:input") + .attr("class", "nodeEditSpan") + .attr("id", that.id()) + .attr("align", "center") + .attr("contentEditable", "true") + .on("dragstart", function (){ + return false; + }); // remove drag operations of text element) + + var bgColor = '#f00'; + var txtWidth = that.textWidth() - 2; + editText.style({ + + 'align': 'center', + 'color': 'black', + 'width': txtWidth + "px", + 'height': '15px', + 'background-color': bgColor, + 'border-bottom': '2px solid black' + }); + var txtNode = editText.node(); + txtNode.value = that.labelForCurrentLanguage(); + txtNode.focus(); + txtNode.select(); + that.frozen(true); // << releases the not after selection + that.locked(true); + + + d3.event.stopPropagation(); + // ignoreNodeHoverEvent=true; + // // add some events that relate to this object + editText.on("click", function (){ + d3.event.stopPropagation(); + }); + // // remove hover Events for now; + editText.on("mouseout", function (){ + d3.event.stopPropagation(); + + + }); + editText.on("mousedown", function (){ + d3.event.stopPropagation(); + }) + .on("keydown", function (){ + d3.event.stopPropagation(); + if ( d3.event.keyCode === 13 ) { + this.blur(); + that.frozen(false); // << releases the not after selection + that.locked(false); + } + }) + .on("keyup", function (){ + if ( forceIRISync ) { + var labelName = editText.node().value; + var resourceName = labelName.replaceAll(" ", "_"); + var syncedIRI = that.baseIri() + resourceName; + backupFullIri = syncedIRI; + + d3.select("#element_iriEditor").node().title = syncedIRI; + d3.select("#element_iriEditor").node().value = graph.options().prefixModule().getPrefixRepresentationForFullURI(syncedIRI); + } + d3.select("#element_labelEditor").node().value = editText.node().value; + + }) + .on("blur", function (){ + that.editingTextElement = false; + ignoreLocalHoverEvents = false; + that.nodeElement().selectAll("circle").classed("hoveredForEditing", false); + var newLabel = editText.node().value; + nodeElement.selectAll(".foreignelements").remove(); + // that.setLabelForCurrentLanguage(classNameConvention(editText.node().value)); + that.label(newLabel); + that.backupLabel(newLabel); + that.redrawLabelText(); + that.frozen(graph.paused()); + that.locked(graph.paused()); + graph.ignoreOtherHoverEvents(false); + // console.log("Calling blur on Node!"); + if ( backupFullIri ) { + var sanityCheckResult = graph.checkIfIriClassAlreadyExist(backupFullIri); + if ( sanityCheckResult === false ) { + that.iri(backupFullIri); + } else { + // throw warnign + graph.options().warningModule().showWarning("Already seen this class", + "Input IRI: " + backupFullIri + " for element: " + that.labelForCurrentLanguage() + " already been set", + "Restoring previous IRI for Element : " + that.iri(), 2, false, sanityCheckResult); + + } + } + if ( graph.isADraggerActive() === false ) { + graph.options().focuserModule().handle(undefined); + graph.options().focuserModule().handle(that); + } + }); // add a foreiner element to this thing; + }; + + + this.renderType = function ( t ){ + if ( !arguments.length ) return rendertype; + rendertype = t; + return this; + }; + // Properties + this.complement = function ( p ){ + if ( !arguments.length ) return complement; + complement = p; + return this; + }; + + this.disjointUnion = function ( p ){ + if ( !arguments.length ) return disjointUnion; + disjointUnion = p; + return this; + }; + + this.disjointWith = function ( p ){ + if ( !arguments.length ) return disjointWith; + disjointWith = p; + return this; + }; + + this.individuals = function ( p ){ + if ( !arguments.length ) return individuals; + individuals = p || []; + return this; + }; + + this.intersection = function ( p ){ + if ( !arguments.length ) return intersection; + intersection = p; + return this; + }; + + this.links = function ( p ){ + if ( !arguments.length ) return links; + links = p; + return this; + }; + + this.maxIndividualCount = function ( p ){ + if ( !arguments.length ) return maxIndividualCount; + maxIndividualCount = p; + return this; + }; + + this.nodeElement = function ( p ){ + if ( !arguments.length ) return nodeElement; + nodeElement = p; + return this; + }; + + this.union = function ( p ){ + if ( !arguments.length ) return union; + union = p; + return this; + }; + + + /** + * Returns css classes generated from the data of this object. + * @returns {Array} + */ + that.collectCssClasses = function (){ + var cssClasses = []; + + if ( typeof that.styleClass() === "string" ) { + cssClasses.push(that.styleClass()); + } + + cssClasses = cssClasses.concat(that.visualAttributes()); + + return cssClasses; + }; + + + // Reused functions TODO refactor + this.addMouseListeners = function (){ + // Empty node + if ( !that.nodeElement() ) { + console.warn(this); + return; + } + + that.nodeElement().selectAll("*") + .on("mouseover", onMouseOver) + .on("mouseout", onMouseOut); + }; + + this.animationProcess = function (){ + var animRuns = false; + if ( that.getHalos() ) { + var haloGr = that.getHalos(); + var haloEls = haloGr.selectAll(".searchResultA"); + animRuns = haloGr.attr("animationRunning"); + if ( typeof animRuns !== "boolean" ) { + // parse this to a boolean value + animRuns = (animRuns === 'true'); + } + if ( animRuns === false ) { + haloEls.classed("searchResultA", false); + haloEls.classed("searchResultB", true); + } + } + return animRuns; + }; + + this.foreground = function (){ + var selectedNode = that.nodeElement().node(), + nodeContainer = selectedNode.parentNode; + // check if the halo is present and an animation is running + if ( that.animationProcess() === false ) { + // Append hovered element as last child to the container list. + nodeContainer.appendChild(selectedNode); + } + + }; + + function onMouseOver(){ + if ( that.mouseEntered() || ignoreLocalHoverEvents === true ) { + return; + } + + var selectedNode = that.nodeElement().node(), + nodeContainer = selectedNode.parentNode; + + // Append hovered element as last child to the container list. + if ( that.animationProcess() === false ) { + nodeContainer.appendChild(selectedNode); + } + if ( graph.isTouchDevice() === false ) { + that.setHoverHighlighting(true); + that.mouseEntered(true); + if ( graph.editorMode() === true && graph.ignoreOtherHoverEvents() === false ) { + graph.activateHoverElements(true, that); + } + } else { + if ( graph.editorMode() === true && graph.ignoreOtherHoverEvents() === false ) { + graph.activateHoverElements(true, that, true); + } + + } + + + } + + function onMouseOut(){ + that.setHoverHighlighting(false); + that.mouseEntered(false); + if ( graph.editorMode() === true && graph.ignoreOtherHoverEvents() === false ) { + graph.activateHoverElements(false); + } + } + + + forceLayoutNodeFunctions.addTo(this); + }; + + Base.prototype = Object.create(BaseElement.prototype); + Base.prototype.constructor = Base; + + + return Base; + }()); + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 10 */ +/***/ (function(module, exports, __webpack_require__) { + + /** + * The base element for all visual elements of webvowl. + */ + module.exports = (function (){ + + var Base = function ( graph ){ + // Basic attributes + var equivalents = [], + id, + label, + type, + iri, + baseIri, + // Additional attributes + annotations, + attributes = [], + backgroundColor, + comment, + description, + equivalentBase, + visualAttributes = [], + // Style attributes + focused = false, + indications = [], + mouseEntered = false, + styleClass, + visible = true, + + backupLabel, + // Other + languageTools = __webpack_require__(11)(); + + + this.backupLabel = function ( label ){ + if ( !arguments.length ) return backupLabel; + backupLabel = label; + }; + // Properties + this.attributes = function ( p ){ + if ( !arguments.length ) return attributes; + attributes = p; + return this; + }; + + this.annotations = function ( p ){ + if ( !arguments.length ) return annotations; + annotations = p; + return this; + }; + + this.redrawElement = function (){ + // TODO: OVERLOADED BY INDIVIDUAL ELEMENTS + }; + + this.backgroundColor = function ( p ){ + if ( !arguments.length ) return backgroundColor; + backgroundColor = p; + return this; + }; + + this.baseIri = function ( p ){ + if ( !arguments.length ) return baseIri; + baseIri = p; + return this; + }; + + this.comment = function ( p ){ + if ( !arguments.length ) return comment; + comment = p; + return this; + }; + + this.description = function ( p ){ + if ( !arguments.length ) return description; + description = p; + return this; + }; + + this.equivalents = function ( p ){ + if ( !arguments.length ) return equivalents; + equivalents = p || []; + return this; + }; + + this.equivalentBase = function ( p ){ + if ( !arguments.length ) return equivalentBase; + equivalentBase = p; + return this; + }; + + this.focused = function ( p ){ + if ( !arguments.length ) return focused; + focused = p; + return this; + }; + + this.id = function ( p ){ + if ( !arguments.length ) return id; + id = p; + return this; + }; + + this.indications = function ( p ){ + if ( !arguments.length ) return indications; + indications = p; + return this; + }; + + this.iri = function ( p ){ + if ( !arguments.length ) return iri; + iri = p; + return this; + }; + + this.label = function ( p ){ + if ( !arguments.length ) return label; + label = p; + return this; + }; + + this.mouseEntered = function ( p ){ + if ( !arguments.length ) return mouseEntered; + mouseEntered = p; + return this; + }; + + this.styleClass = function ( p ){ + if ( !arguments.length ) return styleClass; + styleClass = p; + return this; + }; + + this.type = function ( p ){ + if ( !arguments.length ) return type; + type = p; + return this; + }; + + this.visible = function ( p ){ + if ( !arguments.length ) return visible; + visible = p; + return this; + }; + + this.visualAttributes = function ( p ){ + if ( !arguments.length ) return visualAttributes; + visualAttributes = p; + return this; + }; + + + this.commentForCurrentLanguage = function (){ + return languageTools.textInLanguage(this.comment(), graph.language()); + }; + + /** + * @returns {string} the css class of this node.. + */ + this.cssClassOfNode = function (){ + return "node" + this.id(); + }; + + this.descriptionForCurrentLanguage = function (){ + return languageTools.textInLanguage(this.description(), graph.language()); + }; + + this.defaultLabel = function (){ + return languageTools.textInLanguage(this.label(), "default"); + }; + + this.indicationString = function (){ + return this.indications().join(", "); + }; + + this.labelForCurrentLanguage = function (){ + var preferredLanguage = graph && graph.language ? graph.language() : null; + return languageTools.textInLanguage(this.label(), preferredLanguage); + }; + }; + + Base.prototype.constructor = Base; + + Base.prototype.equals = function ( other ){ + return other instanceof Base && this.id() === other.id(); + }; + + Base.prototype.toString = function (){ + return this.labelForCurrentLanguage() + " (" + this.type() + ")"; + }; + + + return Base; + }()); + + +/***/ }), +/* 11 */ +/***/ (function(module, exports, __webpack_require__) { + + var constants = __webpack_require__(12)(); + + /** + * Encapsulates methods which return a label in a specific language for a preferred language. + */ + module.exports = (function (){ + + var languageTools = {}; + + + languageTools.textInLanguage = function ( textObject, preferredLanguage ){ + if ( typeof textObject === "undefined" ) { + return undefined; + } + + if ( typeof textObject === "string" ) { + return textObject; + } + + if ( preferredLanguage && textObject.hasOwnProperty(preferredLanguage) ) { + return textObject[preferredLanguage]; + } + + var textForLanguage = searchLanguage(textObject, "en"); + if ( textForLanguage ) { + return textForLanguage; + } + textForLanguage = searchLanguage(textObject, constants.LANG_UNDEFINED); + if ( textForLanguage ) { + return textForLanguage; + } + + return textObject[constants.LANG_IRIBASED]; + }; + + + function searchLanguage( textObject, preferredLanguage ){ + for ( var language in textObject ) { + if ( language === preferredLanguage && textObject.hasOwnProperty(language) ) { + return textObject[language]; + } + } + } + + return function (){ + /* Use a function here to keep a consistent style like webvowl.path.to.module() + * despite having just a single languageTools object. */ + return languageTools; + }; + })(); + + +/***/ }), +/* 12 */ +/***/ (function(module, exports) { + + module.exports = (function (){ + + var constants = {}; + + constants.LANG_IRIBASED = "IRI-based"; + constants.LANG_UNDEFINED = "undefined"; + + return function (){ + /* Use a function here to keep a consistent style like webvowl.path.to.module() + * despite having just a single object. */ + return constants; + }; + })(); + + +/***/ }), +/* 13 */ +/***/ (function(module, exports) { + + /** + * The functions for controlling attributes of nodes of the force layout can't be modelled to the element hierarchy, + * which is used for inheriting visual and OWL-like attributes. + * + * To reduce code redundancy the common functions for controlling the force layout node attributes are excluded into this + * module, which can add them to the node objects. + * + * @type {{}} + */ + var nodeFunctions = {}; + module.exports = function (){ + return nodeFunctions; + }; + + + nodeFunctions.addTo = function ( node ){ + addFixedLocationFunctions(node); + }; + + function addFixedLocationFunctions( node ){ + var locked = false, + frozen = false, + halo = false, + pinned = false; + + node.locked = function ( p ){ + if ( !arguments.length ) { + return locked; + } + locked = p; + applyFixedLocationAttributes(); + return node; + }; + + node.frozen = function ( p ){ + if ( !arguments.length ) { + return frozen; + } + frozen = p; + applyFixedLocationAttributes(); + return node; + }; + + node.halo = function ( p ){ + if ( !arguments.length ) { + return halo; + } + halo = p; + applyFixedLocationAttributes(); + return node; + }; + + node.pinned = function ( p ){ + if ( !arguments.length ) { + return pinned; + } + pinned = p; + applyFixedLocationAttributes(); + return node; + }; + + function applyFixedLocationAttributes(){ + if ( node.locked() || node.frozen() || node.pinned() ) { + node.fixed = true; + } else { + node.fixed = false; + } + } + } + + +/***/ }), +/* 14 */ +/***/ (function(module, exports, __webpack_require__) { + + var textTools = __webpack_require__(15)(); + var AbstractTextElement = __webpack_require__(16); + + module.exports = CenteringTextElement; + function CenteringTextElement( container, backgroundColor ){ + AbstractTextElement.apply(this, arguments); + this.storedFullTextLines = []; + this.storedSpanArrays = []; + this.storedStyle = []; + + } + + CenteringTextElement.prototype = Object.create(AbstractTextElement.prototype); + CenteringTextElement.prototype.constructor = CenteringTextElement; + + CenteringTextElement.prototype.addText = function ( text, prefix, suffix ){ + if ( text ) { + this.addTextline(text, this.CSS_CLASSES.default, prefix, suffix); + } + }; + + CenteringTextElement.prototype.addSubText = function ( text ){ + if ( text ) { + this.addTextline(text, this.CSS_CLASSES.subtext, "(", ")"); + } + }; + + CenteringTextElement.prototype.addEquivalents = function ( text ){ + if ( text ) { + this.addTextline(text, this.CSS_CLASSES.default); + } + }; + + CenteringTextElement.prototype.addInstanceCount = function ( instanceCount ){ + if ( instanceCount ) { + this.addTextline(instanceCount.toString(), this.CSS_CLASSES.instanceCount); + } + }; + CenteringTextElement.prototype.saveCorrespondingSpan = function ( correspondingSpan ){ + this.storedSpanArrays.push(correspondingSpan); + }; + CenteringTextElement.prototype.saveFullTextLine = function ( fullText ){ + this.storedFullTextLines.push(fullText); + }; + CenteringTextElement.prototype.saveStyle = function ( style ){ + this.storedStyle.push(style); + }; + + CenteringTextElement.prototype.updateAllTextElements = function (){ + // TODO : TEST THIS postPrefix >>> _applyPreAndPostFix + for ( var i = 0; i < this.storedSpanArrays.length; i++ ) { + var truncatedText = textTools.truncate(this.storedFullTextLines[i], this._textBlock().datum().textWidth(), this.storedStyle[i]); + this.storedSpanArrays[i].text(truncatedText); + } + }; + + + CenteringTextElement.prototype.addTextline = function ( text, style, prefix, postfix ){ + var truncatedText = textTools.truncate(text, this._textBlock().datum().textWidth(), style); + this.saveFullTextLine(text); + this.saveStyle(style); + var tspan = this._textBlock().append("tspan") + .classed(this.CSS_CLASSES.default, true) + .classed(style, true) + .text(this._applyPreAndPostFix(truncatedText, prefix, postfix)) + .attr("x", 0); + this._repositionTextLine(tspan); + this.saveCorrespondingSpan(tspan); + + this._repositionTextBlock(); + }; + + CenteringTextElement.prototype._repositionTextLine = function ( tspan ){ + var fontSizeProperty = window.getComputedStyle(tspan.node()).getPropertyValue("font-size"); + var fontSize = parseFloat(fontSizeProperty); + + var siblingCount = this._lineCount() - 1; + var lineDistance = siblingCount > 0 ? this.LINE_DISTANCE : 0; + + tspan.attr("dy", fontSize + lineDistance + "px"); + }; + + CenteringTextElement.prototype.getTextBox = function (){ + return this._textBlock(); + }; + + + CenteringTextElement.prototype._repositionTextBlock = function (){ + // Nothing to do if no child elements exist + var lineCount = this._lineCount(); + if ( lineCount < 1 ) { + this._textBlock().attr("y", 0); + return; + } + + var textBlockHeight = this._textBlock().node().getBBox().height; + this._textBlock().attr("y", -textBlockHeight * 0.5 + "px"); + }; + + CenteringTextElement.prototype._lineCount = function (){ + return this._textBlock().property("childElementCount"); + }; + + +/***/ }), +/* 15 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var ADDITIONAL_TEXT_SPACE = 4; + + var tools = {}; + + function measureTextWidth( text, textStyle ){ + // Set a default value + if ( !textStyle ) { + textStyle = "text"; + } + var d = d3.select("body") + .append("div") + .attr("class", textStyle) + .attr("id", "width-test") // tag this element to identify it + .attr("style", "position:absolute; float:left; white-space:nowrap; visibility:hidden;") + .text(text), + w = document.getElementById("width-test").offsetWidth; + d.remove(); + return w; + } + + tools.truncate = function ( text, maxWidth, textStyle, additionalTextSpace ){ + maxWidth -= isNaN(additionalTextSpace) ? ADDITIONAL_TEXT_SPACE : additionalTextSpace; + if ( isNaN(maxWidth) || maxWidth <= 0 ) { + return text; + } + + var truncatedText = text, + newTruncatedTextLength, + textWidth, + ratio; + + while ( true ) { + textWidth = measureTextWidth(truncatedText, textStyle); + if ( textWidth <= maxWidth ) { + break; + } + + ratio = textWidth / maxWidth; + newTruncatedTextLength = Math.floor(truncatedText.length / ratio); + + // detect if nothing changes + if ( truncatedText.length === newTruncatedTextLength ) { + break; + } + + truncatedText = truncatedText.substring(0, newTruncatedTextLength); + } + + if ( text.length > truncatedText.length ) { + return text.substring(0, truncatedText.length - 3) + "..."; + } + return text; + }; + + + module.exports = function (){ + return tools; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 16 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {module.exports = AbstractTextElement; + + function AbstractTextElement( container, backgroundColor ){ + var textBlock = container.append("text") + .classed("text", true) + .style("fill", this._getTextColor(backgroundColor)) + .attr("text-anchor", "middle"); + + this._textBlock = function (){ + return textBlock; + }; + } + + AbstractTextElement.prototype.LINE_DISTANCE = 1; + AbstractTextElement.prototype.CSS_CLASSES = { + default: "text", + subtext: "subtext", + instanceCount: "instance-count" + }; + AbstractTextElement.prototype.DARK_TEXT_COLOR = "#000"; + AbstractTextElement.prototype.LIGHT_TEXT_COLOR = "#fff"; + + AbstractTextElement.prototype.translation = function ( x, y ){ + this._textBlock().attr("transform", "translate(" + x + ", " + y + ")"); + return this; + }; + + AbstractTextElement.prototype.remove = function (){ + this._textBlock().remove(); + return this; + }; + + AbstractTextElement.prototype._applyPreAndPostFix = function ( text, prefix, postfix ){ + if ( prefix ) { + text = prefix + text; + } + if ( postfix ) { + text += postfix; + } + return text; + }; + + AbstractTextElement.prototype._getTextColor = function ( rawBackgroundColor ){ + if ( !rawBackgroundColor ) { + return AbstractTextElement.prototype.DARK_TEXT_COLOR; + } + + var backgroundColor = d3.rgb(rawBackgroundColor); + if ( calculateLuminance(backgroundColor) > 0.5 ) { + return AbstractTextElement.prototype.DARK_TEXT_COLOR; + } else { + return AbstractTextElement.prototype.LIGHT_TEXT_COLOR; + } + }; + + function calculateLuminance( color ){ + return 0.3 * (color.r / 255) + 0.59 * (color.g / 255) + 0.11 * (color.b / 255); + } + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 17 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains reusable function for drawing nodes. + */ + module.exports = (function (){ + + var tools = {}; + + /** + * Append a circular class node with the passed attributes. + * @param parent the parent element to which the circle will be appended + * @param radius + * @param [cssClasses] an array of additional css classes + * @param [tooltip] + * @param [backgroundColor] + * @returns {*} + */ + tools.appendCircularClass = function ( parent, radius, cssClasses, tooltip, backgroundColor ){ + var circle = parent.append("circle") + .classed("class", true) + .attr("r", radius); + + addCssClasses(circle, cssClasses); + addToolTip(circle, tooltip); + addBackgroundColor(circle, backgroundColor); + + return circle; + }; + + function addCssClasses( element, cssClasses ){ + if ( cssClasses instanceof Array ) { + cssClasses.forEach(function ( cssClass ){ + element.classed(cssClass, true); + }); + } + } + + function addToolTip( element, tooltip ){ + if ( tooltip ) { + element.append("title").text(tooltip); + } + } + + function addBackgroundColor( element, backgroundColor ){ + if ( backgroundColor ) { + element.style("fill", backgroundColor); + } + } + + /** + * Appends a rectangular class node with the passed attributes. + * @param parent the parent element to which the rectangle will be appended + * @param width + * @param height + * @param [cssClasses] an array of additional css classes + * @param [tooltip] + * @param [backgroundColor] + * @returns {*} + */ + tools.appendRectangularClass = function ( parent, width, height, cssClasses, tooltip, backgroundColor ){ + var rectangle = parent.append("rect") + .classed("class", true) + .attr("x", -width / 2) + .attr("y", -height / 2) + .attr("width", width) + .attr("height", height); + + addCssClasses(rectangle, cssClasses); + addToolTip(rectangle, tooltip); + addBackgroundColor(rectangle, backgroundColor); + + return rectangle; + }; + + tools.drawPin = function ( container, dx, dy, onClick, accuraciesHelperFunction, useAccuracyHelper ){ + var pinGroupElement = container + .append("g") + .classed("hidden-in-export", true) + .attr("transform", "translate(" + dx + "," + dy + ")"); + + var base = pinGroupElement.append("circle") + .classed("class pin feature", true) + .attr("r", 12) + .on("click", function (){ + if ( onClick ) { + onClick(); + } + d3.event.stopPropagation(); + }); + + pinGroupElement.append("line") + .attr("x1", 0) + .attr("x2", 0) + .attr("y1", 12) + .attr("y2", 16); + + if ( useAccuracyHelper === true ) { + pinGroupElement.append("circle") + .attr("r", 15) + .attr("cx", -7) + .attr("cy", -7) + .classed("superHiddenElement ", true) + .classed("superOpacityElement", !accuraciesHelperFunction()) + .on("click", function (){ + if ( onClick ) { + onClick(); + } + d3.event.stopPropagation(); + }) + .on("mouseover", function (){ + base.classed("feature_hover", true); + }) + .on("mouseout", function (){ + base.classed("feature_hover", false); + }) + ; + + } + + + return pinGroupElement; + }; + + tools.drawRectHalo = function ( node, width, height, offset ){ + var container; + if ( node.nodeElement ) + container = node.nodeElement(); + else + container = node.labelElement(); + + if ( !container ) { + // console.log("no container found"); + return; + } + + var haloGroupElement = container + .append("g") + .classed("hidden-in-export", true); + + haloGroupElement.append("rect") + .classed("searchResultA", true) + .attr("x", (-width - offset) / 2) + .attr("y", (-offset - height) / 2) + .attr("width", width + offset) + .attr("height", height + offset); + haloGroupElement.attr("animationRunning", true); + + haloGroupElement.node().addEventListener("webkitAnimationEnd", function (){ + var test = haloGroupElement.selectAll(".searchResultA"); + test.classed("searchResultA", false) + .classed("searchResultB", true); + haloGroupElement.attr("animationRunning", false); + }); + haloGroupElement.node().addEventListener("animationend", function (){ + var test = haloGroupElement.selectAll(".searchResultA"); + test.classed("searchResultA", false) + .classed("searchResultB", true); + haloGroupElement.attr("animationRunning", false); + }); + + + return haloGroupElement; + + }; + tools.drawHalo = function ( container, radius ){ + if ( container === undefined ) { + return null; + // there is no element to add the halo to; + // this means the node was not rendered previously + } + + var haloGroupElement = container + .append("g") + .classed("hidden-in-export", true); + + + haloGroupElement.append("circle", ":first-child") + .classed("searchResultA", true) + .attr("r", radius + 15); + haloGroupElement.attr("animationRunning", true); + + + haloGroupElement.node().addEventListener("webkitAnimationEnd", function (){ + var test = haloGroupElement.selectAll(".searchResultA"); + test.classed("searchResultA", false) + .classed("searchResultB", true) + .attr("animationRunning", false); + haloGroupElement.attr("animationRunning", false); + }); + haloGroupElement.node().addEventListener("animationend", function (){ + var test = haloGroupElement.selectAll(".searchResultA"); + test.classed("searchResultA", false) + .classed("searchResultB", true) + .attr("animationRunning", false); + haloGroupElement.attr("animationRunning", false); + }); + + return haloGroupElement; + }; + + return function (){ + // Encapsulate into function to maintain default.module.path() + return tools; + }; + })(); + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 18 */ +/***/ (function(module, exports, __webpack_require__) { + + var RoundNode = __webpack_require__(8); + + module.exports = (function (){ + + var o = function ( graph ){ + RoundNode.apply(this, arguments); + + this.type("owl:Class"); + }; + o.prototype = Object.create(RoundNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 19 */ +/***/ (function(module, exports, __webpack_require__) { + + var SetOperatorNode = __webpack_require__(20); + + module.exports = (function (){ + + var o = function ( graph ){ + SetOperatorNode.apply(this, arguments); + + var that = this, + superDrawFunction = that.draw; + + this.styleClass("complementof") + .type("owl:complementOf"); + + this.draw = function ( element ){ + superDrawFunction(element); + + var symbol = element.append("g").classed("embedded", true); + + symbol.append("circle") + .attr("class", "symbol") + .classed("fineline", true) + .attr("r", 10); + symbol.append("path") + .attr("class", "nofill") + .attr("d", "m -7,-1.5 12,0 0,6") + .attr("transform", "scale(.5)"); + + symbol.attr("transform", + "translate(-" + (that.radius() - 15) / 100 + ",-" + (that.radius() - 15) / 100 + ")"); + + that.postDrawActions(); + }; + }; + o.prototype = Object.create(SetOperatorNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 20 */ +/***/ (function(module, exports, __webpack_require__) { + + var AbsoluteTextElement = __webpack_require__(21); + var BoxArrowLink = __webpack_require__(22); + var RoundNode = __webpack_require__(8); + var drawTools = __webpack_require__(17)(); + + module.exports = (function (){ + + var o = function ( graph ){ + RoundNode.apply(this, arguments); + + var that = this, + superHoverHighlightingFunction = that.setHoverHighlighting, + superPostDrawActions = that.postDrawActions; + + this.setHoverHighlighting = function ( enable ){ + superHoverHighlightingFunction(enable); + + // Highlight links pointing to included nodes when hovering the set operator + that.links() + .filter(function ( link ){ + return link instanceof BoxArrowLink; + }) + .filter(function ( link ){ + return link.domain().equals(that); + }) + .forEach(function ( link ){ + link.property().setHighlighting(enable); + }); + }; + + this.draw = function ( element ){ + that.nodeElement(element); + + drawTools.appendCircularClass(element, that.actualRadius(), + that.collectCssClasses().join(" "), + that.labelForCurrentLanguage(), that.backgroundColor()); + }; + + this.postDrawActions = function (){ + superPostDrawActions(); + that.textBlock().remove(); + + var textElement = new AbsoluteTextElement(that.nodeElement(), that.backgroundColor()); + + var equivalentsString = that.equivalentsString(); + var offsetForFollowingEquivalents = equivalentsString ? -30 : -17; + var suffixForFollowingEquivalents = equivalentsString ? "," : ""; + textElement.addText(that.labelForCurrentLanguage(), offsetForFollowingEquivalents, "", + suffixForFollowingEquivalents); + + textElement.addEquivalents(equivalentsString, -17); + + + if ( !graph.options().compactNotation() ) { + + if ( that.indicationString().length > 0 ) { + textElement.addSubText(that.indicationString(), 17); + textElement.addInstanceCount(that.individuals().length, 30); + } else { + textElement.addInstanceCount(that.individuals().length, 17); + } + } else { + textElement.addInstanceCount(that.individuals().length, 17); + } + + that.textBlock(textElement); + }; + }; + o.prototype = Object.create(RoundNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 21 */ +/***/ (function(module, exports, __webpack_require__) { + + var textTools = __webpack_require__(15)(); + var AbstractTextElement = __webpack_require__(16); + + module.exports = AbsoluteTextElement; + function AbsoluteTextElement( container, backgroundColor ){ + AbstractTextElement.apply(this, arguments); + } + + AbsoluteTextElement.prototype = Object.create(AbstractTextElement.prototype); + AbsoluteTextElement.prototype.constructor = AbsoluteTextElement; + + AbsoluteTextElement.prototype.addText = function ( text, yShift, prefix, suffix ){ + if ( text ) { + this.addTextline(text, this.CSS_CLASSES.default, yShift, prefix, suffix); + } + }; + + AbsoluteTextElement.prototype.addSubText = function ( text, yShift ){ + if ( text ) { + this.addTextline(text, this.CSS_CLASSES.subtext, yShift, "(", ")"); + } + }; + + AbsoluteTextElement.prototype.addEquivalents = function ( text, yShift ){ + if ( text ) { + this.addTextline(text, this.CSS_CLASSES.default, yShift); + } + }; + + AbsoluteTextElement.prototype.addInstanceCount = function ( instanceCount, yShift ){ + if ( instanceCount ) { + this.addTextline(instanceCount.toString(), this.CSS_CLASSES.instanceCount, yShift); + } + }; + + + AbsoluteTextElement.prototype.addTextline = function ( text, style, yShift, prefix, postfix ){ + var truncatedText = textTools.truncate(text, this._textBlock().datum().textWidth(yShift), style); + + var tspan = this._textBlock().append("tspan") + .classed(this.CSS_CLASSES.default, true) + .classed(style, true) + .text(this._applyPreAndPostFix(truncatedText, prefix, postfix)) + .attr("x", 0); + this._repositionTextLine(tspan, yShift); + }; + + AbsoluteTextElement.prototype._repositionTextLine = function ( tspan, yShift ){ + var fontSizeProperty = window.getComputedStyle(tspan.node()).getPropertyValue("font-size"); + var fontSize = parseFloat(fontSizeProperty); + + /* BBox height is not supported in Firefox for tspans and dominant-baseline doesn't work in some SVG editors */ + var approximatedShiftForVerticalCentering = (1 / 3) * fontSize; + + tspan.attr("y", approximatedShiftForVerticalCentering + (yShift || 0) + "px"); + }; + + +/***/ }), +/* 22 */ +/***/ (function(module, exports, __webpack_require__) { + + var PlainLink = __webpack_require__(23); + + + module.exports = BoxArrowLink; + + function BoxArrowLink( domain, range, property ){ + PlainLink.apply(this, arguments); + } + + BoxArrowLink.prototype = Object.create(PlainLink.prototype); + BoxArrowLink.prototype.constructor = BoxArrowLink; + + + BoxArrowLink.prototype.draw = function ( linkGroup, markerContainer ){ + var property = this.label().property(); + var inverse = this.label().inverse(); + + createPropertyMarker(markerContainer, property); + if ( inverse ) { + createInverseMarker(markerContainer, inverse); + } + + PlainLink.prototype.draw.apply(this, arguments); + + // attach the markers to the link + linkGroup.attr("marker-start", "url(#" + property.markerId() + ")"); + if ( inverse ) { + linkGroup.attr("marker-end", "url(#" + inverse.markerId() + ")"); + } + }; + + + function createPropertyMarker( markerContainer, inverse ){ + var inverseMarker = appendBasicMarker(markerContainer, inverse); + inverseMarker.attr("refX", -8); + inverseMarker.append("path") + .attr("d", "M0,-8L8,0L0,8L-8,0L0,-8L8,0") + .classed(inverse.markerType(), true); + + inverse.markerElement(inverseMarker); + } + + function createInverseMarker( markerContainer, property ){ + var marker = appendBasicMarker(markerContainer, property); + marker.attr("refX", 8); + marker.append("path") + .attr("d", "M0,-8L8,0L0,8L-8,0L0,-8L8,0") + .classed(property.markerType(), true); + + property.markerElement(marker); + } + + function appendBasicMarker( markerContainer, property ){ + return markerContainer.append("marker") + .datum(property) + .attr("id", property.markerId()) + .attr("viewBox", "-10 -10 20 20") + .attr("markerWidth", 20) + .attr("markerHeight", 20) + .attr("markerUnits", "userSpaceOnUse") + .attr("orient", "auto"); + } + + +/***/ }), +/* 23 */ +/***/ (function(module, exports, __webpack_require__) { + + var Label = __webpack_require__(24); + + + module.exports = PlainLink; + + /** + * A link connects at least two VOWL nodes. + * The properties connecting the VOWL nodes are stored separately into the label. + * @param domain + * @param range + * @param property + */ + function PlainLink( domain, range, property ){ + var layers, + layerIndex, + loops, + loopIndex, + pathEl, + label = new Label(property, this); + + var backPart = __webpack_require__(25)(domain, label, this), + frontPart = __webpack_require__(25)(label, range, this); + + + this.layers = function ( p ){ + if ( !arguments.length ) return layers; + layers = p; + return this; + }; + + this.layerIndex = function ( p ){ + if ( !arguments.length ) return layerIndex; + layerIndex = p; + return this; + }; + + this.loops = function ( p ){ + if ( !arguments.length ) return loops; + loops = p; + return this; + }; + + this.loopIndex = function ( p ){ + if ( !arguments.length ) return loopIndex; + loopIndex = p; + return this; + }; + + + this.domain = function (){ + return domain; + }; + + this.label = function (){ + return label; + }; + + this.linkParts = function (){ + return [frontPart, backPart]; + }; + + this.range = function (){ + return range; + }; + this.pathObj = function ( pE ){ + if ( !arguments.length ) { + return pathEl; + } + pathEl = pE; + }; + } + + + PlainLink.prototype.draw = function ( linkGroup ){ + var property = this.label().property(); + var inverse = this.label().inverse(); + + property.linkGroup(linkGroup); + if ( inverse ) { + inverse.linkGroup(linkGroup); + } + + var pathElement = linkGroup.append("path"); + pathElement.classed("link-path", true) + .classed(this.domain().cssClassOfNode(), true) + .classed(this.range().cssClassOfNode(), true) + .classed(property.linkType(), true); + this.pathObj(pathElement); + + }; + + + PlainLink.prototype.inverse = function (){ + return this.label().inverse(); + }; + + PlainLink.prototype.isLoop = function (){ + return this.domain().equals(this.range()); + }; + + PlainLink.prototype.property = function (){ + return this.label().property(); + }; + + + +/***/ }), +/* 24 */ +/***/ (function(module, exports) { + + module.exports = Label; + + /** + * A label represents the element(s) which further describe a link. + * It encapsulates the property and its inverse property. + * @param property the property; the inverse is inferred + * @param link the link this label belongs to + */ + function Label( property, link ){ + this.link = function (){ + return link; + }; + + this.property = function (){ + return property; + }; + + // "Forward" the fixed value set on the property to avoid having to access this container + Object.defineProperty(this, "fixed", { + get: function (){ + var inverseFixed = property.inverse() ? property.inverse().fixed : false; + return property.fixed || inverseFixed; + }, + set: function ( v ){ + property.fixed = v; + if ( property.inverse() ) property.inverse().fixed = v; + } + }); + this.frozen = property.frozen; + this.locked = property.locked; + this.pinned = property.pinned; + } + + Label.prototype.actualRadius = function (){ + return this.property().actualRadius(); + }; + + Label.prototype.draw = function ( container ){ + return this.property().draw(container); + }; + + Label.prototype.inverse = function (){ + return this.property().inverse(); + }; + + Label.prototype.equals = function ( other ){ + if ( !other ) { + return false; + } + + var instance = other instanceof Label; + var equalProperty = this.property().equals(other.property()); + + var equalInverse = false; + if ( this.inverse() ) { + equalInverse = this.inverse().equals(other.inverse()); + } else if ( !other.inverse() ) { + equalInverse = true; + } + + return instance && equalProperty && equalInverse; + }; + + +/***/ }), +/* 25 */ +/***/ (function(module, exports) { + + /** + * A linkPart connects two force layout nodes. + * It reprents a link which can be used in d3's force layout. + * @param _domain + * @param _range + * @param _link + */ + module.exports = function ( _domain, _range, _link ){ + var linkPart = {}, + domain = _domain, + link = _link, + range = _range; + + // Define d3 properties + Object.defineProperties(linkPart, { + "source": { value: domain, writable: true }, + "target": { value: range, writable: true } + }); + + + linkPart.domain = function (){ + return domain; + }; + + linkPart.link = function (){ + return link; + }; + + linkPart.range = function (){ + return range; + }; + + + return linkPart; + }; + + +/***/ }), +/* 26 */ +/***/ (function(module, exports, __webpack_require__) { + + var RoundNode = __webpack_require__(8); + + module.exports = (function (){ + + var o = function ( graph ){ + RoundNode.apply(this, arguments); + + this.attributes(["deprecated"]) + .type("owl:DeprecatedClass") + .styleClass("deprecated") + .indications(["deprecated"]); + }; + o.prototype = Object.create(RoundNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 27 */ +/***/ (function(module, exports, __webpack_require__) { + + var SetOperatorNode = __webpack_require__(20); + + module.exports = (function (){ + + var o = function ( graph ){ + SetOperatorNode.apply(this, arguments); + + var that = this, + superDrawFunction = that.draw; + + this.styleClass("disjointunionof") + .type("owl:disjointUnionOf"); + + this.draw = function ( element ){ + superDrawFunction(element); + + var symbol = element.append("g").classed("embedded", true); + + var symbolRadius = 10; + symbol.append("circle") + .attr("class", "symbol") + .attr("r", symbolRadius); + symbol.append("circle") + .attr("cx", 10) + .attr("class", "symbol") + .classed("fineline", true) + .attr("r", symbolRadius); + symbol.append("circle") + .attr("class", "nofill") + .classed("fineline", true) + .attr("r", symbolRadius); + symbol.append("text") + .attr("class", "link") + .text("1") + .attr("transform", "scale(.7)translate(3,5)"); + + symbol.attr("transform", "translate(-" + (that.radius() - 15) / 7 + ",-" + (that.radius() - 15) / 100 + ")"); + + that.postDrawActions(); + }; + }; + o.prototype = Object.create(SetOperatorNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 28 */ +/***/ (function(module, exports, __webpack_require__) { + + var RoundNode = __webpack_require__(8); + var drawTools = __webpack_require__(17)(); + + module.exports = (function (){ + + var o = function ( graph ){ + RoundNode.apply(this, arguments); + + var CIRCLE_SIZE_DIFFERENCE = 4; + var renderingElement; + var that = this, + superActualRadiusFunction = that.actualRadius; + + this.styleClass("equivalentclass") + .type("owl:equivalentClass"); + + this.actualRadius = function (){ + return superActualRadiusFunction() + CIRCLE_SIZE_DIFFERENCE; + }; + + this.redrawElement = function (){ + renderingElement.remove(); + that.textBlock().remove(); + var bgColor = that.backgroundColor(); + + if ( that.attributes().indexOf("deprecated") > -1 ) { + bgColor = undefined; + } + var cssClasses = that.collectCssClasses(); + renderingElement = that.nodeElement().append("g"); + + if ( that.getRectangularRepresentation() === true ) { + drawTools.appendRectangularClass(renderingElement, 84, 84, ["white", "embedded"]); + drawTools.appendRectangularClass(renderingElement, 80 - CIRCLE_SIZE_DIFFERENCE, 80 - CIRCLE_SIZE_DIFFERENCE, cssClasses, that.labelForCurrentLanguage(), bgColor); + } else { + drawTools.appendCircularClass(renderingElement, that.actualRadius(), ["white", "embedded"]); + console.log(cssClasses); + console.log(that.attributes()); + console.log("what is bgColor" + bgColor); + drawTools.appendCircularClass(renderingElement, that.actualRadius() - CIRCLE_SIZE_DIFFERENCE, cssClasses, that.labelForCurrentLanguage(), bgColor); + + } + that.postDrawActions(that.nodeElement()); + + }; + this.draw = function ( parentElement ){ + var cssClasses = that.collectCssClasses(); + + that.nodeElement(parentElement); + renderingElement = parentElement.append("g"); + var bgColor = that.backgroundColor(); + if ( that.attributes().indexOf("deprecated") > -1 ) { + bgColor = undefined; + } + // draw the outer circle at first and afterwards the inner circle + if ( that.getRectangularRepresentation() === true ) { + drawTools.appendRectangularClass(renderingElement, 84, 84, ["white", "embedded"]); + drawTools.appendRectangularClass(renderingElement, 80 - CIRCLE_SIZE_DIFFERENCE, 80 - CIRCLE_SIZE_DIFFERENCE, cssClasses, that.labelForCurrentLanguage(), bgColor); + } else { + drawTools.appendCircularClass(renderingElement, that.actualRadius(), ["white", "embedded"]); + drawTools.appendCircularClass(renderingElement, that.actualRadius() - CIRCLE_SIZE_DIFFERENCE, cssClasses, that.labelForCurrentLanguage(), bgColor); + + } + + that.postDrawActions(); + }; + + /** + * Sets the hover highlighting of this node. + * @param enable + */ + that.setHoverHighlighting = function ( enable ){ + that.nodeElement().selectAll("circle:last-of-type").classed("hovered", enable); + }; + }; + o.prototype = Object.create(RoundNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 29 */ +/***/ (function(module, exports, __webpack_require__) { + + var SetOperatorNode = __webpack_require__(20); + + module.exports = (function (){ + + var o = function ( graph ){ + SetOperatorNode.apply(this, arguments); + + var that = this, + superDrawFunction = that.draw, + INTERSECTION_BACKGROUND_PATH = createIntersectionPath(); + + this.styleClass("intersectionof") + .type("owl:intersectionOf"); + + this.draw = function ( element ){ + superDrawFunction(element); + + var symbol = element.append("g").classed("embedded", true); + + var symbolRadius = 10; + symbol.append("path") + .attr("class", "nostroke") + .classed("symbol", true) + .attr("d", INTERSECTION_BACKGROUND_PATH); + symbol.append("circle") + .attr("class", "nofill") + .classed("fineline", true) + .attr("r", symbolRadius); + symbol.append("circle") + .attr("cx", 10) + .attr("class", "nofill") + .classed("fineline", true) + .attr("r", symbolRadius); + symbol.append("path") + .attr("class", "nofill") + .attr("d", "m 9,5 c 0,-2 0,-4 0,-6 0,0 0,0 0,0 0,0 0,-1.8 -1,-2.3 -0.7,-0.6 -1.7,-0.8 -2.9," + + "-0.8 -1.2,0 -2,0 -3,0.8 -0.7,0.5 -1,1.4 -1,2.3 0,2 0,4 0,6") + .attr("transform", "scale(.5)translate(5,0)"); + + symbol.attr("transform", + "translate(-" + (that.radius() - 15) / 7 + ",-" + (that.radius() - 15) / 100 + ")"); + + that.postDrawActions(); + }; + + function createIntersectionPath(){ + var height = 18; + + var offsetX = 5; + var offsetY = -(height / 2); + + var bezierX = 7; + var bezierY = 5; + var bottomBezierY = height - bezierY; + + var startPosition = "M" + offsetX + "," + offsetY; + var rightSide = "c" + bezierX + "," + bezierY + " " + bezierX + "," + bottomBezierY + " 0," + height; + var leftSide = "c" + -bezierX + "," + -bezierY + " " + -bezierX + "," + -bottomBezierY + " 0," + -height; + + return startPosition + rightSide + leftSide; + } + }; + o.prototype = Object.create(SetOperatorNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 30 */ +/***/ (function(module, exports, __webpack_require__) { + + var OwlThing = __webpack_require__(31); + + module.exports = (function (){ + + var o = function ( graph ){ + OwlThing.apply(this, arguments); + + this.label("Nothing") + .type("owl:Nothing") + .iri("http://www.w3.org/2002/07/owl#Nothing"); + }; + o.prototype = Object.create(OwlThing.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 31 */ +/***/ (function(module, exports, __webpack_require__) { + + var RoundNode = __webpack_require__(8); + + module.exports = (function (){ + + var o = function ( graph ){ + RoundNode.apply(this, arguments); + + var superDrawFunction = this.draw; + + this.label("Thing") + .type("owl:Thing") + .iri("http://www.w3.org/2002/07/owl#Thing") + .radius(30); + + this.draw = function ( element ){ + superDrawFunction(element, ["white", "dashed"]); + }; + }; + o.prototype = Object.create(RoundNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 32 */ +/***/ (function(module, exports, __webpack_require__) { + + var SetOperatorNode = __webpack_require__(20); + + module.exports = (function (){ + + var o = function ( graph ){ + SetOperatorNode.apply(this, arguments); + + var that = this, + superDrawFunction = that.draw; + + this.styleClass("unionof") + .type("owl:unionOf"); + + this.draw = function ( element ){ + superDrawFunction(element); + + var symbol = element.append("g").classed("embedded", true); + + var symbolRadius = 10; + symbol.append("circle") + .attr("class", "symbol") + .attr("r", symbolRadius); + symbol.append("circle") + .attr("cx", 10) + .attr("class", "symbol") + .classed("fineline", true) + .attr("r", symbolRadius); + symbol.append("circle") + .attr("class", "nofill") + .classed("fineline", true) + .attr("r", symbolRadius); + symbol.append("path") + .attr("class", "link") + .attr("d", "m 1,-3 c 0,2 0,4 0,6 0,0 0,0 0,0 0,2 2,3 4,3 2,0 4,-1 4,-3 0,-2 0,-4 0,-6") + .attr("transform", "scale(.5)translate(5,0)"); + + symbol.attr("transform", "translate(-" + (that.radius() - 15) / 7 + ",-" + (that.radius() - 15) / 100 + ")"); + + that.postDrawActions(); + }; + }; + o.prototype = Object.create(SetOperatorNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 33 */ +/***/ (function(module, exports, __webpack_require__) { + + var RoundNode = __webpack_require__(8); + + module.exports = (function (){ + + var o = function ( graph ){ + RoundNode.apply(this, arguments); + + this.attributes(["rdf"]) + .type("rdfs:Class"); + }; + o.prototype = Object.create(RoundNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 34 */ +/***/ (function(module, exports, __webpack_require__) { + + var DatatypeNode = __webpack_require__(35); + + module.exports = (function (){ + + var o = function ( graph ){ + DatatypeNode.apply(this, arguments); + var dTypeString = "undefined"; + this.attributes(["datatype"]) + .type("rdfs:Datatype") + .styleClass("datatype"); + this.dType = function ( val ){ + if ( !arguments.length ) return dTypeString; + dTypeString = val; + + }; + }; + o.prototype = Object.create(DatatypeNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 35 */ +/***/ (function(module, exports, __webpack_require__) { + + var RectangularNode = __webpack_require__(36); + + module.exports = (function (){ + + var o = function ( graph ){ + RectangularNode.apply(this, arguments); + }; + o.prototype = Object.create(RectangularNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 36 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var BaseNode = __webpack_require__(9); + var CenteringTextElement = __webpack_require__(14); + var drawTools = __webpack_require__(17)(); + var rectangularElementTools = __webpack_require__(37)(); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseNode.apply(this, arguments); + + var that = this, + height = 20, + width = 60, + pinGroupElement, + haloGroupElement, + labelWidth = 80, + myWidth = 80, + defaultWidth = 80, + shapeElement, + textBlock, + smallestRadius = height / 2; + + that.renderType("rect"); + // Properties + this.height = function ( p ){ + if ( !arguments.length ) return height; + height = p; + return this; + }; + + this.width = function ( p ){ + if ( !arguments.length ) return width; + width = p; + return this; + }; + + this.getHalos = function (){ + return haloGroupElement; + }; + + // Functions + // for compatibility reasons // TODO resolve + this.actualRadius = function (){ + return smallestRadius; + }; + + this.distanceToBorder = function ( dx, dy ){ + return rectangularElementTools.distanceToBorder(that, dx, dy); + }; + + this.setHoverHighlighting = function ( enable ){ + that.nodeElement().selectAll("rect").classed("hovered", enable); + + var haloGroup = that.getHalos(); + if ( haloGroup ) { + var test = haloGroup.selectAll(".searchResultA"); + test.classed("searchResultA", false); + test.classed("searchResultB", true); + } + + }; + + + // overwrite the labelWith; + + + this.textWidth = function (){ + return labelWidth; + }; + this.width = function (){ + return labelWidth; + }; + + this.getMyWidth = function (){ + // use a simple heuristic + var text = that.labelForCurrentLanguage(); + myWidth = measureTextWidth(text, "text") + 20; + + // check for sub names; + var indicatorText = that.indicationString(); + var indicatorWidth = measureTextWidth(indicatorText, "subtext") + 20; + if ( indicatorWidth > myWidth ) + myWidth = indicatorWidth; + + return myWidth; + }; + + this.textWidth = function (){ + return that.width(); + }; + function measureTextWidth( text, textStyle ){ + // Set a default value + if ( !textStyle ) { + textStyle = "text"; + } + var d = d3.select("body") + .append("div") + .attr("class", textStyle) + .attr("id", "width-test") // tag this element to identify it + .attr("style", "position:absolute; float:left; white-space:nowrap; visibility:hidden;") + .text(text), + w = document.getElementById("width-test").offsetWidth; + d.remove(); + return w; + } + + this.toggleFocus = function (){ + that.focused(!that.focused()); + that.nodeElement().select("rect").classed("focused", that.focused()); + graph.resetSearchHighlight(); + graph.options().searchMenu().clearText(); + }; + + /** + * Draws the rectangular node. + * @param parentElement the element to which this node will be appended + * @param [additionalCssClasses] additional css classes + */ + this.draw = function ( parentElement, additionalCssClasses ){ + var cssClasses = that.collectCssClasses(); + + that.nodeElement(parentElement); + + if ( additionalCssClasses instanceof Array ) { + cssClasses = cssClasses.concat(additionalCssClasses); + } + + // set the value for that.width() + // update labelWidth Value; + if ( graph.options().dynamicLabelWidth() === true ) labelWidth = Math.min(that.getMyWidth(), graph.options().maxLabelWidth()); + else labelWidth = defaultWidth; + + width = labelWidth; + shapeElement = drawTools.appendRectangularClass(parentElement, that.width(), that.height(), cssClasses, that.labelForCurrentLanguage(), that.backgroundColor()); + + textBlock = new CenteringTextElement(parentElement, that.backgroundColor()); + textBlock.addText(that.labelForCurrentLanguage()); + + that.addMouseListeners(); + + if ( that.pinned() ) { + that.drawPin(); + } + if ( that.halo() ) { + that.drawHalo(false); + } + }; + + this.drawPin = function (){ + that.pinned(true); + // if (graph.options().dynamicLabelWidth()===true) labelWidth=that.getMyWidth(); + // else labelWidth=defaultWidth; + // width=labelWidth; + // console.log("this element label Width is "+labelWidth); + var dx = -0.5 * labelWidth + 5, + dy = -1.1 * height; + + pinGroupElement = drawTools.drawPin(that.nodeElement(), dx, dy, this.removePin, graph.options().showDraggerObject, graph.options().useAccuracyHelper()); + + }; + + this.removePin = function (){ + that.pinned(false); + if ( pinGroupElement ) { + pinGroupElement.remove(); + } + graph.updateStyle(); + }; + + this.removeHalo = function (){ + that.halo(false); + if ( haloGroupElement ) { + haloGroupElement.remove(); + haloGroupElement = null; + } + }; + + this.drawHalo = function ( pulseAnimation ){ + that.halo(true); + + var offset = 0; + haloGroupElement = drawTools.drawRectHalo(that, this.width(), this.height(), offset); + + if ( pulseAnimation === false ) { + var pulseItem = haloGroupElement.selectAll(".searchResultA"); + pulseItem.classed("searchResultA", false); + pulseItem.classed("searchResultB", true); + pulseItem.attr("animationRunning", false); + } + + if ( that.pinned() ) { + var selectedNode = pinGroupElement.node(); + var nodeContainer = selectedNode.parentNode; + nodeContainer.appendChild(selectedNode); + } + + }; + + this.updateTextElement = function (){ + textBlock.updateAllTextElements(); + + }; + + this.textBlock = function (){ + return textBlock; + }; + + this.redrawLabelText = function (){ + textBlock.remove(); + textBlock = new CenteringTextElement(that.nodeElement(), that.backgroundColor()); + textBlock.addText(that.labelForCurrentLanguage()); + that.animateDynamicLabelWidth(graph.options().dynamicLabelWidth()); + shapeElement.select("title").text(that.labelForCurrentLanguage()); + }; + + this.animateDynamicLabelWidth = function ( dynamic ){ + that.removeHalo(); + var height = that.height(); + if ( dynamic === true ) { + labelWidth = Math.min(that.getMyWidth(), graph.options().maxLabelWidth()); + shapeElement.transition().tween("attr", function (){ + }) + .ease('linear') + .duration(100) + .attr({ x: -labelWidth / 2, y: -height / 2, width: labelWidth, height: height }) + .each("end", function (){ + that.updateTextElement(); + }); + + } else { + labelWidth = defaultWidth; + that.updateTextElement(); + shapeElement.transition().tween("attr", function (){ + }) + .ease('linear') + .duration(100) + .attr({ x: -labelWidth / 2, y: -height / 2, width: labelWidth, height: height }); + + } + + // for the pin we dont need to differ between different widths -- they are already set + if ( that.pinned() === true && pinGroupElement ) { + + var dx = 0.5 * labelWidth - 10, + dy = -1.1 * height; + + pinGroupElement.transition() + .tween("attr.translate", function (){ + }) + .attr("transform", "translate(" + dx + "," + dy + ")") + .ease('linear') + .duration(100); + } + }; + + this.addTextLabelElement = function (){ + var parentElement = that.nodeElement(); + textBlock = new CenteringTextElement(parentElement, this.backgroundColor()); + textBlock.addText(that.labelForCurrentLanguage()); + }; + + + }; + o.prototype = Object.create(BaseNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 37 */ +/***/ (function(module, exports) { + + var tools = {}; + module.exports = function (){ + return tools; + }; + + tools.distanceToBorder = function ( rect, dx, dy ){ + var width = rect.width(), + height = rect.height(); + + var innerDistance, + m_link = Math.abs(dy / dx), + m_rect = height / width; + + if ( m_link <= m_rect ) { + var timesX = dx / (width / 2), + rectY = dy / timesX; + innerDistance = Math.sqrt(Math.pow(width / 2, 2) + Math.pow(rectY, 2)); + } else { + var timesY = dy / (height / 2), + rectX = dx / timesY; + innerDistance = Math.sqrt(Math.pow(height / 2, 2) + Math.pow(rectX, 2)); + } + + return innerDistance; + }; + + +/***/ }), +/* 38 */ +/***/ (function(module, exports, __webpack_require__) { + + var DatatypeNode = __webpack_require__(35); + + module.exports = (function (){ + + var o = function ( graph ){ + DatatypeNode.apply(this, arguments); + + var superDrawFunction = this.draw, + superLabelFunction = this.label; + + this.attributes(["datatype"]) + .label("Literal") + .styleClass("literal") + .type("rdfs:Literal") + .iri("http://www.w3.org/2000/01/rdf-schema#Literal"); + + this.draw = function ( element ){ + superDrawFunction(element, ["dashed"]); + }; + + this.label = function ( p ){ + if ( !arguments.length ) return superLabelFunction(); + return this; + }; + }; + o.prototype = Object.create(DatatypeNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 39 */ +/***/ (function(module, exports, __webpack_require__) { + + var RoundNode = __webpack_require__(8); + + module.exports = (function (){ + + var o = function ( graph ){ + RoundNode.apply(this, arguments); + + var superDrawFunction = this.draw; + + this.attributes(["rdf"]) + .label("Resource") + .radius(30) + .styleClass("rdfsresource") + .type("rdfs:Resource"); + + this.draw = function ( element ){ + superDrawFunction(element, ["rdf", "dashed"]); + }; + }; + o.prototype = Object.create(RoundNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 40 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var properties = []; + properties.push(__webpack_require__(41)); + properties.push(__webpack_require__(44)); + properties.push(__webpack_require__(45)); + properties.push(__webpack_require__(46)); + properties.push(__webpack_require__(47)); + properties.push(__webpack_require__(48)); + properties.push(__webpack_require__(49)); + properties.push(__webpack_require__(50)); + properties.push(__webpack_require__(51)); + properties.push(__webpack_require__(52)); + properties.push(__webpack_require__(53)); + properties.push(__webpack_require__(54)); + properties.push(__webpack_require__(55)); + properties.push(__webpack_require__(56)); + + var map = d3.map(properties, function ( Prototype ){ + return new Prototype().type(); + }); + + module.exports = function (){ + return map; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 41 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + var superGenerateCardinalityText = this.generateCardinalityText; + + this.linkType("values-from") + .markerType("filled values-from") + .styleClass("allvaluesfromproperty") + .type("owl:allValuesFrom"); + + this.generateCardinalityText = function (){ + var cardinalityText = "A"; + + var superCardinalityText = superGenerateCardinalityText(); + if ( superCardinalityText ) { + cardinalityText += ", " + superCardinalityText; + } + + return cardinalityText; + }; + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + + + +/***/ }), +/* 42 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var BaseElement = __webpack_require__(10); + var CenteringTextElement = __webpack_require__(14); + var drawTools = __webpack_require__(17)(); + var forceLayoutNodeFunctions = __webpack_require__(13)(); + var rectangularElementTools = __webpack_require__(37)(); + var math = __webpack_require__(43)(); + + module.exports = (function (){ + + // Static variables + var labelHeight = 28, + labelWidth = 80, + smallestRadius = labelHeight / 2; + + + // Constructor, private variables and privileged methods + var Base = function ( graph ){ + BaseElement.apply(this, arguments); + + var that = this, + // Basic attributes + cardinality, + domain, + inverse, + link, + minCardinality, + maxCardinality, + range, + subproperties, + superproperties, + // Style attributes + linkType = "normal", + markerType = "filled", + labelVisible = true, + // Element containers + cardinalityElement, + labelElement, + linkGroup, + markerElement, + // Other + ignoreLocalHoverEvents, + fobj, + pinGroupElement, + haloGroupElement, + myWidth = 80, + defaultWidth = 80, + shapeElement, + textElement, + parent_labelObject, + backupFullIri, + + redundantProperties = []; + + + this.existingPropertyIRI = function ( url ){ + return graph.options().editSidebar().checkForExistingURL(url); + }; + + this.getHalos = function (){ + return haloGroupElement; + }; + + this.getPin = function (){ + return pinGroupElement; + }; + this.labelObject = function ( lo, once ){ + if ( !arguments.length ) { + return parent_labelObject; + } + else { + parent_labelObject = lo; + if ( that.inverse() && once !== true ) { + that.inverse().labelObject(lo, true); + } + + } + }; + this.hide = function ( val ){ + that.labelElement().classed("hidden", val); + that.linkGroup().classed("hidden", val); + if ( that.cardinalityElement() ) + that.cardinalityElement().classed("hidden", val); + }; + + // Properties + this.cardinality = function ( p ){ + if ( !arguments.length ) return cardinality; + cardinality = p; + return this; + }; + + this.cardinalityElement = function ( p ){ + if ( !arguments.length ) return cardinalityElement; + cardinalityElement = p; + return this; + }; + + this.domain = function ( p ){ + if ( !arguments.length ) return domain; + domain = p; + return this; + }; + + this.inverse = function ( p ){ + if ( !arguments.length ) return inverse; + inverse = p; + return this; + }; + + this.labelElement = function ( p ){ + if ( !arguments.length ) return labelElement; + labelElement = p; + return this; + }; + + this.labelVisible = function ( p ){ + if ( !arguments.length ) return labelVisible; + labelVisible = p; + return this; + }; + + this.link = function ( p ){ + if ( !arguments.length ) return link; + link = p; + return this; + }; + + this.linkGroup = function ( p ){ + if ( !arguments.length ) return linkGroup; + linkGroup = p; + return this; + }; + + this.linkType = function ( p ){ + if ( !arguments.length ) return linkType; + linkType = p; + return this; + }; + + this.markerElement = function ( p ){ + if ( !arguments.length ) return markerElement; + markerElement = p; + return this; + }; + + this.markerType = function ( p ){ + if ( !arguments.length ) return markerType; + markerType = p; + return this; + }; + + this.maxCardinality = function ( p ){ + if ( !arguments.length ) return maxCardinality; + maxCardinality = p; + return this; + }; + + this.minCardinality = function ( p ){ + if ( !arguments.length ) return minCardinality; + minCardinality = p; + return this; + }; + + this.range = function ( p ){ + if ( !arguments.length ) return range; + range = p; + return this; + }; + + this.redundantProperties = function ( p ){ + if ( !arguments.length ) return redundantProperties; + redundantProperties = p; + return this; + }; + + this.subproperties = function ( p ){ + if ( !arguments.length ) return subproperties; + subproperties = p; + return this; + }; + + this.superproperties = function ( p ){ + if ( !arguments.length ) return superproperties; + superproperties = p; + return this; + }; + + + // Functions + this.distanceToBorder = function ( dx, dy ){ + return rectangularElementTools.distanceToBorder(that, dx, dy); + }; + + this.linkHasMarker = function (){ + return linkType !== "dashed"; + }; + + this.markerId = function (){ + return "marker" + that.id(); + }; + + this.toggleFocus = function (){ + that.focused(!that.focused()); + labelElement.select("rect").classed("focused", that.focused()); + graph.resetSearchHighlight(); + graph.options().searchMenu().clearText(); + }; + this.getShapeElement = function (){ + return shapeElement; + }; + + this.textBlock = function (){ + return textElement; + }; + + this.redrawElement = function (){ + shapeElement.remove(); + textElement.remove(); + + that.drawLabel(that.labelElement()); + that.animateDynamicLabelWidth(graph.options().dynamicLabelWidth()); + + + // shapeElement=this.addRect(that.labelElement()); + // + // var equivalentsString = that.equivalentsString(); + // var suffixForFollowingEquivalents = equivalentsString ? "," : ""; + // + // textElement = new CenteringTextElement(labelContainer, this.backgroundColor()); + // textElement.addText(this.labelForCurrentLanguage(), "", suffixForFollowingEquivalents); + // textElement.addEquivalents(equivalentsString); + // textElement.addSubText(this.indicationString()); + + }; + + // Reused functions TODO refactor + this.draw = function ( labelGroup ){ + function attachLabel( property ){ + var labelContainer = labelGroup.append("g") + .datum(property) + .classed("label", true) + .attr("id", property.id()); + + property.drawLabel(labelContainer); + return labelContainer; + } + + if ( !that.labelVisible() ) { + return undefined; + } + if ( graph.options().dynamicLabelWidth() === true ) myWidth = Math.min(that.getMyWidth(), graph.options().maxLabelWidth()); + else myWidth = defaultWidth; + + that.labelElement(attachLabel(that)); + // Draw an inverse label and reposition both labels if necessary + if ( that.inverse() ) { + var yTransformation = (that.height() / 2) + 1 /* additional space */; + that.inverse() + .labelElement(attachLabel(that.inverse())); + + that.labelElement() + .attr("transform", "translate(" + 0 + ",-" + yTransformation + ")"); + that.inverse() + .labelElement() + .attr("transform", "translate(" + 0 + "," + yTransformation + ")"); + } + + if ( that.pinned() ) { + that.drawPin(); + } else if ( that.inverse() && that.inverse().pinned() ) { + that.inverse().drawPin(); + } + + if ( that.halo() ) + that.drawHalo(false); + + return that.labelElement(); + }; + + this.addRect = function ( labelContainer ){ + var rect = labelContainer.append("rect") + .classed(that.styleClass(), true) + .classed("property", true) + .attr("x", -that.width() / 2) + .attr("y", -that.height() / 2) + .attr("width", that.width()) + .attr("height", that.height()) + .on("mouseover", function (){ + onMouseOver(); + }) + .on("mouseout", function (){ + onMouseOut(); + }); + + rect.append("title") + .text(that.labelForCurrentLanguage()); + + if ( that.visualAttributes() ) { + rect.classed(that.visualAttributes(), true); + } + + var bgColor = that.backgroundColor(); + + if ( that.attributes().indexOf("deprecated") > -1 ) { + bgColor = undefined; + rect.classed("deprecatedproperty", true); + } else { + rect.classed("deprecatedproperty", false); + } + rect.style("fill", bgColor); + + return rect; + }; + this.drawLabel = function ( labelContainer ){ + shapeElement = this.addRect(labelContainer); + + var equivalentsString = that.equivalentsString(); + var suffixForFollowingEquivalents = equivalentsString ? "," : ""; + + var bgColor = that.backgroundColor(); + if ( that.attributes().indexOf("deprecated") > -1 ) { + bgColor = undefined; + } + textElement = new CenteringTextElement(labelContainer, bgColor); + textElement.addText(this.labelForCurrentLanguage(), "", suffixForFollowingEquivalents); + textElement.addEquivalents(equivalentsString); + textElement.addSubText(this.indicationString()); + }; + + this.equivalentsString = function (){ + var equivalentProperties = that.equivalents(); + if ( !equivalentProperties ) { + return; + } + + return equivalentProperties + .map(function ( property ){ + if ( property === undefined || typeof(property) === "string" ) { // @WORKAROUND + return "ERROR"; + } + return property.labelForCurrentLanguage(); + }) + .join(", "); + }; + + this.drawCardinality = function ( container ){ + var cardinalityText = this.generateCardinalityText(); + + if ( cardinalityText ) { + that.cardinalityElement(container); + if ( cardinalityText.indexOf("A") === 0 && cardinalityText.length === 1 ) { + + // replacing text elements to svg elements; + container.classed("cardinality", true) + .attr("text-anchor", "middle") + .append("path") + .classed("cardinality", true) + .attr("d", "m -8.8832678,-11.303355 -7.97e-4,0 0.717374,1.833297 8.22987151,21.371761 8.66826659,-21.2123526 0.797082,-1.9927054 0.02471,0 -0.8218553,1.9927054 -2.2517565,5.4201577 -12.4444429,8e-6 -2.2019394,-5.5795821 z") + .style("fill", "none") + .attr("transform", "matrix(0.5,0,0,0.5,0.5,0.5)"); + return true; + } else if ( cardinalityText.indexOf("E") === 0 && cardinalityText.length === 1 ) { + container.classed("cardinality", true) + .attr("text-anchor", "middle") + .append("path") + .classed("cardinality", true) + .attr("d", "m -5.5788451,-8.0958763 10.8749368,0 0,8.34681523 -9.5707468,0.040132 9.5707468,-0.040132 0,8.42707237 -10.9150654,0") + .style("fill", "none") + .attr("transform", "matrix(0.5,0,0,0.5,0.5,0.5)"); + return true; + } + else { + container.append("text") + .classed("cardinality", true) + .attr("text-anchor", "middle") + .attr("dy", "0.5ex") + .text(cardinalityText); + return true; // drawing successful + } + } else { + return false; + } + }; + + this.generateCardinalityText = function (){ + if ( that.cardinality() ) { + return that.cardinality(); + } else if ( that.minCardinality() || that.maxCardinality() ) { + var minBoundary = that.minCardinality() || "*"; + var maxBoundary = that.maxCardinality() || "*"; + return minBoundary + ".." + maxBoundary; + } + }; + + that.setHighlighting = function ( enable ){ + if ( that.labelElement && that.labelElement() ) { + that.labelElement().select("rect").classed("hovered", enable); + } + that.linkGroup().selectAll("path, text").classed("hovered", enable); + if ( that.markerElement() ) { + that.markerElement().select("path").classed("hovered", enable); + if ( that.cardinalityElement() ) { + that.cardinalityElement().selectAll("path").classed("hovered-MathSymbol", enable); + that.cardinalityElement().classed("hovered", enable); + } + } + var subAndSuperProperties = getSubAndSuperProperties(); + subAndSuperProperties.forEach(function ( property ){ + + if ( property.labelElement && property.labelElement() ) { + property.labelElement().select("rect") + .classed("indirect-highlighting", enable); + } + + }); + var inversed = false; + + if ( graph.ignoreOtherHoverEvents() === false ) { + if ( that.inverse() ) { + inversed = true; + } + + if ( graph.isTouchDevice() === false ) { + graph.activateHoverElementsForProperties(enable, that, inversed); + } + else { + that.labelElement().select("rect").classed("hovered", false); + that.linkGroup().selectAll("path, text").classed("hovered", false); + if ( that.markerElement() ) { + that.markerElement().select("path").classed("hovered", false); + if ( that.cardinalityElement() ) { + that.cardinalityElement().classed("hovered", false); + } + } + graph.activateHoverElementsForProperties(enable, that, inversed, true); + } + } + }; + + /** + * Combines the sub- and superproperties into a single array, because + * they're often used equivalently. + * @returns {Array} + */ + function getSubAndSuperProperties(){ + var properties = []; + + if ( that.subproperties() ) { + properties = properties.concat(that.subproperties()); + } + if ( that.superproperties() ) { + properties = properties.concat(that.superproperties()); + } + + return properties; + } + + /** + * Foregrounds the property, its inverse and the link. + */ + this.foreground = function (){ + // check for additional objects that we can highlight + if ( !that.labelElement() ) + return; + if ( that.labelElement().node().parentNode === null ) { + return; + } + var selectedLabelGroup = that.labelElement().node().parentNode, + labelContainer = selectedLabelGroup.parentNode, + selectedLinkGroup = that.linkGroup().node(), + linkContainer = that.linkGroup().node().parentNode; + if ( that.animationProcess() === false ) { + labelContainer.appendChild(selectedLabelGroup); + } + linkContainer.appendChild(selectedLinkGroup); + }; + + /** + * Foregrounds the sub- and superproperties of this property. + * This is separated from the foreground-function to prevent endless loops. + */ + function foregroundSubAndSuperProperties(){ + var subAndSuperProperties = getSubAndSuperProperties(); + + subAndSuperProperties.forEach(function ( property ){ + if ( property.foreground ) property.foreground(); + }); + } + + function onMouseOver(){ + if ( that.mouseEntered() || ignoreLocalHoverEvents === true ) { + return; + } + that.mouseEntered(true); + that.setHighlighting(true); + that.foreground(); + foregroundSubAndSuperProperties(); + } + + function onMouseOut(){ + that.mouseEntered(false); + that.setHighlighting(false); + } + + this.drawPin = function (){ + that.pinned(true); + if ( graph.options().dynamicLabelWidth() === true ) myWidth = that.getMyWidth(); + else myWidth = defaultWidth; + + if ( that.inverse() ) { + // check which element is rendered on top and add a pin to it + var tr_that = that.labelElement().attr("transform"); + var tr_inv = that.inverse().labelElement().attr("transform"); + + var thatY = /translate\(\s*([^\s,)]+)[ ,]([^\s,)]+)/.exec(tr_that)[2]; + var invY = /translate\(\s*([^\s,)]+)[ ,]([^\s,)]+)/.exec(tr_inv)[2]; + + if ( thatY < invY ) + pinGroupElement = drawTools.drawPin(that.labelElement(), -0.5 * that.width() + 10, -25, this.removePin, graph.options().showDraggerObject, graph.options().useAccuracyHelper()); + else + pinGroupElement = drawTools.drawPin(that.inverse().labelElement(), -0.5 * that.inverse().width() + 10, -25, this.removePin, graph.options().showDraggerObject, graph.options().useAccuracyHelper()); + + } + else { + pinGroupElement = drawTools.drawPin(that.labelElement(), -0.5 * that.width() + 10, -25, this.removePin, graph.options().showDraggerObject, graph.options().useAccuracyHelper()); + } + + + }; + + /** + * Removes the pin and refreshs the graph to update the force layout. + */ + this.removePin = function (){ + that.pinned(false); + if ( pinGroupElement ) { + pinGroupElement.remove(); + } + graph.updateStyle(); + }; + + this.removeHalo = function (){ + that.halo(false); + if ( haloGroupElement ) { + haloGroupElement.remove(); + haloGroupElement = null; + } + }; + + this.animationProcess = function (){ + var animRuns = false; + if ( that.getHalos() ) { + var haloGr = that.getHalos(); + var haloEls = haloGr.selectAll(".searchResultA"); + animRuns = haloGr.attr("animationRunning"); + + if ( typeof animRuns !== "boolean" ) { + // parse this to a boolean value + animRuns = (animRuns === 'true'); + } + if ( animRuns === false ) { + haloEls.classed("searchResultA", false); + haloEls.classed("searchResultB", true); + } + } + return animRuns; + }; + + this.drawHalo = function ( pulseAnimation ){ + that.halo(true); + var offset = 0; + if ( that.labelElement() && that.labelElement().node() ) { + var labelNode = that.labelElement().node(); + var labelContainer = labelNode.parentNode; + // do this only if animation is not running + if ( that.animationProcess() === false ) + labelContainer.appendChild(labelNode); + } + haloGroupElement = drawTools.drawRectHalo(that, that.width(), that.height(), offset); + if ( haloGroupElement ) { + var haloNode = haloGroupElement.node(); + var haloContainer = haloNode.parentNode; + haloContainer.appendChild(haloNode); + } + var selectedNode; + var nodeContainer; + if ( that.pinned() ) { + selectedNode = pinGroupElement.node(); + nodeContainer = selectedNode.parentNode; + nodeContainer.appendChild(selectedNode); + } + if ( that.inverse() && that.inverse().pinned() ) { + if ( that.inverse().getPin() ) { + selectedNode = that.inverse().getPin().node(); + nodeContainer = selectedNode.parentNode; + nodeContainer.appendChild(selectedNode); + } + } + if ( pulseAnimation === false ) { + var pulseItem = haloGroupElement.selectAll(".searchResultA"); + pulseItem.classed("searchResultA", false); + pulseItem.classed("searchResultB", true); + pulseItem.attr("animationRunning", false); + } + }; + + this.getMyWidth = function (){ + var text = that.labelForCurrentLanguage(); + myWidth = measureTextWidth(text, "text") + 20; + // check for sub names; + var indicatorText = that.indicationString(); + var indicatorWidth = measureTextWidth(indicatorText, "subtext") + 20; + if ( indicatorWidth > myWidth ) + myWidth = indicatorWidth; + + return myWidth; + }; + + function measureTextWidth( text, textStyle ){ + // Set a default value + if ( !textStyle ) { + textStyle = "text"; + } + var d = d3.select("body") + .append("div") + .attr("class", textStyle) + .attr("id", "width-test") // tag this element to identify it + .attr("style", "position:absolute; float:left; white-space:nowrap; visibility:hidden;") + .text(text), + w = document.getElementById("width-test").offsetWidth; + d.remove(); + return w; + } + + this.textWidth = function (){ + return myWidth; + }; + this.width = function (){ + return myWidth; + }; + + this.animateDynamicLabelWidth = function ( dynamic ){ + that.removeHalo(); + if ( shapeElement === undefined ) {// this handles setOperatorProperties which dont have a shapeElement! + return; + } + + var h = that.height(); + if ( dynamic === true ) { + myWidth = Math.min(that.getMyWidth(), graph.options().maxLabelWidth()); + shapeElement.transition().tween("attr", function (){ + }) + .ease('linear') + .duration(100) + .attr({ x: -myWidth / 2, y: -h / 2, width: myWidth, height: h }) + .each("end", function (){ + that.updateTextElement(); + }); + } else { + // Static width for property labels = 80 + myWidth = defaultWidth; + that.updateTextElement(); + shapeElement.transition().tween("attr", function (){ + }) + .ease('linear') + .duration(100) + .attr({ x: -myWidth / 2, y: -h / 2, width: myWidth, height: h }); + } + if ( that.pinned() === true && pinGroupElement ) { + var dx = -0.5 * myWidth + 10, + dy = -25; + pinGroupElement.transition() + .tween("attr.translate", function (){ + }) + .attr("transform", "translate(" + dx + "," + dy + ")") + .ease('linear') + .duration(100); + } + }; + + this.redrawLabelText = function (){ + textElement.remove(); + that.addTextLabelElement(); + that.animateDynamicLabelWidth(graph.options().dynamicLabelWidth()); + shapeElement.select("title").text(that.labelForCurrentLanguage()); + }; + + this.addTextLabelElement = function (){ + var labelContainer = that.labelElement(); + + var equivalentsString = that.equivalentsString(); + var suffixForFollowingEquivalents = equivalentsString ? "," : ""; + + textElement = new CenteringTextElement(labelContainer, this.backgroundColor()); + textElement.addText(this.labelForCurrentLanguage(), "", suffixForFollowingEquivalents); + textElement.addEquivalents(equivalentsString); + textElement.addSubText(this.indicationString()); + }; + + this.updateTextElement = function (){ + textElement.updateAllTextElements(); + }; + this.enableEditing = function ( autoEditing ){ + if ( autoEditing === false ) + return; + that.raiseDoubleClickEdit(true); + }; + + this.raiseDoubleClickEdit = function ( forceIRISync ){ + d3.selectAll(".foreignelements").remove(); + if ( that.labelElement() === undefined || this.type() === "owl:disjointWith" || this.type() === "rdfs:subClassOf" ) { + console.log("No Container found"); + return; + } + if ( fobj !== undefined ) { + that.labelElement().selectAll(".foreignelements").remove(); + } + backupFullIri = undefined; + graph.options().focuserModule().handle(undefined); + graph.options().focuserModule().handle(that); + that.editingTextElement = true; + ignoreLocalHoverEvents = true; + that.labelElement().selectAll("rect").classed("hoveredForEditing", true); + that.frozen(true); + graph.killDelayedTimer(); + graph.ignoreOtherHoverEvents(false); + fobj = that.labelElement().append("foreignObject") + .attr("x", -0.5 * that.textWidth()) + .attr("y", -13) + .attr("height", 25) + .attr("class", "foreignelements") + .on("dragstart", function (){ + return false; + }) // remove drag operations of text element) + .attr("width", that.textWidth() - 2); + // adding a Style to the fObject + // + // + // + var editText = fobj.append("xhtml:input") + .attr("class", "nodeEditSpan") + .attr("id", that.id()) + .attr("align", "center") + .attr("contentEditable", "true") + .on("dragstart", function (){ + return false; + }); // remove drag operations of text element) + + var bgColor = '#f00'; + var txtWidth = that.textWidth() - 2; + editText.style({ + // 'line-height': '30px', + 'align': 'center', + 'color': 'black', + 'width': txtWidth + "px", + 'background-color': bgColor, + 'border-bottom': '2px solid black' + }); + var txtNode = editText.node(); + txtNode.value = that.labelForCurrentLanguage(); + txtNode.focus(); + txtNode.select(); + if ( d3.event.stopPropagation ) d3.event.stopPropagation(); + if ( d3.event.sourceEvent && d3.event.sourceEvent.stopPropagation ) d3.event.sourceEvent.stopPropagation(); + + // add some events that relate to this object + editText.on("click", function (){ + if ( d3.event.stopPropagation ) d3.event.stopPropagation(); + if ( d3.event.sourceEvent && d3.event.sourceEvent.stopPropagation ) d3.event.sourceEvent.stopPropagation(); + + }); + // // remove hover Events for now; + editText.on("mouseout", function (){ + if ( d3.event.stopPropagation ) d3.event.stopPropagation(); + if ( d3.event.sourceEvent && d3.event.sourceEvent.stopPropagation ) d3.event.sourceEvent.stopPropagation(); + }); + editText.on("mousedown", function (){ + if ( d3.event.stopPropagation ) d3.event.stopPropagation(); + if ( d3.event.sourceEvent && d3.event.sourceEvent.stopPropagation ) d3.event.sourceEvent.stopPropagation(); + }) + .on("keydown", function (){ + + if ( d3.event.keyCode === 13 ) { + this.blur(); + that.frozen(false); // << releases the not after selection + that.locked(false); + } + }) + .on("keyup", function (){ + if ( forceIRISync ) { + var labelName = editText.node().value; + var resourceName = labelName.replaceAll(" ", "_"); + var syncedIRI = that.baseIri() + resourceName; + backupFullIri = syncedIRI; + + d3.select("#element_iriEditor").node().title = syncedIRI; + d3.select("#element_iriEditor").node().value = graph.options().prefixModule().getPrefixRepresentationForFullURI(syncedIRI); + } + d3.select("#element_labelEditor").node().value = editText.node().value; + + }) + .on("blur", function (){ + + + that.editingTextElement = false; + ignoreLocalHoverEvents = false; + that.labelElement().selectAll("rect").classed("hoveredForEditing", false); + var newLabel = editText.node().value; + that.labelElement().selectAll(".foreignelements").remove(); + // that.setLabelForCurrentLanguage(classNameConvention(editText.node().value)); + that.label(newLabel); + that.backupLabel(newLabel); + that.redrawLabelText(); + updateHoverElements(true); + graph.showHoverElementsAfterAnimation(that, false); + graph.ignoreOtherHoverEvents(false); + + + that.frozen(graph.paused()); + that.locked(graph.paused()); + that.domain().frozen(graph.paused()); + that.domain().locked(graph.paused()); + that.range().frozen(graph.paused()); + that.range().locked(graph.paused()); + graph.removeEditElements(); + if ( backupFullIri ) { + // console.log("Checking if element is Identical ?"); + var sanityCheckResult = graph.options().editSidebar().checkProperIriChange(that, backupFullIri); + if ( sanityCheckResult !== false ) { + graph.options().warningModule().showWarning("Already seen this property", + "Input IRI: " + backupFullIri + " for element: " + that.labelForCurrentLanguage() + " already been set", + "Continuing with duplicate property!", 1, false, sanityCheckResult); + } + that.iri(backupFullIri); + } + graph.options().focuserModule().handle(undefined); + graph.options().focuserModule().handle(that); + graph.updatePropertyDraggerElements(that); + + + }); // add a foreiner element to this thing; + + }; + + // update hover elements + function updateHoverElements( enable ){ + if ( graph.ignoreOtherHoverEvents() === false ) { + var inversed = false; + if ( that.inverse() ) { + inversed = true; + } + if ( enable === true ) { + graph.activateHoverElementsForProperties(enable, that, inversed); + } + } + } + + that.copyInformation = function ( other ){ + that.label(other.label()); + that.iri(other.iri()); + that.baseIri(other.baseIri()); + if ( other.type() === "owl:ObjectProperty" || + other.type() === "owl:DatatypeProperty" ) { + that.backupLabel(other.label()); + // console.log("copied backup label"+that.backupLabel()); + } + if ( other.backupLabel() !== undefined ) { + that.backupLabel(other.backupLabel()); + } + }; + + forceLayoutNodeFunctions.addTo(this); + }; + + Base.prototype = Object.create(BaseElement.prototype); + Base.prototype.constructor = Base; + + Base.prototype.height = function (){ + return labelHeight; + }; + + Base.prototype.width = function (){ + return labelWidth; + }; + + Base.prototype.actualRadius = function (){ + return smallestRadius; + }; + + Base.prototype.textWidth = Base.prototype.width; + + + return Base; + }()); + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 43 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains a collection of mathematical functions with some additional data + * used for WebVOWL. + */ + module.exports = (function (){ + + var math = {}, + loopFunction = d3.svg.line() + .x(function ( d ){ + return d.x; + }) + .y(function ( d ){ + return d.y; + }) + .interpolate("cardinal") + .tension(-1); + + + /** + * Calculates the normal vector of the path between the two nodes. + * @param source the first node + * @param target the second node + * @param length the length of the calculated normal vector + * @returns {{x: number, y: number}} + */ + math.calculateNormalVector = function ( source, target, length ){ + var dx = target.x - source.x, + dy = target.y - source.y; + + var nx = -dy, + ny = dx; + + var vlength = Math.sqrt(nx * nx + ny * ny); + + var ratio = vlength !== 0 ? length / vlength : 0; + + return { "x": nx * ratio, "y": ny * ratio }; + }; + + /** + * Calculates the path for a link, if it is a loop. Currently only working for circlular nodes. + * @param link the link + * @returns {*} + */ + + + + math.getLoopPoints = function ( link ){ + var node = link.domain(), + label = link.label(); + + var fairShareLoopAngle = 360 / link.loops().length, + fairShareLoopAngleWithMargin = fairShareLoopAngle * 0.8, + loopAngle = Math.min(60, fairShareLoopAngleWithMargin); + + if ( label.increasedLoopAngle === true ) + loopAngle = 120; + + + var dx = label.x - node.x, + dy = label.y - node.y, + labelRadian = Math.atan2(dy, dx), + labelAngle = calculateAngle(labelRadian); + + var startAngle = labelAngle - loopAngle / 2, + endAngle = labelAngle + loopAngle / 2; + + + var arcFrom = calculateRadian(startAngle), + arcTo = calculateRadian(endAngle), + + x1 = Math.cos(arcFrom) * node.actualRadius(), + y1 = Math.sin(arcFrom) * node.actualRadius(), + + x2 = Math.cos(arcTo) * node.actualRadius(), + y2 = Math.sin(arcTo) * node.actualRadius(), + + fixPoint1 = { "x": node.x + x1, "y": node.y + y1 }, + fixPoint2 = { "x": node.x + x2, "y": node.y + y2 }; + + return [fixPoint1, fixPoint2]; + }; + math.calculateLoopPath = function ( link ){ + var node = link.domain(), + label = link.label(); + + + var fairShareLoopAngle = 360 / link.loops().length, + fairShareLoopAngleWithMargin = fairShareLoopAngle * 0.8, + loopAngle = Math.min(60, fairShareLoopAngleWithMargin); + + if ( label.increasedLoopAngle === true ) + loopAngle = 120; + + var dx = label.x - node.x, + dy = label.y - node.y, + labelRadian = Math.atan2(dy, dx), + labelAngle = calculateAngle(labelRadian); + + var startAngle = labelAngle - loopAngle / 2, + endAngle = labelAngle + loopAngle / 2; + + var arcFrom = calculateRadian(startAngle), + arcTo = calculateRadian(endAngle), + + x1 = Math.cos(arcFrom) * node.actualRadius(), + y1 = Math.sin(arcFrom) * node.actualRadius(), + + x2 = Math.cos(arcTo) * node.actualRadius(), + y2 = Math.sin(arcTo) * node.actualRadius(), + + fixPoint1 = { "x": node.x + x1, "y": node.y + y1 }, + fixPoint2 = { "x": node.x + x2, "y": node.y + y2 }; + + return loopFunction([fixPoint1, link.label(), fixPoint2]); + }; + + math.calculateLoopPoints = function ( link ){ + var node = link.domain(), + label = link.label(); + + var fairShareLoopAngle = 360 / link.loops().length, + fairShareLoopAngleWithMargin = fairShareLoopAngle * 0.8, + loopAngle = Math.min(60, fairShareLoopAngleWithMargin); + + var dx = label.x - node.x, + dy = label.y - node.y, + labelRadian = Math.atan2(dy, dx), + labelAngle = calculateAngle(labelRadian); + + var startAngle = labelAngle - loopAngle / 2, + endAngle = labelAngle + loopAngle / 2; + + var arcFrom = calculateRadian(startAngle), + arcTo = calculateRadian(endAngle), + + x1 = Math.cos(arcFrom) * node.actualRadius(), + y1 = Math.sin(arcFrom) * node.actualRadius(), + + x2 = Math.cos(arcTo) * (node.actualRadius()), + y2 = Math.sin(arcTo) * (node.actualRadius()), + + fixPoint1 = { "x": node.x + x1, "y": node.y + y1 }, + fixPoint2 = { "x": node.x + x2, "y": node.y + y2 }; + + return [fixPoint1, link.label(), fixPoint2]; + }; + + /** + * @param angle + * @returns {number} the radian of the angle + */ + function calculateRadian( angle ){ + angle = angle % 360; + if ( angle < 0 ) { + angle = angle + 360; + } + return (Math.PI * angle) / 180; + } + + /** + * @param radian + * @returns {number} the angle of the radian + */ + function calculateAngle( radian ){ + return radian * (180 / Math.PI); + } + + /** + * Calculates the point where the link between the source and target node + * intersects the border of the target node. + * @param source the source node + * @param target the target node + * @param additionalDistance additional distance the + * @returns {{x: number, y: number}} + */ + math.calculateIntersection = function ( source, target, additionalDistance ){ + var dx = target.x - source.x, + dy = target.y - source.y, + length = Math.sqrt(dx * dx + dy * dy); + + if ( length === 0 ) { + return { x: source.x, y: source.y }; + } + + var innerDistance = target.distanceToBorder(dx, dy); + + var ratio = (length - (innerDistance + additionalDistance)) / length, + x = dx * ratio + source.x, + y = dy * ratio + source.y; + + return { x: x, y: y }; + }; + + /** + * Calculates the position between the two points. + * @param firstPoint + * @param secondPoint + * @returns {{x: number, y: number}} + */ + math.calculateCenter = function ( firstPoint, secondPoint ){ + return { + x: (firstPoint.x + secondPoint.x) / 2, + y: (firstPoint.y + secondPoint.y) / 2 + }; + }; + + + return function (){ + /* Use a function here to keep a consistent style like webvowl.path.to.module() + * despite having just a single math object. */ + return math; + }; + })(); + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 44 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + this.attributes(["datatype"]) + .styleClass("datatypeproperty") + .type("owl:DatatypeProperty"); + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 45 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + this.attributes(["deprecated"]) + .styleClass("deprecatedproperty") + .type("owl:DeprecatedProperty"); + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 46 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + var CenteringTextElement = __webpack_require__(14); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + var label = "Disjoint With"; + var shapeElement; + // Disallow overwriting the label + this.label = function ( p ){ + if ( !arguments.length ) return label; + return this; + }; + + this.linkType("dashed") + .styleClass("disjointwith") + .type("owl:disjointWith"); + + this.drawLabel = function ( labelContainer ){ + shapeElement = this.addRect(labelContainer); + + labelContainer.append("circle") + .classed("symbol", true) + .classed("fineline", true) + .classed("embedded", true) + .attr("cx", -12.5) + .attr("r", 10); + + labelContainer.append("circle") + .classed("symbol", true) + .classed("fineline", true) + .classed("embedded", true) + .attr("cx", 12.5) + .attr("r", 10); + + var textElement = new CenteringTextElement(labelContainer, this.backgroundColor()); + if ( !graph.options().compactNotation() ) { + textElement.addSubText("disjoint"); + } + textElement.translation(0, 20); + }; + this.getShapeElement = function (){ + return shapeElement; + }; + this.markerElement = function (){ + return undefined; + }; + + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 47 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + this.styleClass("equivalentproperty") + .type("owl:equivalentProperty"); + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 48 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + this.attributes(["functional"]) + .styleClass("functionalproperty") + .type("owl:FunctionalProperty"); + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 49 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + this.attributes(["inverse functional"]) + .styleClass("inversefunctionalproperty") + .type("owl:InverseFunctionalProperty"); + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 50 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + this.attributes(["object"]) + .styleClass("objectproperty") + .type("owl:ObjectProperty"); + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + + + +/***/ }), +/* 51 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + var superGenerateCardinalityText = this.generateCardinalityText; + + this.linkType("values-from") + .markerType("filled values-from") + .styleClass("somevaluesfromproperty") + .type("owl:someValuesFrom"); + + this.generateCardinalityText = function (){ + var cardinalityText = "E"; + + var superCardinalityText = superGenerateCardinalityText(); + if ( superCardinalityText ) { + cardinalityText += ", " + superCardinalityText; + } + + return cardinalityText; + }; + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + + + +/***/ }), +/* 52 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + this.attributes(["symmetric"]) + .styleClass("symmetricproperty") + .type("owl:SymmetricProperty"); + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 53 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + this.attributes(["transitive"]) + .styleClass("transitiveproperty") + .type("owl:TransitiveProperty"); + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 54 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + this.attributes(["rdf"]) + .styleClass("rdfproperty") + .type("rdf:Property"); + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 55 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + var that = this, + superDrawFunction = that.draw, + label = "Subclass of"; + + this.draw = function ( labelGroup ){ + that.labelVisible(!graph.options().compactNotation()); + return superDrawFunction(labelGroup); + }; + + // Disallow overwriting the label + this.label = function ( p ){ + if ( !arguments.length ) return label; + return this; + }; + + this.linkType("dotted") + .markerType("white") + .styleClass("subclass") + .type("rdfs:subClassOf"); + + that.baseIri("http://www.w3.org/2000/01/rdf-schema#"); + that.iri("http://www.w3.org/2000/01/rdf-schema#subClassOf"); + + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 56 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + this.labelVisible(false) + .linkType("dashed") + .markerType("white") + .styleClass("setoperatorproperty") + .type("setOperatorProperty"); + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 57 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var _ = __webpack_require__(58); + var math = __webpack_require__(43)(); + var linkCreator = __webpack_require__(60)(); + var elementTools = __webpack_require__(63)(); + // add some maps for nodes and properties -- used for object generation + var nodePrototypeMap = __webpack_require__(5)(); + var propertyPrototypeMap = __webpack_require__(40)(); + + + module.exports = function ( graphContainerSelector ){ + var graph = {}, + CARDINALITY_HDISTANCE = 20, + CARDINALITY_VDISTANCE = 10, + curveFunction = d3.svg.line() + .x(function ( d ){ + return d.x; + }) + .y(function ( d ){ + return d.y; + }) + .interpolate("cardinal"), + options = __webpack_require__(64)(), + parser = __webpack_require__(65)(graph), + language = "default", + paused = false, + // Container for visual elements + graphContainer, + nodeContainer, + labelContainer, + cardinalityContainer, + linkContainer, + // Visual elements + nodeElements, + initialLoad = true, + updateRenderingDuringSimulation = false, + labelGroupElements, + linkGroups, + linkPathElements, + cardinalityElements, + // Internal data + classNodes, + labelNodes, + links, + properties, + unfilteredData, + // Graph behaviour + force, + dragBehaviour, + zoomFactor = 1.0, + centerGraphViewOnLoad = false, + transformAnimation = false, + graphTranslation = [0, 0], + graphUpdateRequired = false, + pulseNodeIds = [], + nodeArrayForPulse = [], + nodeMap = [], + locationId = 0, + defaultZoom = 1.0, + defaultTargetZoom = 0.8, + global_dof = -1, + touchDevice = false, + last_touch_time, + originalD3_dblClickFunction = null, + originalD3_touchZoomFunction = null, + + // editing elements + deleteGroupElement, + addDataPropertyGroupElement, + editContainer, + draggerLayer = null, + draggerObjectsArray = [], + delayedHider, + nodeFreezer, + hoveredNodeElement = null, + currentlySelectedNode = null, + hoveredPropertyElement = null, + draggingStarted = false, + frozenDomainForPropertyDragger, + frozenRangeForPropertyDragger, + + eP = 0, // id for new properties + eN = 0, // id for new Nodes + editMode = true, + debugContainer = d3.select("#FPS_Statistics"), + finishedLoadingSequence = false, + + ignoreOtherHoverEvents = false, + forceNotZooming = false, + now, then, // used for fps computation + showFPS = false, + seenEditorHint = false, + seenFilterWarning = false, + showFilterWarning = false, + + keepDetailsCollapsedOnLoading = true, + adjustingGraphSize = false, + showReloadButtonAfterLayoutOptimization = false, + zoom; + //var prefixModule=require("./prefixRepresentationModule")(graph); + var NodePrototypeMap = createLowerCasePrototypeMap(nodePrototypeMap); + var PropertyPrototypeMap = createLowerCasePrototypeMap(propertyPrototypeMap); + var classDragger = __webpack_require__(68)(graph); + var rangeDragger = __webpack_require__(69)(graph); + var domainDragger = __webpack_require__(70)(graph); + var shadowClone = __webpack_require__(71)(graph); + + graph.math = function (){ + return math; + }; + /** --------------------------------------------------------- **/ + /** -- getter and setter definitions -- **/ + /** --------------------------------------------------------- **/ + graph.isEditorMode = function (){ + return editMode; + }; + graph.getGlobalDOF = function (){ + return global_dof; + }; + graph.setGlobalDOF = function ( val ){ + global_dof = val; + }; + + graph.updateZoomSliderValueFromOutside = function (){ + graph.options().zoomSlider().updateZoomSliderValue(zoomFactor); + }; + + graph.setDefaultZoom = function ( val ){ + defaultZoom = val; + graph.reset(); + graph.options().zoomSlider().updateZoomSliderValue(defaultZoom); + }; + graph.setTargetZoom = function ( val ){ + defaultTargetZoom = val; + }; + graph.graphOptions = function (){ + return options; + }; + + graph.scaleFactor = function (){ + return zoomFactor; + }; + graph.translation = function (){ + return graphTranslation; + }; + + // Returns the visible nodes + graph.graphNodeElements = function (){ + return nodeElements; + }; + // Returns the visible Label Nodes + graph.graphLabelElements = function (){ + return labelNodes; + }; + + graph.graphLinkElements = function (){ + return links; + }; + + graph.setSliderZoom = function ( val ){ + + var cx = 0.5 * graph.options().width(); + var cy = 0.5 * graph.options().height(); + var cp = getWorldPosFromScreen(cx, cy, graphTranslation, zoomFactor); + var sP = [cp.x, cp.y, graph.options().height() / zoomFactor]; + var eP = [cp.x, cp.y, graph.options().height() / val]; + var pos_intp = d3.interpolateZoom(sP, eP); + + graphContainer.attr("transform", transform(sP, cx, cy)) + .transition() + .duration(1) + .attrTween("transform", function (){ + return function ( t ){ + return transform(pos_intp(t), cx, cy); + }; + }) + .each("end", function (){ + graphContainer.attr("transform", "translate(" + graphTranslation + ")scale(" + zoomFactor + ")"); + zoom.translate(graphTranslation); + zoom.scale(zoomFactor); + graph.options().zoomSlider().updateZoomSliderValue(zoomFactor); + }); + }; + + + graph.setZoom = function ( value ){ + zoom.scale(value); + }; + + graph.setTranslation = function ( translation ){ + zoom.translate([translation[0], translation[1]]); + }; + + graph.options = function (){ + return options; + }; + // search functionality + graph.getUpdateDictionary = function (){ + return parser.getDictionary(); + }; + + graph.language = function ( newLanguage ){ + if ( !arguments.length ) return language; + + // Just update if the language changes + if ( language !== newLanguage ) { + language = newLanguage || "default"; + redrawContent(); + recalculatePositions(); + graph.options().searchMenu().requestDictionaryUpdate(); + graph.resetSearchHighlight(); + } + return graph; + }; + + + /** --------------------------------------------------------- **/ + /** graph / rendering related functions **/ + /** --------------------------------------------------------- **/ + + // Initializes the graph. + function initializeGraph(){ + + options.graphContainerSelector(graphContainerSelector); + var moved = false; + force = d3.layout.force() + .on("tick", hiddenRecalculatePositions); + + dragBehaviour = d3.behavior.drag() + .origin(function ( d ){ + return d; + }) + .on("dragstart", function ( d ){ + d3.event.sourceEvent.stopPropagation(); // Prevent panning + graph.ignoreOtherHoverEvents(true); + if ( d.type && d.type() === "Class_dragger" ) { + classDragger.mouseButtonPressed = true; + clearTimeout(delayedHider); + classDragger.selectedViaTouch(true); + d.parentNode().locked(true); + draggingStarted = true; + } else if ( d.type && d.type() === "Range_dragger" ) { + graph.ignoreOtherHoverEvents(true); + clearTimeout(delayedHider); + frozenDomainForPropertyDragger = shadowClone.parentNode().domain(); + frozenRangeForPropertyDragger = shadowClone.parentNode().range(); + shadowClone.setInitialPosition(); + shadowClone.hideClone(false); + shadowClone.hideParentProperty(true); + shadowClone.updateElement(); + deleteGroupElement.classed("hidden", true); + addDataPropertyGroupElement.classed("hidden", true); + frozenDomainForPropertyDragger.frozen(true); + frozenDomainForPropertyDragger.locked(true); + frozenRangeForPropertyDragger.frozen(true); + frozenRangeForPropertyDragger.locked(true); + domainDragger.updateElement(); + domainDragger.mouseButtonPressed = true; + rangeDragger.updateElement(); + rangeDragger.mouseButtonPressed = true; + // shadowClone.setPosition(d.x, d.y); + + + } else if ( d.type && d.type() === "Domain_dragger" ) { + graph.ignoreOtherHoverEvents(true); + clearTimeout(delayedHider); + frozenDomainForPropertyDragger = shadowClone.parentNode().domain(); + frozenRangeForPropertyDragger = shadowClone.parentNode().range(); + shadowClone.setInitialPosition(); + shadowClone.hideClone(false); + shadowClone.hideParentProperty(true); + shadowClone.updateElement(); + deleteGroupElement.classed("hidden", true); + addDataPropertyGroupElement.classed("hidden", true); + + frozenDomainForPropertyDragger.frozen(true); + frozenDomainForPropertyDragger.locked(true); + frozenRangeForPropertyDragger.frozen(true); + frozenRangeForPropertyDragger.locked(true); + domainDragger.updateElement(); + domainDragger.mouseButtonPressed = true; + rangeDragger.updateElement(); + rangeDragger.mouseButtonPressed = true; + } + else { + d.locked(true); + moved = false; + } + }) + .on("drag", function ( d ){ + + if ( d.type && d.type() === "Class_dragger" ) { + clearTimeout(delayedHider); + classDragger.setPosition(d3.event.x, d3.event.y); + } else if ( d.type && d.type() === "Range_dragger" ) { + clearTimeout(delayedHider); + rangeDragger.setPosition(d3.event.x, d3.event.y); + shadowClone.setPosition(d3.event.x, d3.event.y); + domainDragger.updateElementViaRangeDragger(d3.event.x, d3.event.y); + } + else if ( d.type && d.type() === "Domain_dragger" ) { + clearTimeout(delayedHider); + domainDragger.setPosition(d3.event.x, d3.event.y); + shadowClone.setPositionDomain(d3.event.x, d3.event.y); + rangeDragger.updateElementViaDomainDragger(d3.event.x, d3.event.y); + } + + else { + d.px = d3.event.x; + d.py = d3.event.y; + force.resume(); + updateHaloRadius(); + moved = true; + if ( d.renderType && d.renderType() === "round" ) { + classDragger.setParentNode(d); + } + + } + }) + .on("dragend", function ( d ){ + graph.ignoreOtherHoverEvents(false); + if ( d.type && d.type() === "Class_dragger" ) { + var nX = classDragger.x; + var nY = classDragger.y; + clearTimeout(delayedHider); + classDragger.mouseButtonPressed = false; + classDragger.selectedViaTouch(false); + d.setParentNode(d.parentNode()); + + var draggerEndPos = [nX, nY]; + var targetNode = graph.getTargetNode(draggerEndPos); + if ( targetNode ) { + createNewObjectProperty(d.parentNode(), targetNode, draggerEndPos); + } + if ( touchDevice === false ) { + editElementHoverOut(); + } + draggingStarted = false; + } else if ( d.type && d.type() === "Range_dragger" ) { + graph.ignoreOtherHoverEvents(false); + frozenDomainForPropertyDragger.frozen(false); + frozenDomainForPropertyDragger.locked(false); + frozenRangeForPropertyDragger.frozen(false); + frozenRangeForPropertyDragger.locked(false); + rangeDragger.mouseButtonPressed = false; + domainDragger.mouseButtonPressed = false; + domainDragger.updateElement(); + rangeDragger.updateElement(); + shadowClone.hideClone(true); + var rX = rangeDragger.x; + var rY = rangeDragger.y; + var rangeDraggerEndPos = [rX, rY]; + var targetRangeNode = graph.getTargetNode(rangeDraggerEndPos); + if ( elementTools.isDatatype(targetRangeNode) === true ) { + targetRangeNode = null; + console.log("---------------TARGET NODE IS A DATATYPE/ LITERAL ------------"); + } + + if ( targetRangeNode === null ) { + d.reDrawEverthing(); + shadowClone.hideParentProperty(false); + } + else { + d.updateRange(targetRangeNode); + graph.update(); + shadowClone.hideParentProperty(false); + } + } else if ( d.type && d.type() === "Domain_dragger" ) { + graph.ignoreOtherHoverEvents(false); + frozenDomainForPropertyDragger.frozen(false); + frozenDomainForPropertyDragger.locked(false); + frozenRangeForPropertyDragger.frozen(false); + frozenRangeForPropertyDragger.locked(false); + rangeDragger.mouseButtonPressed = false; + domainDragger.mouseButtonPressed = false; + domainDragger.updateElement(); + rangeDragger.updateElement(); + shadowClone.hideClone(true); + + var dX = domainDragger.x; + var dY = domainDragger.y; + var domainDraggerEndPos = [dX, dY]; + var targetDomainNode = graph.getTargetNode(domainDraggerEndPos); + if ( elementTools.isDatatype(targetDomainNode) === true ) { + targetDomainNode = null; + console.log("---------------TARGET NODE IS A DATATYPE/ LITERAL ------------"); + } + shadowClone.hideClone(true); + if ( targetDomainNode === null ) { + d.reDrawEverthing(); + shadowClone.hideParentProperty(false); + } + else { + d.updateDomain(targetDomainNode); + graph.update(); + shadowClone.hideParentProperty(false); + } + } + + else { + d.locked(false); + var pnp = graph.options().pickAndPinModule(); + if ( pnp.enabled() === true && moved === true ) { + if ( d.id ) { // node + pnp.handle(d, true); + } + if ( d.property ) { + pnp.handle(d.property(), true); + } + } + } + }); + + // Apply the zooming factor. + zoom = d3.behavior.zoom() + .duration(150) + .scaleExtent([options.minMagnification(), options.maxMagnification()]) + .on("zoom", zoomed); + + draggerObjectsArray.push(classDragger); + draggerObjectsArray.push(rangeDragger); + draggerObjectsArray.push(domainDragger); + draggerObjectsArray.push(shadowClone); + force.stop(); + } + + graph.lazyRefresh = function (){ + redrawContent(); + recalculatePositions(); + }; + + graph.adjustingGraphSize = function ( val ){ + adjustingGraphSize = val; + }; + + graph.showReloadButtonAfterLayoutOptimization = function ( show ){ + showReloadButtonAfterLayoutOptimization = show; + }; + + + function hiddenRecalculatePositions(){ + finishedLoadingSequence = false; + if ( graph.options().loadingModule().successfullyLoadedOntology() === false ) { + force.stop(); + d3.select("#progressBarValue").node().innerHTML = ""; + graph.updateProgressBarMode(); + graph.options().loadingModule().showErrorDetailsMessage(hiddenRecalculatePositions); + if ( keepDetailsCollapsedOnLoading && adjustingGraphSize === false ) { + graph.options().loadingModule().collapseDetails("hiddenRecalculatePositions"); + } + return; + } + if ( updateRenderingDuringSimulation === false ) { + var value = 1.0 - 10 * force.alpha(); + var percent = parseInt(200 * value) + "%"; + graph.options().loadingModule().setPercentValue(percent); + d3.select("#progressBarValue").style("width", percent); + d3.select("#progressBarValue").node().innerHTML = percent; + + if ( value > 0.49 ) { + updateRenderingDuringSimulation = true; + // show graph container; + if ( graphContainer ) { + graphContainer.style("opacity", "1"); + percent = "100%"; + d3.select("#progressBarValue").style("width", percent); + d3.select("#progressBarValue").node().innerHTML = percent; + graph.options().ontologyMenu().append_message_toLastBulletPoint("done"); + d3.select("#reloadCachedOntology").classed("hidden", !showReloadButtonAfterLayoutOptimization); + if ( showFilterWarning === true && seenFilterWarning === false ) { + graph.options().warningModule().showFilterHint(); + seenFilterWarning = true; + } + } + + if ( initialLoad ) { + if ( graph.paused() === false ) + force.resume(); // resume force + initialLoad = false; + + } + + + finishedLoadingSequence = true; + if ( showFPS === true ) { + force.on("tick", recalculatePositionsWithFPS); + recalculatePositionsWithFPS(); + } + else { + force.on("tick", recalculatePositions); + recalculatePositions(); + } + + if ( centerGraphViewOnLoad === true && force.nodes().length > 0 ) { + if ( force.nodes().length < 10 ) graph.forceRelocationEvent(true); // uses dynamic zoomer; + else graph.forceRelocationEvent(); + centerGraphViewOnLoad = false; + // console.log("--------------------------------------") + } + + + graph.showEditorHintIfNeeded(); + + if ( graph.options().loadingModule().missingImportsWarning() === false ) { + graph.options().loadingModule().hideLoadingIndicator(); + graph.options().ontologyMenu().append_bulletPoint("Successfully loaded ontology"); + graph.options().loadingModule().setSuccessful(); + } else { + graph.options().loadingModule().showWarningDetailsMessage(); + graph.options().ontologyMenu().append_bulletPoint("Loaded ontology with warnings"); + } + } + } + } + + graph.showEditorHintIfNeeded = function (){ + if ( seenEditorHint === false && editMode === true ) { + seenEditorHint = true; + graph.options().warningModule().showEditorHint(); + } + }; + + graph.setForceTickFunctionWithFPS = function (){ + showFPS = true; + if ( force && finishedLoadingSequence === true ) { + force.on("tick", recalculatePositionsWithFPS); + } + + }; + graph.setDefaultForceTickFunction = function (){ + showFPS = false; + if ( force && finishedLoadingSequence === true ) { + force.on("tick", recalculatePositions); + } + }; + function recalculatePositionsWithFPS(){ + // compute the fps + + recalculatePositions(); + now = Date.now(); + var diff = now - then; + var fps = (1000 / (diff)).toFixed(2); + + debugContainer.node().innerHTML = "FPS: " + fps + "
    " + "Nodes: " + force.nodes().length + "
    " + "Links: " + force.links().length; + then = Date.now(); + + } + + function recalculatePositions(){ + // Set node positions + + + // add switch for edit mode to make this faster; + if ( !editMode ) { + nodeElements.attr("transform", function ( node ){ + return "translate(" + node.x + "," + node.y + ")"; + }); + + // Set label group positions + labelGroupElements.attr("transform", function ( label ){ + var position; + + // force centered positions on single-layered links + var link = label.link(); + if ( link.layers().length === 1 && !link.loops() ) { + var linkDomainIntersection = math.calculateIntersection(link.range(), link.domain(), 0); + var linkRangeIntersection = math.calculateIntersection(link.domain(), link.range(), 0); + position = math.calculateCenter(linkDomainIntersection, linkRangeIntersection); + label.x = position.x; + label.y = position.y; + } + return "translate(" + label.x + "," + label.y + ")"; + }); + // Set link paths and calculate additional information + linkPathElements.attr("d", function ( l ){ + if ( l.isLoop() ) { + return math.calculateLoopPath(l); + } + var curvePoint = l.label(); + var pathStart = math.calculateIntersection(curvePoint, l.domain(), 1); + var pathEnd = math.calculateIntersection(curvePoint, l.range(), 1); + + return curveFunction([pathStart, curvePoint, pathEnd]); + }); + + // Set cardinality positions + cardinalityElements.attr("transform", function ( property ){ + + var label = property.link().label(), + pos = math.calculateIntersection(label, property.range(), CARDINALITY_HDISTANCE), + normalV = math.calculateNormalVector(label, property.range(), CARDINALITY_VDISTANCE); + + return "translate(" + (pos.x + normalV.x) + "," + (pos.y + normalV.y) + ")"; + }); + + + updateHaloRadius(); + return; + } + + // TODO: this is Editor redraw function // we need to make this faster!! + + + nodeElements.attr("transform", function ( node ){ + return "translate(" + node.x + "," + node.y + ")"; + }); + + // Set label group positions + labelGroupElements.attr("transform", function ( label ){ + var position; + + // force centered positions on single-layered links + var link = label.link(); + if ( link.layers().length === 1 && !link.loops() ) { + var linkDomainIntersection = math.calculateIntersection(link.range(), link.domain(), 0); + var linkRangeIntersection = math.calculateIntersection(link.domain(), link.range(), 0); + position = math.calculateCenter(linkDomainIntersection, linkRangeIntersection); + label.x = position.x; + label.y = position.y; + label.linkRangeIntersection = linkRangeIntersection; + label.linkDomainIntersection = linkDomainIntersection; + if ( link.property().focused() === true || hoveredPropertyElement !== undefined ) { + rangeDragger.updateElement(); + domainDragger.updateElement(); + // shadowClone.setPosition(link.property().range().x,link.property().range().y); + // shadowClone.setPositionDomain(link.property().domain().x,link.property().domain().y); + } + } else { + label.linkDomainIntersection = math.calculateIntersection(link.label(), link.domain(), 0); + label.linkRangeIntersection = math.calculateIntersection(link.label(), link.range(), 0); + if ( link.property().focused() === true || hoveredPropertyElement !== undefined ) { + rangeDragger.updateElement(); + domainDragger.updateElement(); + // shadowClone.setPosition(link.property().range().x,link.property().range().y); + // shadowClone.setPositionDomain(link.property().domain().x,link.property().domain().y); + } + + } + return "translate(" + label.x + "," + label.y + ")"; + }); + // Set link paths and calculate additional information + linkPathElements.attr("d", function ( l ){ + if ( l.isLoop() ) { + + var ptrAr = math.getLoopPoints(l); + l.label().linkRangeIntersection = ptrAr[1]; + l.label().linkDomainIntersection = ptrAr[0]; + + if ( l.property().focused() === true || hoveredPropertyElement !== undefined ) { + rangeDragger.updateElement(); + domainDragger.updateElement(); + } + return math.calculateLoopPath(l); + } + var curvePoint = l.label(); + var pathStart = math.calculateIntersection(curvePoint, l.domain(), 1); + var pathEnd = math.calculateIntersection(curvePoint, l.range(), 1); + l.linkRangeIntersection = pathStart; + l.linkDomainIntersection = pathEnd; + if ( l.property().focused() === true || hoveredPropertyElement !== undefined ) { + domainDragger.updateElement(); + rangeDragger.updateElement(); + // shadowClone.setPosition(l.property().range().x,l.property().range().y); + // shadowClone.setPositionDomain(l.property().domain().x,l.property().domain().y); + } + return curveFunction([pathStart, curvePoint, pathEnd]); + }); + + // Set cardinality positions + cardinalityElements.attr("transform", function ( property ){ + + var label = property.link().label(), + pos = math.calculateIntersection(label, property.range(), CARDINALITY_HDISTANCE), + normalV = math.calculateNormalVector(label, property.range(), CARDINALITY_VDISTANCE); + + return "translate(" + (pos.x + normalV.x) + "," + (pos.y + normalV.y) + ")"; + }); + + if ( hoveredNodeElement ) { + setDeleteHoverElementPosition(hoveredNodeElement); + setAddDataPropertyHoverElementPosition(hoveredNodeElement); + if ( draggingStarted === false ) { + classDragger.setParentNode(hoveredNodeElement); + } + } + if ( hoveredPropertyElement ) { + setDeleteHoverElementPositionProperty(hoveredPropertyElement); + } + + updateHaloRadius(); + } + + graph.updatePropertyDraggerElements = function ( property ){ + if ( property.type() !== "owl:DatatypeProperty" ) { + + shadowClone.setParentProperty(property); + rangeDragger.setParentProperty(property); + rangeDragger.hideDragger(false); + rangeDragger.addMouseEvents(); + domainDragger.setParentProperty(property); + domainDragger.hideDragger(false); + domainDragger.addMouseEvents(); + + } + else { + rangeDragger.hideDragger(true); + domainDragger.hideDragger(true); + shadowClone.hideClone(true); + } + }; + + function addClickEvents(){ + function executeModules( selectedElement ){ + options.selectionModules().forEach(function ( module ){ + module.handle(selectedElement); + }); + } + + nodeElements.on("click", function ( clickedNode ){ + + // manaual double clicker // helper for iphone 6 etc... + if ( touchDevice === true && doubletap() === true ) { + d3.event.stopPropagation(); + if ( editMode === true ) { + clickedNode.raiseDoubleClickEdit(defaultIriValue(clickedNode)); + } + } + else { + executeModules(clickedNode); + } + }); + + nodeElements.on("dblclick", function ( clickedNode ){ + + d3.event.stopPropagation(); + if ( editMode === true ) { + clickedNode.raiseDoubleClickEdit(defaultIriValue(clickedNode)); + } + }); + + labelGroupElements.selectAll(".label").on("click", function ( clickedProperty ){ + executeModules(clickedProperty); + + // this is for enviroments that do not define dblClick function; + if ( touchDevice === true && doubletap() === true ) { + d3.event.stopPropagation(); + if ( editMode === true ) { + clickedProperty.raiseDoubleClickEdit(defaultIriValue(clickedProperty)); + } + } + + // currently removed the selection of an element to invoke the dragger + // if (editMode===true && clickedProperty.editingTextElement!==true) { + // return; + // // We say that Datatype properties are not allowed to have domain range draggers + // if (clickedProperty.focused() && clickedProperty.type() !== "owl:DatatypeProperty") { + // shadowClone.setParentProperty(clickedProperty); + // rangeDragger.setParentProperty(clickedProperty); + // rangeDragger.hideDragger(false); + // rangeDragger.addMouseEvents(); + // domainDragger.setParentProperty(clickedProperty); + // domainDragger.hideDragger(false); + // domainDragger.addMouseEvents(); + // + // if (clickedProperty.domain()===clickedProperty.range()){ + // clickedProperty.labelObject().increasedLoopAngle=true; + // recalculatePositions(); + // + // } + // + // } else if (clickedProperty.focused() && clickedProperty.type() === "owl:DatatypeProperty") { + // shadowClone.setParentProperty(clickedProperty); + // rangeDragger.setParentProperty(clickedProperty); + // rangeDragger.hideDragger(true); + // rangeDragger.addMouseEvents(); + // domainDragger.setParentProperty(clickedProperty); + // domainDragger.hideDragger(false); + // domainDragger.addMouseEvents(); + // + // } + // else { + // rangeDragger.hideDragger(true); + // domainDragger.hideDragger(true); + // if (clickedProperty.domain()===clickedProperty.range()){ + // clickedProperty.labelObject().increasedLoopAngle=false; + // recalculatePositions(); + // + // } + // } + // } + }); + labelGroupElements.selectAll(".label").on("dblclick", function ( clickedProperty ){ + d3.event.stopPropagation(); + if ( editMode === true ) { + clickedProperty.raiseDoubleClickEdit(defaultIriValue(clickedProperty)); + } + + }); + } + + function defaultIriValue( element ){ + // get the iri of that element; + if ( graph.options().getGeneralMetaObject().iri ) { + var str2Compare = graph.options().getGeneralMetaObject().iri + element.id(); + return element.iri() === str2Compare; + } + return false; + } + + /** Adjusts the containers current scale and position. */ + function zoomed(){ + if ( forceNotZooming === true ) { + zoom.translate(graphTranslation); + zoom.scale(zoomFactor); + return; + } + + + var zoomEventByMWheel = false; + if ( d3.event.sourceEvent ) { + if ( d3.event.sourceEvent.deltaY ) zoomEventByMWheel = true; + } + if ( zoomEventByMWheel === false ) { + if ( transformAnimation === true ) { + return; + } + zoomFactor = d3.event.scale; + graphTranslation = d3.event.translate; + graphContainer.attr("transform", "translate(" + graphTranslation + ")scale(" + zoomFactor + ")"); + updateHaloRadius(); + graph.options().zoomSlider().updateZoomSliderValue(zoomFactor); + return; + } + /** animate the transition **/ + zoomFactor = d3.event.scale; + graphTranslation = d3.event.translate; + graphContainer.transition() + .tween("attr.translate", function (){ + return function ( t ){ + transformAnimation = true; + var tr = d3.transform(graphContainer.attr("transform")); + graphTranslation[0] = tr.translate[0]; + graphTranslation[1] = tr.translate[1]; + zoomFactor = tr.scale[0]; + updateHaloRadius(); + graph.options().zoomSlider().updateZoomSliderValue(zoomFactor); + }; + }) + .each("end", function (){ + transformAnimation = false; + }) + .attr("transform", "translate(" + graphTranslation + ")scale(" + zoomFactor + ")") + .ease('linear') + .duration(250); + }// end of zoomed function + + function redrawGraph(){ + remove(); + + graphContainer = d3.selectAll(options.graphContainerSelector()) + .append("svg") + .classed("vowlGraph", true) + .attr("width", options.width()) + .attr("height", options.height()) + .call(zoom) + .append("g"); + // add touch and double click functions + + var svgGraph = d3.selectAll(".vowlGraph"); + originalD3_dblClickFunction = svgGraph.on("dblclick.zoom"); + originalD3_touchZoomFunction = svgGraph.on("touchstart"); + svgGraph.on("touchstart", touchzoomed); + if ( editMode === true ) { + svgGraph.on("dblclick.zoom", graph.modified_dblClickFunction); + } + else { + svgGraph.on("dblclick.zoom", originalD3_dblClickFunction); + } + + } + + function generateEditElements(){ + addDataPropertyGroupElement = editContainer.append('g') + .classed("hidden-in-export", true) + .classed("hidden", true) + .classed("addDataPropertyElement", true) + .attr("transform", "translate(" + 0 + "," + 0 + ")"); + + + addDataPropertyGroupElement.append("circle") + // .classed("deleteElement", true) + .attr("r", 12) + .attr("cx", 0) + .attr("cy", 0) + .append("title").text("Add Datatype Property"); + + addDataPropertyGroupElement.append("line") + // .classed("deleteElementIcon ",true) + .attr("x1", -8) + .attr("y1", 0) + .attr("x2", 8) + .attr("y2", 0) + .append("title").text("Add Datatype Property"); + + addDataPropertyGroupElement.append("line") + // .classed("deleteElementIcon",true) + .attr("x1", 0) + .attr("y1", -8) + .attr("x2", 0) + .attr("y2", 8) + .append("title").text("Add Datatype Property"); + + if ( graph.options().useAccuracyHelper() ) { + addDataPropertyGroupElement.append("circle") + .attr("r", 15) + .attr("cx", -7) + .attr("cy", 7) + .classed("superHiddenElement", true) + .classed("superOpacityElement", !graph.options().showDraggerObject()); + } + + + deleteGroupElement = editContainer.append('g') + .classed("hidden-in-export", true) + .classed("hidden", true) + .classed("deleteParentElement", true) + .attr("transform", "translate(" + 0 + "," + 0 + ")"); + + deleteGroupElement.append("circle") + .attr("r", 12) + .attr("cx", 0) + .attr("cy", 0) + .append("title").text("Delete This Node"); + + var crossLen = 5; + deleteGroupElement.append("line") + .attr("x1", -crossLen) + .attr("y1", -crossLen) + .attr("x2", crossLen) + .attr("y2", crossLen) + .append("title").text("Delete This Node"); + + deleteGroupElement.append("line") + .attr("x1", crossLen) + .attr("y1", -crossLen) + .attr("x2", -crossLen) + .attr("y2", crossLen) + .append("title").text("Delete This Node"); + + if ( graph.options().useAccuracyHelper() ) { + deleteGroupElement.append("circle") + .attr("r", 15) + .attr("cx", 7) + .attr("cy", -7) + .classed("superHiddenElement", true) + .classed("superOpacityElement", !graph.options().showDraggerObject()); + } + + + } + + graph.getUnfilteredData = function (){ + return unfilteredData; + }; + + graph.getClassDataForTtlExport = function (){ + var allNodes = unfilteredData.nodes; + var nodeData = []; + for ( var i = 0; i < allNodes.length; i++ ) { + if ( allNodes[i].type() !== "rdfs:Literal" && + allNodes[i].type() !== "rdfs:Datatype" && + allNodes[i].type() !== "owl:Thing" ) { + nodeData.push(allNodes[i]); + } + } + return nodeData; + }; + + graph.getPropertyDataForTtlExport = function (){ + var propertyData = []; + var allProperties = unfilteredData.properties; + for ( var i = 0; i < allProperties.length; i++ ) { + // currently using only the object properties + if ( allProperties[i].type() === "owl:ObjectProperty" || + allProperties[i].type() === "owl:DatatypeProperty" || + allProperties[i].type() === "owl:ObjectProperty" + + ) { + propertyData.push(allProperties[i]); + } else { + if ( allProperties[i].type() === "rdfs:subClassOf" ) { + allProperties[i].baseIri("http://www.w3.org/2000/01/rdf-schema#"); + allProperties[i].iri("http://www.w3.org/2000/01/rdf-schema#subClassOf"); + } + if ( allProperties[i].type() === "owl:disjointWith" ) { + allProperties[i].baseIri("http://www.w3.org/2002/07/owl#"); + allProperties[i].iri("http://www.w3.org/2002/07/owl#disjointWith"); + } + } + } + return propertyData; + }; + + graph.getAxiomsForTtlExport = function (){ + var axioms = []; + var allProperties = unfilteredData.properties; + for ( var i = 0; i < allProperties.length; i++ ) { + // currently using only the object properties + if ( allProperties[i].type() === "owl:ObjectProperty" || + allProperties[i].type() === "owl:DatatypeProperty" || + allProperties[i].type() === "owl:ObjectProperty" || + allProperties[i].type() === "rdfs:subClassOf" + ) { + } else { + } + } + return axioms; + }; + + + graph.getUnfilteredData = function (){ + return unfilteredData; + }; + + graph.getClassDataForTtlExport = function (){ + var allNodes = unfilteredData.nodes; + var nodeData = []; + for ( var i = 0; i < allNodes.length; i++ ) { + if ( allNodes[i].type() !== "rdfs:Literal" && + allNodes[i].type() !== "rdfs:Datatype" && + allNodes[i].type() !== "owl:Thing" ) { + nodeData.push(allNodes[i]); + } + } + return nodeData; + }; + + + function redrawContent(){ + var markerContainer; + + if ( !graphContainer ) { + return; + } + + // Empty the graph container + graphContainer.selectAll("*").remove(); + + // Last container -> elements of this container overlap others + linkContainer = graphContainer.append("g").classed("linkContainer", true); + cardinalityContainer = graphContainer.append("g").classed("cardinalityContainer", true); + labelContainer = graphContainer.append("g").classed("labelContainer", true); + nodeContainer = graphContainer.append("g").classed("nodeContainer", true); + + // adding editing Elements + var draggerPathLayer = graphContainer.append("g").classed("linkContainer", true); + draggerLayer = graphContainer.append("g").classed("editContainer", true); + editContainer = graphContainer.append("g").classed("editContainer", true); + + draggerPathLayer.classed("hidden-in-export", true); + editContainer.classed("hidden-in-export", true); + draggerLayer.classed("hidden-in-export", true); + + // Add an extra container for all markers + markerContainer = linkContainer.append("defs"); + var drElement = draggerLayer.selectAll(".node") + .data(draggerObjectsArray).enter() + .append("g") + .classed("node", true) + .classed("hidden-in-export", true) + .attr("id", function ( d ){ + return d.id(); + }) + .call(dragBehaviour); + drElement.each(function ( node ){ + node.svgRoot(d3.select(this)); + node.svgPathLayer(draggerPathLayer); + if ( node.type() === "shadowClone" ) { + node.drawClone(); + node.hideClone(true); + } else { + node.drawNode(); + node.hideDragger(true); + } + }); + generateEditElements(); + + + // Add an extra container for all markers + markerContainer = linkContainer.append("defs"); + + // Draw nodes + + if ( classNodes === undefined ) classNodes = []; + + nodeElements = nodeContainer.selectAll(".node") + .data(classNodes).enter() + .append("g") + .classed("node", true) + .attr("id", function ( d ){ + return d.id(); + }) + .call(dragBehaviour); + nodeElements.each(function ( node ){ + node.draw(d3.select(this)); + }); + + + if ( labelNodes === undefined ) labelNodes = []; + + // Draw label groups (property + inverse) + labelGroupElements = labelContainer.selectAll(".labelGroup") + .data(labelNodes).enter() + .append("g") + .classed("labelGroup", true) + .call(dragBehaviour); + + labelGroupElements.each(function ( label ){ + var success = label.draw(d3.select(this)); + label.property().labelObject(label); + // Remove empty groups without a label. + if ( !success ) { + d3.select(this).remove(); + } + }); + // Place subclass label groups on the bottom of all labels + labelGroupElements.each(function ( label ){ + // the label might be hidden e.g. in compact notation + if ( !this.parentNode ) { + return; + } + + if ( elementTools.isRdfsSubClassOf(label.property()) ) { + var parentNode = this.parentNode; + parentNode.insertBefore(this, parentNode.firstChild); + } + }); + if ( properties === undefined ) properties = []; + // Draw cardinality elements + cardinalityElements = cardinalityContainer.selectAll(".cardinality") + .data(properties).enter() + .append("g") + .classed("cardinality", true); + + cardinalityElements.each(function ( property ){ + var success = property.drawCardinality(d3.select(this)); + + // Remove empty groups without a label. + if ( !success ) { + d3.select(this).remove(); + } + }); + // Draw links + if ( links === undefined ) links = []; + linkGroups = linkContainer.selectAll(".link") + .data(links).enter() + .append("g") + .classed("link", true); + + linkGroups.each(function ( link ){ + link.draw(d3.select(this), markerContainer); + }); + linkPathElements = linkGroups.selectAll("path"); + // Select the path for direct access to receive a better performance + addClickEvents(); + } + + function remove(){ + if ( graphContainer ) { + // Select the parent element because the graph container is a group (e.g. for zooming) + d3.select(graphContainer.node().parentNode).remove(); + } + } + + initializeGraph(); // << call the initialization function + + graph.updateCanvasContainerSize = function (){ + if ( graphContainer ) { + var svgElement = d3.selectAll(".vowlGraph"); + svgElement.attr("width", options.width()); + svgElement.attr("height", options.height()); + graphContainer.attr("transform", "translate(" + graphTranslation + ")scale(" + zoomFactor + ")"); + } + }; + + // Loads all settings, removes the old graph (if it exists) and draws a new one. + graph.start = function (){ + force.stop(); + loadGraphData(true); + redrawGraph(); + graph.update(true); + + if ( graph.options().loadingModule().successfullyLoadedOntology() === false ) { + graph.options().loadingModule().setErrorMode(); + } + + }; + + // Updates only the style of the graph. + graph.updateStyle = function (){ + refreshGraphStyle(); + if ( graph.options().loadingModule().successfullyLoadedOntology() === false ) { + force.stop(); + } else { + force.start(); + } + }; + + graph.reload = function (){ + loadGraphData(); + graph.update(); + + }; + + graph.load = function (){ + force.stop(); + loadGraphData(); + refreshGraphData(); + for ( var i = 0; i < labelNodes.length; i++ ) { + var label = labelNodes[i]; + if ( label.property().x && label.property().y ) { + label.x = label.property().x; + label.y = label.property().y; + // also set the prev position of the label + label.px = label.x; + label.py = label.y; + } + } + graph.update(); + }; + + graph.fastUpdate = function (){ + // fast update function for editor calls; + // -- experimental ; + quick_refreshGraphData(); + updateNodeMap(); + force.start(); + redrawContent(); + graph.updatePulseIds(nodeArrayForPulse); + refreshGraphStyle(); + updateHaloStyles(); + + }; + + graph.getNodeMapForSearch = function (){ + return nodeMap; + }; + function updateNodeMap(){ + nodeMap = []; + var node; + for ( var j = 0; j < force.nodes().length; j++ ) { + node = force.nodes()[j]; + if ( node.id ) { + nodeMap[node.id()] = j; + // check for equivalents + var eqs = node.equivalents(); + if ( eqs.length > 0 ) { + for ( var e = 0; e < eqs.length; e++ ) { + var eqObject = eqs[e]; + nodeMap[eqObject.id()] = j; + } + } + } + if ( node.property ) { + nodeMap[node.property().id()] = j; + var inverse = node.inverse(); + if ( inverse ) { + nodeMap[inverse.id()] = j; + } + } + } + } + + function updateHaloStyles(){ + var haloElement; + var halo; + var node; + for ( var j = 0; j < force.nodes().length; j++ ) { + node = force.nodes()[j]; + if ( node.id ) { + haloElement = node.getHalos(); + if ( haloElement ) { + halo = haloElement.selectAll(".searchResultA"); + halo.classed("searchResultA", false); + halo.classed("searchResultB", true); + } + } + + if ( node.property ) { + haloElement = node.property().getHalos(); + if ( haloElement ) { + halo = haloElement.selectAll(".searchResultA"); + halo.classed("searchResultA", false); + halo.classed("searchResultB", true); + } + } + } + } + + // Updates the graphs displayed data and style. + graph.update = function ( init ){ + var validOntology = graph.options().loadingModule().successfullyLoadedOntology(); + if ( validOntology === false && (init && init === true) ) { + graph.options().loadingModule().collapseDetails(); + return; + } + if ( validOntology === false ) { + return; + } + + keepDetailsCollapsedOnLoading = false; + refreshGraphData(); + // update node map + updateNodeMap(); + + force.start(); + redrawContent(); + graph.updatePulseIds(nodeArrayForPulse); + refreshGraphStyle(); + updateHaloStyles(); + }; + + graph.paused = function ( p ){ + if ( !arguments.length ) return paused; + paused = p; + graph.updateStyle(); + return graph; + }; + // resetting the graph + graph.reset = function (){ + // window size + var w = 0.5 * graph.options().width(); + var h = 0.5 * graph.options().height(); + // computing initial translation for the graph due tue the dynamic default zoom level + var tx = w - defaultZoom * w; + var ty = h - defaultZoom * h; + zoom.translate([tx, ty]) + .scale(defaultZoom); + }; + + + graph.zoomOut = function (){ + + var minMag = options.minMagnification(), + maxMag = options.maxMagnification(); + var stepSize = (maxMag - minMag) / 10; + var val = zoomFactor - stepSize; + if ( val < minMag ) val = minMag; + + var cx = 0.5 * graph.options().width(); + var cy = 0.5 * graph.options().height(); + var cp = getWorldPosFromScreen(cx, cy, graphTranslation, zoomFactor); + var sP = [cp.x, cp.y, graph.options().height() / zoomFactor]; + var eP = [cp.x, cp.y, graph.options().height() / val]; + var pos_intp = d3.interpolateZoom(sP, eP); + + graphContainer.attr("transform", transform(sP, cx, cy)) + .transition() + .duration(250) + .attrTween("transform", function (){ + return function ( t ){ + return transform(pos_intp(t), cx, cy); + }; + }) + .each("end", function (){ + graphContainer.attr("transform", "translate(" + graphTranslation + ")scale(" + zoomFactor + ")"); + zoom.translate(graphTranslation); + zoom.scale(zoomFactor); + updateHaloRadius(); + options.zoomSlider().updateZoomSliderValue(zoomFactor); + }); + + }; + + graph.zoomIn = function (){ + var minMag = options.minMagnification(), + maxMag = options.maxMagnification(); + var stepSize = (maxMag - minMag) / 10; + var val = zoomFactor + stepSize; + if ( val > maxMag ) val = maxMag; + var cx = 0.5 * graph.options().width(); + var cy = 0.5 * graph.options().height(); + var cp = getWorldPosFromScreen(cx, cy, graphTranslation, zoomFactor); + var sP = [cp.x, cp.y, graph.options().height() / zoomFactor]; + var eP = [cp.x, cp.y, graph.options().height() / val]; + var pos_intp = d3.interpolateZoom(sP, eP); + + graphContainer.attr("transform", transform(sP, cx, cy)) + .transition() + .duration(250) + .attrTween("transform", function (){ + return function ( t ){ + return transform(pos_intp(t), cx, cy); + }; + }) + .each("end", function (){ + graphContainer.attr("transform", "translate(" + graphTranslation + ")scale(" + zoomFactor + ")"); + zoom.translate(graphTranslation); + zoom.scale(zoomFactor); + updateHaloRadius(); + options.zoomSlider().updateZoomSliderValue(zoomFactor); + }); + + + }; + + /** --------------------------------------------------------- **/ + /** -- data related handling -- **/ + /** --------------------------------------------------------- **/ + + var cachedJsonOBJ = null; + graph.clearAllGraphData = function (){ + if ( graph.graphNodeElements() && graph.graphNodeElements().length > 0 ) { + cachedJsonOBJ = graph.options().exportMenu().createJSON_exportObject(); + } else { + cachedJsonOBJ = null; + } + force.stop(); + if ( unfilteredData ) { + unfilteredData.nodes = []; + unfilteredData.properties = []; + } + }; + graph.getCachedJsonObj = function (){ + return cachedJsonOBJ; + }; + + // removes data when data could not be loaded + graph.clearGraphData = function (){ + force.stop(); + var sidebar = graph.options().sidebar(); + if ( sidebar ) + sidebar.clearOntologyInformation(); + if ( graphContainer ) + redrawGraph(); + }; + + function generateDictionary( data ){ + var i; + var originalDictionary = []; + var nodes = data.nodes; + for ( i = 0; i < nodes.length; i++ ) { + // check if node has a label + if ( nodes[i].labelForCurrentLanguage() !== undefined ) + originalDictionary.push(nodes[i]); + } + var props = data.properties; + for ( i = 0; i < props.length; i++ ) { + if ( props[i].labelForCurrentLanguage() !== undefined ) + originalDictionary.push(props[i]); + } + parser.setDictionary(originalDictionary); + + var literFilter = graph.options().literalFilter(); + var idsToRemove = literFilter.removedNodes(); + var originalDict = parser.getDictionary(); + var newDict = []; + + // go through the dictionary and remove the ids; + for ( i = 0; i < originalDict.length; i++ ) { + var dictElement = originalDict[i]; + var dictElementId; + if ( dictElement.property ) + dictElementId = dictElement.property().id(); + else + dictElementId = dictElement.id(); + // compare against the removed ids; + var addToDictionary = true; + for ( var j = 0; j < idsToRemove.length; j++ ) { + var currentId = idsToRemove[j]; + if ( currentId === dictElementId ) { + addToDictionary = false; + } + } + if ( addToDictionary === true ) { + newDict.push(dictElement); + } + } + // tell the parser that the dictionary is updated + parser.setDictionary(newDict); + + } + + graph.updateProgressBarMode = function (){ + var loadingModule = graph.options().loadingModule(); + + var state = loadingModule.getProgressBarMode(); + switch ( state ) { + case 0: + loadingModule.setErrorMode(); + break; + case 1: + loadingModule.setBusyMode(); + break; + case 2: + loadingModule.setPercentMode(); + break; + default: + loadingModule.setPercentMode(); + } + }; + + graph.setFilterWarning = function ( val ){ + showFilterWarning = val; + }; + function loadGraphData( init ){ + // reset the locate button and previously selected locations and other variables + + var loadingModule = graph.options().loadingModule(); + force.stop(); + + force.nodes([]); + force.links([]); + nodeArrayForPulse = []; + pulseNodeIds = []; + locationId = 0; + d3.select("#locateSearchResult").classed("highlighted", false); + d3.select("#locateSearchResult").node().title = "Nothing to locate"; + graph.clearGraphData(); + + if ( init ) { + force.stop(); + return; + } + + showFilterWarning = false; + parser.parse(options.data()); + unfilteredData = { + nodes: parser.nodes(), + properties: parser.properties() + }; + // fixing class and property id counter for the editor + eN = unfilteredData.nodes.length + 1; + eP = unfilteredData.properties.length + 1; + + initialLoad = true; + graph.options().warningModule().closeFilterHint(); + + // loading handler + updateRenderingDuringSimulation = true; + var validOntology = graph.options().loadingModule().successfullyLoadedOntology(); + if ( graphContainer && validOntology === true ) { + + updateRenderingDuringSimulation = false; + graph.options().ontologyMenu().append_bulletPoint("Generating visualization ... "); + loadingModule.setPercentMode(); + + if ( unfilteredData.nodes.length > 0 ) { + graphContainer.style("opacity", "0"); + force.on("tick", hiddenRecalculatePositions); + } else { + graphContainer.style("opacity", "1"); + if ( showFPS === true ) { + force.on("tick", recalculatePositionsWithFPS); + } + else { + force.on("tick", recalculatePositions); + } + } + + force.start(); + } else { + force.stop(); + graph.options().ontologyMenu().append_bulletPoint("Failed to load ontology"); + loadingModule.setErrorMode(); + } + // update prefixList( + // update general MetaOBJECT + graph.options().clearMetaObject(); + graph.options().clearGeneralMetaObject(); + graph.options().editSidebar().clearMetaObjectValue(); + if ( options.data() !== undefined ) { + var header = options.data().header; + if ( header ) { + if ( header.iri ) { + graph.options().addOrUpdateGeneralObjectEntry("iri", header.iri); + } + if ( header.title ) { + graph.options().addOrUpdateGeneralObjectEntry("title", header.title); + } + if ( header.author ) { + graph.options().addOrUpdateGeneralObjectEntry("author", header.author); + } + if ( header.version ) { + graph.options().addOrUpdateGeneralObjectEntry("version", header.version); + } + if ( header.description ) { + graph.options().addOrUpdateGeneralObjectEntry("description", header.description); + } + if ( header.prefixList ) { + var pL = header.prefixList; + for ( var pr in pL ) { + if ( pL.hasOwnProperty(pr) ) { + var val = pL[pr]; + graph.options().addPrefix(pr, val); + } + } + } + // get other metadata; + if ( header.other ) { + var otherObjects = header.other; + for ( var name in otherObjects ) { + if ( otherObjects.hasOwnProperty(name) ) { + var otherObj = otherObjects[name]; + if ( otherObj.hasOwnProperty("identifier") && otherObj.hasOwnProperty("value") ) { + graph.options().addOrUpdateMetaObjectEntry(otherObj.identfier, otherObj.value); + } + } + } + } + } + } + // update more meta OBJECT + // Initialize filters with data to replicate consecutive filtering + var initializationData = _.clone(unfilteredData); + options.filterModules().forEach(function ( module ){ + initializationData = filterFunction(module, initializationData, true); + }); + // generate dictionary here ; + generateDictionary(unfilteredData); + + parser.parseSettings(); + graphUpdateRequired = parser.settingsImported(); + centerGraphViewOnLoad = true; + if ( parser.settingsImportGraphZoomAndTranslation() === true ) { + centerGraphViewOnLoad = false; + } + graph.options().searchMenu().requestDictionaryUpdate(); + graph.options().editSidebar().updateGeneralOntologyInfo(); + graph.options().editSidebar().updatePrefixUi(); + graph.options().editSidebar().updateElementWidth(); + } + + graph.handleOnLoadingError = function (){ + force.stop(); + graph.clearGraphData(); + graph.options().ontologyMenu().append_bulletPoint("Failed to load ontology"); + d3.select("#progressBarValue").node().innherHTML = ""; + d3.select("#progressBarValue").classed("busyProgressBar", false); + graph.options().loadingModule().setErrorMode(); + graph.options().loadingModule().showErrorDetailsMessage(); + }; + + function quick_refreshGraphData(){ + links = linkCreator.createLinks(properties); + labelNodes = links.map(function ( link ){ + return link.label(); + }); + + storeLinksOnNodes(classNodes, links); + setForceLayoutData(classNodes, labelNodes, links); + } + + //Applies the data of the graph options object and parses it. The graph is not redrawn. + function refreshGraphData(){ + var shouldExecuteEmptyFilter = options.literalFilter().enabled(); + graph.executeEmptyLiteralFilter(); + options.literalFilter().enabled(shouldExecuteEmptyFilter); + + var preprocessedData = _.clone(unfilteredData); + + // Filter the data + options.filterModules().forEach(function ( module ){ + preprocessedData = filterFunction(module, preprocessedData); + }); + options.focuserModule().handle(undefined, true); + classNodes = preprocessedData.nodes; + properties = preprocessedData.properties; + links = linkCreator.createLinks(properties); + labelNodes = links.map(function ( link ){ + return link.label(); + }); + storeLinksOnNodes(classNodes, links); + setForceLayoutData(classNodes, labelNodes, links); + // for (var i = 0; i < classNodes.length; i++) { + // if (classNodes[i].setRectangularRepresentation) + // classNodes[i].setRectangularRepresentation(graph.options().rectangularRepresentation()); + // } + } + + function filterFunction( module, data, initializing ){ + links = linkCreator.createLinks(data.properties); + storeLinksOnNodes(data.nodes, links); + + if ( initializing ) { + if ( module.initialize ) { + module.initialize(data.nodes, data.properties); + } + } + module.filter(data.nodes, data.properties); + return { + nodes: module.filteredNodes(), + properties: module.filteredProperties() + }; + } + + + /** --------------------------------------------------------- **/ + /** -- force-layout related functions -- **/ + /** --------------------------------------------------------- **/ + function storeLinksOnNodes( nodes, links ){ + for ( var i = 0, nodesLength = nodes.length; i < nodesLength; i++ ) { + var node = nodes[i], + connectedLinks = []; + + // look for properties where this node is the domain or range + for ( var j = 0, linksLength = links.length; j < linksLength; j++ ) { + var link = links[j]; + + if ( link.domain() === node || link.range() === node ) { + connectedLinks.push(link); + } + } + node.links(connectedLinks); + } + } + + function setForceLayoutData( classNodes, labelNodes, links ){ + var d3Links = []; + links.forEach(function ( link ){ + d3Links = d3Links.concat(link.linkParts()); + }); + + var d3Nodes = [].concat(classNodes).concat(labelNodes); + setPositionOfOldLabelsOnNewLabels(force.nodes(), labelNodes); + + force.nodes(d3Nodes) + .links(d3Links); + } + + // The label nodes are positioned randomly, because they are created from scratch if the data changes and lose + // their position information. With this hack the position of old labels is copied to the new labels. + function setPositionOfOldLabelsOnNewLabels( oldLabelNodes, labelNodes ){ + labelNodes.forEach(function ( labelNode ){ + for ( var i = 0; i < oldLabelNodes.length; i++ ) { + var oldNode = oldLabelNodes[i]; + if ( oldNode.equals(labelNode) ) { + labelNode.x = oldNode.x; + labelNode.y = oldNode.y; + labelNode.px = oldNode.px; + labelNode.py = oldNode.py; + break; + } + } + }); + } + + // Applies all options that don't change the graph data. + function refreshGraphStyle(){ + zoom = zoom.scaleExtent([options.minMagnification(), options.maxMagnification()]); + if ( graphContainer ) { + zoom.event(graphContainer); + } + + force.charge(function ( element ){ + var charge = options.charge(); + if ( elementTools.isLabel(element) ) { + charge *= 0.8; + } + return charge; + }) + .size([options.width(), options.height()]) + .linkDistance(calculateLinkPartDistance) + .gravity(options.gravity()) + .linkStrength(options.linkStrength()); // Flexibility of links + + force.nodes().forEach(function ( n ){ + n.frozen(paused); + }); + } + + function calculateLinkPartDistance( linkPart ){ + var link = linkPart.link(); + + if ( link.isLoop() ) { + return options.loopDistance(); + } + + // divide by 2 to receive the length for a single link part + var linkPartDistance = getVisibleLinkDistance(link) / 2; + linkPartDistance += linkPart.domain().actualRadius(); + linkPartDistance += linkPart.range().actualRadius(); + return linkPartDistance; + } + + function getVisibleLinkDistance( link ){ + if ( elementTools.isDatatype(link.domain()) || elementTools.isDatatype(link.range()) ) { + return options.datatypeDistance(); + } else { + return options.classDistance(); + } + } + + /** --------------------------------------------------------- **/ + /** -- animation functions for the nodes -- **/ + /** --------------------------------------------------------- **/ + + graph.animateDynamicLabelWidth = function (){ + var wantedWidth = options.dynamicLabelWidth(); + var i; + for ( i = 0; i < classNodes.length; i++ ) { + var nodeElement = classNodes[i]; + if ( elementTools.isDatatype(nodeElement) ) { + nodeElement.animateDynamicLabelWidth(wantedWidth); + } + } + for ( i = 0; i < properties.length; i++ ) { + properties[i].animateDynamicLabelWidth(wantedWidth); + } + }; + + + /** --------------------------------------------------------- **/ + /** -- halo and localization functions -- **/ + /** --------------------------------------------------------- **/ + function updateHaloRadius(){ + if ( pulseNodeIds && pulseNodeIds.length > 0 ) { + var forceNodes = force.nodes(); + for ( var i = 0; i < pulseNodeIds.length; i++ ) { + var node = forceNodes[pulseNodeIds[i]]; + if ( node ) { + if ( node.property ) { + // match search strings with property label + if ( node.property().inverse ) { + var searchString = graph.options().searchMenu().getSearchString().toLowerCase(); + var name = node.property().labelForCurrentLanguage().toLowerCase(); + if ( name === searchString ) computeDistanceToCenter(node); + else { + node.property().removeHalo(); + if ( node.property().inverse() ) { + if ( !node.property().inverse().getHalos() ) + node.property().inverse().drawHalo(); + computeDistanceToCenter(node, true); + } + if ( node.property().equivalents() ) { + var eq = node.property().equivalents(); + for ( var e = 0; e < eq.length; e++ ) { + if ( !eq[e].getHalos() ) + eq[e].drawHalo(); + } + if ( !node.property().getHalos() ) + node.property().drawHalo(); + computeDistanceToCenter(node, false); + + } + } + } + } + computeDistanceToCenter(node); + } + } + } + } + + function getScreenCoords( x, y, translate, scale ){ + var xn = translate[0] + x * scale; + var yn = translate[1] + y * scale; + return { x: xn, y: yn }; + } + + function getClickedScreenCoords( x, y, translate, scale ){ + var xn = (x - translate[0]) / scale; + var yn = (y - translate[1]) / scale; + return { x: xn, y: yn }; + } + + + function computeDistanceToCenter( node, inverse ){ + var container = node; + var w = graph.options().width(); + var h = graph.options().height(); + var posXY = getScreenCoords(node.x, node.y, graphTranslation, zoomFactor); + + var highlightOfInv = false; + + if ( inverse && inverse === true ) { + highlightOfInv = true; + posXY = getScreenCoords(node.x, node.y + 20, graphTranslation, zoomFactor); + } + var x = posXY.x; + var y = posXY.y; + var nodeIsRect = false; + var halo; + var roundHalo; + var rectHalo; + var borderPoint_x = 0; + var borderPoint_y = 0; + var defaultRadius; + var offset = 15; + var radius; + + if ( node.property && highlightOfInv === true ) { + if ( node.property().inverse() ) { + rectHalo = node.property().inverse().getHalos().select("rect"); + + } else { + if ( node.property().getHalos() ) + rectHalo = node.property().getHalos().select("rect"); + else { + node.property().drawHalo(); + rectHalo = node.property().getHalos().select("rect"); + } + } + rectHalo.classed("hidden", true); + if ( node.property().inverse() ) { + if ( node.property().inverse().getHalos() ) { + roundHalo = node.property().inverse().getHalos().select("circle"); + } + } else { + roundHalo = node.property().getHalos().select("circle"); + } + if ( roundHalo.node() === null ) { + radius = node.property().inverse().width() + 15; + + roundHalo = node.property().inverse().getHalos().append("circle") + .classed("searchResultB", true) + .classed("searchResultA", false) + .attr("r", radius + 15); + + } + halo = roundHalo; // swap the halo to be round + nodeIsRect = true; + container = node.property().inverse(); + } + + if ( node.id ) { + if ( !node.getHalos() ) return; // something went wrong before + halo = node.getHalos().select("rect"); + if ( halo.node() === null ) { + // this is a round node + nodeIsRect = false; + roundHalo = node.getHalos().select("circle"); + defaultRadius = node.actualRadius(); + roundHalo.attr("r", defaultRadius + offset); + halo = roundHalo; + } else { // this is a rect node + nodeIsRect = true; + rectHalo = node.getHalos().select("rect"); + rectHalo.classed("hidden", true); + roundHalo = node.getHalos().select("circle"); + if ( roundHalo.node() === null ) { + radius = node.width(); + roundHalo = node.getHalos().append("circle") + .classed("searchResultB", true) + .classed("searchResultA", false) + .attr("r", radius + offset); + } + halo = roundHalo; + } + } + if ( node.property && !inverse ) { + if ( !node.property().getHalos() ) return; // something went wrong before + rectHalo = node.property().getHalos().select("rect"); + rectHalo.classed("hidden", true); + + roundHalo = node.property().getHalos().select("circle"); + if ( roundHalo.node() === null ) { + radius = node.property().width(); + + roundHalo = node.property().getHalos().append("circle") + .classed("searchResultB", true) + .classed("searchResultA", false) + .attr("r", radius + 15); + + } + halo = roundHalo; // swap the halo to be round + nodeIsRect = true; + container = node.property(); + } + + if ( x < 0 || x > w || y < 0 || y > h ) { + // node outside viewport; + // check for quadrant and get the correct boarder point (intersection with viewport) + if ( x < 0 && y < 0 ) { + borderPoint_x = 0; + borderPoint_y = 0; + } else if ( x > 0 && x < w && y < 0 ) { + borderPoint_x = x; + borderPoint_y = 0; + } else if ( x > w && y < 0 ) { + borderPoint_x = w; + borderPoint_y = 0; + } else if ( x > w && y > 0 && y < h ) { + borderPoint_x = w; + borderPoint_y = y; + } else if ( x > w && y > h ) { + borderPoint_x = w; + borderPoint_y = h; + } else if ( x > 0 && x < w && y > h ) { + borderPoint_x = x; + borderPoint_y = h; + } else if ( x < 0 && y > h ) { + borderPoint_x = 0; + borderPoint_y = h; + } else if ( x < 0 && y > 0 && y < h ) { + borderPoint_x = 0; + borderPoint_y = y; + } + // kill all pulses of nodes that are outside the viewport + container.getHalos().select("rect").classed("searchResultA", false); + container.getHalos().select("circle").classed("searchResultA", false); + container.getHalos().select("rect").classed("searchResultB", true); + container.getHalos().select("circle").classed("searchResultB", true); + halo.classed("hidden", false); + // compute in pixel coordinates length of difference vector + var borderRadius_x = borderPoint_x - x; + var borderRadius_y = borderPoint_y - y; + + var len = borderRadius_x * borderRadius_x + borderRadius_y * borderRadius_y; + len = Math.sqrt(len); + + var normedX = borderRadius_x / len; + var normedY = borderRadius_y / len; + + len = len + 20; // add 20 px; + + // re-normalized vector + var newVectorX = normedX * len + x; + var newVectorY = normedY * len + y; + // compute world coordinates of this point + var wX = (newVectorX - graphTranslation[0]) / zoomFactor; + var wY = (newVectorY - graphTranslation[1]) / zoomFactor; + + // compute distance in world coordinates + var dx = wX - node.x; + var dy = wY - node.y; + if ( highlightOfInv === true ) + dy = wY - node.y - 20; + + if ( highlightOfInv === false && node.property && node.property().inverse() ) + dy = wY - node.y + 20; + + var newRadius = Math.sqrt(dx * dx + dy * dy); + halo = container.getHalos().select("circle"); + // sanity checks and setting new halo radius + if ( !nodeIsRect ) { + defaultRadius = node.actualRadius() + offset; + if ( newRadius < defaultRadius ) { + newRadius = defaultRadius; + } + halo.attr("r", newRadius); + } else { + defaultRadius = 0.5 * container.width(); + if ( newRadius < defaultRadius ) + newRadius = defaultRadius; + halo.attr("r", newRadius); + } + } else { // node is in viewport , render original; + // reset the halo to original radius + defaultRadius = node.actualRadius() + 15; + if ( !nodeIsRect ) { + halo.attr("r", defaultRadius); + } else { // this is rectangular node render as such + halo = container.getHalos().select("rect"); + halo.classed("hidden", false); + //halo.classed("searchResultB", true); + //halo.classed("searchResultA", false); + var aCircHalo = container.getHalos().select("circle"); + aCircHalo.classed("hidden", true); + + container.getHalos().select("rect").classed("hidden", false); + container.getHalos().select("circle").classed("hidden", true); + } + } + } + + function transform( p, cx, cy ){ + // one iteration step for the locate target animation + zoomFactor = graph.options().height() / p[2]; + graphTranslation = [(cx - p[0] * zoomFactor), (cy - p[1] * zoomFactor)]; + updateHaloRadius(); + // update the values in case the user wants to break the animation + zoom.translate(graphTranslation); + zoom.scale(zoomFactor); + graph.options().zoomSlider().updateZoomSliderValue(zoomFactor); + return "translate(" + graphTranslation[0] + "," + graphTranslation[1] + ")scale(" + zoomFactor + ")"; + } + + graph.zoomToElementInGraph = function ( element ){ + targetLocationZoom(element); + }; + graph.updateHaloRadius = function ( element ){ + computeDistanceToCenter(element); + }; + + function targetLocationZoom( target ){ + // store the original information + var cx = 0.5 * graph.options().width(); + var cy = 0.5 * graph.options().height(); + var cp = getWorldPosFromScreen(cx, cy, graphTranslation, zoomFactor); + var sP = [cp.x, cp.y, graph.options().height() / zoomFactor]; + + var zoomLevel = Math.max(defaultZoom + 0.5 * defaultZoom, defaultTargetZoom); + var eP = [target.x, target.y, graph.options().height() / zoomLevel]; + var pos_intp = d3.interpolateZoom(sP, eP); + + var lenAnimation = pos_intp.duration; + if ( lenAnimation > 2500 ) { + lenAnimation = 2500; + } + + graphContainer.attr("transform", transform(sP, cx, cy)) + .transition() + .duration(lenAnimation) + .attrTween("transform", function (){ + return function ( t ){ + return transform(pos_intp(t), cx, cy); + }; + }) + .each("end", function (){ + graphContainer.attr("transform", "translate(" + graphTranslation + ")scale(" + zoomFactor + ")"); + zoom.translate(graphTranslation); + zoom.scale(zoomFactor); + updateHaloRadius(); + }); + } + + function getWorldPosFromScreen( x, y, translate, scale ){ + var temp = scale[0], xn, yn; + if ( temp ) { + xn = (x - translate[0]) / temp; + yn = (y - translate[1]) / temp; + } else { + xn = (x - translate[0]) / scale; + yn = (y - translate[1]) / scale; + } + return { x: xn, y: yn }; + } + + graph.locateSearchResult = function (){ + if ( pulseNodeIds && pulseNodeIds.length > 0 ) { + // move the center of the viewport to this location + if ( transformAnimation === true ) return; // << prevents incrementing the location id if we are in an animation + var node = force.nodes()[pulseNodeIds[locationId]]; + locationId++; + locationId = locationId % pulseNodeIds.length; + if ( node.id ) node.foreground(); + if ( node.property ) node.property().foreground(); + + targetLocationZoom(node); + } + }; + + graph.resetSearchHighlight = function (){ + // get all nodes (handle also already filtered nodes ) + pulseNodeIds = []; + nodeArrayForPulse = []; + // clear from stored nodes + var nodes = unfilteredData.nodes; + var props = unfilteredData.properties; + var j; + for ( j = 0; j < nodes.length; j++ ) { + var node = nodes[j]; + if ( node.removeHalo ) + node.removeHalo(); + } + for ( j = 0; j < props.length; j++ ) { + var prop = props[j]; + if ( prop.removeHalo ) + prop.removeHalo(); + } + }; + + graph.updatePulseIds = function ( nodeIdArray ){ + pulseNodeIds = []; + for ( var i = 0; i < nodeIdArray.length; i++ ) { + var selectedId = nodeIdArray[i]; + var forceId = nodeMap[selectedId]; + if ( forceId !== undefined ) { + var le_node = force.nodes()[forceId]; + if ( le_node.id ) { + if ( pulseNodeIds.indexOf(forceId) === -1 ) { + pulseNodeIds.push(forceId); + } + } + if ( le_node.property ) { + if ( pulseNodeIds.indexOf(forceId) === -1 ) { + pulseNodeIds.push(forceId); + } + } + } + } + locationId = 0; + if ( pulseNodeIds.length > 0 ) { + d3.select("#locateSearchResult").classed("highlighted", true); + d3.select("#locateSearchResult").node().title = "Locate search term"; + } + else { + d3.select("#locateSearchResult").classed("highlighted", false); + d3.select("#locateSearchResult").node().title = "Nothing to locate"; + } + + }; + + graph.highLightNodes = function ( nodeIdArray ){ + if ( nodeIdArray.length === 0 ) { + return; // nothing to highlight + } + pulseNodeIds = []; + nodeArrayForPulse = nodeIdArray; + var missedIds = []; + + // identify the force id to highlight + for ( var i = 0; i < nodeIdArray.length; i++ ) { + var selectedId = nodeIdArray[i]; + var forceId = nodeMap[selectedId]; + if ( forceId !== undefined ) { + var le_node = force.nodes()[forceId]; + if ( le_node.id ) { + if ( pulseNodeIds.indexOf(forceId) === -1 ) { + pulseNodeIds.push(forceId); + le_node.foreground(); + le_node.drawHalo(); + } + } + if ( le_node.property ) { + if ( pulseNodeIds.indexOf(forceId) === -1 ) { + pulseNodeIds.push(forceId); + le_node.property().foreground(); + le_node.property().drawHalo(); + } + } + } + else { + missedIds.push(selectedId); + } + } + + if ( missedIds.length === nodeIdArray.length ) { + + } + // store the highlight on the missed nodes; + var s_nodes = unfilteredData.nodes; + var s_props = unfilteredData.properties; + for ( i = 0; i < missedIds.length; i++ ) { + var missedId = missedIds[i]; + // search for this in the nodes; + for ( var n = 0; n < s_nodes.length; n++ ) { + var nodeId = s_nodes[n].id(); + if ( nodeId === missedId ) { + s_nodes[n].drawHalo(); + } + } + for ( var p = 0; p < s_props.length; p++ ) { + var propId = s_props[p].id(); + if ( propId === missedId ) { + s_props[p].drawHalo(); + } + } + } + if ( missedIds.length === nodeIdArray.length ) { + d3.select("#locateSearchResult").classed("highlighted", false); + } + else { + d3.select("#locateSearchResult").classed("highlighted", true); + } + locationId = 0; + updateHaloRadius(); + }; + + graph.hideHalos = function (){ + var haloElements = d3.selectAll(".searchResultA,.searchResultB"); + haloElements.classed("hidden", true); + return haloElements; + }; + + function nodeInViewport( node, property ){ + + var w = graph.options().width(); + var h = graph.options().height(); + var posXY = getScreenCoords(node.x, node.y, graphTranslation, zoomFactor); + var x = posXY.x; + var y = posXY.y; + + var retVal = !(x < 0 || x > w || y < 0 || y > h); + return retVal; + } + + graph.getBoundingBoxForTex = function (){ + var halos = graph.hideHalos(); + var bbox = graphContainer.node().getBoundingClientRect(); + halos.classed("hidden", false); + var w = graph.options().width(); + var h = graph.options().height(); + + // get the graph coordinates + var topLeft = getWorldPosFromScreen(0, 0, graphTranslation, zoomFactor); + var botRight = getWorldPosFromScreen(w, h, graphTranslation, zoomFactor); + + + var t_topLeft = getWorldPosFromScreen(bbox.left, bbox.top, graphTranslation, zoomFactor); + var t_botRight = getWorldPosFromScreen(bbox.right, bbox.bottom, graphTranslation, zoomFactor); + + // tighten up the bounding box; + + var tX = Math.max(t_topLeft.x, topLeft.x); + var tY = Math.max(t_topLeft.y, topLeft.y); + + var bX = Math.min(t_botRight.x, botRight.x); + var bY = Math.min(t_botRight.y, botRight.y); + + + // tighten further; + var allForceNodes = force.nodes(); + var numNodes = allForceNodes.length; + var visibleNodes = []; + var bbx; + + + var contentBBox = { tx: 1000000000000, ty: 1000000000000, bx: -1000000000000, by: -1000000000000 }; + + for ( var i = 0; i < numNodes; i++ ) { + var node = allForceNodes[i]; + if ( node ) { + if ( node.property ) { + if ( nodeInViewport(node, true) ) { + if ( node.property().labelElement() === undefined ) continue; + bbx = node.property().labelElement().node().getBoundingClientRect(); + if ( bbx ) { + contentBBox.tx = Math.min(contentBBox.tx, bbx.left); + contentBBox.bx = Math.max(contentBBox.bx, bbx.right); + contentBBox.ty = Math.min(contentBBox.ty, bbx.top); + contentBBox.by = Math.max(contentBBox.by, bbx.bottom); + } + } + } else { + if ( nodeInViewport(node, false) ) { + bbx = node.nodeElement().node().getBoundingClientRect(); + if ( bbx ) { + contentBBox.tx = Math.min(contentBBox.tx, bbx.left); + contentBBox.bx = Math.max(contentBBox.bx, bbx.right); + contentBBox.ty = Math.min(contentBBox.ty, bbx.top); + contentBBox.by = Math.max(contentBBox.by, bbx.bottom); + } + } + } + } + } + + var tt_topLeft = getWorldPosFromScreen(contentBBox.tx, contentBBox.ty, graphTranslation, zoomFactor); + var tt_botRight = getWorldPosFromScreen(contentBBox.bx, contentBBox.by, graphTranslation, zoomFactor); + + tX = Math.max(tX, tt_topLeft.x); + tY = Math.max(tY, tt_topLeft.y); + + bX = Math.min(bX, tt_botRight.x); + bY = Math.min(bY, tt_botRight.y); + // y axis flip for tex + return [tX, -tY, bX, -bY]; + + }; + + var updateTargetElement = function (){ + var bbox = graphContainer.node().getBoundingClientRect(); + + + // get the graph coordinates + var bboxOffset = 50; // default radius of a node; + var topLeft = getWorldPosFromScreen(bbox.left, bbox.top, graphTranslation, zoomFactor); + var botRight = getWorldPosFromScreen(bbox.right, bbox.bottom, graphTranslation, zoomFactor); + + var w = graph.options().width(); + if ( graph.options().leftSidebar().isSidebarVisible() === true ) + w -= 200; + var h = graph.options().height(); + topLeft.x += bboxOffset; + topLeft.y -= bboxOffset; + botRight.x -= bboxOffset; + botRight.y += bboxOffset; + + var g_w = botRight.x - topLeft.x; + var g_h = botRight.y - topLeft.y; + + // endpoint position calculations + var posX = 0.5 * (topLeft.x + botRight.x); + var posY = 0.5 * (topLeft.y + botRight.y); + var cx = 0.5 * w, + cy = 0.5 * h; + + if ( graph.options().leftSidebar().isSidebarVisible() === true ) + cx += 200; + var cp = getWorldPosFromScreen(cx, cy, graphTranslation, zoomFactor); + + // zoom factor calculations and fail safes; + var newZoomFactor = 1.0; // fail save if graph and window are squares + //get the smaller one + var a = w / g_w; + var b = h / g_h; + if ( a < b ) newZoomFactor = a; + else newZoomFactor = b; + + + // fail saves + if ( newZoomFactor > zoom.scaleExtent()[1] ) { + newZoomFactor = zoom.scaleExtent()[1]; + } + if ( newZoomFactor < zoom.scaleExtent()[0] ) { + newZoomFactor = zoom.scaleExtent()[0]; + } + + // apply Zooming + var sP = [cp.x, cp.y, h / zoomFactor]; + var eP = [posX, posY, h / newZoomFactor]; + + + var pos_intp = d3.interpolateZoom(sP, eP); + return [pos_intp, cx, cy]; + + }; + + graph.forceRelocationEvent = function ( dynamic ){ + // we need to kill the halo to determine the bounding box; + var halos = graph.hideHalos(); + var bbox = graphContainer.node().getBoundingClientRect(); + halos.classed("hidden", false); + + // get the graph coordinates + var bboxOffset = 50; // default radius of a node; + var topLeft = getWorldPosFromScreen(bbox.left, bbox.top, graphTranslation, zoomFactor); + var botRight = getWorldPosFromScreen(bbox.right, bbox.bottom, graphTranslation, zoomFactor); + + var w = graph.options().width(); + if ( graph.options().leftSidebar().isSidebarVisible() === true ) + w -= 200; + var h = graph.options().height(); + topLeft.x += bboxOffset; + topLeft.y -= bboxOffset; + botRight.x -= bboxOffset; + botRight.y += bboxOffset; + + var g_w = botRight.x - topLeft.x; + var g_h = botRight.y - topLeft.y; + + // endpoint position calculations + var posX = 0.5 * (topLeft.x + botRight.x); + var posY = 0.5 * (topLeft.y + botRight.y); + var cx = 0.5 * w, + cy = 0.5 * h; + + if ( graph.options().leftSidebar().isSidebarVisible() === true ) + cx += 200; + var cp = getWorldPosFromScreen(cx, cy, graphTranslation, zoomFactor); + + // zoom factor calculations and fail safes; + var newZoomFactor = 1.0; // fail save if graph and window are squares + //get the smaller one + var a = w / g_w; + var b = h / g_h; + if ( a < b ) newZoomFactor = a; + else newZoomFactor = b; + + + // fail saves + if ( newZoomFactor > zoom.scaleExtent()[1] ) { + newZoomFactor = zoom.scaleExtent()[1]; + } + if ( newZoomFactor < zoom.scaleExtent()[0] ) { + newZoomFactor = zoom.scaleExtent()[0]; + } + + // apply Zooming + var sP = [cp.x, cp.y, h / zoomFactor]; + var eP = [posX, posY, h / newZoomFactor]; + + + var pos_intp = d3.interpolateZoom(sP, eP); + var lenAnimation = pos_intp.duration; + if ( lenAnimation > 2500 ) { + lenAnimation = 2500; + } + graphContainer.attr("transform", transform(sP, cx, cy)) + .transition() + .duration(lenAnimation) + .attrTween("transform", function (){ + return function ( t ){ + if ( dynamic ) { + var param = updateTargetElement(); + var nV = param[0](t); + return transform(nV, cx, cy); + } + return transform(pos_intp(t), cx, cy); + }; + }) + .each("end", function (){ + if ( dynamic ) { + return; + } + + graphContainer.attr("transform", "translate(" + graphTranslation + ")scale(" + zoomFactor + ")"); + zoom.translate(graphTranslation); + zoom.scale(zoomFactor); + graph.options().zoomSlider().updateZoomSliderValue(zoomFactor); + + + }); + }; + + + graph.isADraggerActive = function (){ + if ( classDragger.mouseButtonPressed === true || + domainDragger.mouseButtonPressed === true || + rangeDragger.mouseButtonPressed === true ) { + return true; + } + return false; + }; + + /** --------------------------------------------------------- **/ + /** -- VOWL EDITOR create/ edit /delete functions -- **/ + /** --------------------------------------------------------- **/ + + graph.changeNodeType = function ( element ){ + + var typeString = d3.select("#typeEditor").node().value; + + if ( graph.classesSanityCheck(element, typeString) === false ) { + // call reselection to restore previous type selection + graph.options().editSidebar().updateSelectionInformation(element); + return; + } + + var prototype = NodePrototypeMap.get(typeString.toLowerCase()); + var aNode = new prototype(graph); + + aNode.x = element.x; + aNode.y = element.y; + aNode.px = element.x; + aNode.py = element.y; + aNode.id(element.id()); + aNode.copyInformation(element); + + if ( typeString === "owl:Thing" ) { + aNode.label("Thing"); + } + else if ( elementTools.isDatatype(element) === false ) { + if ( element.backupLabel() !== undefined ) { + aNode.label(element.backupLabel()); + } else if ( aNode.backupLabel() !== undefined ) { + aNode.label(aNode.backupLabel()); + } else { + aNode.label("NewClass"); + } + } + + if ( typeString === "rdfs:Datatype" ) { + if ( aNode.dType() === "undefined" ) + aNode.label("undefined"); + else { + var identifier = aNode.dType().split(":")[1]; + aNode.label(identifier); + } + } + var i; + // updates the property domain and range + for ( i = 0; i < unfilteredData.properties.length; i++ ) { + if ( unfilteredData.properties[i].domain() === element ) { + // unfilteredData.properties[i].toString(); + unfilteredData.properties[i].domain(aNode); + } + if ( unfilteredData.properties[i].range() === element ) { + unfilteredData.properties[i].range(aNode); + // unfilteredData.properties[i].toString(); + } + } + + // update for fastUpdate: + for ( i = 0; i < properties.length; i++ ) { + if ( properties[i].domain() === element ) { + // unfilteredData.properties[i].toString(); + properties[i].domain(aNode); + } + if ( properties[i].range() === element ) { + properties[i].range(aNode); + // unfilteredData.properties[i].toString(); + } + } + + var remId = unfilteredData.nodes.indexOf(element); + if ( remId !== -1 ) + unfilteredData.nodes.splice(remId, 1); + remId = classNodes.indexOf(element); + if ( remId !== -1 ) + classNodes.splice(remId, 1); + // very important thing for selection!; + addNewNodeElement(aNode); + // handle focuser! + options.focuserModule().handle(aNode); + generateDictionary(unfilteredData); + graph.getUpdateDictionary(); + element = null; + }; + + + graph.changePropertyType = function ( element ){ + var typeString = d3.select("#typeEditor").node().value; + + // create warning + if ( graph.sanityCheckProperty(element.domain(), element.range(), typeString) === false ) return false; + + var propPrototype = PropertyPrototypeMap.get(typeString.toLowerCase()); + var aProp = new propPrototype(graph); + aProp.copyInformation(element); + aProp.id(element.id()); + + element.domain().removePropertyElement(element); + element.range().removePropertyElement(element); + aProp.domain(element.domain()); + aProp.range(element.range()); + + if ( element.backupLabel() !== undefined ) { + aProp.label(element.backupLabel()); + } else { + aProp.label("newObjectProperty"); + } + + if ( aProp.type() === "rdfs:subClassOf" ) { + aProp.iri("http://www.w3.org/2000/01/rdf-schema#subClassOf"); + } else { + if ( element.iri() === "http://www.w3.org/2000/01/rdf-schema#subClassOf" ) + aProp.iri(graph.options().getGeneralMetaObjectProperty('iri') + aProp.id()); + + } + + + if ( graph.propertyCheckExistenceChecker(aProp, element.domain(), element.range()) === false ) { + graph.options().editSidebar().updateSelectionInformation(element); + return; + } + // // TODO: change its base IRI to proper value + // var ontoIRI="http://someTest.de"; + // aProp.baseIri(ontoIRI); + // aProp.iri(aProp.baseIri()+aProp.id()); + + + // add this to the data; + unfilteredData.properties.push(aProp); + if ( properties.indexOf(aProp) === -1 ) + properties.push(aProp); + var remId = unfilteredData.properties.indexOf(element); + if ( remId !== -1 ) + unfilteredData.properties.splice(remId, 1); + if ( properties.indexOf(aProp) === -1 ) + properties.push(aProp); + remId = properties.indexOf(element); + if ( remId !== -1 ) + properties.splice(remId, 1); + graph.fastUpdate(); + aProp.domain().addProperty(aProp); + aProp.range().addProperty(aProp); + if ( element.labelObject() && aProp.labelObject() ) { + aProp.labelObject().x = element.labelObject().x; + aProp.labelObject().px = element.labelObject().px; + aProp.labelObject().y = element.labelObject().y; + aProp.labelObject().py = element.labelObject().py; + } + + options.focuserModule().handle(aProp); + element = null; + }; + + graph.removeEditElements = function (){ + // just added to be called form outside + removeEditElements(); + }; + + function removeEditElements(){ + rangeDragger.hideDragger(true); + domainDragger.hideDragger(true); + shadowClone.hideClone(true); + + classDragger.hideDragger(true); + if ( addDataPropertyGroupElement ) + addDataPropertyGroupElement.classed("hidden", true); + if ( deleteGroupElement ) + deleteGroupElement.classed("hidden", true); + + + if ( hoveredNodeElement ) { + if ( hoveredNodeElement.pinned() === false ) { + hoveredNodeElement.locked(graph.paused()); + hoveredNodeElement.frozen(graph.paused()); + } + } + if ( hoveredPropertyElement ) { + if ( hoveredPropertyElement.pinned() === false ) { + hoveredPropertyElement.locked(graph.paused()); + hoveredPropertyElement.frozen(graph.paused()); + } + } + + + } + + graph.editorMode = function ( val ){ + var create_entry = d3.select("#empty"); + var create_container = d3.select("#emptyContainer"); + + var modeOfOpString = d3.select("#modeOfOperationString").node(); + if ( !arguments.length ) { + create_entry.node().checked = editMode; + if ( editMode === false ) { + create_container.node().title = "Enable editing in modes menu to create a new ontology"; + create_entry.node().title = "Enable editing in modes menu to create a new ontology"; + create_entry.style("pointer-events", "none"); + } else { + create_container.node().title = "Creates a new empty ontology"; + create_entry.node().title = "Creates a new empty ontology"; + d3.select("#useAccuracyHelper").style("color", "#2980b9"); + d3.select("#useAccuracyHelper").style("pointer-events", "auto"); + create_entry.node().disabled = false; + create_entry.style("pointer-events", "auto"); + } + + return editMode; + } + graph.options().setEditorModeForDefaultObject(val); + + // if (seenEditorHint===false && val===true){ + // seenEditorHint=true; + // graph.options().warningModule().showEditorHint(); + // } + editMode = val; + + if ( create_entry ) { + create_entry.classed("disabled", !editMode); + if ( !editMode ) { + create_container.node().title = "Enable editing in modes menu to create a new ontology"; + create_entry.node().title = "Enable editing in modes menu to create a new ontology"; + create_entry.node().disabled = true; + d3.select("#useAccuracyHelper").style("color", "#979797"); + d3.select("#useAccuracyHelper").style("pointer-events", "none"); + create_entry.style("pointer-events", "none"); + } else { + create_container.node().title = "Creates a new empty ontology"; + create_entry.node().title = "Creates a new empty ontology"; + d3.select("#useAccuracyHelper").style("color", "#2980b9"); + d3.select("#useAccuracyHelper").style("pointer-events", "auto"); + create_entry.style("pointer-events", "auto"); + } + } + + // adjust compact notation + // selector = compactNotationOption; + // box =ModuleCheckbox + var compactNotationContainer = d3.select("#compactnotationModuleCheckbox"); + if ( compactNotationContainer ) { + compactNotationContainer.classed("disabled", !editMode); + if ( !editMode ) { + compactNotationContainer.node().title = ""; + compactNotationContainer.node().disabled = false; + compactNotationContainer.style("pointer-events", "auto"); + d3.select("#compactNotationOption").style("color", ""); + d3.select("#compactNotationOption").node().title = ""; + options.literalFilter().enabled(true); + graph.update(); + } else { + // if editor Mode + //1) uncheck the element + d3.select("#compactNotationOption").node().title = "Compact notation can only be used in view mode"; + compactNotationContainer.node().disabled = true; + compactNotationContainer.node().checked = false; + options.compactNotationModule().enabled(false); + options.literalFilter().enabled(false); + graph.executeCompactNotationModule(); + graph.executeEmptyLiteralFilter(); + graph.lazyRefresh(); + compactNotationContainer.style("pointer-events", "none"); + d3.select("#compactNotationOption").style("color", "#979797"); + } + } + + if ( modeOfOpString ) { + if ( touchDevice === true ) { + modeOfOpString.innerHTML = "touch able device detected"; + } else { + modeOfOpString.innerHTML = "point & click device detected"; + } + } + var svgGraph = d3.selectAll(".vowlGraph"); + + if ( editMode === true ) { + options.leftSidebar().showSidebar(options.leftSidebar().getSidebarVisibility(), true); + options.leftSidebar().hideCollapseButton(false); + graph.options().editSidebar().updatePrefixUi(); + graph.options().editSidebar().updateElementWidth(); + svgGraph.on("dblclick.zoom", graph.modified_dblClickFunction); + + } else { + svgGraph.on("dblclick.zoom", originalD3_dblClickFunction); + options.leftSidebar().showSidebar(0); + options.leftSidebar().hideCollapseButton(true); + // hide hovered edit elements + removeEditElements(); + } + options.sidebar().updateShowedInformation(); + options.editSidebar().updateElementWidth(); + + }; + + function createLowerCasePrototypeMap( prototypeMap ){ + return d3.map(prototypeMap.values(), function ( Prototype ){ + return new Prototype().type().toLowerCase(); + }); + } + + function createNewNodeAtPosition( pos ){ + var aNode, prototype; + var forceUpdate = true; + // create a node of that id; + + var typeToCreate = d3.select("#defaultClass").node().title; + prototype = NodePrototypeMap.get(typeToCreate.toLowerCase()); + aNode = new prototype(graph); + var autoEditElement = false; + if ( typeToCreate === "owl:Thing" ) { + aNode.label("Thing"); + } + else { + aNode.label("NewClass"); + autoEditElement = true; + } + aNode.x = pos.x; + aNode.y = pos.y; + aNode.px = aNode.x; + aNode.py = aNode.y; + aNode.id("Class" + eN++); + // aNode.paused(true); + + aNode.baseIri(d3.select("#iriEditor").node().value); + aNode.iri(aNode.baseIri() + aNode.id()); + addNewNodeElement(aNode, forceUpdate); + options.focuserModule().handle(aNode, true); + aNode.frozen(graph.paused()); + aNode.locked(graph.paused()); + aNode.enableEditing(autoEditElement); + } + + + function addNewNodeElement( element ){ + unfilteredData.nodes.push(element); + if ( classNodes.indexOf(element) === -1 ) + classNodes.push(element); + + generateDictionary(unfilteredData); + graph.getUpdateDictionary(); + graph.fastUpdate(); + } + + graph.getTargetNode = function ( position ){ + var dx = position[0]; + var dy = position[1]; + var tN = null; + var minDist = 1000000000000; + // This is a bit OVERKILL for the computation of one node >> TODO: KD-TREE SEARCH + unfilteredData.nodes.forEach(function ( el ){ + var cDist = Math.sqrt((el.x - dx) * (el.x - dx) + (el.y - dy) * (el.y - dy)); + if ( cDist < minDist ) { + minDist = cDist; + tN = el; + } + }); + if ( hoveredNodeElement ) { + var offsetDist = hoveredNodeElement.actualRadius() + 30; + if ( minDist > offsetDist ) return null; + if ( tN.renderType() === "rect" ) return null; + if ( tN === hoveredNodeElement && minDist <= hoveredNodeElement.actualRadius() ) { + return tN; + } else if ( tN === hoveredNodeElement && minDist > hoveredNodeElement.actualRadius() ) { + return null; + } + return tN; + } + else { + + if ( minDist > (tN.actualRadius() + 30) ) + return null; + else return tN; + + } + }; + + graph.genericPropertySanityCheck = function ( domain, range, typeString, header, action ){ + if ( domain === range && typeString === "rdfs:subClassOf" ) { + graph.options().warningModule().showWarning(header, + "rdfs:subClassOf can not be created as loops (domain == range)", + action, 1, false); + return false; + } + if ( domain === range && typeString === "owl:disjointWith" ) { + graph.options().warningModule().showWarning(header, + "owl:disjointWith can not be created as loops (domain == range)", + action, 1, false); + return false; + } + // allProps[i].type()==="owl:allValuesFrom" || + // allProps[i].type()==="owl:someValuesFrom" + if ( domain.type() === "owl:Thing" && typeString === "owl:allValuesFrom" ) { + graph.options().warningModule().showWarning(header, + "owl:allValuesFrom can not originate from owl:Thing", + action, 1, false); + return false; + } + if ( domain.type() === "owl:Thing" && typeString === "owl:someValuesFrom" ) { + graph.options().warningModule().showWarning(header, + "owl:someValuesFrom can not originate from owl:Thing", + action, 1, false); + return false; + } + + if ( range.type() === "owl:Thing" && typeString === "owl:allValuesFrom" ) { + graph.options().warningModule().showWarning(header, + "owl:allValuesFrom can not be connected to owl:Thing", + action, 1, false); + return false; + } + if ( range.type() === "owl:Thing" && typeString === "owl:someValuesFrom" ) { + graph.options().warningModule().showWarning(header, + "owl:someValuesFrom can not be connected to owl:Thing", + action, 1, false); + return false; + } + + return true; // we can Change the domain or range + }; + + graph.checkIfIriClassAlreadyExist = function ( url ){ + // search for a class node with this url + var allNodes = unfilteredData.nodes; + for ( var i = 0; i < allNodes.length; i++ ) { + if ( elementTools.isDatatype(allNodes[i]) === true || allNodes[i].type() === "owl:Thing" ) + continue; + + // now we are a real class; + //get class IRI + var classIRI = allNodes[i].iri(); + + // this gives me the node for halo + if ( url === classIRI ) { + return allNodes[i]; + } + } + return false; + }; + + graph.classesSanityCheck = function ( classElement, targetType ){ + // this is added due to someValuesFrom properties + // we should not be able to change a classElement to a owl:Thing + // when it has a property attached to it that uses these restrictions + // + + if ( targetType === "owl:Class" ) return true; + + else { + // collect all properties which have that one as a domain or range + var allProps = unfilteredData.properties; + for ( var i = 0; i < allProps.length; i++ ) { + if ( allProps[i].range() === classElement || allProps[i].domain() === classElement ) { + // check for the type of that property + if ( allProps[i].type() === "owl:someValuesFrom" ) { + graph.options().warningModule().showWarning("Can not change class type", + "The element has a property that is of type owl:someValuesFrom", + "Element type not changed!", 1, true); + return false; + } + if ( allProps[i].type() === "owl:allValuesFrom" ) { + graph.options().warningModule().showWarning("Can not change class type", + "The element has a property that is of type owl:allValuesFrom", + "Element type not changed!", 1, true); + return false; + } + } + } + + + } + return true; + }; + + graph.propertyCheckExistenceChecker = function ( property, domain, range ){ + var allProps = unfilteredData.properties; + var i; + if ( property.type() === "rdfs:subClassOf" || property.type() === "owl:disjointWith" ) { + + for ( i = 0; i < allProps.length; i++ ) { + if ( allProps[i] === property ) continue; + if ( allProps[i].domain() === domain && allProps[i].range() === range && allProps[i].type() === property.type() ) { + graph.options().warningModule().showWarning("Warning", + "This triple already exist!", + "Element not created!", 1, false); + return false; + } + if ( allProps[i].domain() === range && allProps[i].range() === domain && allProps[i].type() === property.type() ) { + graph.options().warningModule().showWarning("Warning", + "Inverse assignment already exist! ", + "Element not created!", 1, false); + return false; + } + } + return true; + } + return true; + }; + + // graph.checkForTripleDuplicate=function(property){ + // var domain=property.domain(); + // var range=property.range(); + // console.log("checking for duplicates"); + // var b1= domain.isPropertyAssignedToThisElement(property); + // var b2= range.isPropertyAssignedToThisElement(property); + // + // console.log("test domain results in "+ b1); + // console.log("test range results in "+ b1); + // + // if (b1 && b2 ){ + // graph.options().warningModule().showWarning("Warning", + // "This triple already exist!", + // "Element not created!",1,false); + // return false; + // } + // return true; + // }; + + graph.sanityCheckProperty = function ( domain, range, typeString ){ + + // check for duplicate triple in the element; + + + if ( typeString === "owl:objectProperty" && graph.options().objectPropertyFilter().enabled() === true ) { + graph.options().warningModule().showWarning("Warning", + "Object properties are filtered out in the visualization!", + "Element not created!", 1, false); + return false; + } + + if ( typeString === "owl:disjointWith" && graph.options().disjointPropertyFilter().enabled() === true ) { + graph.options().warningModule().showWarning("Warning", + "owl:disjointWith properties are filtered out in the visualization!", + "Element not created!", 1, false); + return false; + } + + + if ( domain === range && typeString === "rdfs:subClassOf" ) { + graph.options().warningModule().showWarning("Warning", + "rdfs:subClassOf can not be created as loops (domain == range)", + "Element not created!", 1, false); + return false; + } + if ( domain === range && typeString === "owl:disjointWith" ) { + graph.options().warningModule().showWarning("Warning", + "owl:disjointWith can not be created as loops (domain == range)", + "Element not created!", 1, false); + return false; + } + + if ( domain.type() === "owl:Thing" && typeString === "owl:someValuesFrom" ) { + graph.options().warningModule().showWarning("Warning", + "owl:someValuesFrom can not originate from owl:Thing", + "Element not created!", 1, false); + return false; + } + if ( domain.type() === "owl:Thing" && typeString === "owl:allValuesFrom" ) { + graph.options().warningModule().showWarning("Warning", + "owl:allValuesFrom can not originate from owl:Thing", + "Element not created!", 1, false); + return false; + } + + if ( range.type() === "owl:Thing" && typeString === "owl:allValuesFrom" ) { + graph.options().warningModule().showWarning("Warning", + "owl:allValuesFrom can not be connected to owl:Thing", + "Element not created!", 1, false); + return false; + } + if ( range.type() === "owl:Thing" && typeString === "owl:someValuesFrom" ) { + graph.options().warningModule().showWarning("Warning", + "owl:someValuesFrom can not be connected to owl:Thing", + "Element not created!", 1, false); + return false; + } + return true; // we can create a property + }; + + function createNewObjectProperty( domain, range, draggerEndposition ){ + // check type of the property that we want to create; + + var defaultPropertyName = d3.select("#defaultProperty").node().title; + + // check if we are allow to create that property + if ( graph.sanityCheckProperty(domain, range, defaultPropertyName) === false ) return false; + + + var propPrototype = PropertyPrototypeMap.get(defaultPropertyName.toLowerCase()); + var aProp = new propPrototype(graph); + aProp.id("objectProperty" + eP++); + aProp.domain(domain); + aProp.range(range); + aProp.label("newObjectProperty"); + aProp.baseIri(d3.select("#iriEditor").node().value); + aProp.iri(aProp.baseIri() + aProp.id()); + + // check for duplicate; + if ( graph.propertyCheckExistenceChecker(aProp, domain, range) === false ) { + // delete aProp; + // hope for garbage collection here -.- + return false; + } + + var autoEditElement = false; + + if ( defaultPropertyName === "owl:objectProperty" ) { + autoEditElement = true; + } + var pX = 0.49 * (domain.x + range.x); + var pY = 0.49 * (domain.y + range.y); + + if ( domain === range ) { + // we use the dragger endposition to determine an angle to put the loop there; + var dirD_x = draggerEndposition[0] - domain.x; + var dirD_y = draggerEndposition[1] - domain.y; + + // normalize; + var len = Math.sqrt(dirD_x * dirD_x + dirD_y * dirD_y); + // it should be very hard to set the position on the same sport but why not handling this + var nx = dirD_x / len; + var ny = dirD_y / len; + // is Nan in javascript like in c len==len returns false when it is not a number? + if ( isNaN(len) ) { + nx = 0; + ny = -1; + } + + // get domain actual raidus + var offset = 2 * domain.actualRadius() + 50; + pX = domain.x + offset * nx; + pY = domain.y + offset * ny; + } + + // add this property to domain and range; + domain.addProperty(aProp); + range.addProperty(aProp); + + + // add this to the data; + unfilteredData.properties.push(aProp); + if ( properties.indexOf(aProp) === -1 ) + properties.push(aProp); + graph.fastUpdate(); + aProp.labelObject().x = pX; + aProp.labelObject().px = pX; + aProp.labelObject().y = pY; + aProp.labelObject().py = pY; + + aProp.frozen(graph.paused()); + aProp.locked(graph.paused()); + domain.frozen(graph.paused()); + domain.locked(graph.paused()); + range.frozen(graph.paused()); + range.locked(graph.paused()); + + + generateDictionary(unfilteredData); + graph.getUpdateDictionary(); + + options.focuserModule().handle(aProp); + graph.activateHoverElementsForProperties(true, aProp, false, touchDevice); + aProp.labelObject().increasedLoopAngle = true; + aProp.enableEditing(autoEditElement); + } + + graph.createDataTypeProperty = function ( node ){ + // random postion issues; + clearTimeout(nodeFreezer); + // tells user when element is filtered out + if ( graph.options().datatypeFilter().enabled() === true ) { + graph.options().warningModule().showWarning("Warning", + "Datatype properties are filtered out in the visualization!", + "Element not created!", 1, false); + return; + } + + + var aNode, prototype; + + // create a default datatype Node >> HERE LITERAL; + var defaultDatatypeName = d3.select("#defaultDatatype").node().title; + if ( defaultDatatypeName === "rdfs:Literal" ) { + prototype = NodePrototypeMap.get("rdfs:literal"); + aNode = new prototype(graph); + aNode.label("Literal"); + aNode.iri("http://www.w3.org/2000/01/rdf-schema#Literal"); + aNode.baseIri("http://www.w3.org/2000/01/rdf-schema#"); + } else { + prototype = NodePrototypeMap.get("rdfs:datatype"); + aNode = new prototype(graph); + var identifier = ""; + if ( defaultDatatypeName === "undefined" ) { + identifier = "undefined"; + + aNode.label(identifier); + // TODO : HANDLER FOR UNDEFINED DATATYPES!!<<<>>>>>>>>>>>.. + aNode.iri("http://www.undefinedDatatype.org/#" + identifier); + aNode.baseIri("http://www.undefinedDatatype.org/#"); + aNode.dType(defaultDatatypeName); + } else { + identifier = defaultDatatypeName.split(":")[1]; + aNode.label(identifier); + aNode.dType(defaultDatatypeName); + aNode.iri("http://www.w3.org/2001/XMLSchema#" + identifier); + aNode.baseIri("http://www.w3.org/2001/XMLSchema#"); + } + } + + + var nX = node.x - node.actualRadius() - 100; + var nY = node.y + node.actualRadius() + 100; + + aNode.x = nX; + aNode.y = nY; + aNode.px = aNode.x; + aNode.py = aNode.y; + aNode.id("NodeId" + eN++); + // add this property to the nodes; + unfilteredData.nodes.push(aNode); + if ( classNodes.indexOf(aNode) === -1 ) + classNodes.push(aNode); + + + // add also the datatype Property to it + var propPrototype = PropertyPrototypeMap.get("owl:datatypeproperty"); + var aProp = new propPrototype(graph); + aProp.id("datatypeProperty" + eP++); + + // create the connection + aProp.domain(node); + aProp.range(aNode); + aProp.label("newDatatypeProperty"); + + + // TODO: change its base IRI to proper value + var ontoIri = d3.select("#iriEditor").node().value; + aProp.baseIri(ontoIri); + aProp.iri(ontoIri + aProp.id()); + // add this to the data; + unfilteredData.properties.push(aProp); + if ( properties.indexOf(aProp) === -1 ) + properties.push(aProp); + graph.fastUpdate(); + generateDictionary(unfilteredData); + graph.getUpdateDictionary(); + + nodeFreezer = setTimeout(function (){ + if ( node && node.frozen() === true && node.pinned() === false && graph.paused() === false ) { + node.frozen(graph.paused()); + node.locked(graph.paused()); + } + }, 1000); + options.focuserModule().handle(undefined); + if ( node ) { + node.frozen(true); + node.locked(true); + } + }; + + graph.removeNodesViaResponse = function ( nodesToRemove, propsToRemove ){ + var i, remId; + // splice them; + for ( i = 0; i < propsToRemove.length; i++ ) { + remId = unfilteredData.properties.indexOf(propsToRemove[i]); + if ( remId !== -1 ) + unfilteredData.properties.splice(remId, 1); + remId = properties.indexOf(propsToRemove[i]); + if ( remId !== -1 ) + properties.splice(remId, 1); + propsToRemove[i] = null; + } + for ( i = 0; i < nodesToRemove.length; i++ ) { + remId = unfilteredData.nodes.indexOf(nodesToRemove[i]); + if ( remId !== -1 ) { + unfilteredData.nodes.splice(remId, 1); + } + remId = classNodes.indexOf(nodesToRemove[i]); + if ( remId !== -1 ) + classNodes.splice(remId, 1); + nodesToRemove[i] = null; + } + graph.fastUpdate(); + generateDictionary(unfilteredData); + graph.getUpdateDictionary(); + options.focuserModule().handle(undefined); + nodesToRemove = null; + propsToRemove = null; + + }; + + graph.removeNodeViaEditor = function ( node ){ + var propsToRemove = []; + var nodesToRemove = []; + var datatypes = 0; + + var remId; + + nodesToRemove.push(node); + for ( var i = 0; i < unfilteredData.properties.length; i++ ) { + if ( unfilteredData.properties[i].domain() === node || unfilteredData.properties[i].range() === node ) { + propsToRemove.push(unfilteredData.properties[i]); + if ( unfilteredData.properties[i].type().toLocaleLowerCase() === "owl:datatypeproperty" && + unfilteredData.properties[i].range() !== node ) { + nodesToRemove.push(unfilteredData.properties[i].range()); + datatypes++; + } + } + } + var removedItems = propsToRemove.length + nodesToRemove.length; + if ( removedItems > 2 ) { + var text = "You are about to delete 1 class and " + propsToRemove.length + " properties"; + if ( datatypes !== 0 ) { + text = "You are about to delete 1 class, " + datatypes + " datatypes and " + propsToRemove.length + " properties"; + } + + + graph.options().warningModule().responseWarning( + "Removing elements", + text, + "Awaiting response!", graph.removeNodesViaResponse, [nodesToRemove, propsToRemove], false); + + + // + // if (confirm("Remove :\n"+propsToRemove.length + " properties\n"+nodesToRemove.length+" classes? ")===false){ + // return; + // }else{ + // // todo : store for undo delete button ; + // } + } else { + // splice them; + for ( i = 0; i < propsToRemove.length; i++ ) { + remId = unfilteredData.properties.indexOf(propsToRemove[i]); + if ( remId !== -1 ) + unfilteredData.properties.splice(remId, 1); + remId = properties.indexOf(propsToRemove[i]); + if ( remId !== -1 ) + properties.splice(remId, 1); + propsToRemove[i] = null; + } + for ( i = 0; i < nodesToRemove.length; i++ ) { + remId = unfilteredData.nodes.indexOf(nodesToRemove[i]); + if ( remId !== -1 ) + unfilteredData.nodes.splice(remId, 1); + remId = classNodes.indexOf(nodesToRemove[i]); + if ( remId !== -1 ) + classNodes.splice(remId, 1); + nodesToRemove[i] = null; + } + graph.fastUpdate(); + generateDictionary(unfilteredData); + graph.getUpdateDictionary(); + options.focuserModule().handle(undefined); + nodesToRemove = null; + propsToRemove = null; + } + }; + + graph.removePropertyViaEditor = function ( property ){ + property.domain().removePropertyElement(property); + property.range().removePropertyElement(property); + var remId; + + if ( property.type().toLocaleLowerCase() === "owl:datatypeproperty" ) { + var datatype = property.range(); + remId = unfilteredData.nodes.indexOf(property.range()); + if ( remId !== -1 ) + unfilteredData.nodes.splice(remId, 1); + remId = classNodes.indexOf(property.range()); + if ( remId !== -1 ) + classNodes.splice(remId, 1); + datatype = null; + } + remId = unfilteredData.properties.indexOf(property); + if ( remId !== -1 ) + unfilteredData.properties.splice(remId, 1); + remId = properties.indexOf(property); + if ( remId !== -1 ) + properties.splice(remId, 1); + if ( property.inverse() ) { + // so we have inverse + property.inverse().inverse(0); + + } + + + hoveredPropertyElement = undefined; + graph.fastUpdate(); + generateDictionary(unfilteredData); + graph.getUpdateDictionary(); + options.focuserModule().handle(undefined); + property = null; + }; + + graph.executeColorExternalsModule = function (){ + options.colorExternalsModule().filter(unfilteredData.nodes, unfilteredData.properties); + }; + + graph.executeCompactNotationModule = function (){ + if ( unfilteredData ) { + options.compactNotationModule().filter(unfilteredData.nodes, unfilteredData.properties); + } + + }; + graph.executeEmptyLiteralFilter = function (){ + + if ( unfilteredData && unfilteredData.nodes.length > 1 ) { + options.literalFilter().filter(unfilteredData.nodes, unfilteredData.properties); + unfilteredData.nodes = options.literalFilter().filteredNodes(); + unfilteredData.properties = options.literalFilter().filteredProperties(); + } + + }; + + + /** --------------------------------------------------------- **/ + /** -- animation functions for the nodes -- **/ + /** --------------------------------------------------------- **/ + + graph.animateDynamicLabelWidth = function (){ + var wantedWidth = options.dynamicLabelWidth(); + var i; + for ( i = 0; i < classNodes.length; i++ ) { + var nodeElement = classNodes[i]; + if ( elementTools.isDatatype(nodeElement) ) { + nodeElement.animateDynamicLabelWidth(wantedWidth); + } + } + for ( i = 0; i < properties.length; i++ ) { + properties[i].animateDynamicLabelWidth(wantedWidth); + } + }; + + + /** --------------------------------------------------------- **/ + /** -- Touch behaviour functions -- **/ + /** --------------------------------------------------------- **/ + + graph.setTouchDevice = function ( val ){ + touchDevice = val; + }; + + graph.isTouchDevice = function (){ + return touchDevice; + }; + + graph.modified_dblClickFunction = function (){ + + d3.event.stopPropagation(); + d3.event.preventDefault(); + // get position where we want to add the node; + var grPos = getClickedScreenCoords(d3.event.clientX, d3.event.clientY, graph.translation(), graph.scaleFactor()); + createNewNodeAtPosition(grPos); + }; + + function doubletap(){ + var touch_time = d3.event.timeStamp; + var numTouchers = 1; + if ( d3.event && d3.event.touches && d3.event.touches.length ) + numTouchers = d3.event.touches.length; + + if ( touch_time - last_touch_time < 300 && numTouchers === 1 ) { + d3.event.stopPropagation(); + if ( editMode === true ) { + //graph.modified_dblClickFunction(); + d3.event.preventDefault(); + d3.event.stopPropagation(); + last_touch_time = touch_time; + return true; + } + } + last_touch_time = touch_time; + return false; + } + + + function touchzoomed(){ + forceNotZooming = true; + + + var touch_time = d3.event.timeStamp; + if ( touch_time - last_touch_time < 300 && d3.event.touches.length === 1 ) { + d3.event.stopPropagation(); + + if ( editMode === true ) { + //graph.modified_dblClickFunction(); + d3.event.preventDefault(); + d3.event.stopPropagation(); + zoom.translate(graphTranslation); + zoom.scale(zoomFactor); + graph.modified_dblTouchFunction(); + } + else { + forceNotZooming = false; + if ( originalD3_touchZoomFunction ) + originalD3_touchZoomFunction(); + } + return; + } + forceNotZooming = false; + last_touch_time = touch_time; + // TODO: WORK AROUND TO CHECK FOR ORIGINAL FUNCTION + if ( originalD3_touchZoomFunction ) + originalD3_touchZoomFunction(); + } + + graph.modified_dblTouchFunction = function ( d ){ + d3.event.stopPropagation(); + d3.event.preventDefault(); + var xy; + if ( editMode === true ) { + xy = d3.touches(d3.selectAll(".vowlGraph").node()); + } + var grPos = getClickedScreenCoords(xy[0][0], xy[0][1], graph.translation(), graph.scaleFactor()); + createNewNodeAtPosition(grPos); + }; + + /** --------------------------------------------------------- **/ + /** -- Hover and Selection functions, adding edit elements -- **/ + /** --------------------------------------------------------- **/ + + graph.ignoreOtherHoverEvents = function ( val ){ + if ( !arguments.length ) { + return ignoreOtherHoverEvents; + } + else ignoreOtherHoverEvents = val; + }; + + function delayedHiddingHoverElements( tbh ){ + if ( tbh === true ) return; + if ( hoveredNodeElement ) { + if ( hoveredNodeElement.editingTextElement === true ) return; + delayedHider = setTimeout(function (){ + deleteGroupElement.classed("hidden", true); + addDataPropertyGroupElement.classed("hidden", true); + classDragger.hideDragger(true); + if ( hoveredNodeElement && hoveredNodeElement.pinned() === false && graph.paused() === false && hoveredNodeElement.editingTextElement === false ) { + hoveredNodeElement.frozen(false); + hoveredNodeElement.locked(false); + } + }, 1000); + } + if ( hoveredPropertyElement ) { + if ( hoveredPropertyElement.editingTextElement === true ) return; + delayedHider = setTimeout(function (){ + deleteGroupElement.classed("hidden", true); + addDataPropertyGroupElement.classed("hidden", true); + classDragger.hideDragger(true); + rangeDragger.hideDragger(true); + domainDragger.hideDragger(true); + shadowClone.hideClone(true); + if ( hoveredPropertyElement && hoveredPropertyElement.focused() === true && graph.options().drawPropertyDraggerOnHover() === true ) { + hoveredPropertyElement.labelObject().increasedLoopAngle = false; + // lazy update + recalculatePositions(); + } + + if ( hoveredPropertyElement && hoveredPropertyElement.pinned() === false && graph.paused() === false && hoveredPropertyElement.editingTextElement === false ) { + hoveredPropertyElement.frozen(false); + hoveredPropertyElement.locked(false); + } + }, 1000); + } + + } + + + // TODO : experimental code for updating dynamic label with and its hover element + graph.hideHoverPropertyElementsForAnimation = function (){ + deleteGroupElement.classed("hidden", true); + }; + graph.showHoverElementsAfterAnimation = function ( property, inversed ){ + setDeleteHoverElementPositionProperty(property, inversed); + deleteGroupElement.classed("hidden", false); + + }; + + function editElementHoverOnHidden(){ + classDragger.nodeElement.classed("classDraggerNodeHovered", true); + classDragger.nodeElement.classed("classDraggerNode", false); + editElementHoverOn(); + } + + function editElementHoverOutHidden(){ + classDragger.nodeElement.classed("classDraggerNodeHovered", false); + classDragger.nodeElement.classed("classDraggerNode", true); + editElementHoverOut(); + } + + function editElementHoverOn( touch ){ + if ( touch === true ) return; + clearTimeout(delayedHider); // ignore touch behaviour + + } + + graph.killDelayedTimer = function (){ + clearTimeout(delayedHider); + clearTimeout(nodeFreezer); + }; + + + function editElementHoverOut( tbh ){ + if ( hoveredNodeElement ) { + if ( graph.ignoreOtherHoverEvents() === true || tbh === true || hoveredNodeElement.editingTextElement === true ) return; + delayedHider = setTimeout(function (){ + if ( graph.isADraggerActive() === true ) return; + deleteGroupElement.classed("hidden", true); + addDataPropertyGroupElement.classed("hidden", true); + classDragger.hideDragger(true); + if ( hoveredNodeElement && hoveredNodeElement.pinned() === false && graph.paused() === false ) { + hoveredNodeElement.frozen(false); + hoveredNodeElement.locked(false); + } + + }, 1000); + } + if ( hoveredPropertyElement ) { + if ( graph.ignoreOtherHoverEvents() === true || tbh === true || hoveredPropertyElement.editingTextElement === true ) return; + delayedHider = setTimeout(function (){ + if ( graph.isADraggerActive() === true ) return; + deleteGroupElement.classed("hidden", true); + addDataPropertyGroupElement.classed("hidden", true); + classDragger.hideDragger(true); + if ( hoveredPropertyElement && hoveredPropertyElement.pinned() === false && graph.paused() === false ) { + hoveredPropertyElement.frozen(false); + hoveredPropertyElement.locked(false); + } + + }, 1000); + } + } + + graph.activateHoverElementsForProperties = function ( val, property, inversed, touchBehaviour ){ + if ( editMode === false ) return; // nothing to do; + + if ( touchBehaviour === undefined ) + touchBehaviour = false; + + if ( val === true ) { + clearTimeout(delayedHider); + if ( hoveredPropertyElement ) { + if ( hoveredPropertyElement.domain() === hoveredPropertyElement.range() ) { + hoveredPropertyElement.labelObject().increasedLoopAngle = false; + recalculatePositions(); + } + } + + hoveredPropertyElement = property; + if ( graph.options().drawPropertyDraggerOnHover() === true ) { + + + if ( property.type() !== "owl:DatatypeProperty" ) { + if ( property.domain() === property.range() ) { + property.labelObject().increasedLoopAngle = true; + recalculatePositions(); + } + shadowClone.setParentProperty(property, inversed); + rangeDragger.setParentProperty(property, inversed); + rangeDragger.hideDragger(false); + rangeDragger.addMouseEvents(); + domainDragger.setParentProperty(property, inversed); + domainDragger.hideDragger(false); + domainDragger.addMouseEvents(); + + + } else if ( property.type() === "owl:DatatypeProperty" ) { + shadowClone.setParentProperty(property, inversed); + rangeDragger.setParentProperty(property, inversed); + rangeDragger.hideDragger(true); + rangeDragger.addMouseEvents(); + domainDragger.setParentProperty(property, inversed); + domainDragger.hideDragger(false); + domainDragger.addMouseEvents(); + } + } + else { // hide when we dont want that option + if ( graph.options().drawPropertyDraggerOnHover() === true ) { + rangeDragger.hideDragger(true); + domainDragger.hideDragger(true); + shadowClone.hideClone(true); + if ( property.domain() === property.range() ) { + property.labelObject().increasedLoopAngle = false; + recalculatePositions(); + } + } + } + + if ( hoveredNodeElement ) { + if ( hoveredNodeElement && hoveredNodeElement.pinned() === false && graph.paused() === false ) { + hoveredNodeElement.frozen(false); + hoveredNodeElement.locked(false); + } + } + hoveredNodeElement = undefined; + deleteGroupElement.classed("hidden", false); + setDeleteHoverElementPositionProperty(property, inversed); + deleteGroupElement.selectAll("*").on("click", function (){ + if ( touchBehaviour && property.focused() === false ) { + graph.options().focuserModule().handle(property); + return; + } + graph.removePropertyViaEditor(property); + d3.event.stopPropagation(); + }); + classDragger.hideDragger(true); + addDataPropertyGroupElement.classed("hidden", true); + } else { + delayedHiddingHoverElements(); + } + }; + + graph.updateDraggerElements = function (){ + + // set opacity style for all elements + + rangeDragger.draggerObject.classed("superOpacityElement", !graph.options().showDraggerObject()); + domainDragger.draggerObject.classed("superOpacityElement", !graph.options().showDraggerObject()); + classDragger.draggerObject.classed("superOpacityElement", !graph.options().showDraggerObject()); + + nodeContainer.selectAll(".superHiddenElement").classed("superOpacityElement", !graph.options().showDraggerObject()); + labelContainer.selectAll(".superHiddenElement").classed("superOpacityElement", !graph.options().showDraggerObject()); + + deleteGroupElement.selectAll(".superHiddenElement").classed("superOpacityElement", !graph.options().showDraggerObject()); + addDataPropertyGroupElement.selectAll(".superHiddenElement").classed("superOpacityElement", !graph.options().showDraggerObject()); + + + }; + + function setAddDataPropertyHoverElementPosition( node ){ + var delX, delY = 0; + if ( node.renderType() === "round" ) { + var scale = 0.5 * Math.sqrt(2.0); + var oX = scale * node.actualRadius(); + var oY = scale * node.actualRadius(); + delX = node.x - oX; + delY = node.y + oY; + addDataPropertyGroupElement.attr("transform", "translate(" + delX + "," + delY + ")"); + } + } + + function setDeleteHoverElementPosition( node ){ + var delX, delY = 0; + if ( node.renderType() === "round" ) { + var scale = 0.5 * Math.sqrt(2.0); + var oX = scale * node.actualRadius(); + var oY = scale * node.actualRadius(); + delX = node.x + oX; + delY = node.y - oY; + } else { + delX = node.x + 0.5 * node.width() + 6; + delY = node.y - 0.5 * node.height() - 6; + } + deleteGroupElement.attr("transform", "translate(" + delX + "," + delY + ")"); + } + + function setDeleteHoverElementPositionProperty( property, inversed ){ + if ( property && property.labelElement() ) { + var pos = [property.labelObject().x, property.labelObject().y]; + var widthElement = parseFloat(property.getShapeElement().attr("width")); + var heightElement = parseFloat(property.getShapeElement().attr("height")); + var delX = pos[0] + 0.5 * widthElement + 6; + var delY = pos[1] - 0.5 * heightElement - 6; + // this is the lower element + if ( property.labelElement().attr("transform") === "translate(0,15)" ) + delY += 15; + // this is upper element + if ( property.labelElement().attr("transform") === "translate(0,-15)" ) + delY -= 15; + deleteGroupElement.attr("transform", "translate(" + delX + "," + delY + ")"); + } else { + deleteGroupElement.classed("hidden", true);// hide when there is no property + } + + + } + + graph.activateHoverElements = function ( val, node, touchBehaviour ){ + if ( editMode === false ) { + return; // nothing to do; + } + if ( touchBehaviour === undefined ) touchBehaviour = false; + if ( val === true ) { + if ( graph.options().drawPropertyDraggerOnHover() === true ) { + rangeDragger.hideDragger(true); + domainDragger.hideDragger(true); + shadowClone.hideClone(true); + } + // make them visible + clearTimeout(delayedHider); + clearTimeout(nodeFreezer); + if ( hoveredNodeElement && node.pinned() === false && graph.paused() === false ) { + hoveredNodeElement.frozen(false); + hoveredNodeElement.locked(false); + } + hoveredNodeElement = node; + if ( node && node.frozen() === false && node.pinned() === false ) { + node.frozen(true); + node.locked(false); + } + if ( hoveredPropertyElement && hoveredPropertyElement.focused() === false ) { + hoveredPropertyElement.labelObject().increasedLoopAngle = false; + recalculatePositions(); + // update the loopAngles; + + } + hoveredPropertyElement = undefined; + deleteGroupElement.classed("hidden", false); + setDeleteHoverElementPosition(node); + + + deleteGroupElement.selectAll("*").on("click", function (){ + if ( touchBehaviour && node.focused() === false ) { + graph.options().focuserModule().handle(node); + return; + } + graph.removeNodeViaEditor(node); + d3.event.stopPropagation(); + }) + .on("mouseover", function (){ + editElementHoverOn(node, touchBehaviour); + }) + .on("mouseout", function (){ + editElementHoverOut(node, touchBehaviour); + }); + + addDataPropertyGroupElement.classed("hidden", true); + classDragger.nodeElement.on("mouseover", editElementHoverOn) + .on("mouseout", editElementHoverOut); + classDragger.draggerObject.on("mouseover", editElementHoverOnHidden) + .on("mouseout", editElementHoverOutHidden); + + // add the dragger element; + if ( node.renderType() === "round" ) { + classDragger.svgRoot(draggerLayer); + classDragger.setParentNode(node); + classDragger.hideDragger(false); + addDataPropertyGroupElement.classed("hidden", false); + setAddDataPropertyHoverElementPosition(node); + addDataPropertyGroupElement.selectAll("*").on("click", function (){ + if ( touchBehaviour && node.focused() === false ) { + graph.options().focuserModule().handle(node); + return; + } + graph.createDataTypeProperty(node); + d3.event.stopPropagation(); + }) + .on("mouseover", function (){ + editElementHoverOn(node, touchBehaviour); + }) + .on("mouseout", function (){ + editElementHoverOut(node, touchBehaviour); + }); + } else { + classDragger.hideDragger(true); + + } + + } else { + delayedHiddingHoverElements(node, touchBehaviour); + + } + }; + + + return graph; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 58 */ +/***/ (function(module, exports, __webpack_require__) { + + var __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(global, module) {/** + * @license + * Lodash (Custom Build) + * Build: `lodash core -o ./dist/lodash.core.js` + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ + ;(function() { + + /** Used as a safe reference for `undefined` in pre-ES5 environments. */ + var undefined; + + /** Used as the semantic version number. */ + var VERSION = '4.17.15'; + + /** Error message constants. */ + var FUNC_ERROR_TEXT = 'Expected a function'; + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + + /** Used to compose bitmasks for function metadata. */ + var WRAP_BIND_FLAG = 1, + WRAP_PARTIAL_FLAG = 32; + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0, + MAX_SAFE_INTEGER = 9007199254740991; + + /** `Object#toString` result references. */ + var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + asyncTag = '[object AsyncFunction]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + numberTag = '[object Number]', + objectTag = '[object Object]', + proxyTag = '[object Proxy]', + regexpTag = '[object RegExp]', + stringTag = '[object String]'; + + /** Used to match HTML entities and HTML characters. */ + var reUnescapedHtml = /[&<>"']/g, + reHasUnescapedHtml = RegExp(reUnescapedHtml.source); + + /** Used to detect unsigned integer values. */ + var reIsUint = /^(?:0|[1-9]\d*)$/; + + /** Used to map characters to HTML entities. */ + var htmlEscapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' + }; + + /** Detect free variable `global` from Node.js. */ + var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + + /** Detect free variable `self`. */ + var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + + /** Used as a reference to the global object. */ + var root = freeGlobal || freeSelf || Function('return this')(); + + /** Detect free variable `exports`. */ + var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + + /** Detect free variable `module`. */ + var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + + /*--------------------------------------------------------------------------*/ + + /** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ + function arrayPush(array, values) { + array.push.apply(array, values); + return array; + } + + /** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; + } + + /** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ + function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; + } + + /** + * The base implementation of `_.propertyOf` without support for deep paths. + * + * @private + * @param {Object} object The object to query. + * @returns {Function} Returns the new accessor function. + */ + function basePropertyOf(object) { + return function(key) { + return object == null ? undefined : object[key]; + }; + } + + /** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ + function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; + } + + /** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ + function baseValues(object, props) { + return baseMap(props, function(key) { + return object[key]; + }); + } + + /** + * Used by `_.escape` to convert characters to HTML entities. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ + var escapeHtmlChar = basePropertyOf(htmlEscapes); + + /** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ + function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; + } + + /*--------------------------------------------------------------------------*/ + + /** Used for built-in method references. */ + var arrayProto = Array.prototype, + objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** Used to generate unique IDs. */ + var idCounter = 0; + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString = objectProto.toString; + + /** Used to restore the original `_` reference in `_.noConflict`. */ + var oldDash = root._; + + /** Built-in value references. */ + var objectCreate = Object.create, + propertyIsEnumerable = objectProto.propertyIsEnumerable; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeIsFinite = root.isFinite, + nativeKeys = overArg(Object.keys, Object), + nativeMax = Math.max; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` object which wraps `value` to enable implicit method + * chain sequences. Methods that operate on and return arrays, collections, + * and functions can be chained together. Methods that retrieve a single value + * or may return a primitive value will automatically end the chain sequence + * and return the unwrapped value. Otherwise, the value must be unwrapped + * with `_#value`. + * + * Explicit chain sequences, which must be unwrapped with `_#value`, may be + * enabled using `_.chain`. + * + * The execution of chained methods is lazy, that is, it's deferred until + * `_#value` is implicitly or explicitly called. + * + * Lazy evaluation allows several methods to support shortcut fusion. + * Shortcut fusion is an optimization to merge iteratee calls; this avoids + * the creation of intermediate arrays and can greatly reduce the number of + * iteratee executions. Sections of a chain sequence qualify for shortcut + * fusion if the section is applied to an array and iteratees accept only + * one argument. The heuristic for whether a section qualifies for shortcut + * fusion is subject to change. + * + * Chaining is supported in custom builds as long as the `_#value` method is + * directly or indirectly included in the build. + * + * In addition to lodash methods, wrappers have `Array` and `String` methods. + * + * The wrapper `Array` methods are: + * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` + * + * The wrapper `String` methods are: + * `replace` and `split` + * + * The wrapper methods that support shortcut fusion are: + * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, + * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, + * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` + * + * The chainable wrapper methods are: + * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, + * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, + * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, + * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, + * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, + * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, + * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, + * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, + * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, + * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, + * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, + * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, + * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, + * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, + * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, + * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, + * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, + * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, + * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, + * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, + * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, + * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, + * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, + * `zipObject`, `zipObjectDeep`, and `zipWith` + * + * The wrapper methods that are **not** chainable by default are: + * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, + * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, + * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, + * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, + * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, + * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, + * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, + * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, + * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, + * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, + * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, + * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, + * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, + * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, + * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, + * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, + * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, + * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, + * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, + * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, + * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, + * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, + * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, + * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, + * `upperFirst`, `value`, and `words` + * + * @name _ + * @constructor + * @category Seq + * @param {*} value The value to wrap in a `lodash` instance. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var wrapped = _([1, 2, 3]); + * + * // Returns an unwrapped value. + * wrapped.reduce(_.add); + * // => 6 + * + * // Returns a wrapped value. + * var squares = wrapped.map(square); + * + * _.isArray(squares); + * // => false + * + * _.isArray(squares.value()); + * // => true + */ + function lodash(value) { + return value instanceof LodashWrapper + ? value + : new LodashWrapper(value); + } + + /** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} proto The object to inherit from. + * @returns {Object} Returns the new object. + */ + var baseCreate = (function() { + function object() {} + return function(proto) { + if (!isObject(proto)) { + return {}; + } + if (objectCreate) { + return objectCreate(proto); + } + object.prototype = proto; + var result = new object; + object.prototype = undefined; + return result; + }; + }()); + + /** + * The base constructor for creating `lodash` wrapper objects. + * + * @private + * @param {*} value The value to wrap. + * @param {boolean} [chainAll] Enable explicit method chain sequences. + */ + function LodashWrapper(value, chainAll) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__chain__ = !!chainAll; + } + + LodashWrapper.prototype = baseCreate(lodash.prototype); + LodashWrapper.prototype.constructor = LodashWrapper; + + /*------------------------------------------------------------------------*/ + + /** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } + } + + /** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function baseAssignValue(object, key, value) { + object[key] = value; + } + + /** + * The base implementation of `_.delay` and `_.defer` which accepts `args` + * to provide to `func`. + * + * @private + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {Array} args The arguments to provide to `func`. + * @returns {number|Object} Returns the timer id or timeout object. + */ + function baseDelay(func, wait, args) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return setTimeout(function() { func.apply(undefined, args); }, wait); + } + + /** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ + var baseEach = createBaseEach(baseForOwn); + + /** + * The base implementation of `_.every` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false` + */ + function baseEvery(collection, predicate) { + var result = true; + baseEach(collection, function(value, index, collection) { + result = !!predicate(value, index, collection); + return result; + }); + return result; + } + + /** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ + function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? (current === current && !false) + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; + } + + /** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function baseFilter(collection, predicate) { + var result = []; + baseEach(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; + } + + /** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ + function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + arrayPush(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; + } + + /** + * The base implementation of `baseForOwn` which iterates over `object` + * properties returned by `keysFunc` and invokes `iteratee` for each property. + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ + var baseFor = createBaseFor(); + + /** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ + function baseForOwn(object, iteratee) { + return object && baseFor(object, iteratee, keys); + } + + /** + * The base implementation of `_.functions` which creates an array of + * `object` function property names filtered from `props`. + * + * @private + * @param {Object} object The object to inspect. + * @param {Array} props The property names to filter. + * @returns {Array} Returns the function names. + */ + function baseFunctions(object, props) { + return baseFilter(props, function(key) { + return isFunction(object[key]); + }); + } + + /** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + function baseGetTag(value) { + return objectToString(value); + } + + /** + * The base implementation of `_.gt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + */ + function baseGt(value, other) { + return value > other; + } + + /** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ + var baseIsArguments = noop; + + /** + * The base implementation of `_.isDate` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a date object, else `false`. + */ + function baseIsDate(value) { + return isObjectLike(value) && baseGetTag(value) == dateTag; + } + + /** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ + function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); + } + + /** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = objIsArr ? arrayTag : baseGetTag(object), + othTag = othIsArr ? arrayTag : baseGetTag(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + stack || (stack = []); + var objStack = find(stack, function(entry) { + return entry[0] == object; + }); + var othStack = find(stack, function(entry) { + return entry[0] == other; + }); + if (objStack && othStack) { + return objStack[1] == other; + } + stack.push([object, other]); + stack.push([other, object]); + if (isSameTag && !objIsObj) { + var result = (objIsArr) + ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + stack.pop(); + return result; + } + if (!(bitmask & COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + var result = equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + stack.pop(); + return result; + } + } + if (!isSameTag) { + return false; + } + var result = equalObjects(object, other, bitmask, customizer, equalFunc, stack); + stack.pop(); + return result; + } + + /** + * The base implementation of `_.isRegExp` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + */ + function baseIsRegExp(value) { + return isObjectLike(value) && baseGetTag(value) == regexpTag; + } + + /** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ + function baseIteratee(func) { + if (typeof func == 'function') { + return func; + } + if (func == null) { + return identity; + } + return (typeof func == 'object' ? baseMatches : baseProperty)(func); + } + + /** + * The base implementation of `_.lt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + */ + function baseLt(value, other) { + return value < other; + } + + /** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function baseMap(collection, iteratee) { + var index = -1, + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; + } + + /** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ + function baseMatches(source) { + var props = nativeKeys(source); + return function(object) { + var length = props.length; + if (object == null) { + return !length; + } + object = Object(object); + while (length--) { + var key = props[length]; + if (!(key in object && + baseIsEqual(source[key], object[key], COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG) + )) { + return false; + } + } + return true; + }; + } + + /** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @returns {Object} Returns the new object. + */ + function basePick(object, props) { + object = Object(object); + return reduce(props, function(result, key) { + if (key in object) { + result[key] = object[key]; + } + return result; + }, {}); + } + + /** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ + function baseRest(func, start) { + return setToString(overRest(func, start, identity), func + ''); + } + + /** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = end > length ? length : end; + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; + } + + /** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ + function copyArray(source) { + return baseSlice(source, 0, source.length); + } + + /** + * The base implementation of `_.some` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ + function baseSome(collection, predicate) { + var result; + + baseEach(collection, function(value, index, collection) { + result = predicate(value, index, collection); + return !result; + }); + return !!result; + } + + /** + * The base implementation of `wrapperValue` which returns the result of + * performing a sequence of actions on the unwrapped `value`, where each + * successive action is supplied the return value of the previous. + * + * @private + * @param {*} value The unwrapped value. + * @param {Array} actions Actions to perform to resolve the unwrapped value. + * @returns {*} Returns the resolved value. + */ + function baseWrapperValue(value, actions) { + var result = value; + return reduce(actions, function(result, action) { + return action.func.apply(action.thisArg, arrayPush([result], action.args)); + }, result); + } + + /** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ + function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = false; + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = false; + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; + } + + /** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property identifiers to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ + function copyObject(source, props, object, customizer) { + var isNew = !object; + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : undefined; + + if (newValue === undefined) { + newValue = source[key]; + } + if (isNew) { + baseAssignValue(object, key, newValue); + } else { + assignValue(object, key, newValue); + } + } + return object; + } + + /** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ + function createAssigner(assigner) { + return baseRest(function(object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined; + + customizer = (assigner.length > 3 && typeof customizer == 'function') + ? (length--, customizer) + : undefined; + + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); + } + + /** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!isArrayLike(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; + } + + /** + * Creates a base function for methods like `_.forIn` and `_.forOwn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; + + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; + } + + /** + * Creates a function that produces an instance of `Ctor` regardless of + * whether it was invoked as part of a `new` expression or by `call` or `apply`. + * + * @private + * @param {Function} Ctor The constructor to wrap. + * @returns {Function} Returns the new wrapped function. + */ + function createCtor(Ctor) { + return function() { + // Use a `switch` statement to work with class constructors. See + // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist + // for more details. + var args = arguments; + var thisBinding = baseCreate(Ctor.prototype), + result = Ctor.apply(thisBinding, args); + + // Mimic the constructor's `return` behavior. + // See https://es5.github.io/#x13.2.2 for more details. + return isObject(result) ? result : thisBinding; + }; + } + + /** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ + function createFind(findIndexFunc) { + return function(collection, predicate, fromIndex) { + var iterable = Object(collection); + if (!isArrayLike(collection)) { + var iteratee = baseIteratee(predicate, 3); + collection = keys(collection); + predicate = function(key) { return iteratee(iterable[key], key, iterable); }; + } + var index = findIndexFunc(collection, predicate, fromIndex); + return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; + }; + } + + /** + * Creates a function that wraps `func` to invoke it with the `this` binding + * of `thisArg` and `partials` prepended to the arguments it receives. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} partials The arguments to prepend to those provided to + * the new function. + * @returns {Function} Returns the new wrapped function. + */ + function createPartial(func, bitmask, thisArg, partials) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + var isBind = bitmask & WRAP_BIND_FLAG, + Ctor = createCtor(func); + + function wrapper() { + var argsIndex = -1, + argsLength = arguments.length, + leftIndex = -1, + leftLength = partials.length, + args = Array(leftLength + argsLength), + fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + + while (++leftIndex < leftLength) { + args[leftIndex] = partials[leftIndex]; + } + while (argsLength--) { + args[leftIndex++] = arguments[++argsIndex]; + } + return fn.apply(isBind ? thisArg : this, args); + } + return wrapper; + } + + /** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ + function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? [] : undefined; + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + var compared; + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!baseSome(other, function(othValue, othIndex) { + if (!indexOf(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + return result; + } + + /** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return eq(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + } + return false; + } + + /** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + objProps = keys(object), + objLength = objProps.length, + othProps = keys(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { + return false; + } + } + var result = true; + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + var compared; + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + return result; + } + + /** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ + function flatRest(func) { + return setToString(overRest(func, undefined, flatten), func + ''); + } + + /** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ + function isFlattenable(value) { + return isArray(value) || isArguments(value); + } + + /** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ + function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); + } + + /** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ + function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object) + ) { + return eq(object[index], value); + } + return false; + } + + /** + * This function is like + * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * except that it includes inherited enumerable properties. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function nativeKeysIn(object) { + var result = []; + if (object != null) { + for (var key in Object(object)) { + result.push(key); + } + } + return result; + } + + /** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ + function objectToString(value) { + return nativeObjectToString.call(value); + } + + /** + * A specialized version of `baseRest` which transforms the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @param {Function} transform The rest array transform. + * @returns {Function} Returns the new function. + */ + function overRest(func, start, transform) { + start = nativeMax(start === undefined ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = transform(array); + return func.apply(this, otherArgs); + }; + } + + /** + * Sets the `toString` method of `func` to return `string`. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ + var setToString = identity; + + /*------------------------------------------------------------------------*/ + + /** + * Creates an array with all falsey values removed. The values `false`, `null`, + * `0`, `""`, `undefined`, and `NaN` are falsey. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to compact. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.compact([0, 1, false, 2, '', 3]); + * // => [1, 2, 3] + */ + function compact(array) { + return baseFilter(array, Boolean); + } + + /** + * Creates a new array concatenating `array` with any additional arrays + * and/or values. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to concatenate. + * @param {...*} [values] The values to concatenate. + * @returns {Array} Returns the new concatenated array. + * @example + * + * var array = [1]; + * var other = _.concat(array, 2, [3], [[4]]); + * + * console.log(other); + * // => [1, 2, 3, [4]] + * + * console.log(array); + * // => [1] + */ + function concat() { + var length = arguments.length; + if (!length) { + return []; + } + var args = Array(length - 1), + array = arguments[0], + index = length; + + while (index--) { + args[index - 1] = arguments[index]; + } + return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); + } + + /** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ + function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return baseFindIndex(array, baseIteratee(predicate, 3), index); + } + + /** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ + function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, 1) : []; + } + + /** + * Recursively flattens `array`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flattenDeep([1, [2, [3, [4]], 5]]); + * // => [1, 2, 3, 4, 5] + */ + function flattenDeep(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, INFINITY) : []; + } + + /** + * Gets the first element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias first + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the first element of `array`. + * @example + * + * _.head([1, 2, 3]); + * // => 1 + * + * _.head([]); + * // => undefined + */ + function head(array) { + return (array && array.length) ? array[0] : undefined; + } + + /** + * Gets the index at which the first occurrence of `value` is found in `array` + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. If `fromIndex` is negative, it's used as the + * offset from the end of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.indexOf([1, 2, 1, 2], 2); + * // => 1 + * + * // Search from the `fromIndex`. + * _.indexOf([1, 2, 1, 2], 2, 2); + * // => 3 + */ + function indexOf(array, value, fromIndex) { + var length = array == null ? 0 : array.length; + if (typeof fromIndex == 'number') { + fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : fromIndex; + } else { + fromIndex = 0; + } + var index = (fromIndex || 0) - 1, + isReflexive = value === value; + + while (++index < length) { + var other = array[index]; + if ((isReflexive ? other === value : other !== other)) { + return index; + } + } + return -1; + } + + /** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ + function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; + } + + /** + * Creates a slice of `array` from `start` up to, but not including, `end`. + * + * **Note:** This method is used instead of + * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are + * returned. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function slice(array, start, end) { + var length = array == null ? 0 : array.length; + start = start == null ? 0 : +start; + end = end === undefined ? length : +end; + return length ? baseSlice(array, start, end) : []; + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` wrapper instance that wraps `value` with explicit method + * chain sequences enabled. The result of such sequences must be unwrapped + * with `_#value`. + * + * @static + * @memberOf _ + * @since 1.3.0 + * @category Seq + * @param {*} value The value to wrap. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'pebbles', 'age': 1 } + * ]; + * + * var youngest = _ + * .chain(users) + * .sortBy('age') + * .map(function(o) { + * return o.user + ' is ' + o.age; + * }) + * .head() + * .value(); + * // => 'pebbles is 1' + */ + function chain(value) { + var result = lodash(value); + result.__chain__ = true; + return result; + } + + /** + * This method invokes `interceptor` and returns `value`. The interceptor + * is invoked with one argument; (value). The purpose of this method is to + * "tap into" a method chain sequence in order to modify intermediate results. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns `value`. + * @example + * + * _([1, 2, 3]) + * .tap(function(array) { + * // Mutate input array. + * array.pop(); + * }) + * .reverse() + * .value(); + * // => [2, 1] + */ + function tap(value, interceptor) { + interceptor(value); + return value; + } + + /** + * This method is like `_.tap` except that it returns the result of `interceptor`. + * The purpose of this method is to "pass thru" values replacing intermediate + * results in a method chain sequence. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns the result of `interceptor`. + * @example + * + * _(' abc ') + * .chain() + * .trim() + * .thru(function(value) { + * return [value]; + * }) + * .value(); + * // => ['abc'] + */ + function thru(value, interceptor) { + return interceptor(value); + } + + /** + * Creates a `lodash` wrapper instance with explicit method chain sequences enabled. + * + * @name chain + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * // A sequence without explicit chaining. + * _(users).head(); + * // => { 'user': 'barney', 'age': 36 } + * + * // A sequence with explicit chaining. + * _(users) + * .chain() + * .head() + * .pick('user') + * .value(); + * // => { 'user': 'barney' } + */ + function wrapperChain() { + return chain(this); + } + + /** + * Executes the chain sequence to resolve the unwrapped value. + * + * @name value + * @memberOf _ + * @since 0.1.0 + * @alias toJSON, valueOf + * @category Seq + * @returns {*} Returns the resolved unwrapped value. + * @example + * + * _([1, 2, 3]).value(); + * // => [1, 2, 3] + */ + function wrapperValue() { + return baseWrapperValue(this.__wrapped__, this.__actions__); + } + + /*------------------------------------------------------------------------*/ + + /** + * Checks if `predicate` returns truthy for **all** elements of `collection`. + * Iteration is stopped once `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * **Note:** This method returns `true` for + * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because + * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of + * elements of empty collections. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + * @example + * + * _.every([true, 1, null, 'yes'], Boolean); + * // => false + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.every(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.every(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.every(users, 'active'); + * // => false + */ + function every(collection, predicate, guard) { + predicate = guard ? undefined : predicate; + return baseEvery(collection, baseIteratee(predicate)); + } + + /** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + */ + function filter(collection, predicate) { + return baseFilter(collection, baseIteratee(predicate)); + } + + /** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ + var find = createFind(findIndex); + + /** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ + function forEach(collection, iteratee) { + return baseEach(collection, baseIteratee(iteratee)); + } + + /** + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ + function map(collection, iteratee) { + return baseMap(collection, baseIteratee(iteratee)); + } + + /** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ + function reduce(collection, iteratee, accumulator) { + return baseReduce(collection, baseIteratee(iteratee), accumulator, arguments.length < 3, baseEach); + } + + /** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable string keyed properties for objects. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ + function size(collection) { + if (collection == null) { + return 0; + } + collection = isArrayLike(collection) ? collection : nativeKeys(collection); + return collection.length; + } + + /** + * Checks if `predicate` returns truthy for **any** element of `collection`. + * Iteration is stopped once `predicate` returns truthy. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + * @example + * + * _.some([null, 0, 'yes', false], Boolean); + * // => true + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.some(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.some(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.some(users, 'active'); + * // => true + */ + function some(collection, predicate, guard) { + predicate = guard ? undefined : predicate; + return baseSome(collection, baseIteratee(predicate)); + } + + /** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + * The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, [function(o) { return o.user; }]); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]] + */ + function sortBy(collection, iteratee) { + var index = 0; + iteratee = baseIteratee(iteratee); + + return baseMap(baseMap(collection, function(value, key, collection) { + return { 'value': value, 'index': index++, 'criteria': iteratee(value, key, collection) }; + }).sort(function(object, other) { + return compareAscending(object.criteria, other.criteria) || (object.index - other.index); + }), baseProperty('value')); + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates a function that invokes `func`, with the `this` binding and arguments + * of the created function, while it's called less than `n` times. Subsequent + * calls to the created function return the result of the last `func` invocation. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {number} n The number of calls at which `func` is no longer invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * jQuery(element).on('click', _.before(5, addContactToList)); + * // => Allows adding up to 4 contacts to the list. + */ + function before(n, func) { + var result; + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + n = toInteger(n); + return function() { + if (--n > 0) { + result = func.apply(this, arguments); + } + if (n <= 1) { + func = undefined; + } + return result; + }; + } + + /** + * Creates a function that invokes `func` with the `this` binding of `thisArg` + * and `partials` prepended to the arguments it receives. + * + * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for partially applied arguments. + * + * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" + * property of bound functions. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to bind. + * @param {*} thisArg The `this` binding of `func`. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * function greet(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * } + * + * var object = { 'user': 'fred' }; + * + * var bound = _.bind(greet, object, 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * // Bound with placeholders. + * var bound = _.bind(greet, object, _, '!'); + * bound('hi'); + * // => 'hi fred!' + */ + var bind = baseRest(function(func, thisArg, partials) { + return createPartial(func, WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG, thisArg, partials); + }); + + /** + * Defers invoking the `func` until the current call stack has cleared. Any + * additional arguments are provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to defer. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.defer(function(text) { + * console.log(text); + * }, 'deferred'); + * // => Logs 'deferred' after one millisecond. + */ + var defer = baseRest(function(func, args) { + return baseDelay(func, 1, args); + }); + + /** + * Invokes `func` after `wait` milliseconds. Any additional arguments are + * provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.delay(function(text) { + * console.log(text); + * }, 1000, 'later'); + * // => Logs 'later' after one second. + */ + var delay = baseRest(function(func, wait, args) { + return baseDelay(func, toNumber(wait) || 0, args); + }); + + /** + * Creates a function that negates the result of the predicate `func`. The + * `func` predicate is invoked with the `this` binding and arguments of the + * created function. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} predicate The predicate to negate. + * @returns {Function} Returns the new negated function. + * @example + * + * function isEven(n) { + * return n % 2 == 0; + * } + * + * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); + * // => [1, 3, 5] + */ + function negate(predicate) { + if (typeof predicate != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return function() { + var args = arguments; + return !predicate.apply(this, args); + }; + } + + /** + * Creates a function that is restricted to invoking `func` once. Repeat calls + * to the function return the value of the first invocation. The `func` is + * invoked with the `this` binding and arguments of the created function. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var initialize = _.once(createApplication); + * initialize(); + * initialize(); + * // => `createApplication` is invoked once + */ + function once(func) { + return before(2, func); + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates a shallow clone of `value`. + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) + * and supports cloning arrays, array buffers, booleans, date objects, maps, + * numbers, `Object` objects, regexes, sets, strings, symbols, and typed + * arrays. The own enumerable properties of `arguments` objects are cloned + * as plain objects. An empty object is returned for uncloneable values such + * as error objects, functions, DOM nodes, and WeakMaps. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to clone. + * @returns {*} Returns the cloned value. + * @see _.cloneDeep + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var shallow = _.clone(objects); + * console.log(shallow[0] === objects[0]); + * // => true + */ + function clone(value) { + if (!isObject(value)) { + return value; + } + return isArray(value) ? copyArray(value) : copyObject(value, nativeKeys(value)); + } + + /** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ + function eq(value, other) { + return value === other || (value !== value && other !== other); + } + + /** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ + var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { + return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); + }; + + /** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ + var isArray = Array.isArray; + + /** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ + function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); + } + + /** + * Checks if `value` is classified as a boolean primitive or object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. + * @example + * + * _.isBoolean(false); + * // => true + * + * _.isBoolean(null); + * // => false + */ + function isBoolean(value) { + return value === true || value === false || + (isObjectLike(value) && baseGetTag(value) == boolTag); + } + + /** + * Checks if `value` is classified as a `Date` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a date object, else `false`. + * @example + * + * _.isDate(new Date); + * // => true + * + * _.isDate('Mon April 23 2012'); + * // => false + */ + var isDate = baseIsDate; + + /** + * Checks if `value` is an empty object, collection, map, or set. + * + * Objects are considered empty if they have no own enumerable string keyed + * properties. + * + * Array-like values such as `arguments` objects, arrays, buffers, strings, or + * jQuery-like collections are considered empty if they have a `length` of `0`. + * Similarly, maps and sets are considered empty if they have a `size` of `0`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is empty, else `false`. + * @example + * + * _.isEmpty(null); + * // => true + * + * _.isEmpty(true); + * // => true + * + * _.isEmpty(1); + * // => true + * + * _.isEmpty([1, 2, 3]); + * // => false + * + * _.isEmpty({ 'a': 1 }); + * // => false + */ + function isEmpty(value) { + if (isArrayLike(value) && + (isArray(value) || isString(value) || + isFunction(value.splice) || isArguments(value))) { + return !value.length; + } + return !nativeKeys(value).length; + } + + /** + * Performs a deep comparison between two values to determine if they are + * equivalent. + * + * **Note:** This method supports comparing arrays, array buffers, booleans, + * date objects, error objects, maps, numbers, `Object` objects, regexes, + * sets, strings, symbols, and typed arrays. `Object` objects are compared + * by their own, not inherited, enumerable properties. Functions and DOM + * nodes are compared by strict equality, i.e. `===`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.isEqual(object, other); + * // => true + * + * object === other; + * // => false + */ + function isEqual(value, other) { + return baseIsEqual(value, other); + } + + /** + * Checks if `value` is a finite primitive number. + * + * **Note:** This method is based on + * [`Number.isFinite`](https://mdn.io/Number/isFinite). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. + * @example + * + * _.isFinite(3); + * // => true + * + * _.isFinite(Number.MIN_VALUE); + * // => true + * + * _.isFinite(Infinity); + * // => false + * + * _.isFinite('3'); + * // => false + */ + function isFinite(value) { + return typeof value == 'number' && nativeIsFinite(value); + } + + /** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ + function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; + } + + /** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ + function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; + } + + /** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ + function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); + } + + /** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ + function isObjectLike(value) { + return value != null && typeof value == 'object'; + } + + /** + * Checks if `value` is `NaN`. + * + * **Note:** This method is based on + * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as + * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for + * `undefined` and other non-number values. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + * @example + * + * _.isNaN(NaN); + * // => true + * + * _.isNaN(new Number(NaN)); + * // => true + * + * isNaN(undefined); + * // => true + * + * _.isNaN(undefined); + * // => false + */ + function isNaN(value) { + // An `NaN` primitive is the only value that is not equal to itself. + // Perform the `toStringTag` check first to avoid errors with some + // ActiveX objects in IE. + return isNumber(value) && value != +value; + } + + /** + * Checks if `value` is `null`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `null`, else `false`. + * @example + * + * _.isNull(null); + * // => true + * + * _.isNull(void 0); + * // => false + */ + function isNull(value) { + return value === null; + } + + /** + * Checks if `value` is classified as a `Number` primitive or object. + * + * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are + * classified as numbers, use the `_.isFinite` method. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a number, else `false`. + * @example + * + * _.isNumber(3); + * // => true + * + * _.isNumber(Number.MIN_VALUE); + * // => true + * + * _.isNumber(Infinity); + * // => true + * + * _.isNumber('3'); + * // => false + */ + function isNumber(value) { + return typeof value == 'number' || + (isObjectLike(value) && baseGetTag(value) == numberTag); + } + + /** + * Checks if `value` is classified as a `RegExp` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + * @example + * + * _.isRegExp(/abc/); + * // => true + * + * _.isRegExp('/abc/'); + * // => false + */ + var isRegExp = baseIsRegExp; + + /** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ + function isString(value) { + return typeof value == 'string' || + (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); + } + + /** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ + function isUndefined(value) { + return value === undefined; + } + + /** + * Converts `value` to an array. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to convert. + * @returns {Array} Returns the converted array. + * @example + * + * _.toArray({ 'a': 1, 'b': 2 }); + * // => [1, 2] + * + * _.toArray('abc'); + * // => ['a', 'b', 'c'] + * + * _.toArray(1); + * // => [] + * + * _.toArray(null); + * // => [] + */ + function toArray(value) { + if (!isArrayLike(value)) { + return values(value); + } + return value.length ? copyArray(value) : []; + } + + /** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ + var toInteger = Number; + + /** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ + var toNumber = Number; + + /** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ + function toString(value) { + if (typeof value == 'string') { + return value; + } + return value == null ? '' : (value + ''); + } + + /*------------------------------------------------------------------------*/ + + /** + * Assigns own enumerable string keyed properties of source objects to the + * destination object. Source objects are applied from left to right. + * Subsequent sources overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object` and is loosely based on + * [`Object.assign`](https://mdn.io/Object/assign). + * + * @static + * @memberOf _ + * @since 0.10.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assignIn + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assign({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'c': 3 } + */ + var assign = createAssigner(function(object, source) { + copyObject(source, nativeKeys(source), object); + }); + + /** + * This method is like `_.assign` except that it iterates over own and + * inherited source properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias extend + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assign + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assignIn({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } + */ + var assignIn = createAssigner(function(object, source) { + copyObject(source, nativeKeysIn(source), object); + }); + + /** + * Creates an object that inherits from the `prototype` object. If a + * `properties` object is given, its own enumerable string keyed properties + * are assigned to the created object. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Object + * @param {Object} prototype The object to inherit from. + * @param {Object} [properties] The properties to assign to the object. + * @returns {Object} Returns the new object. + * @example + * + * function Shape() { + * this.x = 0; + * this.y = 0; + * } + * + * function Circle() { + * Shape.call(this); + * } + * + * Circle.prototype = _.create(Shape.prototype, { + * 'constructor': Circle + * }); + * + * var circle = new Circle; + * circle instanceof Circle; + * // => true + * + * circle instanceof Shape; + * // => true + */ + function create(prototype, properties) { + var result = baseCreate(prototype); + return properties == null ? result : assign(result, properties); + } + + /** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ + var defaults = baseRest(function(object, sources) { + object = Object(object); + + var index = -1; + var length = sources.length; + var guard = length > 2 ? sources[2] : undefined; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = keysIn(source); + var propsIndex = -1; + var propsLength = props.length; + + while (++propsIndex < propsLength) { + var key = props[propsIndex]; + var value = object[key]; + + if (value === undefined || + (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; + }); + + /** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ + function has(object, path) { + return object != null && hasOwnProperty.call(object, path); + } + + /** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ + var keys = nativeKeys; + + /** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ + var keysIn = nativeKeysIn; + + /** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ + var pick = flatRest(function(object, paths) { + return object == null ? {} : basePick(object, paths); + }); + + /** + * This method is like `_.get` except that if the resolved value is a + * function it's invoked with the `this` binding of its parent object and + * its result is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to resolve. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; + * + * _.result(object, 'a[0].b.c1'); + * // => 3 + * + * _.result(object, 'a[0].b.c2'); + * // => 4 + * + * _.result(object, 'a[0].b.c3', 'default'); + * // => 'default' + * + * _.result(object, 'a[0].b.c3', _.constant('default')); + * // => 'default' + */ + function result(object, path, defaultValue) { + var value = object == null ? undefined : object[path]; + if (value === undefined) { + value = defaultValue; + } + return isFunction(value) ? value.call(object) : value; + } + + /** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ + function values(object) { + return object == null ? [] : baseValues(object, keys(object)); + } + + /*------------------------------------------------------------------------*/ + + /** + * Converts the characters "&", "<", ">", '"', and "'" in `string` to their + * corresponding HTML entities. + * + * **Note:** No other characters are escaped. To escape additional + * characters use a third-party library like [_he_](https://mths.be/he). + * + * Though the ">" character is escaped for symmetry, characters like + * ">" and "/" don't need escaping in HTML and have no special meaning + * unless they're part of a tag or unquoted attribute value. See + * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) + * (under "semi-related fun fact") for more details. + * + * When working with HTML you should always + * [quote attribute values](http://wonko.com/post/html-escaping) to reduce + * XSS vectors. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escape('fred, barney, & pebbles'); + * // => 'fred, barney, & pebbles' + */ + function escape(string) { + string = toString(string); + return (string && reHasUnescapedHtml.test(string)) + ? string.replace(reUnescapedHtml, escapeHtmlChar) + : string; + } + + /*------------------------------------------------------------------------*/ + + /** + * This method returns the first argument it receives. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'a': 1 }; + * + * console.log(_.identity(object) === object); + * // => true + */ + function identity(value) { + return value; + } + + /** + * Creates a function that invokes `func` with the arguments of the created + * function. If `func` is a property name, the created function returns the + * property value for a given element. If `func` is an array or object, the + * created function returns `true` for elements that contain the equivalent + * source properties, otherwise it returns `false`. + * + * @static + * @since 4.0.0 + * @memberOf _ + * @category Util + * @param {*} [func=_.identity] The value to convert to a callback. + * @returns {Function} Returns the callback. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true })); + * // => [{ 'user': 'barney', 'age': 36, 'active': true }] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, _.iteratee(['user', 'fred'])); + * // => [{ 'user': 'fred', 'age': 40 }] + * + * // The `_.property` iteratee shorthand. + * _.map(users, _.iteratee('user')); + * // => ['barney', 'fred'] + * + * // Create custom iteratee shorthands. + * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) { + * return !_.isRegExp(func) ? iteratee(func) : function(string) { + * return func.test(string); + * }; + * }); + * + * _.filter(['abc', 'def'], /ef/); + * // => ['def'] + */ + var iteratee = baseIteratee; + + /** + * Creates a function that performs a partial deep comparison between a given + * object and `source`, returning `true` if the given object has equivalent + * property values, else `false`. + * + * **Note:** The created function is equivalent to `_.isMatch` with `source` + * partially applied. + * + * Partial comparisons will match empty array and empty object `source` + * values against any array or object value, respectively. See `_.isEqual` + * for a list of supported value comparisons. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Util + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + * @example + * + * var objects = [ + * { 'a': 1, 'b': 2, 'c': 3 }, + * { 'a': 4, 'b': 5, 'c': 6 } + * ]; + * + * _.filter(objects, _.matches({ 'a': 4, 'c': 6 })); + * // => [{ 'a': 4, 'b': 5, 'c': 6 }] + */ + function matches(source) { + return baseMatches(assign({}, source)); + } + + /** + * Adds all own enumerable string keyed function properties of a source + * object to the destination object. If `object` is a function, then methods + * are added to its prototype as well. + * + * **Note:** Use `_.runInContext` to create a pristine `lodash` function to + * avoid conflicts caused by modifying the original. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {Function|Object} [object=lodash] The destination object. + * @param {Object} source The object of functions to add. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.chain=true] Specify whether mixins are chainable. + * @returns {Function|Object} Returns `object`. + * @example + * + * function vowels(string) { + * return _.filter(string, function(v) { + * return /[aeiou]/i.test(v); + * }); + * } + * + * _.mixin({ 'vowels': vowels }); + * _.vowels('fred'); + * // => ['e'] + * + * _('fred').vowels().value(); + * // => ['e'] + * + * _.mixin({ 'vowels': vowels }, { 'chain': false }); + * _('fred').vowels(); + * // => ['e'] + */ + function mixin(object, source, options) { + var props = keys(source), + methodNames = baseFunctions(source, props); + + if (options == null && + !(isObject(source) && (methodNames.length || !props.length))) { + options = source; + source = object; + object = this; + methodNames = baseFunctions(source, keys(source)); + } + var chain = !(isObject(options) && 'chain' in options) || !!options.chain, + isFunc = isFunction(object); + + baseEach(methodNames, function(methodName) { + var func = source[methodName]; + object[methodName] = func; + if (isFunc) { + object.prototype[methodName] = function() { + var chainAll = this.__chain__; + if (chain || chainAll) { + var result = object(this.__wrapped__), + actions = result.__actions__ = copyArray(this.__actions__); + + actions.push({ 'func': func, 'args': arguments, 'thisArg': object }); + result.__chain__ = chainAll; + return result; + } + return func.apply(object, arrayPush([this.value()], arguments)); + }; + } + }); + + return object; + } + + /** + * Reverts the `_` variable to its previous value and returns a reference to + * the `lodash` function. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @returns {Function} Returns the `lodash` function. + * @example + * + * var lodash = _.noConflict(); + */ + function noConflict() { + if (root._ === this) { + root._ = oldDash; + } + return this; + } + + /** + * This method returns `undefined`. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example + * + * _.times(2, _.noop); + * // => [undefined, undefined] + */ + function noop() { + // No operation performed. + } + + /** + * Generates a unique ID. If `prefix` is given, the ID is appended to it. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {string} [prefix=''] The value to prefix the ID with. + * @returns {string} Returns the unique ID. + * @example + * + * _.uniqueId('contact_'); + * // => 'contact_104' + * + * _.uniqueId(); + * // => '105' + */ + function uniqueId(prefix) { + var id = ++idCounter; + return toString(prefix) + id; + } + + /*------------------------------------------------------------------------*/ + + /** + * Computes the maximum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the maximum value. + * @example + * + * _.max([4, 2, 8, 6]); + * // => 8 + * + * _.max([]); + * // => undefined + */ + function max(array) { + return (array && array.length) + ? baseExtremum(array, identity, baseGt) + : undefined; + } + + /** + * Computes the minimum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the minimum value. + * @example + * + * _.min([4, 2, 8, 6]); + * // => 2 + * + * _.min([]); + * // => undefined + */ + function min(array) { + return (array && array.length) + ? baseExtremum(array, identity, baseLt) + : undefined; + } + + /*------------------------------------------------------------------------*/ + + // Add methods that return wrapped values in chain sequences. + lodash.assignIn = assignIn; + lodash.before = before; + lodash.bind = bind; + lodash.chain = chain; + lodash.compact = compact; + lodash.concat = concat; + lodash.create = create; + lodash.defaults = defaults; + lodash.defer = defer; + lodash.delay = delay; + lodash.filter = filter; + lodash.flatten = flatten; + lodash.flattenDeep = flattenDeep; + lodash.iteratee = iteratee; + lodash.keys = keys; + lodash.map = map; + lodash.matches = matches; + lodash.mixin = mixin; + lodash.negate = negate; + lodash.once = once; + lodash.pick = pick; + lodash.slice = slice; + lodash.sortBy = sortBy; + lodash.tap = tap; + lodash.thru = thru; + lodash.toArray = toArray; + lodash.values = values; + + // Add aliases. + lodash.extend = assignIn; + + // Add methods to `lodash.prototype`. + mixin(lodash, lodash); + + /*------------------------------------------------------------------------*/ + + // Add methods that return unwrapped values in chain sequences. + lodash.clone = clone; + lodash.escape = escape; + lodash.every = every; + lodash.find = find; + lodash.forEach = forEach; + lodash.has = has; + lodash.head = head; + lodash.identity = identity; + lodash.indexOf = indexOf; + lodash.isArguments = isArguments; + lodash.isArray = isArray; + lodash.isBoolean = isBoolean; + lodash.isDate = isDate; + lodash.isEmpty = isEmpty; + lodash.isEqual = isEqual; + lodash.isFinite = isFinite; + lodash.isFunction = isFunction; + lodash.isNaN = isNaN; + lodash.isNull = isNull; + lodash.isNumber = isNumber; + lodash.isObject = isObject; + lodash.isRegExp = isRegExp; + lodash.isString = isString; + lodash.isUndefined = isUndefined; + lodash.last = last; + lodash.max = max; + lodash.min = min; + lodash.noConflict = noConflict; + lodash.noop = noop; + lodash.reduce = reduce; + lodash.result = result; + lodash.size = size; + lodash.some = some; + lodash.uniqueId = uniqueId; + + // Add aliases. + lodash.each = forEach; + lodash.first = head; + + mixin(lodash, (function() { + var source = {}; + baseForOwn(lodash, function(func, methodName) { + if (!hasOwnProperty.call(lodash.prototype, methodName)) { + source[methodName] = func; + } + }); + return source; + }()), { 'chain': false }); + + /*------------------------------------------------------------------------*/ + + /** + * The semantic version number. + * + * @static + * @memberOf _ + * @type {string} + */ + lodash.VERSION = VERSION; + + // Add `Array` methods to `lodash.prototype`. + baseEach(['pop', 'join', 'replace', 'reverse', 'split', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) { + var func = (/^(?:replace|split)$/.test(methodName) ? String.prototype : arrayProto)[methodName], + chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru', + retUnwrapped = /^(?:pop|join|replace|shift)$/.test(methodName); + + lodash.prototype[methodName] = function() { + var args = arguments; + if (retUnwrapped && !this.__chain__) { + var value = this.value(); + return func.apply(isArray(value) ? value : [], args); + } + return this[chainName](function(value) { + return func.apply(isArray(value) ? value : [], args); + }); + }; + }); + + // Add chain sequence methods to the `lodash` wrapper. + lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue; + + /*--------------------------------------------------------------------------*/ + + // Some AMD build optimizers, like r.js, check for condition patterns like: + if (true) { + // Expose Lodash on the global object to prevent errors when Lodash is + // loaded by a script tag in the presence of an AMD loader. + // See http://requirejs.org/docs/errors.html#mismatch for more details. + // Use `_.noConflict` to remove Lodash from the global object. + root._ = lodash; + + // Define as an anonymous module so, through path mapping, it can be + // referenced as the "underscore" module. + !(__WEBPACK_AMD_DEFINE_RESULT__ = function() { + return lodash; + }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + } + // Check for `exports` after `define` in case a build optimizer adds it. + else if (freeModule) { + // Export for Node.js. + (freeModule.exports = lodash)._ = lodash; + // Export for CommonJS support. + freeExports._ = lodash; + } + else { + // Export to the global object. + root._ = lodash; + } + }.call(this)); + + /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()), __webpack_require__(59)(module))) + +/***/ }), +/* 59 */ +/***/ (function(module, exports) { + + module.exports = function(module) { + if(!module.webpackPolyfill) { + module.deprecate = function() {}; + module.paths = []; + // module.parent = undefined by default + module.children = []; + module.webpackPolyfill = 1; + } + return module; + } + + +/***/ }), +/* 60 */ +/***/ (function(module, exports, __webpack_require__) { + + var ArrowLink = __webpack_require__(61); + var BoxArrowLink = __webpack_require__(22); + var PlainLink = __webpack_require__(23); + var OwlDisjointWith = __webpack_require__(46); + var SetOperatorProperty = __webpack_require__(56); + + /** + * Stores the passed properties in links. + * @returns {Function} + */ + module.exports = (function (){ + var linkCreator = {}; + + /** + * Creates links from the passed properties. + * @param properties + */ + linkCreator.createLinks = function ( properties ){ + var links = groupPropertiesToLinks(properties); + + for ( var i = 0, l = links.length; i < l; i++ ) { + var link = links[i]; + + countAndSetLayers(link, links); + countAndSetLoops(link, links); + } + + return links; + }; + + /** + * Creates links of properties and - if existing - their inverses. + * @param properties the properties + * @returns {Array} + */ + function groupPropertiesToLinks( properties ){ + var links = [], + property, + addedProperties = __webpack_require__(62)(); + + for ( var i = 0, l = properties.length; i < l; i++ ) { + property = properties[i]; + + if ( !addedProperties.has(property) ) { + var link = createLink(property); + + property.link(link); + if ( property.inverse() ) { + property.inverse().link(link); + } + + links.push(link); + + addedProperties.add(property); + if ( property.inverse() ) { + addedProperties.add(property.inverse()); + } + } + } + + return links; + } + + function countAndSetLayers( link, allLinks ){ + var layer, + layers, + i, l; + + if ( typeof link.layers() === "undefined" ) { + layers = []; + + // Search for other links that are another layer + for ( i = 0, l = allLinks.length; i < l; i++ ) { + var otherLink = allLinks[i]; + if ( link.domain() === otherLink.domain() && link.range() === otherLink.range() || + link.domain() === otherLink.range() && link.range() === otherLink.domain() ) { + layers.push(otherLink); + } + } + + // Set the results on each of the layers + for ( i = 0, l = layers.length; i < l; ++i ) { + layer = layers[i]; + + layer.layerIndex(i); + layer.layers(layers); + } + } + } + + function countAndSetLoops( link, allLinks ){ + var loop, + loops, + i, l; + + if ( typeof link.loops() === "undefined" ) { + loops = []; + + // Search for other links that are also loops of the same node + for ( i = 0, l = allLinks.length; i < l; i++ ) { + var otherLink = allLinks[i]; + if ( link.domain() === otherLink.domain() && link.domain() === otherLink.range() ) { + loops.push(otherLink); + } + } + + // Set the results on each of the loops + for ( i = 0, l = loops.length; i < l; ++i ) { + loop = loops[i]; + + loop.loopIndex(i); + loop.loops(loops); + } + } + } + + function createLink( property ){ + var domain = property.domain(); + var range = property.range(); + + if ( property instanceof OwlDisjointWith ) { + return new PlainLink(domain, range, property); + } else if ( property instanceof SetOperatorProperty ) { + return new BoxArrowLink(domain, range, property); + } + return new ArrowLink(domain, range, property); + } + + return function (){ + // Return a function to keep module interfaces consistent + return linkCreator; + }; + })(); + + +/***/ }), +/* 61 */ +/***/ (function(module, exports, __webpack_require__) { + + var PlainLink = __webpack_require__(23); + + + module.exports = ArrowLink; + + function ArrowLink( domain, range, property ){ + PlainLink.apply(this, arguments); + } + + ArrowLink.prototype = Object.create(PlainLink.prototype); + ArrowLink.prototype.constructor = ArrowLink; + + + ArrowLink.prototype.draw = function ( linkGroup, markerContainer ){ + var property = this.label().property(); + var inverse = this.label().inverse(); + + createPropertyMarker(markerContainer, property); + if ( inverse ) { + createInverseMarker(markerContainer, inverse); + } + + PlainLink.prototype.draw.apply(this, arguments); + + // attach the markers to the link + linkGroup.attr("marker-end", "url(#" + property.markerId() + ")"); + if ( inverse ) { + linkGroup.attr("marker-start", "url(#" + inverse.markerId() + ")"); + } + }; + + function createPropertyMarker( markerContainer, property ){ + var marker = appendBasicMarker(markerContainer, property); + //marker.attr("refX", 12); + var m1X = -12; + var m1Y = 8; + var m2X = -12; + var m2Y = -8; + marker.append("path") + //.attr("d", "M0,-8L12,0L0,8Z") + .attr("d", "M0,0L " + m1X + "," + m1Y + "L" + m2X + "," + m2Y + "L" + 0 + "," + 0) + .classed(property.markerType(), true); + + property.markerElement(marker); + } + + function createInverseMarker( markerContainer, inverse ){ + var m1X = -12; + var m1Y = 8; + var m2X = -12; + var m2Y = -8; + var inverseMarker = appendBasicMarker(markerContainer, inverse); + inverseMarker.append("path") + //.attr("d", "M12,-8L0,0L12,8Z") + .attr("d", "M0,0L " + -m1X + "," + -m1Y + "L" + -m2X + "," + -m2Y + "L" + 0 + "," + 0) + .classed(inverse.markerType(), true); + + inverse.markerElement(inverseMarker); + } + + function appendBasicMarker( markerContainer, property ){ + return markerContainer.append("marker") + .datum(property) + .attr("id", property.markerId()) + + .attr("viewBox", "-14 -10 28 20") + .attr("markerWidth", 10) + .attr("markerHeight", 10) + //.attr("markerUnits", "userSpaceOnUse") + .attr("orient", "auto"); + } + + +/***/ }), +/* 62 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * A simple incomplete encapsulation of the d3 set, which is able to store webvowl + * elements by using their id. + */ + module.exports = function ( array ){ + + var set = {}, + d3Set = d3.set(array); + + set.has = function ( webvowlElement ){ + return d3Set.has(webvowlElement.id()); + }; + + set.add = function ( webvowlElement ){ + return d3Set.add(webvowlElement.id()); + }; + + set.remove = function ( webvowlElement ){ + return d3Set.remove(webvowlElement.id()); + }; + + set.empty = function (){ + return d3Set.empty(); + }; + + set.size = function (){ + return d3Set.size(); + }; + + return set; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 63 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + var BaseNode = __webpack_require__(9); + var DatatypeNode = __webpack_require__(35); + var Thing = __webpack_require__(31); + var ObjectProperty = __webpack_require__(50); + var DatatypeProperty = __webpack_require__(44); + var RdfsSubClassOf = __webpack_require__(55); + var Label = __webpack_require__(24); + + + var tools = {}; + module.exports = function (){ + return tools; + }; + + tools.isLabel = function ( element ){ + return element instanceof Label; + }; + + tools.isNode = function ( element ){ + return element instanceof BaseNode; + }; + + tools.isDatatype = function ( node ){ + return node instanceof DatatypeNode; + }; + + tools.isThing = function ( node ){ + return node instanceof Thing; + }; + + tools.isProperty = function ( element ){ + return element instanceof BaseProperty; + }; + + tools.isObjectProperty = function ( element ){ + return element instanceof ObjectProperty; + }; + + tools.isDatatypeProperty = function ( element ){ + return element instanceof DatatypeProperty; + }; + + tools.isRdfsSubClassOf = function ( property ){ + return property instanceof RdfsSubClassOf; + }; + + +/***/ }), +/* 64 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {module.exports = function (){ + var options = {}, + data, + graphContainerSelector, + classDistance = 200, + datatypeDistance = 120, + loopDistance = 150, + charge = -500, + gravity = 0.025, + linkStrength = 1, + height = 600, + width = 800, + selectionModules = [], + filterModules = [], + minMagnification = 0.01, + maxMagnification = 4, + compactNotation = false, + dynamicLabelWidth = true, + // some filters + literalFilter, + // menus + gravityMenu, + filterMenu, + loadingModule, + modeMenu, + pausedMenu, + pickAndPinModule, + resetMenu, + searchMenu, + ontologyMenu, + sidebar, + leftSidebar, + editSidebar, + navigationMenu, + exportMenu, + graphObject, + zoomSlider, + datatypeFilter, + focuserModule, + colorExternalsModule, + compactNotationModule, + objectPropertyFilter, + subclassFilter, + setOperatorFilter, + maxLabelWidth = 120, + metadataObject = {}, + generalOntologyMetaData = {}, + disjointPropertyFilter, + rectangularRep = false, + warningModule, + prefixModule, + drawPropertyDraggerOnHover = true, + showDraggerObject = false, + directInputModule, + scaleNodesByIndividuals = true, + useAccuracyHelper = true, + showRenderingStatistic = true, + showInputModality = false, + hideDebugOptions = true, + nodeDegreeFilter, + debugMenu, + + supportedDatatypes = ["rdfs:Literal", "xsd:boolean", "xsd:double", "xsd:integer", "xsd:string", "undefined"], + supportedClasses = ["owl:Thing", "owl:Class", "owl:DeprecatedClass"], + supportedProperties = ["owl:objectProperty", + "rdfs:subClassOf", + "owl:disjointWith", + "owl:allValuesFrom", + "owl:someValuesFrom" + ], + prefixList = { + rdf: 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', + rdfs: 'http://www.w3.org/2000/01/rdf-schema#', + owl: 'http://www.w3.org/2002/07/owl#', + xsd: 'http://www.w3.org/2001/XMLSchema#', + dc: 'http://purl.org/dc/elements/1.1/#', + xml: 'http://www.w3.org/XML/1998/namespace' + }; + + options.clearMetaObject = function (){ + generalOntologyMetaData = {}; + }; + options.clearGeneralMetaObject = function (){ + generalOntologyMetaData = {}; + }; + + options.debugMenu = function ( val ){ + if ( !arguments.length ) return debugMenu; + debugMenu = val; + }; + + options.getHideDebugFeatures = function (){ + return hideDebugOptions; + }; + options.executeHiddenDebugFeatuers = function (){ + hideDebugOptions = !hideDebugOptions; + d3.selectAll(".debugOption").classed("hidden", hideDebugOptions); + if ( hideDebugOptions === false ) { + graphObject.setForceTickFunctionWithFPS(); + } + else { + graphObject.setDefaultForceTickFunction(); + } + if ( debugMenu ) { + debugMenu.updateSettings(); + } + options.setHideDebugFeaturesForDefaultObject(hideDebugOptions); + }; + + + options.addOrUpdateGeneralObjectEntry = function ( property, value ){ + if ( generalOntologyMetaData.hasOwnProperty(property) ) { + //console.log("Updating Property:"+ property); + if ( property === "iri" ) { + if ( validURL(value) === false ) { + warningModule.showWarning("Invalid Ontology IRI", "Input IRI does not represent an URL", "Restoring previous IRI for ontology", 1, false); + return false; + } + } + generalOntologyMetaData[property] = value; + } else { + generalOntologyMetaData[property] = value; + } + return true; + }; + + options.getGeneralMetaObjectProperty = function ( property ){ + if ( generalOntologyMetaData.hasOwnProperty(property) ) { + return generalOntologyMetaData[property]; + } + }; + + options.getGeneralMetaObject = function (){ + return generalOntologyMetaData; + }; + + options.addOrUpdateMetaObjectEntry = function ( property, value ){ + + if ( metadataObject.hasOwnProperty(property) ) { + metadataObject[property] = value; + } else { + metadataObject[property] = value; + } + }; + + options.getMetaObjectProperty = function ( property ){ + if ( metadataObject.hasOwnProperty(property) ) { + return metadataObject[property]; + } + }; + options.getMetaObject = function (){ + return metadataObject; + }; + + + options.prefixList = function (){ + return prefixList; + }; + options.addPrefix = function ( prefix, url ){ + prefixList[prefix] = url; + }; + + function validURL( str ){ + var urlregex = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/; + return urlregex.test(str); + } + + options.updatePrefix = function ( oldPrefix, newPrefix, oldURL, newURL ){ + if ( oldPrefix === newPrefix && oldURL === newURL ) { + // console.log("Nothing to update"); + return true; + } + if ( oldPrefix === newPrefix && oldURL !== newURL && validURL(newURL) === true ) { + // console.log("Update URL"); + prefixList[oldPrefix] = newURL; + } else if ( oldPrefix === newPrefix && oldURL !== newURL && validURL(newURL) === false ) { + if ( validURL(newURL) === false ) { + warningModule.showWarning("Invalid Prefix IRI", "Input IRI does not represent an IRI", "You should enter a valid IRI in form of a URL", 1, false); + return false; + } + + return false; + } + if ( oldPrefix !== newPrefix && validURL(newURL) === true ) { + + // sanity check + if ( prefixList.hasOwnProperty(newPrefix) ) { + // console.log("Already have this prefix!"); + warningModule.showWarning("Prefix Already Exist", "Prefix: " + newPrefix + " is already defined", "You should use an other one", 1, false); + return false; + } + options.removePrefix(oldPrefix); + options.addPrefix(newPrefix, newURL); + editSidebar.updateEditDeleteButtonIds(oldPrefix, newPrefix); + return true; + } + + // console.log("Is new URL ("+newURL+") valid? >> "+validURL(newURL)); + if ( validURL(newURL) === false ) { + warningModule.showWarning("Invalid Prefix IRI", "Input IRI does not represent an URL", "You should enter a valid URL", 1, false); + + } + return false; + }; + + options.removePrefix = function ( prefix ){ + delete prefixList[prefix]; + }; + + + options.supportedDatatypes = function (){ + return supportedDatatypes; + }; + options.supportedClasses = function (){ + return supportedClasses; + }; + options.supportedProperties = function (){ + return supportedProperties; + }; + + options.datatypeFilter = function ( val ){ + if ( !arguments.length ) return datatypeFilter; + datatypeFilter = val; + }; + + options.showDraggerObject = function ( val ){ + if ( !arguments.length ) { + return showDraggerObject; + } + showDraggerObject = val; + }; + options.useAccuracyHelper = function ( val ){ + if ( !arguments.length ) { + return useAccuracyHelper; + } + useAccuracyHelper = val; + }; + options.showAccuracyHelper = function ( val ){ + if ( !arguments.length ) { + return options.showDraggerObject(); + } + options.showDraggerObject(val); + }; + options.showRenderingStatistic = function ( val ){ + if ( !arguments.length ) { + return showRenderingStatistic; + } + showRenderingStatistic = val; + }; + options.showInputModality = function ( val ){ + if ( !arguments.length ) { + return showInputModality; + } + showInputModality = val; + }; + + options.drawPropertyDraggerOnHover = function ( val ){ + if ( !arguments.length ) return drawPropertyDraggerOnHover; + drawPropertyDraggerOnHover = val; + }; + + options.warningModule = function ( val ){ + if ( !arguments.length ) return warningModule; + warningModule = val; + }; + options.directInputModule = function ( val ){ + if ( !arguments.length ) return directInputModule; + directInputModule = val; + }; + options.prefixModule = function ( val ){ + if ( !arguments.length ) return prefixModule; + prefixModule = val; + }; + + options.focuserModule = function ( val ){ + if ( !arguments.length ) return focuserModule; + focuserModule = val; + }; + options.colorExternalsModule = function ( val ){ + if ( !arguments.length ) return colorExternalsModule; + colorExternalsModule = val; + }; + options.compactNotationModule = function ( val ){ + if ( !arguments.length ) return compactNotationModule; + compactNotationModule = val; + }; + + options.maxLabelWidth = function ( val ){ + if ( !arguments.length ) return maxLabelWidth; + maxLabelWidth = val; + }; + options.objectPropertyFilter = function ( val ){ + if ( !arguments.length ) return objectPropertyFilter; + objectPropertyFilter = val; + }; + options.disjointPropertyFilter = function ( val ){ + if ( !arguments.length ) return disjointPropertyFilter; + disjointPropertyFilter = val; + }; + options.subclassFilter = function ( val ){ + if ( !arguments.length ) return subclassFilter; + subclassFilter = val; + }; + options.setOperatorFilter = function ( val ){ + if ( !arguments.length ) return setOperatorFilter; + setOperatorFilter = val; + }; + options.leftSidebar = function ( val ){ + if ( !arguments.length ) return leftSidebar; + leftSidebar = val; + }; + options.editSidebar = function ( val ){ + if ( !arguments.length ) return editSidebar; + editSidebar = val; + }; + + options.zoomSlider = function ( val ){ + if ( !arguments.length ) return zoomSlider; + zoomSlider = val; + }; + + options.graphObject = function ( val ){ + if ( !arguments.length ) return graphObject; + graphObject = val; + }; + + + var defaultOptionsConfig = {}; + defaultOptionsConfig.sidebar = "1"; + defaultOptionsConfig.doc = -1; + defaultOptionsConfig.cd = 200; + defaultOptionsConfig.dd = 120; + defaultOptionsConfig.editorMode = "false"; + defaultOptionsConfig.filter_datatypes = "false"; + defaultOptionsConfig.filter_objectProperties = "false"; + defaultOptionsConfig.filter_sco = "false"; + defaultOptionsConfig.filter_disjoint = "true"; + defaultOptionsConfig.filter_setOperator = "false"; + defaultOptionsConfig.mode_dynamic = "true"; + defaultOptionsConfig.mode_scaling = "true"; + defaultOptionsConfig.mode_compact = "false"; + defaultOptionsConfig.mode_colorExt = "true"; + defaultOptionsConfig.mode_multiColor = "false"; + defaultOptionsConfig.debugFeatures = "false"; + defaultOptionsConfig.rect = 0; + + + options.initialConfig = function (){ + var initCfg = {}; + initCfg.sidebar = "1"; + initCfg.doc = -1; + initCfg.cd = 200; + initCfg.dd = 120; + initCfg.editorMode = "false"; + initCfg.filter_datatypes = "false"; + initCfg.filter_objectProperties = "false"; + initCfg.filter_sco = "false"; + initCfg.filter_disjoint = "true"; + initCfg.filter_setOperator = "false"; + initCfg.mode_dynamic = "true"; + initCfg.mode_scaling = "true"; + initCfg.mode_compact = "false"; + initCfg.mode_colorExt = "true"; + initCfg.mode_multiColor = "false"; + initCfg.mode_pnp = "false"; + initCfg.debugFeatures = "false"; + initCfg.rect = 0; + return initCfg; + }; + + options.setEditorModeForDefaultObject = function ( val ){ + defaultOptionsConfig.editorMode = String(val); + }; + options.setHideDebugFeaturesForDefaultObject = function ( val ){ + defaultOptionsConfig.debugFeatures = String(!val); + }; + + function updateConfigObject(){ + defaultOptionsConfig.sidebar = options.sidebar().getSidebarVisibility(); + defaultOptionsConfig.cd = options.classDistance(); + defaultOptionsConfig.dd = options.datatypeDistance(); + defaultOptionsConfig.filter_datatypes = String(options.filterMenu().getCheckBoxValue("datatypeFilterCheckbox")); + defaultOptionsConfig.filter_sco = String(options.filterMenu().getCheckBoxValue("subclassFilterCheckbox")); + defaultOptionsConfig.filter_disjoint = String(options.filterMenu().getCheckBoxValue("disjointFilterCheckbox")); + defaultOptionsConfig.filter_setOperator = String(options.filterMenu().getCheckBoxValue("setoperatorFilterCheckbox")); + defaultOptionsConfig.filter_objectProperties = String(options.filterMenu().getCheckBoxValue("objectPropertyFilterCheckbox")); + defaultOptionsConfig.mode_dynamic = String(options.dynamicLabelWidth()); + defaultOptionsConfig.mode_scaling = String(options.modeMenu().getCheckBoxValue("nodescalingModuleCheckbox")); + defaultOptionsConfig.mode_compact = String(options.modeMenu().getCheckBoxValue("compactnotationModuleCheckbox")); + defaultOptionsConfig.mode_colorExt = String(options.modeMenu().getCheckBoxValue("colorexternalsModuleCheckbox")); + defaultOptionsConfig.mode_multiColor = String(options.modeMenu().colorModeState()); + defaultOptionsConfig.mode_pnp = String(options.modeMenu().getCheckBoxValue("pickandpinModuleCheckbox")); + defaultOptionsConfig.rect = 0; + } + + options.defaultConfig = function (){ + updateConfigObject(); + return defaultOptionsConfig; + }; + + options.exportMenu = function ( val ){ + if ( !arguments.length ) return exportMenu; + exportMenu = val; + }; + + options.rectangularRepresentation = function ( val ){ + if ( !arguments.length ) { + return rectangularRep; + } else { + var intVal = parseInt(val); + if ( intVal === 0 ) { + rectangularRep = false; + } else { + rectangularRep = true; + } + } + }; + + options.dynamicLabelWidth = function ( val ){ + if ( !arguments.length ) + return dynamicLabelWidth; + else { + dynamicLabelWidth = val; + } + }; + options.sidebar = function ( s ){ + if ( !arguments.length ) return sidebar; + sidebar = s; + return options; + + }; + + options.navigationMenu = function ( m ){ + if ( !arguments.length ) return navigationMenu; + navigationMenu = m; + return options; + + }; + + options.ontologyMenu = function ( m ){ + if ( !arguments.length ) return ontologyMenu; + ontologyMenu = m; + return options; + }; + + options.searchMenu = function ( m ){ + if ( !arguments.length ) return searchMenu; + searchMenu = m; + return options; + }; + + options.resetMenu = function ( m ){ + if ( !arguments.length ) return resetMenu; + resetMenu = m; + return options; + }; + + options.pausedMenu = function ( m ){ + if ( !arguments.length ) return pausedMenu; + pausedMenu = m; + return options; + }; + + options.pickAndPinModule = function ( m ){ + if ( !arguments.length ) return pickAndPinModule; + pickAndPinModule = m; + return options; + }; + + options.gravityMenu = function ( m ){ + if ( !arguments.length ) return gravityMenu; + gravityMenu = m; + return options; + }; + + options.filterMenu = function ( m ){ + if ( !arguments.length ) return filterMenu; + filterMenu = m; + return options; + }; + + options.modeMenu = function ( m ){ + if ( !arguments.length ) return modeMenu; + modeMenu = m; + return options; + }; + + options.charge = function ( p ){ + if ( !arguments.length ) return charge; + charge = +p; + return options; + }; + + options.classDistance = function ( p ){ + if ( !arguments.length ) return classDistance; + classDistance = +p; + return options; + }; + + options.compactNotation = function ( p ){ + + if ( !arguments.length ) return compactNotation; + compactNotation = p; + return options; + }; + + options.data = function ( p ){ + if ( !arguments.length ) return data; + data = p; + return options; + }; + + options.datatypeDistance = function ( p ){ + if ( !arguments.length ) return datatypeDistance; + datatypeDistance = +p; + return options; + }; + + options.filterModules = function ( p ){ + if ( !arguments.length ) return filterModules; + filterModules = p; + return options; + }; + + options.graphContainerSelector = function ( p ){ + if ( !arguments.length ) return graphContainerSelector; + graphContainerSelector = p; + return options; + }; + + options.gravity = function ( p ){ + if ( !arguments.length ) return gravity; + gravity = +p; + return options; + }; + + options.height = function ( p ){ + if ( !arguments.length ) return height; + height = +p; + return options; + }; + + options.linkStrength = function ( p ){ + if ( !arguments.length ) return linkStrength; + linkStrength = +p; + return options; + }; + + options.loopDistance = function ( p ){ + if ( !arguments.length ) return loopDistance; + loopDistance = p; + return options; + }; + + options.minMagnification = function ( p ){ + if ( !arguments.length ) return minMagnification; + minMagnification = +p; + return options; + }; + + options.maxMagnification = function ( p ){ + if ( !arguments.length ) return maxMagnification; + maxMagnification = +p; + return options; + }; + + options.scaleNodesByIndividuals = function ( p ){ + if ( !arguments.length ) return scaleNodesByIndividuals; + scaleNodesByIndividuals = p; + return options; + }; + + options.selectionModules = function ( p ){ + if ( !arguments.length ) return selectionModules; + selectionModules = p; + return options; + }; + + options.width = function ( p ){ + if ( !arguments.length ) return width; + width = +p; + return options; + }; + + options.literalFilter = function ( p ){ + if ( !arguments.length ) return literalFilter; + literalFilter = p; + return options; + }; + options.nodeDegreeFilter = function ( p ){ + if ( !arguments.length ) return nodeDegreeFilter; + nodeDegreeFilter = p; + return options; + }; + + options.loadingModule = function ( p ){ + if ( !arguments.length ) return loadingModule; + loadingModule = p; + return options; + }; + + // define url loadable options; + // update all set values in the default object + options.setOptionsFromURL = function ( opts, changeEditFlag ){ + if ( opts.sidebar !== undefined ) sidebar.showSidebar(parseInt(opts.sidebar), true); + if ( opts.doc ) { + var asInt = parseInt(opts.doc); + filterMenu.setDegreeSliderValue(asInt); + graphObject.setGlobalDOF(asInt); + // reset the value to be -1; + defaultOptionsConfig.doc = -1; + } + var settingFlag = false; + if ( opts.editorMode ) { + if ( opts.editorMode === "true" ) settingFlag = true; + d3.select("#editorModeModuleCheckbox").node().checked = settingFlag; + + if ( changeEditFlag && changeEditFlag === true ) { + graphObject.editorMode(settingFlag); + } + + // update config object + defaultOptionsConfig.editorMode = opts.editorMode; + + } + if ( opts.cd ) { // class distance + options.classDistance(opts.cd); // class distance + defaultOptionsConfig.cd = opts.cd; + } + if ( opts.dd ) { // data distance + options.datatypeDistance(opts.dd); + defaultOptionsConfig.cd = opts.cd; + } + if ( opts.cd || opts.dd ) options.gravityMenu().reset(); // reset the values so the slider is updated; + + + settingFlag = false; + if ( opts.filter_datatypes ) { + if ( opts.filter_datatypes === "true" ) settingFlag = true; + filterMenu.setCheckBoxValue("datatypeFilterCheckbox", settingFlag); + defaultOptionsConfig.filter_datatypes = opts.filter_datatypes; + } + if ( opts.debugFeatures ) { + if ( opts.debugFeatures === "true" ) settingFlag = true; + hideDebugOptions = settingFlag; + if ( options.getHideDebugFeatures() === false ) { + options.executeHiddenDebugFeatuers(); + } + defaultOptionsConfig.debugFeatures = opts.debugFeatures; + } + + settingFlag = false; + if ( opts.filter_objectProperties ) { + if ( opts.filter_objectProperties === "true" ) settingFlag = true; + filterMenu.setCheckBoxValue("objectPropertyFilterCheckbox", settingFlag); + defaultOptionsConfig.filter_objectProperties = opts.filter_objectProperties; + } + settingFlag = false; + if ( opts.filter_sco ) { + if ( opts.filter_sco === "true" ) settingFlag = true; + filterMenu.setCheckBoxValue("subclassFilterCheckbox", settingFlag); + defaultOptionsConfig.filter_sco = opts.filter_sco; + } + settingFlag = false; + if ( opts.filter_disjoint ) { + if ( opts.filter_disjoint === "true" ) settingFlag = true; + filterMenu.setCheckBoxValue("disjointFilterCheckbox", settingFlag); + defaultOptionsConfig.filter_disjoint = opts.filter_disjoint; + } + settingFlag = false; + if ( opts.filter_setOperator ) { + if ( opts.filter_setOperator === "true" ) settingFlag = true; + filterMenu.setCheckBoxValue("setoperatorFilterCheckbox", settingFlag); + defaultOptionsConfig.filter_setOperator = opts.filter_setOperator; + } + filterMenu.updateSettings(); + + // modesMenu + settingFlag = false; + if ( opts.mode_dynamic ) { + if ( opts.mode_dynamic === "true" ) settingFlag = true; + modeMenu.setDynamicLabelWidth(settingFlag); + dynamicLabelWidth = settingFlag; + defaultOptionsConfig.mode_dynamic = opts.mode_dynamic; + } + // settingFlag=false; + // THIS SHOULD NOT BE SET USING THE OPTIONS ON THE URL + // if (opts.mode_picnpin) { + // graph.options().filterMenu().setCheckBoxValue("pickandpin ModuleCheckbox", settingFlag); + // } + + settingFlag = false; + if ( opts.mode_pnp ) { + if ( opts.mode_pnp === "true" ) settingFlag = true; + modeMenu.setCheckBoxValue("pickandpinModuleCheckbox", settingFlag); + defaultOptionsConfig.mode_pnp = opts.mode_pnp; + } + + settingFlag = false; + if ( opts.mode_scaling ) { + if ( opts.mode_scaling === "true" ) settingFlag = true; + modeMenu.setCheckBoxValue("nodescalingModuleCheckbox", settingFlag); + defaultOptionsConfig.mode_scaling = opts.mode_scaling; + } + + settingFlag = false; + if ( opts.mode_compact ) { + if ( opts.mode_compact === "true" ) settingFlag = true; + modeMenu.setCheckBoxValue("compactnotationModuleCheckbox", settingFlag); + defaultOptionsConfig.mode_compact = opts.mode_compact; + } + + settingFlag = false; + if ( opts.mode_colorExt ) { + if ( opts.mode_colorExt === "true" ) settingFlag = true; + modeMenu.setCheckBoxValue("colorexternalsModuleCheckbox", settingFlag); + defaultOptionsConfig.mode_colorExt = opts.mode_colorExt; + } + + settingFlag = false; + if ( opts.mode_multiColor ) { + if ( opts.mode_multiColor === "true" ) settingFlag = true; + modeMenu.setColorSwitchStateUsingURL(settingFlag); + defaultOptionsConfig.mode_multiColor = opts.mode_multiColor; + } + modeMenu.updateSettingsUsingURL(); + options.rectangularRepresentation(opts.rect); + }; + + return options; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 65 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var OwlDisjointWith = __webpack_require__(46); + var attributeParser = __webpack_require__(66)(); + var equivalentPropertyMerger = __webpack_require__(67)(); + var nodePrototypeMap = __webpack_require__(5)(); + var propertyPrototypeMap = __webpack_require__(40)(); + + /** + * Encapsulates the parsing and preparation logic of the input data. + * @param graph the graph object that will be passed to the elements + * @returns {{}} + */ + module.exports = function ( graph ){ + var parser = {}, + nodes, + properties, + classMap, + settingsData, + settingsImported = false, + settingsImportGraphZoomAndTranslation = false, + dictionary = [], + propertyMap; + + parser.getDictionary = function (){ + return dictionary; + }; + + parser.setDictionary = function ( d ){ + dictionary = d; + }; + + parser.settingsImported = function (){ + return settingsImported; + }; + parser.settingsImportGraphZoomAndTranslation = function (){ + return settingsImportGraphZoomAndTranslation; + }; + + parser.parseSettings = function (){ + settingsImported = true; + settingsImportGraphZoomAndTranslation = false; + + if ( !settingsData ) { + settingsImported = false; + return; + } + /** global settings **********************************************************/ + if ( settingsData.global ) { + if ( settingsData.global.zoom ) { + var zoomFactor = settingsData.global.zoom; + graph.setZoom(zoomFactor); + settingsImportGraphZoomAndTranslation = true; + } + + if ( settingsData.global.translation ) { + var translation = settingsData.global.translation; + graph.setTranslation(translation); + settingsImportGraphZoomAndTranslation = true; + } + + if ( settingsData.global.paused ) { + var paused = settingsData.global.paused; + graph.options().pausedMenu().setPauseValue(paused); + } + } + /** Gravity Settings **********************************************************/ + if ( settingsData.gravity ) { + if ( settingsData.gravity.classDistance ) { + var classDistance = settingsData.gravity.classDistance; + graph.options().classDistance(classDistance); + } + if ( settingsData.gravity.datatypeDistance ) { + var datatypeDistance = settingsData.gravity.datatypeDistance; + graph.options().datatypeDistance(datatypeDistance); + } + graph.options().gravityMenu().reset(); // reads the options values and sets the gui values + } + + + // shared variable declaration + + var i; + var id; + var checked; + /** Filter Settings **********************************************************/ + if ( settingsData.filter ) { + // checkbox settings + if ( settingsData.filter.checkBox ) { + var filter_cb = settingsData.filter.checkBox; + for ( i = 0; i < filter_cb.length; i++ ) { + id = filter_cb[i].id; + checked = filter_cb[i].checked; + graph.options().filterMenu().setCheckBoxValue(id, checked); + } + } + // node degree filter settings + if ( settingsData.filter.degreeSliderValue ) { + var degreeSliderValue = settingsData.filter.degreeSliderValue; + graph.options().filterMenu().setDegreeSliderValue(degreeSliderValue); + } + graph.options().filterMenu().updateSettings(); + } + + /** Modes Setting **********************************************************/ + if ( settingsData.modes ) { + // checkbox settings + if ( settingsData.modes.checkBox ) { + var modes_cb = settingsData.modes.checkBox; + for ( i = 0; i < modes_cb.length; i++ ) { + id = modes_cb[i].id; + checked = modes_cb[i].checked; + graph.options().modeMenu().setCheckBoxValue(id, checked); + } + } + // color switch settings + var state = settingsData.modes.colorSwitchState; + // state could be undefined + if ( state === true || state === false ) { + graph.options().modeMenu().setColorSwitchState(state); + } + graph.options().modeMenu().updateSettings(); + } + graph.updateStyle(); // updates graph representation(setting charges and distances) + }; + + + /** + * Parses the ontology data and preprocesses it (e.g. connecting inverse properties and so on). + * @param ontologyData the loaded ontology json file + */ + parser.parse = function ( ontologyData ){ + if ( !ontologyData ) { + nodes = []; + properties = []; + dictionary = []; + return; + } + dictionary = []; + if ( ontologyData.settings ) settingsData = ontologyData.settings; + else settingsData = undefined; + + var classes = combineClasses(ontologyData.class, ontologyData.classAttribute), + datatypes = combineClasses(ontologyData.datatype, ontologyData.datatypeAttribute), + combinedClassesAndDatatypes = classes.concat(datatypes), + unparsedProperties = ontologyData.property || [], + combinedProperties; + + // Inject properties for unions, intersections, ... + addSetOperatorProperties(combinedClassesAndDatatypes, unparsedProperties); + combinedProperties = combineProperties(unparsedProperties, ontologyData.propertyAttribute); + classMap = mapElements(combinedClassesAndDatatypes); + propertyMap = mapElements(combinedProperties); + mergeRangesOfEquivalentProperties(combinedProperties, combinedClassesAndDatatypes); + + // Process the graph data + convertTypesToIris(combinedClassesAndDatatypes, ontologyData.namespace); + convertTypesToIris(combinedProperties, ontologyData.namespace); + nodes = createNodeStructure(combinedClassesAndDatatypes, classMap); + properties = createPropertyStructure(combinedProperties, classMap, propertyMap); + }; + + /** + * @return {Array} the preprocessed nodes + */ + parser.nodes = function (){ + return nodes; + }; + + /** + * @returns {Array} the preprocessed properties + */ + parser.properties = function (){ + return properties; + }; + + /** + * Combines the passed objects with its attributes and prototypes. This also applies + * attributes defined in the base of the prototype. + */ + function combineClasses( baseObjects, attributes ){ + var combinations = []; + var prototypeMap = createLowerCasePrototypeMap(nodePrototypeMap); + + if ( baseObjects ) { + baseObjects.forEach(function ( element ){ + var matchingAttribute; + + if ( attributes ) { + // Look for an attribute with the same id and merge them + for ( var i = 0; i < attributes.length; i++ ) { + var attribute = attributes[i]; + if ( element.id === attribute.id ) { + matchingAttribute = attribute; + break; + } + } + addAdditionalAttributes(element, matchingAttribute); + } + + // Then look for a prototype to add its properties + var Prototype = prototypeMap.get(element.type.toLowerCase()); + + if ( Prototype ) { + addAdditionalAttributes(element, Prototype); // TODO might be unnecessary + + var node = new Prototype(graph); + node.annotations(element.annotations) + .baseIri(element.baseIri) + .comment(element.comment) + .complement(element.complement) + .disjointUnion(element.disjointUnion) + .description(element.description) + .equivalents(element.equivalent) + .id(element.id) + .intersection(element.intersection) + .label(element.label) + // .type(element.type) Ignore, because we predefined it + .union(element.union) + .iri(element.iri); + if ( element.pos ) { + node.x = element.pos[0]; + node.y = element.pos[1]; + node.px = node.x; + node.py = node.y; + } + //class element pin + var elementPinned = element.pinned; + if ( elementPinned === true ) { + node.pinned(true); + graph.options().pickAndPinModule().addPinnedElement(node); + } + // Create node objects for all individuals + if ( element.individuals ) { + element.individuals.forEach(function ( individual ){ + var individualNode = new Prototype(graph); + individualNode.label(individual.labels) + .iri(individual.iri); + + node.individuals().push(individualNode); + }); + } + + if ( element.attributes ) { + var deduplicatedAttributes = d3.set(element.attributes.concat(node.attributes())); + node.attributes(deduplicatedAttributes.values()); + } + combinations.push(node); + } else { + console.error("Unknown element type: " + element.type); + } + }); + } + + return combinations; + } + + function combineProperties( baseObjects, attributes ){ + var combinations = []; + var prototypeMap = createLowerCasePrototypeMap(propertyPrototypeMap); + + if ( baseObjects ) { + baseObjects.forEach(function ( element ){ + var matchingAttribute; + + if ( attributes ) { + // Look for an attribute with the same id and merge them + for ( var i = 0; i < attributes.length; i++ ) { + var attribute = attributes[i]; + if ( element.id === attribute.id ) { + matchingAttribute = attribute; + break; + } + } + addAdditionalAttributes(element, matchingAttribute); + } + + // Then look for a prototype to add its properties + var Prototype = prototypeMap.get(element.type.toLowerCase()); + + if ( Prototype ) { + // Create the matching object and set the properties + var property = new Prototype(graph); + property.annotations(element.annotations) + .baseIri(element.baseIri) + .cardinality(element.cardinality) + .comment(element.comment) + .domain(element.domain) + .description(element.description) + .equivalents(element.equivalent) + .id(element.id) + .inverse(element.inverse) + .label(element.label) + .minCardinality(element.minCardinality) + .maxCardinality(element.maxCardinality) + .range(element.range) + .subproperties(element.subproperty) + .superproperties(element.superproperty) + // .type(element.type) Ignore, because we predefined it + .iri(element.iri); + + // adding property position + if ( element.pos ) { + property.x = element.pos[0]; + property.y = element.pos[1]; + property.px = element.pos[0]; + property.py = element.pos[1]; + } + var elementPinned = element.pinned; + if ( elementPinned === true ) { + property.pinned(true); + graph.options().pickAndPinModule().addPinnedElement(property); + } + + + if ( element.attributes ) { + var deduplicatedAttributes = d3.set(element.attributes.concat(property.attributes())); + property.attributes(deduplicatedAttributes.values()); + } + combinations.push(property); + } else { + console.error("Unknown element type: " + element.type); + } + + }); + } + + return combinations; + } + + function createLowerCasePrototypeMap( prototypeMap ){ + return d3.map(prototypeMap.values(), function ( Prototype ){ + return new Prototype().type().toLowerCase(); + }); + } + + function mergeRangesOfEquivalentProperties( properties, nodes ){ + // pass clones of arrays into the merger to keep the current functionality of this module + var newNodes = equivalentPropertyMerger.merge(properties.slice(), nodes.slice(), propertyMap, classMap, graph); + + // replace all the existing nodes and map the nodes again + nodes.length = 0; + Array.prototype.push.apply(nodes, newNodes); + classMap = mapElements(nodes); + } + + /** + * Checks all attributes which have to be rewritten. + * For example: + * equivalent is filled with only ID's of the corresponding nodes. It would be better to used the + * object instead of the ID so we swap the ID's with the correct object reference and can delete it from drawing + * because it is not necessary. + */ + function createNodeStructure( rawNodes, classMap ){ + var nodes = []; + + // Set the default values + var maxIndividualCount = 0; + rawNodes.forEach(function ( node ){ + maxIndividualCount = Math.max(maxIndividualCount, node.individuals().length); + node.visible(true); + }); + + rawNodes.forEach(function ( node ){ + // Merge and connect the equivalent nodes + processEquivalentIds(node, classMap); + + attributeParser.parseClassAttributes(node); + + node.maxIndividualCount(maxIndividualCount); + }); + + // Collect all nodes that should be displayed + rawNodes.forEach(function ( node ){ + if ( node.visible() ) { + nodes.push(node); + } + }); + + return nodes; + } + + /** + * Sets the disjoint attribute of the nodes if a disjoint label is found. + * @param property + */ + function processDisjoints( property ){ + if ( property instanceof OwlDisjointWith === false ) { + return; + } + + var domain = property.domain(), + range = property.range(); + + // Check the domain. + if ( !domain.disjointWith() ) { + domain.disjointWith([]); + } + + // Check the range. + if ( !range.disjointWith() ) { + range.disjointWith([]); + } + + domain.disjointWith().push(property.range()); + range.disjointWith().push(property.domain()); + } + + /** + * Connect all properties and also their sub- and superproperties. + * We iterate over the rawProperties array because it is way faster than iterating + * over an object and its attributes. + * + * @param rawProperties the properties + * @param classMap a map of all classes + * @param propertyMap the properties in a map + */ + function createPropertyStructure( rawProperties, classMap, propertyMap ){ + var properties = []; + // Set default values + rawProperties.forEach(function ( property ){ + property.visible(true); + }); + + // Connect properties + rawProperties.forEach(function ( property ){ + var domain, + range, + domainObject, + rangeObject, + inverse; + + /* Skip properties that have no information about their domain and range, like + inverse properties with optional inverse and optional domain and range attributes */ + if ( (property.domain() && property.range()) || property.inverse() ) { + + var inversePropertyId = findId(property.inverse()); + // Look if an inverse property exists + if ( inversePropertyId ) { + inverse = propertyMap[inversePropertyId]; + if ( !inverse ) { + console.warn("No inverse property was found for id: " + inversePropertyId); + property.inverse(undefined); + } + } + + // Either domain and range are set on this property or at the inverse + if ( typeof property.domain() !== "undefined" && typeof property.range() !== "undefined" ) { + domain = findId(property.domain()); + range = findId(property.range()); + + domainObject = classMap[domain]; + rangeObject = classMap[range]; + } else if ( inverse ) { + // Domain and range need to be switched + domain = findId(inverse.range()); + range = findId(inverse.domain()); + + domainObject = classMap[domain]; + rangeObject = classMap[range]; + } else { + console.warn("Domain and range not found for property: " + property.id()); + } + + // Set the references on this property + property.domain(domainObject); + property.range(rangeObject); + + // Also set the attributes of the inverse property + if ( inverse ) { + property.inverse(inverse); + inverse.inverse(property); + + // Switch domain and range + inverse.domain(rangeObject); + inverse.range(domainObject); + } + } + // Reference sub- and superproperties + referenceSubOrSuperProperties(property.subproperties()); + referenceSubOrSuperProperties(property.superproperties()); + }); + + // Merge equivalent properties and process disjoints. + rawProperties.forEach(function ( property ){ + processEquivalentIds(property, propertyMap); + processDisjoints(property); + + attributeParser.parsePropertyAttributes(property); + }); + // Add additional information to the properties + rawProperties.forEach(function ( property ){ + // Properties of merged classes should point to/from the visible equivalent class + var propertyWasRerouted = false; + + if ( property.domain() === undefined ) { + console.warn("No Domain was found for id:" + property.id()); + return; + } + + if ( wasNodeMerged(property.domain()) ) { + property.domain(property.domain().equivalentBase()); + propertyWasRerouted = true; + } + if ( property.range() === undefined ) { + console.warn("No range was found for id:" + property.id()); + return; + } + if ( wasNodeMerged(property.range()) ) { + property.range(property.range().equivalentBase()); + propertyWasRerouted = true; + } + // But there should not be two equal properties between the same domain and range + var equalProperty = getOtherEqualProperty(rawProperties, property); + + if ( propertyWasRerouted && equalProperty ) { + property.visible(false); + + equalProperty.redundantProperties().push(property); + } + + // Hide property if source or target node is hidden + if ( !property.domain().visible() || !property.range().visible() ) { + property.visible(false); + } + + // Collect all properties that should be displayed + if ( property.visible() ) { + properties.push(property); + } + }); + return properties; + } + + function referenceSubOrSuperProperties( subOrSuperPropertiesArray ){ + var i, l; + + if ( !subOrSuperPropertiesArray ) { + return; + } + + for ( i = 0, l = subOrSuperPropertiesArray.length; i < l; ++i ) { + var subOrSuperPropertyId = findId(subOrSuperPropertiesArray[i]); + var subOrSuperProperty = propertyMap[subOrSuperPropertyId]; + + if ( subOrSuperProperty ) { + // Replace id with object + subOrSuperPropertiesArray[i] = subOrSuperProperty; + } else { + console.warn("No sub-/superproperty was found for id: " + subOrSuperPropertyId); + } + } + } + + function wasNodeMerged( node ){ + return !node.visible() && node.equivalentBase(); + } + + function getOtherEqualProperty( properties, referenceProperty ){ + var i, l, property; + + for ( i = 0, l = properties.length; i < l; i++ ) { + property = properties[i]; + + if ( referenceProperty === property ) { + continue; + } + if ( referenceProperty.domain() !== property.domain() || + referenceProperty.range() !== property.range() ) { + continue; + } + + // Check for an equal IRI, if non existent compare label and type + if ( referenceProperty.iri() && property.iri() ) { + if ( referenceProperty.iri() === property.iri() ) { + return property; + } + } else if ( referenceProperty.type() === property.type() && + referenceProperty.defaultLabel() === property.defaultLabel() ) { + return property; + } + } + + return undefined; + } + + /** + * Generates and adds properties for links to set operators. + * @param classes unprocessed classes + * @param properties unprocessed properties + */ + function addSetOperatorProperties( classes, properties ){ + function addProperties( domainId, rangeIds, operatorType ){ + if ( !rangeIds ) { + return; + } + + rangeIds.forEach(function ( rangeId, index ){ + var property = { + id: "GENERATED-" + operatorType + "-" + domainId + "-" + rangeId + "-" + index, + type: "setOperatorProperty", + domain: domainId, + range: rangeId + }; + + properties.push(property); + }); + } + + classes.forEach(function ( clss ){ + addProperties(clss.id(), clss.complement(), "COMPLEMENT"); + addProperties(clss.id(), clss.intersection(), "INTERSECTION"); + addProperties(clss.id(), clss.union(), "UNION"); + addProperties(clss.id(), clss.disjointUnion(), "DISJOINTUNION"); + }); + } + + /** + * Replaces the ids of equivalent nodes/properties with the matching objects, cross references them + * and tags them as processed. + * @param element a node or a property + * @param elementMap a map where nodes/properties can be looked up + */ + function processEquivalentIds( element, elementMap ){ + var eqIds = element.equivalents(); + + if ( !eqIds || element.equivalentBase() ) { + return; + } + + // Replace ids with the corresponding objects + for ( var i = 0, l = eqIds.length; i < l; ++i ) { + var eqId = findId(eqIds[i]); + var eqObject = elementMap[eqId]; + + if ( eqObject ) { + // Cross reference both objects + eqObject.equivalents(eqObject.equivalents()); + eqObject.equivalents().push(element); + eqObject.equivalentBase(element); + eqIds[i] = eqObject; + + // Hide other equivalent nodes + eqObject.visible(false); + } else { + console.warn("No class/property was found for equivalent id: " + eqId); + } + } + } + + /** + * Tries to convert the type to an iri and sets it. + * @param elements classes or properties + * @param namespaces an array of namespaces + */ + function convertTypesToIris( elements, namespaces ){ + elements.forEach(function ( element ){ + if ( typeof element.iri() === "string" ) { + element.iri(replaceNamespace(element.iri(), namespaces)); + } + }); + } + + /** + * Creates a map by mapping the array with the passed function. + * @param array the array + * @returns {{}} + */ + function mapElements( array ){ + var map = {}; + for ( var i = 0, length = array.length; i < length; i++ ) { + var element = array[i]; + map[element.id()] = element; + } + return map; + } + + /** + * Adds the attributes of the additional object to the base object, but doesn't + * overwrite existing ones. + * + * @param base the base object + * @param addition the object with additional data + * @returns the combination is also returned + */ + function addAdditionalAttributes( base, addition ){ + // Check for an undefined value + addition = addition || {}; + + for ( var addAttribute in addition ) { + // Add the attribute if it doesn't exist + if ( !(addAttribute in base) && addition.hasOwnProperty(addAttribute) ) { + base[addAttribute] = addition[addAttribute]; + } + } + return base; + } + + /** + * Replaces the namespace (and the separator) if one exists and returns the new value. + * @param address the address with a namespace in it + * @param namespaces an array of namespaces + * @returns {string} the processed address with the (possibly) replaced namespace + */ + function replaceNamespace( address, namespaces ){ + var separatorIndex = address.indexOf(":"); + if ( separatorIndex === -1 ) { + return address; + } + var namespaceName = address.substring(0, separatorIndex); + + for ( var i = 0, length = namespaces.length; i < length; ++i ) { + var namespace = namespaces[i]; + if ( namespaceName === namespace.name ) { + return namespace.iri + address.substring(separatorIndex + 1); + } + } + + return address; + } + + /** + * Looks whether the passed object is already the id or if it was replaced + * with the object that belongs to the id. + * @param object an id, a class or a property + * @returns {string} the id of the passed object or undefined + */ + function findId( object ){ + if ( !object ) { + return undefined; + } else if ( typeof object === "string" ) { + return object; + } else if ( "id" in object ) { + return object.id(); + } else { + console.warn("No Id was found for this object: " + object); + return undefined; + } + } + + return parser; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 66 */ +/***/ (function(module, exports) { + + /** + * Parses the attributes an element has and sets the corresponding attributes. + * @returns {Function} + */ + module.exports = (function (){ + var attributeParser = {}, + // Style + ANONYMOUS = "anonymous", + DATATYPE = "datatype", + DEPRECATED = "deprecated", + EXTERNAL = "external", + OBJECT = "object", + RDF = "rdf", + // Representations + ASYMMETRIC = "asymmetric", + FUNCTIONAL = "functional", + INVERSE_FUNCTIONAL = "inverse functional", + IRREFLEXIVE = "irreflexive", + KEY = "key", + REFLEXIVE = "reflexive", + SYMMETRIC = "symmetric", + TRANSITIVE = "transitive", + // Attribute groups + VISUAL_ATTRIBUTE_GROUPS = [ + [DEPRECATED, DATATYPE, OBJECT, RDF], + [ANONYMOUS] + ], + CLASS_INDICATIONS = [DEPRECATED, EXTERNAL], + PROPERTY_INDICATIONS = [ASYMMETRIC, FUNCTIONAL, INVERSE_FUNCTIONAL, IRREFLEXIVE, KEY, REFLEXIVE, SYMMETRIC, + TRANSITIVE]; + + /** + * Parses and sets the attributes of a class. + * @param clazz + */ + attributeParser.parseClassAttributes = function ( clazz ){ + if ( !(clazz.attributes() instanceof Array) ) { + return; + } + + parseVisualAttributes(clazz); + parseClassIndications(clazz); + }; + + function parseVisualAttributes( element ){ + VISUAL_ATTRIBUTE_GROUPS.forEach(function ( attributeGroup ){ + setVisualAttributeOfGroup(element, attributeGroup); + }); + } + + function setVisualAttributeOfGroup( element, group ){ + var i, l, attribute; + + for ( i = 0, l = group.length; i < l; i++ ) { + attribute = group[i]; + if ( element.attributes().indexOf(attribute) >= 0 ) { + element.visualAttributes().push(attribute); + + // Just a single attribute is possible + break; + } + } + } + + function parseClassIndications( clazz ){ + var i, l, indication; + + for ( i = 0, l = CLASS_INDICATIONS.length; i < l; i++ ) { + indication = CLASS_INDICATIONS[i]; + + if ( clazz.attributes().indexOf(indication) >= 0 ) { + clazz.indications().push(indication); + } + } + } + + /** + * Parses and sets the attributes of a property. + * @param property + */ + attributeParser.parsePropertyAttributes = function ( property ){ + if ( !(property.attributes() instanceof Array) ) { + return; + } + + parseVisualAttributes(property); + parsePropertyIndications(property); + }; + + function parsePropertyIndications( property ){ + var i, l, indication; + + for ( i = 0, l = PROPERTY_INDICATIONS.length; i < l; i++ ) { + indication = PROPERTY_INDICATIONS[i]; + + if ( property.attributes().indexOf(indication) >= 0 ) { + property.indications().push(indication); + } + } + } + + + return function (){ + // Return a function to keep module interfaces consistent + return attributeParser; + }; + })(); + + +/***/ }), +/* 67 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var OwlThing = __webpack_require__(31); + var RdfsLiteral = __webpack_require__(38); + var elementTools = __webpack_require__(63)(); + + var equivalentPropertyMerger = {}; + module.exports = function (){ + return equivalentPropertyMerger; + }; + + var PREFIX = "GENERATED-MERGED_RANGE-"; + var OBJECT_PROPERTY_DEFAULT_RANGE_TYPE = "owl:Thing"; + var DATA_PROPERTY_DEFAULT_RANGE_TYPE = "rdfs:Literal"; + + + equivalentPropertyMerger.merge = function ( properties, nodes, propertyMap, nodeMap, graph ){ + var totalNodeIdsToHide = d3.set(); + var processedPropertyIds = d3.set(); + var mergeNodes = []; + + for ( var i = 0; i < properties.length; i++ ) { + var property = properties[i]; + var equivalents = property.equivalents().map(createIdToPropertyMapper(propertyMap)); + + if ( equivalents.length === 0 || processedPropertyIds.has(property.id()) ) { + continue; + } + + var propertyWithEquivalents = equivalents.concat(property); + + var mergeNode = findMergeNode(propertyWithEquivalents, nodeMap); + if ( !mergeNode ) { + if ( mergeNode !== undefined ) { + mergeNode = createDefaultMergeNode(property, graph); + mergeNodes.push(mergeNode); + } + } + + var nodeIdsToHide = replaceRangesAndCollectNodesToHide(propertyWithEquivalents, mergeNode, properties, + processedPropertyIds); + for ( var j = 0; j < nodeIdsToHide.length; j++ ) { + totalNodeIdsToHide.add(nodeIdsToHide[j]); + } + } + + return filterVisibleNodes(nodes.concat(mergeNodes), totalNodeIdsToHide); + }; + + + function createIdToPropertyMapper( propertyMap ){ + return function ( id ){ + return propertyMap[id]; + }; + } + + function findMergeNode( propertyWithEquivalents, nodeMap ){ + var typeMap = mapPropertiesRangesToType(propertyWithEquivalents, nodeMap); + var typeSet = d3.set(typeMap.keys()); + + // default types are the fallback values and should be ignored for the type determination + typeSet.remove(OBJECT_PROPERTY_DEFAULT_RANGE_TYPE); + typeSet.remove(DATA_PROPERTY_DEFAULT_RANGE_TYPE); + + // exactly one type to chose from -> take the node of this type as range + if ( typeSet.size() === 1 ) { + var type = typeSet.values()[0]; + var ranges = typeMap.get(type); + + if ( ranges.length === 1 ) { + return ranges[0]; + } + } + } + + function mapPropertiesRangesToType( properties, nodeMap ){ + var typeMap = d3.map(); + + properties.forEach(function ( property ){ + if ( property === undefined ) //@ WORKAROUND + return; + + var range = nodeMap[property.range()]; + var type = range.type(); + + if ( !typeMap.has(type) ) { + typeMap.set(type, []); + } + + typeMap.get(type).push(range); + }); + + return typeMap; + } + + function createDefaultMergeNode( property, graph ){ + var range; + + if ( elementTools.isDatatypeProperty(property) ) { + range = new RdfsLiteral(graph); + } else { + range = new OwlThing(graph); + } + range.id(PREFIX + property.id()); + + return range; + } + + function replaceRangesAndCollectNodesToHide( propertyWithEquivalents, mergeNode, properties, processedPropertyIds ){ + var nodesToHide = []; + + propertyWithEquivalents.forEach(function ( property ){ + + if ( property === undefined || mergeNode === undefined ) // @ WORKAROUND + return; + var oldRangeId = property.range(); + property.range(mergeNode.id()); + if ( !isDomainOrRangeOfOtherProperty(oldRangeId, properties) ) { + nodesToHide.push(oldRangeId); + } + + processedPropertyIds.add(property.id()); + }); + + return nodesToHide; + } + + function isDomainOrRangeOfOtherProperty( nodeId, properties ){ + for ( var i = 0; i < properties.length; i++ ) { + var property = properties[i]; + if ( property.domain() === nodeId || property.range() === nodeId ) { + return true; + } + } + + return false; + } + + function filterVisibleNodes( nodes, nodeIdsToHide ){ + var filteredNodes = []; + + nodes.forEach(function ( node ){ + if ( !nodeIdsToHide.has(node.id()) ) { + filteredNodes.push(node); + } + }); + + return filteredNodes; + } + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 68 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {module.exports = function ( graph ){ + /** variable defs **/ + var Class_dragger = {}; + Class_dragger.nodeId = 10001; + Class_dragger.parent = undefined; + Class_dragger.x = 0; + Class_dragger.y = 0; + Class_dragger.rootElement = undefined; + Class_dragger.rootNodeLayer = undefined; + Class_dragger.pathLayer = undefined; + Class_dragger.mouseEnteredVar = false; + Class_dragger.mouseButtonPressed = false; + Class_dragger.nodeElement = undefined; + Class_dragger.draggerObject = undefined; + Class_dragger.pathElement = undefined; + Class_dragger.typus = "Class_dragger"; + + Class_dragger.type = function (){ + return Class_dragger.typus; + }; + + Class_dragger.parentNode = function (){ + return Class_dragger.parent; + }; + + Class_dragger.hideClass_dragger = function ( val ){ + Class_dragger.pathElement.classed("hidden", val); + Class_dragger.nodeElement.classed("hidden", val); + Class_dragger.draggerObject.classed("hidden", val); + }; + + Class_dragger.setParentNode = function ( parentNode ){ + Class_dragger.parent = parentNode; + + if ( Class_dragger.mouseButtonPressed === false ) { + if ( Class_dragger.parent.actualRadius && Class_dragger.parent.actualRadius() ) { + Class_dragger.x = Class_dragger.parent.x + 10 + Class_dragger.parent.actualRadius(); + Class_dragger.y = Class_dragger.parent.y + 10 + Class_dragger.parent.actualRadius(); + } else { + Class_dragger.x = Class_dragger.parent.x + 60; + Class_dragger.y = Class_dragger.parent.y + 60; + } + } + Class_dragger.updateElement(); + }; + + Class_dragger.hideDragger = function ( val ){ + if ( Class_dragger.pathElement ) Class_dragger.pathElement.classed("hidden", val); + if ( Class_dragger.nodeElement ) Class_dragger.nodeElement.classed("hidden", val); + if ( Class_dragger.draggerObject ) Class_dragger.draggerObject.classed("hidden", val); + + }; + /** BASE HANDLING FUNCTIONS ------------------------------------------------- **/ + Class_dragger.id = function ( index ){ + if ( !arguments.length ) { + return Class_dragger.nodeId; + } + Class_dragger.nodeId = index; + }; + + Class_dragger.svgPathLayer = function ( layer ){ + Class_dragger.pathLayer = layer.append('g'); + }; + + Class_dragger.svgRoot = function ( root ){ + if ( !arguments.length ) + return Class_dragger.rootElement; + Class_dragger.rootElement = root; + Class_dragger.rootNodeLayer = Class_dragger.rootElement.append('g'); + Class_dragger.addMouseEvents(); + }; + + /** DRAWING FUNCTIONS ------------------------------------------------- **/ + Class_dragger.drawNode = function (){ + Class_dragger.pathElement = Class_dragger.pathLayer.append('line') + .classed("classNodeDragPath", true); + Class_dragger.pathElement.attr("x1", 0) + .attr("y1", 0) + .attr("x2", 0) + .attr("y2", 0); + + // var lineData = [ + // {"x": 0, "y": 0}, + // {"x": 0, "y": 40}, + // {"x": -40, "y": 0}, + // {"x": 0, "y": -40}, + // {"x": 0, "y": 0} + // ]; + + var lineData = [ + { "x": -40, "y": 0 }, // start + { "x": -20, "y": -10 }, + { "x": 20, "y": -50 }, + { "x": -10, "y": 0 }, // center + { "x": 20, "y": 50 }, + { "x": -20, "y": 10 }, + { "x": -40, "y": 0 } + ]; + + + var lineFunction = d3.svg.line() + .x(function ( d ){ + return d.x; + }) + .y(function ( d ){ + return d.y; + }) + .interpolate("basis-closed"); + var pathData = "M 20,40 C 0,15 0,-15 20,-40 L -40,0 Z"; + // var pathData="M 20,40 C 0,15 0,-15 20,-40 20,-40 -35.22907,-23.905556 -45.113897,0.06313453 -35.22907,20.095453 20,40 20,40 Z"; + // var pathData="M 39.107144,51.25 C 0,17.362169 0,-13.75 39.285715,-49.821429 c 0,0 -69.58321,34.511175 -100.714286,50.35714329 C -22.96643,20.324376 39.107144,51.25 39.107144,51.25 Z"; + + Class_dragger.nodeElement = Class_dragger.rootNodeLayer.append('path').attr("d", pathData); + Class_dragger.nodeElement.classed("classDraggerNode", true); + Class_dragger.draggerObject = Class_dragger.rootNodeLayer.append("circle"); + if ( graph.options().useAccuracyHelper() ) { + Class_dragger.draggerObject.attr("r", 40) + .attr("cx", 0) + .attr("cy", 0) + .classed("superHiddenElement", true); + Class_dragger.draggerObject.classed("superOpacityElement", !graph.options().showDraggerObject()); + } + + + }; + + Class_dragger.updateElement = function (){ + + // Class_dragger.pathLayer.attr("transform", "translate(" + Class_dragger.x + "," + Class_dragger.y + ")"); + // Class_dragger.rootElement.attr("transform", "translate(" + Class_dragger.x + "," + Class_dragger.y + ")"); + if ( Class_dragger.pathElement ) { + + // compute start point ; + + + var sX = Class_dragger.parent.x, + sY = Class_dragger.parent.y, + eX = Class_dragger.x, + eY = Class_dragger.y; + + + // this is used only when you dont have a proper layout ordering; + var dirX = eX - sX; + var dirY = eY - sY; + var len = Math.sqrt((dirX * dirX) + (dirY * dirY)); + + var nX = dirX / len; + var nY = dirY / len; + + var ppX = sX + nX * Class_dragger.parent.actualRadius(); + var ppY = sY + nY * Class_dragger.parent.actualRadius(); + + var ncx = nX * 15; + var ncy = nY * 15; + Class_dragger.draggerObject.attr("cx", ncx) + .attr("cy", ncy); + + Class_dragger.pathElement.attr("x1", ppX) + .attr("y1", ppY) + .attr("x2", eX) + .attr("y2", eY); + } + var angle = Math.atan2(Class_dragger.parent.y - Class_dragger.y, Class_dragger.parent.x - Class_dragger.x) * 180 / Math.PI; + + Class_dragger.nodeElement.attr("transform", "translate(" + Class_dragger.x + "," + Class_dragger.y + ")" + "rotate(" + angle + ")"); + Class_dragger.draggerObject.attr("transform", "translate(" + Class_dragger.x + "," + Class_dragger.y + ")"); + // console.log("update Elmenent root element"+Class_dragger.x + "," + Class_dragger.y ); + // + // Class_dragger.nodeElement.attr("transform", function (d) { + // return "rotate(" + angle + ")"; + // }); + }; + + /** MOUSE HANDLING FUNCTIONS ------------------------------------------------- **/ + + Class_dragger.addMouseEvents = function (){ + // console.log("adding mouse events"); + Class_dragger.rootNodeLayer.selectAll("*").on("mouseover", Class_dragger.onMouseOver) + .on("mouseout", Class_dragger.onMouseOut) + .on("click", function (){ + }) + .on("dblclick", function (){ + }) + .on("mousedown", Class_dragger.mouseDown) + .on("mouseup", Class_dragger.mouseUp); + }; + + Class_dragger.mouseDown = function (){ + Class_dragger.nodeElement.style("cursor", "move"); + Class_dragger.nodeElement.classed("classDraggerNodeHovered", true); + Class_dragger.mouseButtonPressed = true; + console.log("Mouse DOWN from Dragger"); + }; + + Class_dragger.mouseUp = function (){ + Class_dragger.nodeElement.style("cursor", "auto"); + Class_dragger.mouseButtonPressed = false; + console.log("Mouse UP from Dragger"); + }; + + + Class_dragger.mouseEntered = function ( p ){ + if ( !arguments.length ) return Class_dragger.mouseEnteredVar; + Class_dragger.mouseEnteredVar = p; + return Class_dragger; + }; + + Class_dragger.selectedViaTouch = function ( val ){ + Class_dragger.nodeElement.classed("classDraggerNode", !val); + Class_dragger.nodeElement.classed("classDraggerNodeHovered", val); + + }; + + Class_dragger.onMouseOver = function (){ + if ( Class_dragger.mouseEntered() ) { + return; + } + Class_dragger.nodeElement.classed("classDraggerNode", false); + Class_dragger.nodeElement.classed("classDraggerNodeHovered", true); + var selectedNode = Class_dragger.rootElement.node(), + nodeContainer = selectedNode.parentNode; + nodeContainer.appendChild(selectedNode); + + Class_dragger.mouseEntered(true); + + }; + Class_dragger.onMouseOut = function (){ + if ( Class_dragger.mouseButtonPressed === true ) + return; + Class_dragger.nodeElement.classed("classDraggerNodeHovered", false); + Class_dragger.nodeElement.classed("classDraggerNode", true); + Class_dragger.mouseEntered(false); + }; + + Class_dragger.setPosition = function ( x, y ){ + + Class_dragger.x = x; + Class_dragger.y = y; + Class_dragger.updateElement(); + }; + + Class_dragger.setAdditionalClassForClass_dragger = function ( name, val ){ + // console.log("Class_dragger should sett the class here") + // Class_dragger.nodeElement.classed(name,val); + + }; + return Class_dragger; + }; + + + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 69 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {module.exports = function ( graph ){ + /** variable defs **/ + var Range_dragger = {}; + Range_dragger.nodeId = 10002; + Range_dragger.parent = undefined; + Range_dragger.x = 0; + Range_dragger.y = 0; + Range_dragger.rootElement = undefined; + Range_dragger.rootNodeLayer = undefined; + Range_dragger.pathLayer = undefined; + Range_dragger.mouseEnteredVar = false; + Range_dragger.mouseButtonPressed = false; + Range_dragger.nodeElement = undefined; + Range_dragger.draggerObject = undefined; + + Range_dragger.pathElement = undefined; + Range_dragger.typus = "Range_dragger"; + + Range_dragger.type = function (){ + return Range_dragger.typus; + }; + + // TODO: We need the endPoint of the Link here! + Range_dragger.parentNode = function (){ + return Range_dragger.parent; + }; + + Range_dragger.hide_dragger = function ( val ){ + Range_dragger.pathElement.classed("hidden", val); + Range_dragger.nodeElement.classed("hidden", val); + Range_dragger.draggerObject.classed("hidden", val); + }; + Range_dragger.hideDragger = function ( val ){ + if ( Range_dragger.pathElement ) Range_dragger.pathElement.classed("hidden", val); + if ( Range_dragger.nodeElement ) Range_dragger.nodeElement.classed("hidden", val); + if ( Range_dragger.draggerObject ) Range_dragger.draggerObject.classed("hidden", val); + + + }; + + Range_dragger.reDrawEverthing = function (){ + Range_dragger.setParentProperty(Range_dragger.parent); + }; + Range_dragger.updateRange = function ( newRange ){ + + if ( graph.genericPropertySanityCheck(Range_dragger.parent.domain(), newRange, + Range_dragger.parent.type(), + "Could not update range", "Restoring previous range") === false ) return; + + // check for triple duplicates! + + if ( graph.propertyCheckExistenceChecker(Range_dragger.parent, Range_dragger.parent.domain(), newRange) === false ) + return; + if ( Range_dragger.parent.labelElement() === undefined ) return; + if ( Range_dragger.parent.labelElement().attr("transform") === "translate(0,15)" || + Range_dragger.parent.labelElement().attr("transform") === "translate(0,-15)" ) { + var prop = Range_dragger.parent; + Range_dragger.parent.inverse().inverse(null); + Range_dragger.parent.inverse(null); + prop.range(newRange); + } + + else { + Range_dragger.parent.range(newRange); + } + // update the position of the new range + var rX = newRange.x; + var rY = newRange.y; + + var dX = Range_dragger.parent.domain().x; + var dY = Range_dragger.parent.domain().y; + + + // center + var cX = 0.49 * (dX + rX); + var cY = 0.49 * (dY + rY); + // put position there; + Range_dragger.parent.labelElement().x = cX; + Range_dragger.parent.labelElement().px = cX; + Range_dragger.parent.labelElement().y = cY; + Range_dragger.parent.labelElement().py = cY; + + }; + + Range_dragger.setParentProperty = function ( parentProperty, inversed ){ + Range_dragger.parent = parentProperty; + var iP; + var renElem; + Range_dragger.isLoopProperty = false; + if ( parentProperty.domain() === parentProperty.range() ) Range_dragger.isLoopProperty = true; + Range_dragger.parent = parentProperty; + renElem = parentProperty.labelObject(); + if ( inversed === true ) { + if ( parentProperty.labelElement() && parentProperty.labelElement().attr("transform") === "translate(0,15)" ) { + iP = renElem.linkDomainIntersection; + if ( renElem.linkDomainIntersection ) { + Range_dragger.x = iP.x; + Range_dragger.y = iP.y; + } + } else { + iP = renElem.linkRangeIntersection; + if ( renElem.linkRangeIntersection ) { + Range_dragger.x = iP.x; + Range_dragger.y = iP.y; + } + } + } + else { + iP = renElem.linkRangeIntersection; + if ( renElem.linkRangeIntersection ) { + Range_dragger.x = iP.x; + Range_dragger.y = iP.y; + } + } + + Range_dragger.updateElement(); + }; + + + /** BASE HANDLING FUNCTIONS ------------------------------------------------- **/ + Range_dragger.id = function ( index ){ + if ( !arguments.length ) { + return Range_dragger.nodeId; + } + Range_dragger.nodeId = index; + }; + + Range_dragger.svgPathLayer = function ( layer ){ + Range_dragger.pathLayer = layer.append('g'); + }; + + Range_dragger.svgRoot = function ( root ){ + if ( !arguments.length ) + return Range_dragger.rootElement; + Range_dragger.rootElement = root; + Range_dragger.rootNodeLayer = Range_dragger.rootElement.append('g'); + Range_dragger.addMouseEvents(); + }; + + /** DRAWING FUNCTIONS ------------------------------------------------- **/ + Range_dragger.drawNode = function (){ + Range_dragger.pathElement = Range_dragger.pathLayer.append('line') + .classed("classNodeDragPath", true); + Range_dragger.pathElement.attr("x1", 0) + .attr("y1", 0) + .attr("x2", 0) + .attr("y2", 0); + + // var lineData = [ + // {"x": 0, "y": 0}, + // {"x": 0, "y": 40}, + // {"x": -40, "y": 0}, + // {"x": 0, "y": -40}, + // {"x": 0, "y": 0} + // ]; + + var lineData = [ + { "x": -40, "y": 0 }, // start + { "x": -20, "y": -10 }, + { "x": 20, "y": -50 }, + { "x": -10, "y": 0 }, // center + { "x": 20, "y": 50 }, + { "x": -20, "y": 10 }, + { "x": -40, "y": 0 } + ]; + + + var lineFunction = d3.svg.line() + .x(function ( d ){ + return d.x; + }) + .y(function ( d ){ + return d.y; + }) + .interpolate("basis-closed"); + var pathData = "M 61,40 C 41,15 41,-15 61,-40 L 1,0 Z"; + + Range_dragger.nodeElement = Range_dragger.rootNodeLayer.append('path').attr("d", pathData); + Range_dragger.nodeElement.classed("classDraggerNode", true); + if ( graph.options().useAccuracyHelper() ) { + Range_dragger.draggerObject = Range_dragger.rootNodeLayer.append("circle"); + Range_dragger.draggerObject.attr("r", 40) + .attr("cx", 0) + .attr("cy", 0) + .classed("superHiddenElement", true); + Range_dragger.draggerObject.classed("superOpacityElement", !graph.options().showDraggerObject()); + } + + + }; + + Range_dragger.updateElementViaDomainDragger = function ( x, y ){ + + var range_x = x; + var range_y = y; + + var dex = Range_dragger.parent.range().x; + var dey = Range_dragger.parent.range().y; + + var dir_X = x - dex; + var dir_Y = y - dey; + + var len = Math.sqrt(dir_X * dir_X + dir_Y * dir_Y); + + var nX = dir_X / len; + var nY = dir_Y / len; + + + var ep_range_x = dex + nX * Range_dragger.parent.range().actualRadius(); + var ep_range_y = dey + nY * Range_dragger.parent.range().actualRadius(); + + + var dx = range_x - ep_range_x; + var dy = range_y - ep_range_y; + len = Math.sqrt(dx * dx + dy * dy); + nX = dx / len; + nY = dy / len; + + var angle = Math.atan2(ep_range_y - range_y, ep_range_x - range_x) * 180 / Math.PI + 180; + Range_dragger.nodeElement.attr("transform", "translate(" + ep_range_x + "," + ep_range_y + ")" + "rotate(" + angle + ")"); + var doX = ep_range_x + nX * 40; + var doY = ep_range_y + nY * 40; + Range_dragger.draggerObject.attr("transform", "translate(" + doX + "," + doY + ")"); + + }; + + + Range_dragger.updateElement = function (){ + if ( Range_dragger.mouseButtonPressed === true || Range_dragger.parent === undefined ) return; + + var range = Range_dragger.parent.range(); + var iP = Range_dragger.parent.labelObject().linkRangeIntersection; + if ( Range_dragger.parent.labelElement() === undefined ) return; + var offsetForLoop = 48; + if ( Range_dragger.parent.labelElement().attr("transform") === "translate(0,15)" ) { + range = Range_dragger.parent.inverse().domain(); + iP = Range_dragger.parent.labelObject().linkDomainIntersection; + offsetForLoop = -48; + } + + if ( iP === undefined ) return; + var range_x = range.x; + var range_y = range.y; + + var ep_range_x = iP.x; + var ep_range_y = iP.y; + // offset for dragger object + var dx = range_x - ep_range_x; + var dy = range_y - ep_range_y; + var len = Math.sqrt(dx * dx + dy * dy); + var nX = dx / len; + var nY = dy / len; + var angle = Math.atan2(ep_range_y - range_y, ep_range_x - range_x) * 180 / Math.PI; + + var doX = ep_range_x - nX * 40; + var doY = ep_range_y - nY * 40; + + if ( Range_dragger.isLoopProperty === true ) + angle -= offsetForLoop; + + + Range_dragger.nodeElement.attr("transform", "translate(" + ep_range_x + "," + ep_range_y + ")" + "rotate(" + angle + ")"); + Range_dragger.draggerObject.attr("transform", "translate(" + doX + "," + doY + ")"); + + + }; + + /** MOUSE HANDLING FUNCTIONS ------------------------------------------------- **/ + + Range_dragger.addMouseEvents = function (){ + var rootLayer = Range_dragger.rootNodeLayer.selectAll("*"); + rootLayer.on("mouseover", Range_dragger.onMouseOver) + .on("mouseout", Range_dragger.onMouseOut) + .on("click", function (){ + }) + .on("dblclick", function (){ + }) + .on("mousedown", Range_dragger.mouseDown) + .on("mouseup", Range_dragger.mouseUp); + }; + + Range_dragger.mouseDown = function (){ + Range_dragger.nodeElement.style("cursor", "move"); + Range_dragger.nodeElement.classed("classDraggerNodeHovered", true); + Range_dragger.mouseButtonPressed = true; + }; + + Range_dragger.mouseUp = function (){ + Range_dragger.nodeElement.style("cursor", "auto"); + Range_dragger.nodeElement.classed("classDraggerNodeHovered", false); + Range_dragger.mouseButtonPressed = false; + }; + + + Range_dragger.mouseEntered = function ( p ){ + if ( !arguments.length ) return Range_dragger.mouseEnteredVar; + Range_dragger.mouseEnteredVar = p; + return Range_dragger; + }; + + Range_dragger.selectedViaTouch = function ( val ){ + Range_dragger.nodeElement.classed("classDraggerNode", !val); + Range_dragger.nodeElement.classed("classDraggerNodeHovered", val); + + }; + + Range_dragger.onMouseOver = function (){ + if ( Range_dragger.mouseEntered() ) { + return; + } + Range_dragger.nodeElement.classed("classDraggerNode", false); + Range_dragger.nodeElement.classed("classDraggerNodeHovered", true); + var selectedNode = Range_dragger.rootElement.node(), + nodeContainer = selectedNode.parentNode; + nodeContainer.appendChild(selectedNode); + + Range_dragger.mouseEntered(true); + + }; + Range_dragger.onMouseOut = function (){ + if ( Range_dragger.mouseButtonPressed === true ) + return; + Range_dragger.nodeElement.classed("classDraggerNodeHovered", false); + Range_dragger.nodeElement.classed("classDraggerNode", true); + Range_dragger.mouseEntered(false); + }; + + Range_dragger.setPosition = function ( x, y ){ + var range_x = Range_dragger.parent.domain().x; + var range_y = Range_dragger.parent.domain().y; + + // var position of the rangeEndPoint + var ep_range_x = x; + var ep_range_y = y; + + // offset for dragger object + var dx = range_x - ep_range_x; + var dy = range_y - ep_range_y; + + var len = Math.sqrt(dx * dx + dy * dy); + + var nX = dx / len; + var nY = dy / len; + + + var angle = Math.atan2(dy, dx) * 180 / Math.PI; + var doX = ep_range_x + nX * 40; + var doY = ep_range_y + nY * 40; + Range_dragger.nodeElement.attr("transform", "translate(" + ep_range_x + "," + ep_range_y + ")" + "rotate(" + angle + ")"); + Range_dragger.draggerObject.attr("transform", "translate(" + doX + "," + doY + ")"); + Range_dragger.x = x; + Range_dragger.y = y; + + }; + + Range_dragger.setAdditionalClassForClass_dragger = function ( name, val ){ + + }; + return Range_dragger; + }; + + + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 70 */ +/***/ (function(module, exports) { + + module.exports = function ( graph ){ + /** variable defs **/ + var Domain_dragger = {}; + Domain_dragger.nodeId = 10002; + Domain_dragger.parent = undefined; + Domain_dragger.x = 0; + Domain_dragger.y = 0; + Domain_dragger.rootElement = undefined; + Domain_dragger.rootNodeLayer = undefined; + Domain_dragger.pathLayer = undefined; + Domain_dragger.mouseEnteredVar = false; + Domain_dragger.mouseButtonPressed = false; + Domain_dragger.nodeElement = undefined; + Domain_dragger.draggerObject = undefined; + + Domain_dragger.pathElement = undefined; + Domain_dragger.typus = "Domain_dragger"; + + Domain_dragger.type = function (){ + return Domain_dragger.typus; + }; + + + // TODO: We need the endPoint of the Link here! + Domain_dragger.parentNode = function (){ + return Domain_dragger.parent; + }; + + Domain_dragger.hide_dragger = function ( val ){ + Domain_dragger.pathElement.classed("hidden", val); + Domain_dragger.nodeElement.classed("hidden", val); + Domain_dragger.draggerObject.classed("hidden", val); + }; + + Domain_dragger.reDrawEverthing = function (){ + Domain_dragger.setParentProperty(Domain_dragger.parent); + }; + Domain_dragger.updateDomain = function ( newDomain ){ + + if ( graph.genericPropertySanityCheck(Domain_dragger.parent.range(), newDomain, Domain_dragger.parent.type(), + "Could not update domain", "Restoring previous domain") === false ) { + Domain_dragger.updateElement(); + return; + } + + if ( graph.propertyCheckExistenceChecker(Domain_dragger.parent, newDomain, Domain_dragger.parent.range()) === false ) + return; + + + if ( Domain_dragger.parent.labelElement() === undefined ) { + Domain_dragger.updateElement(); + return; + } + if ( Domain_dragger.parent.labelElement().attr("transform") === "translate(0,15)" || + Domain_dragger.parent.labelElement().attr("transform") === "translate(0,-15)" ) { + var prop = Domain_dragger.parent; + Domain_dragger.parent.inverse().inverse(null); + Domain_dragger.parent.inverse(null); + console.log("SPLITTING ITEMS!"); + prop.domain(newDomain); + } + else { + Domain_dragger.parent.domain(newDomain); + } + + // update the position of the new range + var rX = Domain_dragger.parent.range().x; + var rY = Domain_dragger.parent.range().y; + var dX = newDomain.x; + var dY = newDomain.y; + + // center + var cX = 0.49 * (dX + rX); + var cY = 0.49 * (dY + rY); + // put position there; + Domain_dragger.parent.labelObject().x = cX; + Domain_dragger.parent.labelObject().px = cX; + Domain_dragger.parent.labelObject().y = cY; + Domain_dragger.parent.labelObject().py = cY; + Domain_dragger.updateElement(); + + }; + + Domain_dragger.setParentProperty = function ( parentProperty, inverted ){ + Domain_dragger.invertedProperty = inverted; + var renElem; + var iP; + Domain_dragger.isLoopProperty = false; + if ( parentProperty.domain() === parentProperty.range() ) + Domain_dragger.isLoopProperty = true; + + Domain_dragger.parent = parentProperty; + renElem = parentProperty.labelObject(); + if ( inverted === true ) { + + // this is the lower element + if ( parentProperty.labelElement() && parentProperty.labelElement().attr("transform") === "translate(0,15)" ) { + // console.log("This is the lower element!"); + iP = renElem.linkRangeIntersection; + if ( renElem.linkRangeIntersection ) { + Domain_dragger.x = iP.x; + Domain_dragger.y = iP.y; + } + } + else { + // console.log("This is the upper element"); + iP = renElem.linkDomainIntersection; + if ( renElem.linkDomainIntersection ) { + Domain_dragger.x = iP.x; + Domain_dragger.y = iP.y; + } + } + } + else { + // console.log("This is single element"); + iP = renElem.linkDomainIntersection; + if ( renElem.linkDomainIntersection ) { + Domain_dragger.x = iP.x; + Domain_dragger.y = iP.y; + } + } + Domain_dragger.updateElement(); + + }; + + Domain_dragger.hideDragger = function ( val ){ + if ( Domain_dragger.pathElement ) Domain_dragger.pathElement.classed("hidden", val); + if ( Domain_dragger.nodeElement ) Domain_dragger.nodeElement.classed("hidden", val); + if ( Domain_dragger.draggerObject ) Domain_dragger.draggerObject.classed("hidden", val); + + + }; + /** BASE HANDLING FUNCTIONS ------------------------------------------------- **/ + Domain_dragger.id = function ( index ){ + if ( !arguments.length ) { + return Domain_dragger.nodeId; + } + Domain_dragger.nodeId = index; + }; + + Domain_dragger.svgPathLayer = function ( layer ){ + Domain_dragger.pathLayer = layer.append('g'); + }; + + Domain_dragger.svgRoot = function ( root ){ + if ( !arguments.length ) + return Domain_dragger.rootElement; + Domain_dragger.rootElement = root; + Domain_dragger.rootNodeLayer = Domain_dragger.rootElement.append('g'); + Domain_dragger.addMouseEvents(); + }; + + /** DRAWING FUNCTIONS ------------------------------------------------- **/ + Domain_dragger.drawNode = function (){ + Domain_dragger.pathElement = Domain_dragger.pathLayer.append('line') + .classed("classNodeDragPath", true); + Domain_dragger.pathElement.attr("x1", 0) + .attr("y1", 0) + .attr("x2", 0) + .attr("y2", 0); + + var pathData = "M 10,40 C -10,15 -10,-15 10,-40 -8.8233455,-13.641384 -36.711107,-5.1228436 -50,0 -36.696429,4.9079017 -8.6403157,13.745728 10,40 Z"; + Domain_dragger.nodeElement = Domain_dragger.rootNodeLayer.append('path').attr("d", pathData); + Domain_dragger.nodeElement.classed("classDraggerNode", true); + if ( graph.options().useAccuracyHelper() ) { + Domain_dragger.draggerObject = Domain_dragger.rootNodeLayer.append("circle"); + Domain_dragger.draggerObject.attr("r", 40) + .attr("cx", 0) + .attr("cy", 0) + .classed("superHiddenElement", true); + Domain_dragger.draggerObject.classed("superOpacityElement", !graph.options().showDraggerObject()); + } + + + }; + Domain_dragger.updateElementViaRangeDragger = function ( x, y ){ + var range_x = x; + var range_y = y; + + var dex = Domain_dragger.parent.domain().x; + var dey = Domain_dragger.parent.domain().y; + + var dir_X = x - dex; + var dir_Y = y - dey; + + var len = Math.sqrt(dir_X * dir_X + dir_Y * dir_Y); + + var nX = dir_X / len; + var nY = dir_Y / len; + + + var ep_range_x = dex + nX * Domain_dragger.parent.domain().actualRadius(); + var ep_range_y = dey + nY * Domain_dragger.parent.domain().actualRadius(); + + var angle = Math.atan2(ep_range_y - range_y, ep_range_x - range_x) * 180 / Math.PI; + + Domain_dragger.nodeElement.attr("transform", "translate(" + ep_range_x + "," + ep_range_y + ")" + "rotate(" + angle + ")"); + var dox = ep_range_x + nX * 20; + var doy = ep_range_y + nY * 20; + Domain_dragger.draggerObject.attr("transform", "translate(" + dox + "," + doy + ")"); + }; + + + Domain_dragger.updateElement = function (){ + if ( Domain_dragger.mouseButtonPressed === true || Domain_dragger.parent === undefined ) return; + + var domain = Domain_dragger.parent.domain(); + var iP = Domain_dragger.parent.labelObject().linkDomainIntersection; + if ( Domain_dragger.parent.labelElement() === undefined ) return; + if ( Domain_dragger.parent.labelElement().attr("transform") === "translate(0,15)" ) { + Domain_dragger.parent.inverse().domain(); + iP = Domain_dragger.parent.labelObject().linkRangeIntersection; + + } + var range_x = domain.x; + var range_y = domain.y; + + + if ( iP === undefined ) return; + var ep_range_x = iP.x; + var ep_range_y = iP.y; + + var dx = range_x - ep_range_x; + var dy = range_y - ep_range_y; + var len = Math.sqrt(dx * dx + dy * dy); + + var nX = dx / len; + var nY = dy / len; + + var dox = ep_range_x - nX * 20; + var doy = ep_range_y - nY * 20; + var angle = Math.atan2(ep_range_y - range_y, ep_range_x - range_x) * 180 / Math.PI + 180; + + Domain_dragger.nodeElement.attr("transform", "translate(" + ep_range_x + "," + ep_range_y + ")" + "rotate(" + angle + ")"); + Domain_dragger.draggerObject.attr("transform", "translate(" + dox + "," + doy + ")"); + }; + + /** MOUSE HANDLING FUNCTIONS ------------------------------------------------- **/ + + Domain_dragger.addMouseEvents = function (){ + var rootLayer = Domain_dragger.rootNodeLayer.selectAll("*"); + rootLayer.on("mouseover", Domain_dragger.onMouseOver) + .on("mouseout", Domain_dragger.onMouseOut) + .on("click", function (){ + }) + .on("dblclick", function (){ + }) + .on("mousedown", Domain_dragger.mouseDown) + .on("mouseup", Domain_dragger.mouseUp); + }; + + Domain_dragger.mouseDown = function (){ + Domain_dragger.nodeElement.style("cursor", "move"); + Domain_dragger.nodeElement.classed("classDraggerNodeHovered", true); + Domain_dragger.mouseButtonPressed = true; + }; + + Domain_dragger.mouseUp = function (){ + Domain_dragger.nodeElement.style("cursor", "auto"); + Domain_dragger.nodeElement.classed("classDraggerNodeHovered", false); + Domain_dragger.mouseButtonPressed = false; + }; + + + Domain_dragger.mouseEntered = function ( p ){ + if ( !arguments.length ) return Domain_dragger.mouseEnteredVar; + Domain_dragger.mouseEnteredVar = p; + return Domain_dragger; + }; + + Domain_dragger.selectedViaTouch = function ( val ){ + Domain_dragger.nodeElement.classed("classDraggerNode", !val); + Domain_dragger.nodeElement.classed("classDraggerNodeHovered", val); + + }; + + Domain_dragger.onMouseOver = function (){ + if ( Domain_dragger.mouseEntered() ) { + return; + } + Domain_dragger.nodeElement.classed("classDraggerNode", false); + Domain_dragger.nodeElement.classed("classDraggerNodeHovered", true); + var selectedNode = Domain_dragger.rootElement.node(), + nodeContainer = selectedNode.parentNode; + nodeContainer.appendChild(selectedNode); + + Domain_dragger.mouseEntered(true); + + }; + Domain_dragger.onMouseOut = function (){ + if ( Domain_dragger.mouseButtonPressed === true ) + return; + Domain_dragger.nodeElement.classed("classDraggerNodeHovered", false); + Domain_dragger.nodeElement.classed("classDraggerNode", true); + Domain_dragger.mouseEntered(false); + }; + + Domain_dragger.setPosition = function ( x, y ){ + var range_x = Domain_dragger.parent.range().x; + var range_y = Domain_dragger.parent.range().y; + + // var position of the rangeEndPoint + var ep_range_x = x; + var ep_range_y = y; + + // offset for dragger object + var dx = range_x - ep_range_x; + var dy = range_y - ep_range_y; + + var len = Math.sqrt(dx * dx + dy * dy); + + var nX = dx / len; + var nY = dy / len; + var dox = ep_range_x + nX * 20; + var doy = ep_range_y + nY * 20; + + var angle = Math.atan2(range_y - ep_range_y, range_x - ep_range_x) * 180 / Math.PI + 180; + + Domain_dragger.nodeElement.attr("transform", "translate(" + ep_range_x + "," + ep_range_y + ")" + "rotate(" + angle + ")"); + Domain_dragger.draggerObject.attr("transform", "translate(" + dox + "," + doy + ")"); + + Domain_dragger.x = x; + Domain_dragger.y = y; + + }; + + Domain_dragger.setAdditionalClassForClass_dragger = function ( name, val ){ + // console.log("Class_dragger should sett the class here") + // Class_dragger.nodeElement.classed(name,val); + + }; + return Domain_dragger; + }; + + + + +/***/ }), +/* 71 */ +/***/ (function(module, exports, __webpack_require__) { + + var CenteringTextElement = __webpack_require__(14); + var elementTools = __webpack_require__(63)(); + var math = __webpack_require__(43)(); + module.exports = function ( graph ){ + /** variable defs **/ + var ShadowClone = {}; + ShadowClone.nodeId = 10003; + ShadowClone.parent = undefined; + ShadowClone.s_x = 0; + ShadowClone.s_y = 0; + ShadowClone.e_x = 0; + ShadowClone.e_y = 0; + ShadowClone.rootElement = undefined; + ShadowClone.rootNodeLayer = undefined; + ShadowClone.pathLayer = undefined; + ShadowClone.nodeElement = undefined; + ShadowClone.pathElement = undefined; + ShadowClone.typus = "shadowClone"; + + + ShadowClone.type = function (){ + return ShadowClone.typus; + }; + + // TODO: We need the endPoint of the Link here! + ShadowClone.parentNode = function (){ + return ShadowClone.parent; + }; + + ShadowClone.setParentProperty = function ( parentProperty, inverted ){ + ShadowClone.invertedProperty = inverted; + ShadowClone.parent = parentProperty; + var renElment; + if ( inverted === true ) { + renElment = parentProperty.inverse().labelObject(); + if ( renElment.linkRangeIntersection && renElment.linkDomainIntersection ) { + var iiP_range = renElment.linkDomainIntersection; + var iiP_domain = renElment.linkRangeIntersection; + ShadowClone.s_x = iiP_domain.x; + ShadowClone.s_y = iiP_domain.y; + ShadowClone.e_x = iiP_range.x; + ShadowClone.e_y = iiP_range.y; + } + } + else { + renElment = parentProperty.labelObject(); + + if ( renElment.linkRangeIntersection && renElment.linkDomainIntersection ) { + var iP_range = renElment.linkRangeIntersection; + var iP_domain = renElment.linkDomainIntersection; + ShadowClone.s_x = iP_domain.x; + ShadowClone.s_y = iP_domain.y; + ShadowClone.e_x = iP_range.x; + ShadowClone.e_y = iP_range.y; + } + + } + + ShadowClone.rootNodeLayer.remove(); + ShadowClone.rootNodeLayer = ShadowClone.rootElement.append('g'); + ShadowClone.rootNodeLayer.datum(parentProperty); + + // ShadowClone.pathElement.remove(); + // ShadowClone.pathElement = ShadowClone.pathLayer.append('line'); + // + // ShadowClone.pathElement.attr("x1", ShadowClone.s_x) + // .attr("y1", ShadowClone.s_y) + // .attr("x2", ShadowClone.e_x) + // .attr("y2", ShadowClone.e_y); + ShadowClone.pathElement.remove(); + ShadowClone.pathElement = ShadowClone.pathLayer.append('line'); + ShadowClone.markerElement = ShadowClone.pathLayer.append("marker"); + ShadowClone.markerElement.attr("id", "shadowCloneMarker"); + ShadowClone.pathElement.attr("x1", ShadowClone.e_x) + .attr("y1", ShadowClone.e_y) + .attr("x2", ShadowClone.s_x) + .attr("y2", ShadowClone.s_y); + ShadowClone.pathElement.classed(parentProperty.linkType(), true); + + if ( parentProperty.markerElement() ) { + ShadowClone.markerElement.attr("viewBox", parentProperty.markerElement().attr("viewBox")) + .attr("markerWidth", parentProperty.markerElement().attr("markerWidth")) + .attr("markerHeight", parentProperty.markerElement().attr("markerHeight")) + .attr("orient", parentProperty.markerElement().attr("orient")); + + var markerPath = parentProperty.markerElement().select("path"); + ShadowClone.markerElement.append("path") + .attr("d", markerPath.attr("d")) + .classed(parentProperty.markerType(), true); + + ShadowClone.pathElement.attr("marker-end", "url(#" + "shadowCloneMarker" + ")"); + ShadowClone.markerElement.classed("hidden", !elementTools.isDatatypeProperty(parentProperty)); + } + var rect = ShadowClone.rootNodeLayer.append("rect") + .classed(parentProperty.styleClass(), true) + .classed("property", true) + .attr("x", -parentProperty.width() / 2) + .attr("y", -parentProperty.height() / 2) + .attr("width", parentProperty.width()) + .attr("height", parentProperty.height()); + + if ( parentProperty.visualAttributes() ) { + rect.classed(parentProperty.visualAttributes(), true); + } + rect.classed("datatype", false); + var bgColor = parentProperty.backgroundColor(); + + if ( parentProperty.attributes().indexOf("deprecated") > -1 ) { + bgColor = undefined; + rect.classed("deprecatedproperty", true); + } else { + rect.classed("deprecatedproperty", false); + } + rect.style("fill", bgColor); + + // add Text; + var equivalentsString = parentProperty.equivalentsString(); + var suffixForFollowingEquivalents = equivalentsString ? "," : ""; + + + var textElement = new CenteringTextElement(ShadowClone.rootNodeLayer, bgColor); + textElement.addText(parentProperty.labelForCurrentLanguage(), "", suffixForFollowingEquivalents); + textElement.addEquivalents(equivalentsString); + textElement.addSubText(parentProperty.indicationString()); + + + var cx = 0.5 * (ShadowClone.s_x + ShadowClone.e_x); + var cy = 0.5 * (ShadowClone.s_y + ShadowClone.e_y); + ShadowClone.rootNodeLayer.attr("transform", "translate(" + cx + "," + cy + ")"); + ShadowClone.rootNodeLayer.classed("hidden", true); + ShadowClone.pathElement.classed("hidden", true); + + + }; + + ShadowClone.hideClone = function ( val ){ + if ( ShadowClone.rootNodeLayer ) ShadowClone.rootNodeLayer.classed("hidden", val); + if ( ShadowClone.pathElement ) ShadowClone.pathElement.classed("hidden", val); + }; + + ShadowClone.hideParentProperty = function ( val ){ + + var labelObj = ShadowClone.parent.labelObject(); + if ( labelObj ) { + if ( ShadowClone.parent.labelElement().attr("transform") === "translate(0,15)" || + ShadowClone.parent.labelElement().attr("transform") === "translate(0,-15)" ) + ShadowClone.parent.inverse().hide(val); + + + } + ShadowClone.parent.hide(val); + + + }; + + /** BASE HANDLING FUNCTIONS ------------------------------------------------- **/ + ShadowClone.id = function ( index ){ + if ( !arguments.length ) { + return ShadowClone.nodeId; + } + ShadowClone.nodeId = index; + }; + + ShadowClone.svgPathLayer = function ( layer ){ + ShadowClone.pathLayer = layer.append('g'); + }; + + ShadowClone.svgRoot = function ( root ){ + if ( !arguments.length ) + return ShadowClone.rootElement; + ShadowClone.rootElement = root; + ShadowClone.rootNodeLayer = ShadowClone.rootElement.append('g'); + + }; + + /** DRAWING FUNCTIONS ------------------------------------------------- **/ + ShadowClone.drawClone = function (){ + ShadowClone.pathElement = ShadowClone.pathLayer.append('line'); + + ShadowClone.pathElement.attr("x1", 0) + .attr("y1", 0) + .attr("x2", 0) + .attr("y2", 0); + + }; + + + ShadowClone.updateElement = function (){ + ShadowClone.pathElement.attr("x1", ShadowClone.e_x) + .attr("y1", ShadowClone.e_y) + .attr("x2", ShadowClone.s_x) + .attr("y2", ShadowClone.s_y); + + var cx = 0.5 * (ShadowClone.s_x + ShadowClone.e_x); + var cy = 0.5 * (ShadowClone.s_y + ShadowClone.e_y); + ShadowClone.rootNodeLayer.attr("transform", "translate(" + cx + "," + cy + ")"); + }; + + ShadowClone.setInitialPosition = function (){ + + var renElment = ShadowClone.parent.labelObject(); + if ( renElment.linkRangeIntersection && renElment.linkDomainIntersection ) { + var iP_range = renElment.linkRangeIntersection; + var iP_domain = renElment.linkDomainIntersection; + ShadowClone.e_x = iP_domain.x; + ShadowClone.e_y = iP_domain.y; + ShadowClone.s_x = iP_range.x; + ShadowClone.s_y = iP_range.y; + } + ShadowClone.updateElement(); + return; + // + // var rex=ShadowClone.parent.range().x; + // var rey=ShadowClone.parent.range().y; + // + // + // var dex=ShadowClone.parent.domain().x; + // var dey=ShadowClone.parent.domain().y; + // + // + // var dir_X= rex-dex; + // var dir_Y= rey-dey; + // + // var len=Math.sqrt(dir_X*dir_X+dir_Y*dir_Y); + // var nX=dir_X/len; + // var nY=dir_Y/len; + // ShadowClone.s_x=rex-nX*ShadowClone.parent.range().actualRadius(); + // ShadowClone.s_y=rey-nY*ShadowClone.parent.range().actualRadius(); + // + // ShadowClone.e_x=dex+nX*ShadowClone.parent.domain().actualRadius(); + // ShadowClone.e_y=dey+nY*ShadowClone.parent.domain().actualRadius(); + // ShadowClone.updateElement(); + + }; + ShadowClone.setPositionDomain = function ( e_x, e_y ){ + + var rex = ShadowClone.parent.range().x; + var rey = ShadowClone.parent.range().y; + + + if ( elementTools.isDatatype(ShadowClone.parent.range()) === true ) { + var intersection = math.calculateIntersection({ x: e_x, y: e_y }, ShadowClone.parent.range(), 0); + ShadowClone.s_x = intersection.x; + ShadowClone.s_y = intersection.y; + } else { + var dir_X = rex - e_x; + var dir_Y = rey - e_y; + + var len = Math.sqrt(dir_X * dir_X + dir_Y * dir_Y); + + var nX = dir_X / len; + var nY = dir_Y / len; + ShadowClone.s_x = rex - nX * ShadowClone.parent.range().actualRadius(); + ShadowClone.s_y = rey - nY * ShadowClone.parent.range().actualRadius(); + + } + + + ShadowClone.e_x = e_x; + ShadowClone.e_y = e_y; + ShadowClone.updateElement(); + }; + + ShadowClone.setPosition = function ( s_x, s_y ){ + ShadowClone.s_x = s_x; + ShadowClone.s_y = s_y; + + // add normalized dir; + + var dex = ShadowClone.parent.domain().x; + var dey = ShadowClone.parent.domain().y; + + var dir_X = s_x - dex; + var dir_Y = s_y - dey; + + var len = Math.sqrt(dir_X * dir_X + dir_Y * dir_Y); + + var nX = dir_X / len; + var nY = dir_Y / len; + + + ShadowClone.e_x = dex + nX * ShadowClone.parent.domain().actualRadius(); + ShadowClone.e_y = dey + nY * ShadowClone.parent.domain().actualRadius(); + + + ShadowClone.updateElement(); + + + }; + + + /** MOUSE HANDLING FUNCTIONS ------------------------------------------------- **/ + + return ShadowClone; + }; + + + + +/***/ }), +/* 72 */ +/***/ (function(module, exports) { + + module.exports = function ( graph ){ + /** variable defs **/ + var prefixRepresentationModule = {}; + + var currentPrefixModel; + + prefixRepresentationModule.updatePrefixModel = function (){ + currentPrefixModel = graph.options().prefixList(); + }; + + + prefixRepresentationModule.validURL = function ( url ){ + return validURL(url); + }; + function validURL( str ){ + var urlregex = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/; + return urlregex.test(str); + } + + function splitURLIntoBaseAndResource( fullURL ){ + var splitedURL = { base: "", resource: "" }; + if ( fullURL === undefined ) { + splitedURL = { base: "ERROR", resource: "NOT FOUND" }; + return splitedURL; + } + + var resource, base; + // check if there is a last hashTag + if ( fullURL.indexOf("#") > -1 ) { + resource = fullURL.substring(fullURL.lastIndexOf('#') + 1); + base = fullURL.substring(0, fullURL.length - resource.length); + // overwrite base if it is ontologyIri; + if ( base === graph.options().getGeneralMetaObjectProperty('iri') ) { + base = ":"; + } + splitedURL.base = base; + splitedURL.resource = resource; + } else { + resource = fullURL.substring(fullURL.lastIndexOf('/') + 1); + base = fullURL.substring(0, fullURL.length - resource.length); + // overwrite base if it is ontologyIri; + if ( base === graph.options().getGeneralMetaObjectProperty('iri') ) { + base = ":"; + } + splitedURL.base = base; + splitedURL.resource = resource; + } + return splitedURL; + } + + prefixRepresentationModule.getPrefixRepresentationForFullURI = function ( fullURL ){ + prefixRepresentationModule.updatePrefixModel(); + var splittedURL = splitURLIntoBaseAndResource(fullURL); + + // lazy approach , for + // loop over prefix model + for ( var name in currentPrefixModel ) { + if ( currentPrefixModel.hasOwnProperty(name) ) { + // THIS IS CASE SENSITIVE! + if ( currentPrefixModel[name] === splittedURL.base ) { + return name + ":" + splittedURL.resource; + } + } + } + + if ( splittedURL.base === ":" ) { + return ":" + splittedURL.resource; + } + + return fullURL; + }; + + + return prefixRepresentationModule; + }; + + + + +/***/ }), +/* 73 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var _ = __webpack_require__(58); + + module.exports = function (){ + + var DEFAULT_STATE = true; + var COLOR_MODES = [ + { type: "same", range: [d3.rgb("#36C"), d3.rgb("#36C")] }, + { type: "gradient", range: [d3.rgb("#36C"), d3.rgb("#EE2867")] } // taken from LD-VOWL + ]; + + var filter = {}, + nodes, + properties, + enabled = DEFAULT_STATE, + filteredNodes, + filteredProperties, + colorModeType = "same"; + + + filter.filter = function ( untouchedNodes, untouchedProperties ){ + nodes = untouchedNodes; + properties = untouchedProperties; + + var externalElements = filterExternalElements(nodes.concat(properties)); + + if ( enabled ) { + setColorsForExternals(externalElements); + } else { + resetBackgroundColors(externalElements); + } + + filteredNodes = nodes; + filteredProperties = properties; + }; + + function filterExternalElements( elements ){ + return elements.filter(function ( element ){ + if ( element.visualAttributes().indexOf("deprecated") >= 0 ) { + // deprecated is the only attribute which has preference over external + return false; + } + + return element.attributes().indexOf("external") >= 0; + }); + } + + function setColorsForExternals( elements ){ + var iriMap = mapExternalsToBaseUri(elements); + var entries = iriMap.entries(); + + var colorScale = d3.scale.linear() + .domain([0, entries.length - 1]) + .range(_.find(COLOR_MODES, { type: colorModeType }).range) + .interpolate(d3.interpolateHsl); + + for ( var i = 0; i < entries.length; i++ ) { + var groupedElements = entries[i].value; + setBackgroundColorForElements(groupedElements, colorScale(i)); + } + } + + function mapExternalsToBaseUri( elements ){ + var map = d3.map(); + + elements.forEach(function ( element ){ + var baseIri = element.baseIri(); + + if ( !map.has(baseIri) ) { + map.set(baseIri, []); + } + map.get(baseIri).push(element); + }); + + return map; + } + + function setBackgroundColorForElements( elements, backgroundColor ){ + elements.forEach(function ( element ){ + element.backgroundColor(backgroundColor); + }); + } + + function resetBackgroundColors( elements ){ + console.log("Resetting color"); + elements.forEach(function ( element ){ + element.backgroundColor(null); + }); + } + + filter.colorModeType = function ( p ){ + if ( !arguments.length ) return colorModeType; + colorModeType = p; + return filter; + }; + + filter.enabled = function ( p ){ + if ( !arguments.length ) return enabled; + enabled = p; + return filter; + }; + + filter.reset = function (){ + enabled = DEFAULT_STATE; + }; + + + // Functions a filter must have + filter.filteredNodes = function (){ + return filteredNodes; + }; + + filter.filteredProperties = function (){ + return filteredProperties; + }; + + + return filter; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 74 */ +/***/ (function(module, exports) { + + /** + * This module abuses the filter function a bit like the statistics module. Nothing is filtered. + * + * @returns {{}} + */ + + + module.exports = function ( graph ){ + + var DEFAULT_STATE = false; + + var filter = {}, + nodes, + properties, + enabled = DEFAULT_STATE, + filteredNodes, + filteredProperties; + + + /** + * If enabled, redundant details won't be drawn anymore. + * @param untouchedNodes + * @param untouchedProperties + */ + filter.filter = function ( untouchedNodes, untouchedProperties ){ + nodes = untouchedNodes; + properties = untouchedProperties; + graph.options().compactNotation(enabled); + filteredNodes = nodes; + filteredProperties = properties; + }; + + filter.enabled = function ( p ){ + if ( !arguments.length ) return enabled; + enabled = p; + return filter; + }; + + filter.reset = function (){ + enabled = DEFAULT_STATE; + }; + + + // Functions a filter must have + filter.filteredNodes = function (){ + return filteredNodes; + }; + + filter.filteredProperties = function (){ + return filteredProperties; + }; + + + return filter; + }; + + +/***/ }), +/* 75 */ +/***/ (function(module, exports, __webpack_require__) { + + var elementTools = __webpack_require__(63)(); + var filterTools = __webpack_require__(76)(); + + module.exports = function (){ + + var filter = {}, + nodes, + properties, + enabled = false, + filteredNodes, + filteredProperties; + + + /** + * If enabled, all datatypes and literals including connected properties are filtered. + * @param untouchedNodes + * @param untouchedProperties + */ + filter.filter = function ( untouchedNodes, untouchedProperties ){ + nodes = untouchedNodes; + properties = untouchedProperties; + + if ( this.enabled() ) { + removeDatatypesAndLiterals(); + } + + filteredNodes = nodes; + filteredProperties = properties; + }; + + function removeDatatypesAndLiterals(){ + var filteredData = filterTools.filterNodesAndTidy(nodes, properties, isNoDatatypeOrLiteral); + + nodes = filteredData.nodes; + properties = filteredData.properties; + } + + function isNoDatatypeOrLiteral( node ){ + return !elementTools.isDatatype(node); + } + + filter.enabled = function ( p ){ + if ( !arguments.length ) return enabled; + enabled = p; + return filter; + }; + + + // Functions a filter must have + filter.filteredNodes = function (){ + return filteredNodes; + }; + + filter.filteredProperties = function (){ + return filteredProperties; + }; + + + return filter; + }; + + +/***/ }), +/* 76 */ +/***/ (function(module, exports, __webpack_require__) { + + var elementTools = __webpack_require__(63)(); + + module.exports = (function (){ + + var tools = {}; + + /** + * Filters the passed nodes and removes dangling properties. + * @param nodes + * @param properties + * @param shouldKeepNode function that returns true if the node should be kept + * @returns {{nodes: Array, properties: Array}} the filtered nodes and properties + */ + tools.filterNodesAndTidy = function ( nodes, properties, shouldKeepNode ){ + var removedNodes = __webpack_require__(62)(), + cleanedNodes = [], + cleanedProperties = []; + + nodes.forEach(function ( node ){ + if ( shouldKeepNode(node) ) { + cleanedNodes.push(node); + } else { + removedNodes.add(node); + } + }); + + properties.forEach(function ( property ){ + if ( propertyHasVisibleNodes(removedNodes, property) ) { + cleanedProperties.push(property); + } else if ( elementTools.isDatatypeProperty(property) ) { + // Remove floating datatypes/literals, because they belong to their datatype property + var index = cleanedNodes.indexOf(property.range()); + if ( index >= 0 ) { + cleanedNodes.splice(index, 1); + } + } + }); + + return { + nodes: cleanedNodes, + properties: cleanedProperties + }; + }; + + /** + * Returns true, if the domain and the range of this property have not been removed. + * @param removedNodes + * @param property + * @returns {boolean} true if property isn't dangling + */ + function propertyHasVisibleNodes( removedNodes, property ){ + return !removedNodes.has(property.domain()) && !removedNodes.has(property.range()); + } + + + return function (){ + return tools; + }; + })(); + + +/***/ }), +/* 77 */ +/***/ (function(module, exports, __webpack_require__) { + + var OwlDisjointWith = __webpack_require__(46); + + module.exports = function (){ + + var filter = {}, + nodes, + properties, + // According to the specification enabled by default + enabled = true, + filteredNodes, + filteredProperties; + + + /** + * If enabled, all disjoint with properties are filtered. + * @param untouchedNodes + * @param untouchedProperties + */ + filter.filter = function ( untouchedNodes, untouchedProperties ){ + nodes = untouchedNodes; + properties = untouchedProperties; + + if ( this.enabled() ) { + removeDisjointWithProperties(); + } + + filteredNodes = nodes; + filteredProperties = properties; + }; + + function removeDisjointWithProperties(){ + var cleanedProperties = [], + i, l, property; + + for ( i = 0, l = properties.length; i < l; i++ ) { + property = properties[i]; + + if ( !(property instanceof OwlDisjointWith) ) { + cleanedProperties.push(property); + } + } + + properties = cleanedProperties; + } + + filter.enabled = function ( p ){ + if ( !arguments.length ) return enabled; + enabled = p; + return filter; + }; + + + // Functions a filter must have + filter.filteredNodes = function (){ + return filteredNodes; + }; + + filter.filteredProperties = function (){ + return filteredProperties; + }; + + + return filter; + }; + + +/***/ }), +/* 78 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {module.exports = function ( graph ){ + var focuser = {}, + focusedElement; + var elementTools = webvowl.util.elementTools(); + focuser.handle = function ( selectedElement, forced ){ + // Don't display details on a drag event, which will be prevented + if ( d3.event && d3.event.defaultPrevented && forced === undefined ) { + return; + } + + if ( focusedElement !== undefined ) { + focusedElement.toggleFocus(); + } + + if ( focusedElement !== selectedElement && selectedElement ) { + selectedElement.toggleFocus(); + focusedElement = selectedElement; + } else { + focusedElement = undefined; + } + if ( focusedElement && focusedElement.focused() ) { + graph.options().editSidebar().updateSelectionInformation(focusedElement); + if ( elementTools.isProperty(selectedElement) === true ) { + var inversed = false; + if ( selectedElement.inverse() ) { + inversed = true; + } + graph.activateHoverElementsForProperties(true, selectedElement, inversed, graph.isTouchDevice()); + } + else { + graph.activateHoverElements(true, selectedElement, graph.isTouchDevice()); + } + } + else { + graph.options().editSidebar().updateSelectionInformation(undefined); + graph.removeEditElements(); + } + }; + + /** + * Removes the focus if an element is focussed. + */ + focuser.reset = function (){ + if ( focusedElement ) { + focusedElement.toggleFocus(); + focusedElement = undefined; + } + }; + + return focuser; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 79 */ +/***/ (function(module, exports) { + + /** @WORKAROUND CODE: + * clears empty literals that are provided by owl2vowl: 0.2.2x*/ + + + module.exports = function (){ + + var filter = {}, + enabled = true, + filteredNodes, + removedNodes, + filteredProperties; + + filter.enabled = function ( val ){ + if ( !arguments.length ) { + return enabled; + } + enabled = val; + }; + + filter.filter = function ( nodes, properties ){ + if ( enabled === false ) { + filteredNodes = nodes; + filteredProperties = properties; + removedNodes = []; + return; + } + var literalUsageMap = []; + var thingUsageMap = []; + var node; + for ( var i = 0; i < properties.length; i++ ) { + // get property range; + var prop = properties[i]; + + // checking for literals + if ( prop.range() ) { + node = prop.range(); + if ( node.type() === "rdfs:Literal" ) { + literalUsageMap[node.id()] = 1; + } + } + // checking for thing + if ( prop.range() ) { + node = prop.range(); + if ( node.type() === "owl:Thing" ) { + thingUsageMap[node.id()] = 1; + } + } + if ( prop.domain() ) { + node = prop.domain(); + if ( node.type() === "owl:Thing" ) { + thingUsageMap[node.id()] = 1; + } + } + + } + var nodesToRemove = []; + var newNodes = []; + // todo: test and make it faster + for ( i = 0; i < nodes.length; i++ ) { + var nodeId = nodes[i].id(); + if ( nodes[i].type() === "rdfs:Literal" ) { + if ( literalUsageMap[nodeId] === undefined ) { + nodesToRemove.push(nodeId); + } + else { + newNodes.push(nodes[i]); + } + // check for node type == OWL:THING + } else if ( nodes[i].type() === "owl:Thing" ) { + if ( thingUsageMap[nodeId] === undefined ) { + nodesToRemove.push(nodeId); + } + else { + newNodes.push(nodes[i]); + } + } else { + newNodes.push(nodes[i]); + } + } + + filteredNodes = newNodes; + filteredProperties = properties; + removedNodes = nodesToRemove; + }; + + + // Functions a filter must have + filter.filteredNodes = function (){ + return filteredNodes; + }; + + filter.removedNodes = function (){ + return removedNodes; + }; + + filter.filteredProperties = function (){ + return filteredProperties; + }; + + + return filter; + }; + + +/***/ }), +/* 80 */ +/***/ (function(module, exports, __webpack_require__) { + + var elementTools = __webpack_require__(63)(); + var filterTools = __webpack_require__(76)(); + + module.exports = function ( menu ){ + + var filter = {}, + nodes, + properties, + enabled = true, + filteredNodes, + filteredProperties, + maxDegreeSetter, + degreeGetter, + lastFiltedDegree, + degreeSetter; + + + var NODE_COUNT_LIMIT_FOR_AUTO_ENABLING = 50; + + + filter.initialize = function ( nodes, properties ){ + lastFiltedDegree = -1; + var maxLinkCount = findMaxLinkCount(nodes); + if ( maxDegreeSetter instanceof Function ) { + maxDegreeSetter(maxLinkCount); + } + + menu.setDefaultDegreeValue(findAutoDefaultDegree(nodes, properties, maxLinkCount)); + var defaultDegree = findDefaultDegree(maxLinkCount); + if ( degreeSetter instanceof Function ) { + degreeSetter(defaultDegree); + if ( defaultDegree > 0 ) { + menu.highlightForDegreeSlider(true); + menu.getGraphObject().setFilterWarning(true); + + } + } else { + console.error("No degree setter function set."); + } + }; + + function findAutoDefaultDegree( nodes, properties, maxDegree ){ + for ( var degree = 0; degree < maxDegree; degree++ ) { + var filteredData = filterByNodeDegree(nodes, properties, degree); + + if ( filteredData.nodes.length <= NODE_COUNT_LIMIT_FOR_AUTO_ENABLING ) { + return degree; + } + } + return 0; + } + + function findDefaultDegree( maxDegree ){ + var globalDegOfFilter = menu.getGraphObject().getGlobalDOF(); + if ( globalDegOfFilter >= 0 ) { + if ( globalDegOfFilter <= maxDegree ) { + return globalDegOfFilter; + } else { + menu.getGraphObject().setGlobalDOF(maxDegree); + return maxDegree; + } + } + return menu.getDefaultDegreeValue(); + } + + /** + * If enabled, all nodes are filter by their node degree. + * @param untouchedNodes + * @param untouchedProperties + */ + filter.filter = function ( untouchedNodes, untouchedProperties ){ + nodes = untouchedNodes; + properties = untouchedProperties; + + if ( this.enabled() ) { + if ( degreeGetter instanceof Function ) { + filterByNodeDegreeAndApply(degreeGetter()); + } else { + console.error("No degree query function set."); + } + } + + filteredNodes = nodes; + filteredProperties = properties; + + if ( filteredNodes.length === 0 ) { + degreeSetter(0); + filteredNodes = untouchedNodes; + filteredProperties = untouchedProperties; + } + lastFiltedDegree = degreeGetter(); + }; + + function findMaxLinkCount( nodes ){ + var maxLinkCount = 0; + for ( var i = 0, l = nodes.length; i < l; i++ ) { + var linksWithoutDatatypes = filterOutDatatypes(nodes[i].links()); + + maxLinkCount = Math.max(maxLinkCount, linksWithoutDatatypes.length); + } + return maxLinkCount; + } + + function filterOutDatatypes( links ){ + return links.filter(function ( link ){ + return !elementTools.isDatatypeProperty(link.property()); + }); + } + + function filterByNodeDegreeAndApply( minDegree ){ + var filteredData = filterByNodeDegree(nodes, properties, minDegree); + nodes = filteredData.nodes; + properties = filteredData.properties; + } + + function filterByNodeDegree( nodes, properties, minDegree ){ + return filterTools.filterNodesAndTidy(nodes, properties, hasRequiredDegree(minDegree)); + } + + function hasRequiredDegree( minDegree ){ + return function ( node ){ + return filterOutDatatypes(node.links()).length >= minDegree; + }; + } + + filter.setMaxDegreeSetter = function ( _maxDegreeSetter ){ + maxDegreeSetter = _maxDegreeSetter; + }; + + filter.setDegreeGetter = function ( _degreeGetter ){ + degreeGetter = _degreeGetter; + }; + + filter.setDegreeSetter = function ( _degreeSetter ){ + degreeSetter = _degreeSetter; + }; + + filter.enabled = function ( p ){ + if ( !arguments.length ) return enabled; + enabled = p; + return filter; + }; + + + // Functions a filter must have + filter.filteredNodes = function (){ + return filteredNodes; + }; + + filter.filteredProperties = function (){ + return filteredProperties; + }; + + + return filter; + }; + + +/***/ }), +/* 81 */ +/***/ (function(module, exports) { + + /** + * This module abuses the filter function a bit like the statistics module. Nothing is filtered. + * + * @returns {{}} + */ + module.exports = function ( graph ){ + + var DEFAULT_STATE = true; + + var filter = {}, + nodes, + properties, + enabled = DEFAULT_STATE, + filteredNodes, + filteredProperties; + + + /** + * If enabled, the scaling of nodes according to individuals will be enabled. + * @param untouchedNodes + * @param untouchedProperties + */ + filter.filter = function ( untouchedNodes, untouchedProperties ){ + nodes = untouchedNodes; + properties = untouchedProperties; + + graph.options().scaleNodesByIndividuals(enabled); + + filteredNodes = nodes; + filteredProperties = properties; + }; + + filter.enabled = function ( p ){ + if ( !arguments.length ) return enabled; + enabled = p; + return filter; + }; + + filter.reset = function (){ + enabled = DEFAULT_STATE; + }; + + + // Functions a filter must have + filter.filteredNodes = function (){ + return filteredNodes; + }; + + filter.filteredProperties = function (){ + return filteredProperties; + }; + + + return filter; + }; + + +/***/ }), +/* 82 */ +/***/ (function(module, exports, __webpack_require__) { + + var elementTools = __webpack_require__(63)(); + + + module.exports = function (){ + + var filter = {}, + nodes, + properties, + enabled = false, + filteredNodes, + filteredProperties; + + + /** + * If enabled, all object properties and things without any other property are filtered. + * @param untouchedNodes + * @param untouchedProperties + */ + filter.filter = function ( untouchedNodes, untouchedProperties ){ + nodes = untouchedNodes; + properties = untouchedProperties; + + if ( this.enabled() ) { + removeObjectProperties(); + } + + filteredNodes = nodes; + filteredProperties = properties; + }; + + function removeObjectProperties(){ + properties = properties.filter(isNoObjectProperty); + nodes = nodes.filter(isNoFloatingThing); + } + + function isNoObjectProperty( property ){ + return !elementTools.isObjectProperty(property); + } + + function isNoFloatingThing( node ){ + var isNoThing = !elementTools.isThing(node); + var hasNonFilteredProperties = hasPropertiesOtherThanObjectProperties(node, properties); + return isNoThing || hasNonFilteredProperties; + } + + function hasPropertiesOtherThanObjectProperties( node, properties ){ + for ( var i = 0; i < properties.length; i++ ) { + var property = properties[i]; + if ( property.domain() !== node && property.range() !== node ) { + continue; + } + + if ( isNoObjectProperty(property) ) { + return true; + } + } + + return false; + } + + filter.enabled = function ( p ){ + if ( !arguments.length ) return enabled; + enabled = p; + return filter; + }; + + + // Functions a filter must have + filter.filteredNodes = function (){ + return filteredNodes; + }; + + filter.filteredProperties = function (){ + return filteredProperties; + }; + + + return filter; + }; + + +/***/ }), +/* 83 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var _ = __webpack_require__(84); + var elementTools = __webpack_require__(63)(); + + module.exports = function (){ + var pap = {}, + enabled = false, + pinnedElements = []; + + pap.addPinnedElement = function ( element ){ + // check if element is already in list + var indexInArray = pinnedElements.indexOf(element); + if ( indexInArray === -1 ) { + pinnedElements.push(element); + } + }; + + pap.handle = function ( selection, forced ){ + if ( !enabled ) { + return; + } + + if ( !forced ) { + if ( wasNotDragged() ) { + return; + } + } + if ( elementTools.isProperty(selection) ) { + if ( selection.inverse() && selection.inverse().pinned() ) { + return; + } else if ( hasNoParallelProperties(selection) ) { + return; + } + } + + if ( !selection.pinned() ) { + selection.drawPin(); + pap.addPinnedElement(selection); + } + }; + + function wasNotDragged(){ + return !d3.event.defaultPrevented; + } + + function hasNoParallelProperties( property ){ + return _.intersection(property.domain().links(), property.range().links()).length === 1; + } + + pap.enabled = function ( p ){ + if ( !arguments.length ) return enabled; + enabled = p; + return pap; + }; + + pap.reset = function (){ + pinnedElements.forEach(function ( element ){ + element.removePin(); + }); + // Clear the array of stored nodes + pinnedElements.length = 0; + }; + + return pap; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 84 */ +/***/ (function(module, exports, __webpack_require__) { + + module.exports = { + 'chunk': __webpack_require__(85), + 'compact': __webpack_require__(105), + 'concat': __webpack_require__(106), + 'difference': __webpack_require__(114), + 'differenceBy': __webpack_require__(167), + 'differenceWith': __webpack_require__(229), + 'drop': __webpack_require__(230), + 'dropRight': __webpack_require__(231), + 'dropRightWhile': __webpack_require__(232), + 'dropWhile': __webpack_require__(234), + 'fill': __webpack_require__(235), + 'findIndex': __webpack_require__(239), + 'findLastIndex': __webpack_require__(240), + 'first': __webpack_require__(241), + 'flatten': __webpack_require__(243), + 'flattenDeep': __webpack_require__(244), + 'flattenDepth': __webpack_require__(245), + 'fromPairs': __webpack_require__(246), + 'head': __webpack_require__(242), + 'indexOf': __webpack_require__(247), + 'initial': __webpack_require__(248), + 'intersection': __webpack_require__(249), + 'intersectionBy': __webpack_require__(252), + 'intersectionWith': __webpack_require__(253), + 'join': __webpack_require__(254), + 'last': __webpack_require__(228), + 'lastIndexOf': __webpack_require__(255), + 'nth': __webpack_require__(257), + 'pull': __webpack_require__(259), + 'pullAll': __webpack_require__(260), + 'pullAllBy': __webpack_require__(263), + 'pullAllWith': __webpack_require__(264), + 'pullAt': __webpack_require__(265), + 'remove': __webpack_require__(272), + 'reverse': __webpack_require__(273), + 'slice': __webpack_require__(274), + 'sortedIndex': __webpack_require__(275), + 'sortedIndexBy': __webpack_require__(278), + 'sortedIndexOf': __webpack_require__(279), + 'sortedLastIndex': __webpack_require__(280), + 'sortedLastIndexBy': __webpack_require__(281), + 'sortedLastIndexOf': __webpack_require__(282), + 'sortedUniq': __webpack_require__(283), + 'sortedUniqBy': __webpack_require__(285), + 'tail': __webpack_require__(286), + 'take': __webpack_require__(287), + 'takeRight': __webpack_require__(288), + 'takeRightWhile': __webpack_require__(289), + 'takeWhile': __webpack_require__(290), + 'union': __webpack_require__(291), + 'unionBy': __webpack_require__(295), + 'unionWith': __webpack_require__(296), + 'uniq': __webpack_require__(297), + 'uniqBy': __webpack_require__(298), + 'uniqWith': __webpack_require__(299), + 'unzip': __webpack_require__(300), + 'unzipWith': __webpack_require__(301), + 'without': __webpack_require__(302), + 'xor': __webpack_require__(303), + 'xorBy': __webpack_require__(305), + 'xorWith': __webpack_require__(306), + 'zip': __webpack_require__(307), + 'zipObject': __webpack_require__(308), + 'zipObjectDeep': __webpack_require__(312), + 'zipWith': __webpack_require__(314) + }; + + +/***/ }), +/* 85 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSlice = __webpack_require__(86), + isIterateeCall = __webpack_require__(87), + toInteger = __webpack_require__(100); + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeCeil = Math.ceil, + nativeMax = Math.max; + + /** + * Creates an array of elements split into groups the length of `size`. + * If `array` can't be split evenly, the final chunk will be the remaining + * elements. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to process. + * @param {number} [size=1] The length of each chunk + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the new array of chunks. + * @example + * + * _.chunk(['a', 'b', 'c', 'd'], 2); + * // => [['a', 'b'], ['c', 'd']] + * + * _.chunk(['a', 'b', 'c', 'd'], 3); + * // => [['a', 'b', 'c'], ['d']] + */ + function chunk(array, size, guard) { + if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) { + size = 1; + } else { + size = nativeMax(toInteger(size), 0); + } + var length = array == null ? 0 : array.length; + if (!length || size < 1) { + return []; + } + var index = 0, + resIndex = 0, + result = Array(nativeCeil(length / size)); + + while (index < length) { + result[resIndex++] = baseSlice(array, index, (index += size)); + } + return result; + } + + module.exports = chunk; + + +/***/ }), +/* 86 */ +/***/ (function(module, exports) { + + /** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = end > length ? length : end; + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; + } + + module.exports = baseSlice; + + +/***/ }), +/* 87 */ +/***/ (function(module, exports, __webpack_require__) { + + var eq = __webpack_require__(88), + isArrayLike = __webpack_require__(89), + isIndex = __webpack_require__(99), + isObject = __webpack_require__(97); + + /** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ + function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object) + ) { + return eq(object[index], value); + } + return false; + } + + module.exports = isIterateeCall; + + +/***/ }), +/* 88 */ +/***/ (function(module, exports) { + + /** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ + function eq(value, other) { + return value === other || (value !== value && other !== other); + } + + module.exports = eq; + + +/***/ }), +/* 89 */ +/***/ (function(module, exports, __webpack_require__) { + + var isFunction = __webpack_require__(90), + isLength = __webpack_require__(98); + + /** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ + function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); + } + + module.exports = isArrayLike; + + +/***/ }), +/* 90 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseGetTag = __webpack_require__(91), + isObject = __webpack_require__(97); + + /** `Object#toString` result references. */ + var asyncTag = '[object AsyncFunction]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + proxyTag = '[object Proxy]'; + + /** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ + function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; + } + + module.exports = isFunction; + + +/***/ }), +/* 91 */ +/***/ (function(module, exports, __webpack_require__) { + + var Symbol = __webpack_require__(92), + getRawTag = __webpack_require__(95), + objectToString = __webpack_require__(96); + + /** `Object#toString` result references. */ + var nullTag = '[object Null]', + undefinedTag = '[object Undefined]'; + + /** Built-in value references. */ + var symToStringTag = Symbol ? Symbol.toStringTag : undefined; + + /** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag && symToStringTag in Object(value)) + ? getRawTag(value) + : objectToString(value); + } + + module.exports = baseGetTag; + + +/***/ }), +/* 92 */ +/***/ (function(module, exports, __webpack_require__) { + + var root = __webpack_require__(93); + + /** Built-in value references. */ + var Symbol = root.Symbol; + + module.exports = Symbol; + + +/***/ }), +/* 93 */ +/***/ (function(module, exports, __webpack_require__) { + + var freeGlobal = __webpack_require__(94); + + /** Detect free variable `self`. */ + var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + + /** Used as a reference to the global object. */ + var root = freeGlobal || freeSelf || Function('return this')(); + + module.exports = root; + + +/***/ }), +/* 94 */ +/***/ (function(module, exports) { + + /* WEBPACK VAR INJECTION */(function(global) {/** Detect free variable `global` from Node.js. */ + var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + + module.exports = freeGlobal; + + /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()))) + +/***/ }), +/* 95 */ +/***/ (function(module, exports, __webpack_require__) { + + var Symbol = __webpack_require__(92); + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString = objectProto.toString; + + /** Built-in value references. */ + var symToStringTag = Symbol ? Symbol.toStringTag : undefined; + + /** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ + function getRawTag(value) { + var isOwn = hasOwnProperty.call(value, symToStringTag), + tag = value[symToStringTag]; + + try { + value[symToStringTag] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; + } + } + return result; + } + + module.exports = getRawTag; + + +/***/ }), +/* 96 */ +/***/ (function(module, exports) { + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString = objectProto.toString; + + /** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ + function objectToString(value) { + return nativeObjectToString.call(value); + } + + module.exports = objectToString; + + +/***/ }), +/* 97 */ +/***/ (function(module, exports) { + + /** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ + function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); + } + + module.exports = isObject; + + +/***/ }), +/* 98 */ +/***/ (function(module, exports) { + + /** Used as references for various `Number` constants. */ + var MAX_SAFE_INTEGER = 9007199254740991; + + /** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ + function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; + } + + module.exports = isLength; + + +/***/ }), +/* 99 */ +/***/ (function(module, exports) { + + /** Used as references for various `Number` constants. */ + var MAX_SAFE_INTEGER = 9007199254740991; + + /** Used to detect unsigned integer values. */ + var reIsUint = /^(?:0|[1-9]\d*)$/; + + /** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ + function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); + } + + module.exports = isIndex; + + +/***/ }), +/* 100 */ +/***/ (function(module, exports, __webpack_require__) { + + var toFinite = __webpack_require__(101); + + /** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ + function toInteger(value) { + var result = toFinite(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; + } + + module.exports = toInteger; + + +/***/ }), +/* 101 */ +/***/ (function(module, exports, __webpack_require__) { + + var toNumber = __webpack_require__(102); + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0, + MAX_INTEGER = 1.7976931348623157e+308; + + /** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ + function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; + } + + module.exports = toFinite; + + +/***/ }), +/* 102 */ +/***/ (function(module, exports, __webpack_require__) { + + var isObject = __webpack_require__(97), + isSymbol = __webpack_require__(103); + + /** Used as references for various `Number` constants. */ + var NAN = 0 / 0; + + /** Used to match leading and trailing whitespace. */ + var reTrim = /^\s+|\s+$/g; + + /** Used to detect bad signed hexadecimal string values. */ + var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + + /** Used to detect binary string values. */ + var reIsBinary = /^0b[01]+$/i; + + /** Used to detect octal string values. */ + var reIsOctal = /^0o[0-7]+$/i; + + /** Built-in method references without a dependency on `root`. */ + var freeParseInt = parseInt; + + /** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ + function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + if (isObject(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = isObject(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = value.replace(reTrim, ''); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); + } + + module.exports = toNumber; + + +/***/ }), +/* 103 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseGetTag = __webpack_require__(91), + isObjectLike = __webpack_require__(104); + + /** `Object#toString` result references. */ + var symbolTag = '[object Symbol]'; + + /** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ + function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && baseGetTag(value) == symbolTag); + } + + module.exports = isSymbol; + + +/***/ }), +/* 104 */ +/***/ (function(module, exports) { + + /** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ + function isObjectLike(value) { + return value != null && typeof value == 'object'; + } + + module.exports = isObjectLike; + + +/***/ }), +/* 105 */ +/***/ (function(module, exports) { + + /** + * Creates an array with all falsey values removed. The values `false`, `null`, + * `0`, `""`, `undefined`, and `NaN` are falsey. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to compact. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.compact([0, 1, false, 2, '', 3]); + * // => [1, 2, 3] + */ + function compact(array) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (value) { + result[resIndex++] = value; + } + } + return result; + } + + module.exports = compact; + + +/***/ }), +/* 106 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayPush = __webpack_require__(107), + baseFlatten = __webpack_require__(108), + copyArray = __webpack_require__(113), + isArray = __webpack_require__(112); + + /** + * Creates a new array concatenating `array` with any additional arrays + * and/or values. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to concatenate. + * @param {...*} [values] The values to concatenate. + * @returns {Array} Returns the new concatenated array. + * @example + * + * var array = [1]; + * var other = _.concat(array, 2, [3], [[4]]); + * + * console.log(other); + * // => [1, 2, 3, [4]] + * + * console.log(array); + * // => [1] + */ + function concat() { + var length = arguments.length; + if (!length) { + return []; + } + var args = Array(length - 1), + array = arguments[0], + index = length; + + while (index--) { + args[index - 1] = arguments[index]; + } + return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); + } + + module.exports = concat; + + +/***/ }), +/* 107 */ +/***/ (function(module, exports) { + + /** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ + function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; + } + + module.exports = arrayPush; + + +/***/ }), +/* 108 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayPush = __webpack_require__(107), + isFlattenable = __webpack_require__(109); + + /** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ + function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + arrayPush(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; + } + + module.exports = baseFlatten; + + +/***/ }), +/* 109 */ +/***/ (function(module, exports, __webpack_require__) { + + var Symbol = __webpack_require__(92), + isArguments = __webpack_require__(110), + isArray = __webpack_require__(112); + + /** Built-in value references. */ + var spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined; + + /** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ + function isFlattenable(value) { + return isArray(value) || isArguments(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); + } + + module.exports = isFlattenable; + + +/***/ }), +/* 110 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIsArguments = __webpack_require__(111), + isObjectLike = __webpack_require__(104); + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** Built-in value references. */ + var propertyIsEnumerable = objectProto.propertyIsEnumerable; + + /** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ + var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { + return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); + }; + + module.exports = isArguments; + + +/***/ }), +/* 111 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseGetTag = __webpack_require__(91), + isObjectLike = __webpack_require__(104); + + /** `Object#toString` result references. */ + var argsTag = '[object Arguments]'; + + /** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ + function baseIsArguments(value) { + return isObjectLike(value) && baseGetTag(value) == argsTag; + } + + module.exports = baseIsArguments; + + +/***/ }), +/* 112 */ +/***/ (function(module, exports) { + + /** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ + var isArray = Array.isArray; + + module.exports = isArray; + + +/***/ }), +/* 113 */ +/***/ (function(module, exports) { + + /** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ + function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; + } + + module.exports = copyArray; + + +/***/ }), +/* 114 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseDifference = __webpack_require__(115), + baseFlatten = __webpack_require__(108), + baseRest = __webpack_require__(157), + isArrayLikeObject = __webpack_require__(166); + + /** + * Creates an array of `array` values not included in the other given arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. The order and references of result values are + * determined by the first array. + * + * **Note:** Unlike `_.pullAll`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @see _.without, _.xor + * @example + * + * _.difference([2, 1], [2, 3]); + * // => [1] + */ + var difference = baseRest(function(array, values) { + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) + : []; + }); + + module.exports = difference; + + +/***/ }), +/* 115 */ +/***/ (function(module, exports, __webpack_require__) { + + var SetCache = __webpack_require__(116), + arrayIncludes = __webpack_require__(148), + arrayIncludesWith = __webpack_require__(153), + arrayMap = __webpack_require__(154), + baseUnary = __webpack_require__(155), + cacheHas = __webpack_require__(156); + + /** Used as the size to enable large array optimizations. */ + var LARGE_ARRAY_SIZE = 200; + + /** + * The base implementation of methods like `_.difference` without support + * for excluding multiple arrays or iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Array} values The values to exclude. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + */ + function baseDifference(array, values, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + isCommon = true, + length = array.length, + result = [], + valuesLength = values.length; + + if (!length) { + return result; + } + if (iteratee) { + values = arrayMap(values, baseUnary(iteratee)); + } + if (comparator) { + includes = arrayIncludesWith; + isCommon = false; + } + else if (values.length >= LARGE_ARRAY_SIZE) { + includes = cacheHas; + isCommon = false; + values = new SetCache(values); + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee == null ? value : iteratee(value); + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var valuesIndex = valuesLength; + while (valuesIndex--) { + if (values[valuesIndex] === computed) { + continue outer; + } + } + result.push(value); + } + else if (!includes(values, computed, comparator)) { + result.push(value); + } + } + return result; + } + + module.exports = baseDifference; + + +/***/ }), +/* 116 */ +/***/ (function(module, exports, __webpack_require__) { + + var MapCache = __webpack_require__(117), + setCacheAdd = __webpack_require__(146), + setCacheHas = __webpack_require__(147); + + /** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ + function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new MapCache; + while (++index < length) { + this.add(values[index]); + } + } + + // Add methods to `SetCache`. + SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; + SetCache.prototype.has = setCacheHas; + + module.exports = SetCache; + + +/***/ }), +/* 117 */ +/***/ (function(module, exports, __webpack_require__) { + + var mapCacheClear = __webpack_require__(118), + mapCacheDelete = __webpack_require__(140), + mapCacheGet = __webpack_require__(143), + mapCacheHas = __webpack_require__(144), + mapCacheSet = __webpack_require__(145); + + /** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function MapCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + // Add methods to `MapCache`. + MapCache.prototype.clear = mapCacheClear; + MapCache.prototype['delete'] = mapCacheDelete; + MapCache.prototype.get = mapCacheGet; + MapCache.prototype.has = mapCacheHas; + MapCache.prototype.set = mapCacheSet; + + module.exports = MapCache; + + +/***/ }), +/* 118 */ +/***/ (function(module, exports, __webpack_require__) { + + var Hash = __webpack_require__(119), + ListCache = __webpack_require__(132), + Map = __webpack_require__(139); + + /** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ + function mapCacheClear() { + this.size = 0; + this.__data__ = { + 'hash': new Hash, + 'map': new (Map || ListCache), + 'string': new Hash + }; + } + + module.exports = mapCacheClear; + + +/***/ }), +/* 119 */ +/***/ (function(module, exports, __webpack_require__) { + + var hashClear = __webpack_require__(120), + hashDelete = __webpack_require__(128), + hashGet = __webpack_require__(129), + hashHas = __webpack_require__(130), + hashSet = __webpack_require__(131); + + /** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function Hash(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + // Add methods to `Hash`. + Hash.prototype.clear = hashClear; + Hash.prototype['delete'] = hashDelete; + Hash.prototype.get = hashGet; + Hash.prototype.has = hashHas; + Hash.prototype.set = hashSet; + + module.exports = Hash; + + +/***/ }), +/* 120 */ +/***/ (function(module, exports, __webpack_require__) { + + var nativeCreate = __webpack_require__(121); + + /** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ + function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; + this.size = 0; + } + + module.exports = hashClear; + + +/***/ }), +/* 121 */ +/***/ (function(module, exports, __webpack_require__) { + + var getNative = __webpack_require__(122); + + /* Built-in method references that are verified to be native. */ + var nativeCreate = getNative(Object, 'create'); + + module.exports = nativeCreate; + + +/***/ }), +/* 122 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIsNative = __webpack_require__(123), + getValue = __webpack_require__(127); + + /** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ + function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; + } + + module.exports = getNative; + + +/***/ }), +/* 123 */ +/***/ (function(module, exports, __webpack_require__) { + + var isFunction = __webpack_require__(90), + isMasked = __webpack_require__(124), + isObject = __webpack_require__(97), + toSource = __webpack_require__(126); + + /** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ + var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + + /** Used to detect host constructors (Safari). */ + var reIsHostCtor = /^\[object .+?Constructor\]$/; + + /** Used for built-in method references. */ + var funcProto = Function.prototype, + objectProto = Object.prototype; + + /** Used to resolve the decompiled source of functions. */ + var funcToString = funcProto.toString; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** Used to detect if a method is native. */ + var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' + ); + + /** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ + function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = isFunction(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); + } + + module.exports = baseIsNative; + + +/***/ }), +/* 124 */ +/***/ (function(module, exports, __webpack_require__) { + + var coreJsData = __webpack_require__(125); + + /** Used to detect methods masquerading as native. */ + var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; + }()); + + /** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ + function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); + } + + module.exports = isMasked; + + +/***/ }), +/* 125 */ +/***/ (function(module, exports, __webpack_require__) { + + var root = __webpack_require__(93); + + /** Used to detect overreaching core-js shims. */ + var coreJsData = root['__core-js_shared__']; + + module.exports = coreJsData; + + +/***/ }), +/* 126 */ +/***/ (function(module, exports) { + + /** Used for built-in method references. */ + var funcProto = Function.prototype; + + /** Used to resolve the decompiled source of functions. */ + var funcToString = funcProto.toString; + + /** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ + function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; + } + + module.exports = toSource; + + +/***/ }), +/* 127 */ +/***/ (function(module, exports) { + + /** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ + function getValue(object, key) { + return object == null ? undefined : object[key]; + } + + module.exports = getValue; + + +/***/ }), +/* 128 */ +/***/ (function(module, exports) { + + /** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function hashDelete(key) { + var result = this.has(key) && delete this.__data__[key]; + this.size -= result ? 1 : 0; + return result; + } + + module.exports = hashDelete; + + +/***/ }), +/* 129 */ +/***/ (function(module, exports, __webpack_require__) { + + var nativeCreate = __webpack_require__(121); + + /** Used to stand-in for `undefined` hash values. */ + var HASH_UNDEFINED = '__lodash_hash_undefined__'; + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty.call(data, key) ? data[key] : undefined; + } + + module.exports = hashGet; + + +/***/ }), +/* 130 */ +/***/ (function(module, exports, __webpack_require__) { + + var nativeCreate = __webpack_require__(121); + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function hashHas(key) { + var data = this.__data__; + return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); + } + + module.exports = hashHas; + + +/***/ }), +/* 131 */ +/***/ (function(module, exports, __webpack_require__) { + + var nativeCreate = __webpack_require__(121); + + /** Used to stand-in for `undefined` hash values. */ + var HASH_UNDEFINED = '__lodash_hash_undefined__'; + + /** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ + function hashSet(key, value) { + var data = this.__data__; + this.size += this.has(key) ? 0 : 1; + data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + return this; + } + + module.exports = hashSet; + + +/***/ }), +/* 132 */ +/***/ (function(module, exports, __webpack_require__) { + + var listCacheClear = __webpack_require__(133), + listCacheDelete = __webpack_require__(134), + listCacheGet = __webpack_require__(136), + listCacheHas = __webpack_require__(137), + listCacheSet = __webpack_require__(138); + + /** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function ListCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + // Add methods to `ListCache`. + ListCache.prototype.clear = listCacheClear; + ListCache.prototype['delete'] = listCacheDelete; + ListCache.prototype.get = listCacheGet; + ListCache.prototype.has = listCacheHas; + ListCache.prototype.set = listCacheSet; + + module.exports = ListCache; + + +/***/ }), +/* 133 */ +/***/ (function(module, exports) { + + /** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ + function listCacheClear() { + this.__data__ = []; + this.size = 0; + } + + module.exports = listCacheClear; + + +/***/ }), +/* 134 */ +/***/ (function(module, exports, __webpack_require__) { + + var assocIndexOf = __webpack_require__(135); + + /** Used for built-in method references. */ + var arrayProto = Array.prototype; + + /** Built-in value references. */ + var splice = arrayProto.splice; + + /** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + --this.size; + return true; + } + + module.exports = listCacheDelete; + + +/***/ }), +/* 135 */ +/***/ (function(module, exports, __webpack_require__) { + + var eq = __webpack_require__(88); + + /** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; + } + + module.exports = assocIndexOf; + + +/***/ }), +/* 136 */ +/***/ (function(module, exports, __webpack_require__) { + + var assocIndexOf = __webpack_require__(135); + + /** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + return index < 0 ? undefined : data[index][1]; + } + + module.exports = listCacheGet; + + +/***/ }), +/* 137 */ +/***/ (function(module, exports, __webpack_require__) { + + var assocIndexOf = __webpack_require__(135); + + /** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; + } + + module.exports = listCacheHas; + + +/***/ }), +/* 138 */ +/***/ (function(module, exports, __webpack_require__) { + + var assocIndexOf = __webpack_require__(135); + + /** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ + function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + ++this.size; + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; + } + + module.exports = listCacheSet; + + +/***/ }), +/* 139 */ +/***/ (function(module, exports, __webpack_require__) { + + var getNative = __webpack_require__(122), + root = __webpack_require__(93); + + /* Built-in method references that are verified to be native. */ + var Map = getNative(root, 'Map'); + + module.exports = Map; + + +/***/ }), +/* 140 */ +/***/ (function(module, exports, __webpack_require__) { + + var getMapData = __webpack_require__(141); + + /** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function mapCacheDelete(key) { + var result = getMapData(this, key)['delete'](key); + this.size -= result ? 1 : 0; + return result; + } + + module.exports = mapCacheDelete; + + +/***/ }), +/* 141 */ +/***/ (function(module, exports, __webpack_require__) { + + var isKeyable = __webpack_require__(142); + + /** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ + function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; + } + + module.exports = getMapData; + + +/***/ }), +/* 142 */ +/***/ (function(module, exports) { + + /** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ + function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); + } + + module.exports = isKeyable; + + +/***/ }), +/* 143 */ +/***/ (function(module, exports, __webpack_require__) { + + var getMapData = __webpack_require__(141); + + /** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function mapCacheGet(key) { + return getMapData(this, key).get(key); + } + + module.exports = mapCacheGet; + + +/***/ }), +/* 144 */ +/***/ (function(module, exports, __webpack_require__) { + + var getMapData = __webpack_require__(141); + + /** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function mapCacheHas(key) { + return getMapData(this, key).has(key); + } + + module.exports = mapCacheHas; + + +/***/ }), +/* 145 */ +/***/ (function(module, exports, __webpack_require__) { + + var getMapData = __webpack_require__(141); + + /** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ + function mapCacheSet(key, value) { + var data = getMapData(this, key), + size = data.size; + + data.set(key, value); + this.size += data.size == size ? 0 : 1; + return this; + } + + module.exports = mapCacheSet; + + +/***/ }), +/* 146 */ +/***/ (function(module, exports) { + + /** Used to stand-in for `undefined` hash values. */ + var HASH_UNDEFINED = '__lodash_hash_undefined__'; + + /** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ + function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; + } + + module.exports = setCacheAdd; + + +/***/ }), +/* 147 */ +/***/ (function(module, exports) { + + /** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ + function setCacheHas(value) { + return this.__data__.has(value); + } + + module.exports = setCacheHas; + + +/***/ }), +/* 148 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIndexOf = __webpack_require__(149); + + /** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ + function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && baseIndexOf(array, value, 0) > -1; + } + + module.exports = arrayIncludes; + + +/***/ }), +/* 149 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseFindIndex = __webpack_require__(150), + baseIsNaN = __webpack_require__(151), + strictIndexOf = __webpack_require__(152); + + /** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseIndexOf(array, value, fromIndex) { + return value === value + ? strictIndexOf(array, value, fromIndex) + : baseFindIndex(array, baseIsNaN, fromIndex); + } + + module.exports = baseIndexOf; + + +/***/ }), +/* 150 */ +/***/ (function(module, exports) { + + /** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; + } + + module.exports = baseFindIndex; + + +/***/ }), +/* 151 */ +/***/ (function(module, exports) { + + /** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ + function baseIsNaN(value) { + return value !== value; + } + + module.exports = baseIsNaN; + + +/***/ }), +/* 152 */ +/***/ (function(module, exports) { + + /** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; + } + + module.exports = strictIndexOf; + + +/***/ }), +/* 153 */ +/***/ (function(module, exports) { + + /** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ + function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; + } + + module.exports = arrayIncludesWith; + + +/***/ }), +/* 154 */ +/***/ (function(module, exports) { + + /** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; + } + + module.exports = arrayMap; + + +/***/ }), +/* 155 */ +/***/ (function(module, exports) { + + /** + * The base implementation of `_.unary` without support for storing metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + */ + function baseUnary(func) { + return function(value) { + return func(value); + }; + } + + module.exports = baseUnary; + + +/***/ }), +/* 156 */ +/***/ (function(module, exports) { + + /** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function cacheHas(cache, key) { + return cache.has(key); + } + + module.exports = cacheHas; + + +/***/ }), +/* 157 */ +/***/ (function(module, exports, __webpack_require__) { + + var identity = __webpack_require__(158), + overRest = __webpack_require__(159), + setToString = __webpack_require__(161); + + /** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ + function baseRest(func, start) { + return setToString(overRest(func, start, identity), func + ''); + } + + module.exports = baseRest; + + +/***/ }), +/* 158 */ +/***/ (function(module, exports) { + + /** + * This method returns the first argument it receives. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'a': 1 }; + * + * console.log(_.identity(object) === object); + * // => true + */ + function identity(value) { + return value; + } + + module.exports = identity; + + +/***/ }), +/* 159 */ +/***/ (function(module, exports, __webpack_require__) { + + var apply = __webpack_require__(160); + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMax = Math.max; + + /** + * A specialized version of `baseRest` which transforms the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @param {Function} transform The rest array transform. + * @returns {Function} Returns the new function. + */ + function overRest(func, start, transform) { + start = nativeMax(start === undefined ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = transform(array); + return apply(func, this, otherArgs); + }; + } + + module.exports = overRest; + + +/***/ }), +/* 160 */ +/***/ (function(module, exports) { + + /** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ + function apply(func, thisArg, args) { + switch (args.length) { + case 0: return func.call(thisArg); + case 1: return func.call(thisArg, args[0]); + case 2: return func.call(thisArg, args[0], args[1]); + case 3: return func.call(thisArg, args[0], args[1], args[2]); + } + return func.apply(thisArg, args); + } + + module.exports = apply; + + +/***/ }), +/* 161 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSetToString = __webpack_require__(162), + shortOut = __webpack_require__(165); + + /** + * Sets the `toString` method of `func` to return `string`. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ + var setToString = shortOut(baseSetToString); + + module.exports = setToString; + + +/***/ }), +/* 162 */ +/***/ (function(module, exports, __webpack_require__) { + + var constant = __webpack_require__(163), + defineProperty = __webpack_require__(164), + identity = __webpack_require__(158); + + /** + * The base implementation of `setToString` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ + var baseSetToString = !defineProperty ? identity : function(func, string) { + return defineProperty(func, 'toString', { + 'configurable': true, + 'enumerable': false, + 'value': constant(string), + 'writable': true + }); + }; + + module.exports = baseSetToString; + + +/***/ }), +/* 163 */ +/***/ (function(module, exports) { + + /** + * Creates a function that returns `value`. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {*} value The value to return from the new function. + * @returns {Function} Returns the new constant function. + * @example + * + * var objects = _.times(2, _.constant({ 'a': 1 })); + * + * console.log(objects); + * // => [{ 'a': 1 }, { 'a': 1 }] + * + * console.log(objects[0] === objects[1]); + * // => true + */ + function constant(value) { + return function() { + return value; + }; + } + + module.exports = constant; + + +/***/ }), +/* 164 */ +/***/ (function(module, exports, __webpack_require__) { + + var getNative = __webpack_require__(122); + + var defineProperty = (function() { + try { + var func = getNative(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} + }()); + + module.exports = defineProperty; + + +/***/ }), +/* 165 */ +/***/ (function(module, exports) { + + /** Used to detect hot functions by number of calls within a span of milliseconds. */ + var HOT_COUNT = 800, + HOT_SPAN = 16; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeNow = Date.now; + + /** + * Creates a function that'll short out and invoke `identity` instead + * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` + * milliseconds. + * + * @private + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new shortable function. + */ + function shortOut(func) { + var count = 0, + lastCalled = 0; + + return function() { + var stamp = nativeNow(), + remaining = HOT_SPAN - (stamp - lastCalled); + + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return arguments[0]; + } + } else { + count = 0; + } + return func.apply(undefined, arguments); + }; + } + + module.exports = shortOut; + + +/***/ }), +/* 166 */ +/***/ (function(module, exports, __webpack_require__) { + + var isArrayLike = __webpack_require__(89), + isObjectLike = __webpack_require__(104); + + /** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, + * else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ + function isArrayLikeObject(value) { + return isObjectLike(value) && isArrayLike(value); + } + + module.exports = isArrayLikeObject; + + +/***/ }), +/* 167 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseDifference = __webpack_require__(115), + baseFlatten = __webpack_require__(108), + baseIteratee = __webpack_require__(168), + baseRest = __webpack_require__(157), + isArrayLikeObject = __webpack_require__(166), + last = __webpack_require__(228); + + /** + * This method is like `_.difference` except that it accepts `iteratee` which + * is invoked for each element of `array` and `values` to generate the criterion + * by which they're compared. The order and references of result values are + * determined by the first array. The iteratee is invoked with one argument: + * (value). + * + * **Note:** Unlike `_.pullAllBy`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [1.2] + * + * // The `_.property` iteratee shorthand. + * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'); + * // => [{ 'x': 2 }] + */ + var differenceBy = baseRest(function(array, values) { + var iteratee = last(values); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; + } + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), baseIteratee(iteratee, 2)) + : []; + }); + + module.exports = differenceBy; + + +/***/ }), +/* 168 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseMatches = __webpack_require__(169), + baseMatchesProperty = __webpack_require__(211), + identity = __webpack_require__(158), + isArray = __webpack_require__(112), + property = __webpack_require__(225); + + /** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ + function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity; + } + if (typeof value == 'object') { + return isArray(value) + ? baseMatchesProperty(value[0], value[1]) + : baseMatches(value); + } + return property(value); + } + + module.exports = baseIteratee; + + +/***/ }), +/* 169 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIsMatch = __webpack_require__(170), + getMatchData = __webpack_require__(208), + matchesStrictComparable = __webpack_require__(210); + + /** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ + function baseMatches(source) { + var matchData = getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || baseIsMatch(object, source, matchData); + }; + } + + module.exports = baseMatches; + + +/***/ }), +/* 170 */ +/***/ (function(module, exports, __webpack_require__) { + + var Stack = __webpack_require__(171), + baseIsEqual = __webpack_require__(177); + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + + /** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ + function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new Stack; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; + } + + module.exports = baseIsMatch; + + +/***/ }), +/* 171 */ +/***/ (function(module, exports, __webpack_require__) { + + var ListCache = __webpack_require__(132), + stackClear = __webpack_require__(172), + stackDelete = __webpack_require__(173), + stackGet = __webpack_require__(174), + stackHas = __webpack_require__(175), + stackSet = __webpack_require__(176); + + /** + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function Stack(entries) { + var data = this.__data__ = new ListCache(entries); + this.size = data.size; + } + + // Add methods to `Stack`. + Stack.prototype.clear = stackClear; + Stack.prototype['delete'] = stackDelete; + Stack.prototype.get = stackGet; + Stack.prototype.has = stackHas; + Stack.prototype.set = stackSet; + + module.exports = Stack; + + +/***/ }), +/* 172 */ +/***/ (function(module, exports, __webpack_require__) { + + var ListCache = __webpack_require__(132); + + /** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ + function stackClear() { + this.__data__ = new ListCache; + this.size = 0; + } + + module.exports = stackClear; + + +/***/ }), +/* 173 */ +/***/ (function(module, exports) { + + /** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function stackDelete(key) { + var data = this.__data__, + result = data['delete'](key); + + this.size = data.size; + return result; + } + + module.exports = stackDelete; + + +/***/ }), +/* 174 */ +/***/ (function(module, exports) { + + /** + * Gets the stack value for `key`. + * + * @private + * @name get + * @memberOf Stack + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function stackGet(key) { + return this.__data__.get(key); + } + + module.exports = stackGet; + + +/***/ }), +/* 175 */ +/***/ (function(module, exports) { + + /** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function stackHas(key) { + return this.__data__.has(key); + } + + module.exports = stackHas; + + +/***/ }), +/* 176 */ +/***/ (function(module, exports, __webpack_require__) { + + var ListCache = __webpack_require__(132), + Map = __webpack_require__(139), + MapCache = __webpack_require__(117); + + /** Used as the size to enable large array optimizations. */ + var LARGE_ARRAY_SIZE = 200; + + /** + * Sets the stack `key` to `value`. + * + * @private + * @name set + * @memberOf Stack + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the stack cache instance. + */ + function stackSet(key, value) { + var data = this.__data__; + if (data instanceof ListCache) { + var pairs = data.__data__; + if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { + pairs.push([key, value]); + this.size = ++data.size; + return this; + } + data = this.__data__ = new MapCache(pairs); + } + data.set(key, value); + this.size = data.size; + return this; + } + + module.exports = stackSet; + + +/***/ }), +/* 177 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIsEqualDeep = __webpack_require__(178), + isObjectLike = __webpack_require__(104); + + /** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ + function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); + } + + module.exports = baseIsEqual; + + +/***/ }), +/* 178 */ +/***/ (function(module, exports, __webpack_require__) { + + var Stack = __webpack_require__(171), + equalArrays = __webpack_require__(179), + equalByTag = __webpack_require__(181), + equalObjects = __webpack_require__(185), + getTag = __webpack_require__(203), + isArray = __webpack_require__(112), + isBuffer = __webpack_require__(194), + isTypedArray = __webpack_require__(196); + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG = 1; + + /** `Object#toString` result references. */ + var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + objectTag = '[object Object]'; + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = objIsArr ? arrayTag : getTag(object), + othTag = othIsArr ? arrayTag : getTag(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && isBuffer(object)) { + if (!isBuffer(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new Stack); + return (objIsArr || isTypedArray(object)) + ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new Stack); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new Stack); + return equalObjects(object, other, bitmask, customizer, equalFunc, stack); + } + + module.exports = baseIsEqualDeep; + + +/***/ }), +/* 179 */ +/***/ (function(module, exports, __webpack_require__) { + + var SetCache = __webpack_require__(116), + arraySome = __webpack_require__(180), + cacheHas = __webpack_require__(156); + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + + /** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ + function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(array); + if (stacked && stack.get(other)) { + return stacked == other; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!arraySome(other, function(othValue, othIndex) { + if (!cacheHas(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; + } + + module.exports = equalArrays; + + +/***/ }), +/* 180 */ +/***/ (function(module, exports) { + + /** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ + function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; + } + + module.exports = arraySome; + + +/***/ }), +/* 181 */ +/***/ (function(module, exports, __webpack_require__) { + + var Symbol = __webpack_require__(92), + Uint8Array = __webpack_require__(182), + eq = __webpack_require__(88), + equalArrays = __webpack_require__(179), + mapToArray = __webpack_require__(183), + setToArray = __webpack_require__(184); + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + + /** `Object#toString` result references. */ + var boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + + var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]'; + + /** Used to convert symbols to primitives and strings. */ + var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + + /** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new Uint8Array(object), new Uint8Array(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return eq(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = mapToArray; + + case setTag: + var isPartial = bitmask & COMPARE_PARTIAL_FLAG; + convert || (convert = setToArray); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; + } + + module.exports = equalByTag; + + +/***/ }), +/* 182 */ +/***/ (function(module, exports, __webpack_require__) { + + var root = __webpack_require__(93); + + /** Built-in value references. */ + var Uint8Array = root.Uint8Array; + + module.exports = Uint8Array; + + +/***/ }), +/* 183 */ +/***/ (function(module, exports) { + + /** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ + function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; + } + + module.exports = mapToArray; + + +/***/ }), +/* 184 */ +/***/ (function(module, exports) { + + /** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ + function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; + } + + module.exports = setToArray; + + +/***/ }), +/* 185 */ +/***/ (function(module, exports, __webpack_require__) { + + var getAllKeys = __webpack_require__(186); + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG = 1; + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + objProps = getAllKeys(object), + objLength = objProps.length, + othProps = getAllKeys(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { + return false; + } + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked && stack.get(other)) { + return stacked == other; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; + } + + module.exports = equalObjects; + + +/***/ }), +/* 186 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseGetAllKeys = __webpack_require__(187), + getSymbols = __webpack_require__(188), + keys = __webpack_require__(191); + + /** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ + function getAllKeys(object) { + return baseGetAllKeys(object, keys, getSymbols); + } + + module.exports = getAllKeys; + + +/***/ }), +/* 187 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayPush = __webpack_require__(107), + isArray = __webpack_require__(112); + + /** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ + function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); + } + + module.exports = baseGetAllKeys; + + +/***/ }), +/* 188 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayFilter = __webpack_require__(189), + stubArray = __webpack_require__(190); + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Built-in value references. */ + var propertyIsEnumerable = objectProto.propertyIsEnumerable; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeGetSymbols = Object.getOwnPropertySymbols; + + /** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ + var getSymbols = !nativeGetSymbols ? stubArray : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return arrayFilter(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); + }; + + module.exports = getSymbols; + + +/***/ }), +/* 189 */ +/***/ (function(module, exports) { + + /** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; + } + + module.exports = arrayFilter; + + +/***/ }), +/* 190 */ +/***/ (function(module, exports) { + + /** + * This method returns a new empty array. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {Array} Returns the new empty array. + * @example + * + * var arrays = _.times(2, _.stubArray); + * + * console.log(arrays); + * // => [[], []] + * + * console.log(arrays[0] === arrays[1]); + * // => false + */ + function stubArray() { + return []; + } + + module.exports = stubArray; + + +/***/ }), +/* 191 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayLikeKeys = __webpack_require__(192), + baseKeys = __webpack_require__(199), + isArrayLike = __webpack_require__(89); + + /** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ + function keys(object) { + return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); + } + + module.exports = keys; + + +/***/ }), +/* 192 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseTimes = __webpack_require__(193), + isArguments = __webpack_require__(110), + isArray = __webpack_require__(112), + isBuffer = __webpack_require__(194), + isIndex = __webpack_require__(99), + isTypedArray = __webpack_require__(196); + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ + function arrayLikeKeys(value, inherited) { + var isArr = isArray(value), + isArg = !isArr && isArguments(value), + isBuff = !isArr && !isArg && isBuffer(value), + isType = !isArr && !isArg && !isBuff && isTypedArray(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? baseTimes(value.length, String) : [], + length = result.length; + + for (var key in value) { + if ((inherited || hasOwnProperty.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + isIndex(key, length) + ))) { + result.push(key); + } + } + return result; + } + + module.exports = arrayLikeKeys; + + +/***/ }), +/* 193 */ +/***/ (function(module, exports) { + + /** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ + function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; + } + + module.exports = baseTimes; + + +/***/ }), +/* 194 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(module) {var root = __webpack_require__(93), + stubFalse = __webpack_require__(195); + + /** Detect free variable `exports`. */ + var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + + /** Detect free variable `module`. */ + var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + + /** Detect the popular CommonJS extension `module.exports`. */ + var moduleExports = freeModule && freeModule.exports === freeExports; + + /** Built-in value references. */ + var Buffer = moduleExports ? root.Buffer : undefined; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; + + /** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */ + var isBuffer = nativeIsBuffer || stubFalse; + + module.exports = isBuffer; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(59)(module))) + +/***/ }), +/* 195 */ +/***/ (function(module, exports) { + + /** + * This method returns `false`. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {boolean} Returns `false`. + * @example + * + * _.times(2, _.stubFalse); + * // => [false, false] + */ + function stubFalse() { + return false; + } + + module.exports = stubFalse; + + +/***/ }), +/* 196 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIsTypedArray = __webpack_require__(197), + baseUnary = __webpack_require__(155), + nodeUtil = __webpack_require__(198); + + /* Node.js helper references. */ + var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; + + /** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ + var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; + + module.exports = isTypedArray; + + +/***/ }), +/* 197 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseGetTag = __webpack_require__(91), + isLength = __webpack_require__(98), + isObjectLike = __webpack_require__(104); + + /** `Object#toString` result references. */ + var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + mapTag = '[object Map]', + numberTag = '[object Number]', + objectTag = '[object Object]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + weakMapTag = '[object WeakMap]'; + + var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + + /** Used to identify `toStringTag` values of typed arrays. */ + var typedArrayTags = {}; + typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = + typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = + typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = + typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = + typedArrayTags[uint32Tag] = true; + typedArrayTags[argsTag] = typedArrayTags[arrayTag] = + typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = + typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = + typedArrayTags[errorTag] = typedArrayTags[funcTag] = + typedArrayTags[mapTag] = typedArrayTags[numberTag] = + typedArrayTags[objectTag] = typedArrayTags[regexpTag] = + typedArrayTags[setTag] = typedArrayTags[stringTag] = + typedArrayTags[weakMapTag] = false; + + /** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ + function baseIsTypedArray(value) { + return isObjectLike(value) && + isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; + } + + module.exports = baseIsTypedArray; + + +/***/ }), +/* 198 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(module) {var freeGlobal = __webpack_require__(94); + + /** Detect free variable `exports`. */ + var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + + /** Detect free variable `module`. */ + var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + + /** Detect the popular CommonJS extension `module.exports`. */ + var moduleExports = freeModule && freeModule.exports === freeExports; + + /** Detect free variable `process` from Node.js. */ + var freeProcess = moduleExports && freeGlobal.process; + + /** Used to access faster Node.js helpers. */ + var nodeUtil = (function() { + try { + // Use `util.types` for Node.js 10+. + var types = freeModule && freeModule.require && freeModule.require('util').types; + + if (types) { + return types; + } + + // Legacy `process.binding('util')` for Node.js < 10. + return freeProcess && freeProcess.binding && freeProcess.binding('util'); + } catch (e) {} + }()); + + module.exports = nodeUtil; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(59)(module))) + +/***/ }), +/* 199 */ +/***/ (function(module, exports, __webpack_require__) { + + var isPrototype = __webpack_require__(200), + nativeKeys = __webpack_require__(201); + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeys(object) { + if (!isPrototype(object)) { + return nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; + } + + module.exports = baseKeys; + + +/***/ }), +/* 200 */ +/***/ (function(module, exports) { + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ + function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; + + return value === proto; + } + + module.exports = isPrototype; + + +/***/ }), +/* 201 */ +/***/ (function(module, exports, __webpack_require__) { + + var overArg = __webpack_require__(202); + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeKeys = overArg(Object.keys, Object); + + module.exports = nativeKeys; + + +/***/ }), +/* 202 */ +/***/ (function(module, exports) { + + /** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ + function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; + } + + module.exports = overArg; + + +/***/ }), +/* 203 */ +/***/ (function(module, exports, __webpack_require__) { + + var DataView = __webpack_require__(204), + Map = __webpack_require__(139), + Promise = __webpack_require__(205), + Set = __webpack_require__(206), + WeakMap = __webpack_require__(207), + baseGetTag = __webpack_require__(91), + toSource = __webpack_require__(126); + + /** `Object#toString` result references. */ + var mapTag = '[object Map]', + objectTag = '[object Object]', + promiseTag = '[object Promise]', + setTag = '[object Set]', + weakMapTag = '[object WeakMap]'; + + var dataViewTag = '[object DataView]'; + + /** Used to detect maps, sets, and weakmaps. */ + var dataViewCtorString = toSource(DataView), + mapCtorString = toSource(Map), + promiseCtorString = toSource(Promise), + setCtorString = toSource(Set), + weakMapCtorString = toSource(WeakMap); + + /** + * Gets the `toStringTag` of `value`. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + var getTag = baseGetTag; + + // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. + if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || + (Map && getTag(new Map) != mapTag) || + (Promise && getTag(Promise.resolve()) != promiseTag) || + (Set && getTag(new Set) != setTag) || + (WeakMap && getTag(new WeakMap) != weakMapTag)) { + getTag = function(value) { + var result = baseGetTag(value), + Ctor = result == objectTag ? value.constructor : undefined, + ctorString = Ctor ? toSource(Ctor) : ''; + + if (ctorString) { + switch (ctorString) { + case dataViewCtorString: return dataViewTag; + case mapCtorString: return mapTag; + case promiseCtorString: return promiseTag; + case setCtorString: return setTag; + case weakMapCtorString: return weakMapTag; + } + } + return result; + }; + } + + module.exports = getTag; + + +/***/ }), +/* 204 */ +/***/ (function(module, exports, __webpack_require__) { + + var getNative = __webpack_require__(122), + root = __webpack_require__(93); + + /* Built-in method references that are verified to be native. */ + var DataView = getNative(root, 'DataView'); + + module.exports = DataView; + + +/***/ }), +/* 205 */ +/***/ (function(module, exports, __webpack_require__) { + + var getNative = __webpack_require__(122), + root = __webpack_require__(93); + + /* Built-in method references that are verified to be native. */ + var Promise = getNative(root, 'Promise'); + + module.exports = Promise; + + +/***/ }), +/* 206 */ +/***/ (function(module, exports, __webpack_require__) { + + var getNative = __webpack_require__(122), + root = __webpack_require__(93); + + /* Built-in method references that are verified to be native. */ + var Set = getNative(root, 'Set'); + + module.exports = Set; + + +/***/ }), +/* 207 */ +/***/ (function(module, exports, __webpack_require__) { + + var getNative = __webpack_require__(122), + root = __webpack_require__(93); + + /* Built-in method references that are verified to be native. */ + var WeakMap = getNative(root, 'WeakMap'); + + module.exports = WeakMap; + + +/***/ }), +/* 208 */ +/***/ (function(module, exports, __webpack_require__) { + + var isStrictComparable = __webpack_require__(209), + keys = __webpack_require__(191); + + /** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ + function getMatchData(object) { + var result = keys(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, isStrictComparable(value)]; + } + return result; + } + + module.exports = getMatchData; + + +/***/ }), +/* 209 */ +/***/ (function(module, exports, __webpack_require__) { + + var isObject = __webpack_require__(97); + + /** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ + function isStrictComparable(value) { + return value === value && !isObject(value); + } + + module.exports = isStrictComparable; + + +/***/ }), +/* 210 */ +/***/ (function(module, exports) { + + /** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ + function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; + } + + module.exports = matchesStrictComparable; + + +/***/ }), +/* 211 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIsEqual = __webpack_require__(177), + get = __webpack_require__(212), + hasIn = __webpack_require__(222), + isKey = __webpack_require__(215), + isStrictComparable = __webpack_require__(209), + matchesStrictComparable = __webpack_require__(210), + toKey = __webpack_require__(221); + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + + /** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ + function baseMatchesProperty(path, srcValue) { + if (isKey(path) && isStrictComparable(srcValue)) { + return matchesStrictComparable(toKey(path), srcValue); + } + return function(object) { + var objValue = get(object, path); + return (objValue === undefined && objValue === srcValue) + ? hasIn(object, path) + : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); + }; + } + + module.exports = baseMatchesProperty; + + +/***/ }), +/* 212 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseGet = __webpack_require__(213); + + /** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ + function get(object, path, defaultValue) { + var result = object == null ? undefined : baseGet(object, path); + return result === undefined ? defaultValue : result; + } + + module.exports = get; + + +/***/ }), +/* 213 */ +/***/ (function(module, exports, __webpack_require__) { + + var castPath = __webpack_require__(214), + toKey = __webpack_require__(221); + + /** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ + function baseGet(object, path) { + path = castPath(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[toKey(path[index++])]; + } + return (index && index == length) ? object : undefined; + } + + module.exports = baseGet; + + +/***/ }), +/* 214 */ +/***/ (function(module, exports, __webpack_require__) { + + var isArray = __webpack_require__(112), + isKey = __webpack_require__(215), + stringToPath = __webpack_require__(216), + toString = __webpack_require__(219); + + /** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ + function castPath(value, object) { + if (isArray(value)) { + return value; + } + return isKey(value, object) ? [value] : stringToPath(toString(value)); + } + + module.exports = castPath; + + +/***/ }), +/* 215 */ +/***/ (function(module, exports, __webpack_require__) { + + var isArray = __webpack_require__(112), + isSymbol = __webpack_require__(103); + + /** Used to match property names within property paths. */ + var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + + /** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ + function isKey(value, object) { + if (isArray(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || isSymbol(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); + } + + module.exports = isKey; + + +/***/ }), +/* 216 */ +/***/ (function(module, exports, __webpack_require__) { + + var memoizeCapped = __webpack_require__(217); + + /** Used to match property names within property paths. */ + var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + + /** Used to match backslashes in property paths. */ + var reEscapeChar = /\\(\\)?/g; + + /** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ + var stringToPath = memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; + }); + + module.exports = stringToPath; + + +/***/ }), +/* 217 */ +/***/ (function(module, exports, __webpack_require__) { + + var memoize = __webpack_require__(218); + + /** Used as the maximum memoize cache size. */ + var MAX_MEMOIZE_SIZE = 500; + + /** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ + function memoizeCapped(func) { + var result = memoize(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; + } + + module.exports = memoizeCapped; + + +/***/ }), +/* 218 */ +/***/ (function(module, exports, __webpack_require__) { + + var MapCache = __webpack_require__(117); + + /** Error message constants. */ + var FUNC_ERROR_TEXT = 'Expected a function'; + + /** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided, it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is used as the map cache key. The `func` + * is invoked with the `this` binding of the memoized function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the + * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) + * method interface of `clear`, `delete`, `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoized function. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * var other = { 'c': 3, 'd': 4 }; + * + * var values = _.memoize(_.values); + * values(object); + * // => [1, 2] + * + * values(other); + * // => [3, 4] + * + * object.a = 2; + * values(object); + * // => [1, 2] + * + * // Modify the result cache. + * values.cache.set(object, ['a', 'b']); + * values(object); + * // => ['a', 'b'] + * + * // Replace `_.memoize.Cache`. + * _.memoize.Cache = WeakMap; + */ + function memoize(func, resolver) { + if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function() { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; + + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result) || cache; + return result; + }; + memoized.cache = new (memoize.Cache || MapCache); + return memoized; + } + + // Expose `MapCache`. + memoize.Cache = MapCache; + + module.exports = memoize; + + +/***/ }), +/* 219 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseToString = __webpack_require__(220); + + /** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ + function toString(value) { + return value == null ? '' : baseToString(value); + } + + module.exports = toString; + + +/***/ }), +/* 220 */ +/***/ (function(module, exports, __webpack_require__) { + + var Symbol = __webpack_require__(92), + arrayMap = __webpack_require__(154), + isArray = __webpack_require__(112), + isSymbol = __webpack_require__(103); + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0; + + /** Used to convert symbols to primitives and strings. */ + var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + + /** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ + function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isArray(value)) { + // Recursively convert values (susceptible to call stack limits). + return arrayMap(value, baseToString) + ''; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + } + + module.exports = baseToString; + + +/***/ }), +/* 221 */ +/***/ (function(module, exports, __webpack_require__) { + + var isSymbol = __webpack_require__(103); + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0; + + /** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ + function toKey(value) { + if (typeof value == 'string' || isSymbol(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + } + + module.exports = toKey; + + +/***/ }), +/* 222 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseHasIn = __webpack_require__(223), + hasPath = __webpack_require__(224); + + /** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ + function hasIn(object, path) { + return object != null && hasPath(object, path, baseHasIn); + } + + module.exports = hasIn; + + +/***/ }), +/* 223 */ +/***/ (function(module, exports) { + + /** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ + function baseHasIn(object, key) { + return object != null && key in Object(object); + } + + module.exports = baseHasIn; + + +/***/ }), +/* 224 */ +/***/ (function(module, exports, __webpack_require__) { + + var castPath = __webpack_require__(214), + isArguments = __webpack_require__(110), + isArray = __webpack_require__(112), + isIndex = __webpack_require__(99), + isLength = __webpack_require__(98), + toKey = __webpack_require__(221); + + /** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ + function hasPath(object, path, hasFunc) { + path = castPath(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = toKey(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && isLength(length) && isIndex(key, length) && + (isArray(object) || isArguments(object)); + } + + module.exports = hasPath; + + +/***/ }), +/* 225 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseProperty = __webpack_require__(226), + basePropertyDeep = __webpack_require__(227), + isKey = __webpack_require__(215), + toKey = __webpack_require__(221); + + /** + * Creates a function that returns the value at `path` of a given object. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + * @example + * + * var objects = [ + * { 'a': { 'b': 2 } }, + * { 'a': { 'b': 1 } } + * ]; + * + * _.map(objects, _.property('a.b')); + * // => [2, 1] + * + * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); + * // => [1, 2] + */ + function property(path) { + return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path); + } + + module.exports = property; + + +/***/ }), +/* 226 */ +/***/ (function(module, exports) { + + /** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ + function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; + } + + module.exports = baseProperty; + + +/***/ }), +/* 227 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseGet = __webpack_require__(213); + + /** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ + function basePropertyDeep(path) { + return function(object) { + return baseGet(object, path); + }; + } + + module.exports = basePropertyDeep; + + +/***/ }), +/* 228 */ +/***/ (function(module, exports) { + + /** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ + function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; + } + + module.exports = last; + + +/***/ }), +/* 229 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseDifference = __webpack_require__(115), + baseFlatten = __webpack_require__(108), + baseRest = __webpack_require__(157), + isArrayLikeObject = __webpack_require__(166), + last = __webpack_require__(228); + + /** + * This method is like `_.difference` except that it accepts `comparator` + * which is invoked to compare elements of `array` to `values`. The order and + * references of result values are determined by the first array. The comparator + * is invoked with two arguments: (arrVal, othVal). + * + * **Note:** Unlike `_.pullAllWith`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * + * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual); + * // => [{ 'x': 2, 'y': 1 }] + */ + var differenceWith = baseRest(function(array, values) { + var comparator = last(values); + if (isArrayLikeObject(comparator)) { + comparator = undefined; + } + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator) + : []; + }); + + module.exports = differenceWith; + + +/***/ }), +/* 230 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSlice = __webpack_require__(86), + toInteger = __webpack_require__(100); + + /** + * Creates a slice of `array` with `n` elements dropped from the beginning. + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.drop([1, 2, 3]); + * // => [2, 3] + * + * _.drop([1, 2, 3], 2); + * // => [3] + * + * _.drop([1, 2, 3], 5); + * // => [] + * + * _.drop([1, 2, 3], 0); + * // => [1, 2, 3] + */ + function drop(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + return baseSlice(array, n < 0 ? 0 : n, length); + } + + module.exports = drop; + + +/***/ }), +/* 231 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSlice = __webpack_require__(86), + toInteger = __webpack_require__(100); + + /** + * Creates a slice of `array` with `n` elements dropped from the end. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.dropRight([1, 2, 3]); + * // => [1, 2] + * + * _.dropRight([1, 2, 3], 2); + * // => [1] + * + * _.dropRight([1, 2, 3], 5); + * // => [] + * + * _.dropRight([1, 2, 3], 0); + * // => [1, 2, 3] + */ + function dropRight(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + n = length - n; + return baseSlice(array, 0, n < 0 ? 0 : n); + } + + module.exports = dropRight; + + +/***/ }), +/* 232 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIteratee = __webpack_require__(168), + baseWhile = __webpack_require__(233); + + /** + * Creates a slice of `array` excluding elements dropped from the end. + * Elements are dropped until `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.dropRightWhile(users, function(o) { return !o.active; }); + * // => objects for ['barney'] + * + * // The `_.matches` iteratee shorthand. + * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false }); + * // => objects for ['barney', 'fred'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.dropRightWhile(users, ['active', false]); + * // => objects for ['barney'] + * + * // The `_.property` iteratee shorthand. + * _.dropRightWhile(users, 'active'); + * // => objects for ['barney', 'fred', 'pebbles'] + */ + function dropRightWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, baseIteratee(predicate, 3), true, true) + : []; + } + + module.exports = dropRightWhile; + + +/***/ }), +/* 233 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSlice = __webpack_require__(86); + + /** + * The base implementation of methods like `_.dropWhile` and `_.takeWhile` + * without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to query. + * @param {Function} predicate The function invoked per iteration. + * @param {boolean} [isDrop] Specify dropping elements instead of taking them. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the slice of `array`. + */ + function baseWhile(array, predicate, isDrop, fromRight) { + var length = array.length, + index = fromRight ? length : -1; + + while ((fromRight ? index-- : ++index < length) && + predicate(array[index], index, array)) {} + + return isDrop + ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) + : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); + } + + module.exports = baseWhile; + + +/***/ }), +/* 234 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIteratee = __webpack_require__(168), + baseWhile = __webpack_require__(233); + + /** + * Creates a slice of `array` excluding elements dropped from the beginning. + * Elements are dropped until `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.dropWhile(users, function(o) { return !o.active; }); + * // => objects for ['pebbles'] + * + * // The `_.matches` iteratee shorthand. + * _.dropWhile(users, { 'user': 'barney', 'active': false }); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.dropWhile(users, ['active', false]); + * // => objects for ['pebbles'] + * + * // The `_.property` iteratee shorthand. + * _.dropWhile(users, 'active'); + * // => objects for ['barney', 'fred', 'pebbles'] + */ + function dropWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, baseIteratee(predicate, 3), true) + : []; + } + + module.exports = dropWhile; + + +/***/ }), +/* 235 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseFill = __webpack_require__(236), + isIterateeCall = __webpack_require__(87); + + /** + * Fills elements of `array` with `value` from `start` up to, but not + * including, `end`. + * + * **Note:** This method mutates `array`. + * + * @static + * @memberOf _ + * @since 3.2.0 + * @category Array + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3]; + * + * _.fill(array, 'a'); + * console.log(array); + * // => ['a', 'a', 'a'] + * + * _.fill(Array(3), 2); + * // => [2, 2, 2] + * + * _.fill([4, 6, 8, 10], '*', 1, 3); + * // => [4, '*', '*', 10] + */ + function fill(array, value, start, end) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { + start = 0; + end = length; + } + return baseFill(array, value, start, end); + } + + module.exports = fill; + + +/***/ }), +/* 236 */ +/***/ (function(module, exports, __webpack_require__) { + + var toInteger = __webpack_require__(100), + toLength = __webpack_require__(237); + + /** + * The base implementation of `_.fill` without an iteratee call guard. + * + * @private + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + */ + function baseFill(array, value, start, end) { + var length = array.length; + + start = toInteger(start); + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = (end === undefined || end > length) ? length : toInteger(end); + if (end < 0) { + end += length; + } + end = start > end ? 0 : toLength(end); + while (start < end) { + array[start++] = value; + } + return array; + } + + module.exports = baseFill; + + +/***/ }), +/* 237 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseClamp = __webpack_require__(238), + toInteger = __webpack_require__(100); + + /** Used as references for the maximum length and index of an array. */ + var MAX_ARRAY_LENGTH = 4294967295; + + /** + * Converts `value` to an integer suitable for use as the length of an + * array-like object. + * + * **Note:** This method is based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toLength(3.2); + * // => 3 + * + * _.toLength(Number.MIN_VALUE); + * // => 0 + * + * _.toLength(Infinity); + * // => 4294967295 + * + * _.toLength('3.2'); + * // => 3 + */ + function toLength(value) { + return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0; + } + + module.exports = toLength; + + +/***/ }), +/* 238 */ +/***/ (function(module, exports) { + + /** + * The base implementation of `_.clamp` which doesn't coerce arguments. + * + * @private + * @param {number} number The number to clamp. + * @param {number} [lower] The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the clamped number. + */ + function baseClamp(number, lower, upper) { + if (number === number) { + if (upper !== undefined) { + number = number <= upper ? number : upper; + } + if (lower !== undefined) { + number = number >= lower ? number : lower; + } + } + return number; + } + + module.exports = baseClamp; + + +/***/ }), +/* 239 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseFindIndex = __webpack_require__(150), + baseIteratee = __webpack_require__(168), + toInteger = __webpack_require__(100); + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMax = Math.max; + + /** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ + function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return baseFindIndex(array, baseIteratee(predicate, 3), index); + } + + module.exports = findIndex; + + +/***/ }), +/* 240 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseFindIndex = __webpack_require__(150), + baseIteratee = __webpack_require__(168), + toInteger = __webpack_require__(100); + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMax = Math.max, + nativeMin = Math.min; + + /** + * This method is like `_.findIndex` except that it iterates over elements + * of `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=array.length-1] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); + * // => 2 + * + * // The `_.matches` iteratee shorthand. + * _.findLastIndex(users, { 'user': 'barney', 'active': true }); + * // => 0 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findLastIndex(users, ['active', false]); + * // => 2 + * + * // The `_.property` iteratee shorthand. + * _.findLastIndex(users, 'active'); + * // => 0 + */ + function findLastIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = length - 1; + if (fromIndex !== undefined) { + index = toInteger(fromIndex); + index = fromIndex < 0 + ? nativeMax(length + index, 0) + : nativeMin(index, length - 1); + } + return baseFindIndex(array, baseIteratee(predicate, 3), index, true); + } + + module.exports = findLastIndex; + + +/***/ }), +/* 241 */ +/***/ (function(module, exports, __webpack_require__) { + + module.exports = __webpack_require__(242); + + +/***/ }), +/* 242 */ +/***/ (function(module, exports) { + + /** + * Gets the first element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias first + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the first element of `array`. + * @example + * + * _.head([1, 2, 3]); + * // => 1 + * + * _.head([]); + * // => undefined + */ + function head(array) { + return (array && array.length) ? array[0] : undefined; + } + + module.exports = head; + + +/***/ }), +/* 243 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseFlatten = __webpack_require__(108); + + /** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ + function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, 1) : []; + } + + module.exports = flatten; + + +/***/ }), +/* 244 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseFlatten = __webpack_require__(108); + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0; + + /** + * Recursively flattens `array`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flattenDeep([1, [2, [3, [4]], 5]]); + * // => [1, 2, 3, 4, 5] + */ + function flattenDeep(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, INFINITY) : []; + } + + module.exports = flattenDeep; + + +/***/ }), +/* 245 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseFlatten = __webpack_require__(108), + toInteger = __webpack_require__(100); + + /** + * Recursively flatten `array` up to `depth` times. + * + * @static + * @memberOf _ + * @since 4.4.0 + * @category Array + * @param {Array} array The array to flatten. + * @param {number} [depth=1] The maximum recursion depth. + * @returns {Array} Returns the new flattened array. + * @example + * + * var array = [1, [2, [3, [4]], 5]]; + * + * _.flattenDepth(array, 1); + * // => [1, 2, [3, [4]], 5] + * + * _.flattenDepth(array, 2); + * // => [1, 2, 3, [4], 5] + */ + function flattenDepth(array, depth) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + depth = depth === undefined ? 1 : toInteger(depth); + return baseFlatten(array, depth); + } + + module.exports = flattenDepth; + + +/***/ }), +/* 246 */ +/***/ (function(module, exports) { + + /** + * The inverse of `_.toPairs`; this method returns an object composed + * from key-value `pairs`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} pairs The key-value pairs. + * @returns {Object} Returns the new object. + * @example + * + * _.fromPairs([['a', 1], ['b', 2]]); + * // => { 'a': 1, 'b': 2 } + */ + function fromPairs(pairs) { + var index = -1, + length = pairs == null ? 0 : pairs.length, + result = {}; + + while (++index < length) { + var pair = pairs[index]; + result[pair[0]] = pair[1]; + } + return result; + } + + module.exports = fromPairs; + + +/***/ }), +/* 247 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIndexOf = __webpack_require__(149), + toInteger = __webpack_require__(100); + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMax = Math.max; + + /** + * Gets the index at which the first occurrence of `value` is found in `array` + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. If `fromIndex` is negative, it's used as the + * offset from the end of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.indexOf([1, 2, 1, 2], 2); + * // => 1 + * + * // Search from the `fromIndex`. + * _.indexOf([1, 2, 1, 2], 2, 2); + * // => 3 + */ + function indexOf(array, value, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return baseIndexOf(array, value, index); + } + + module.exports = indexOf; + + +/***/ }), +/* 248 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSlice = __webpack_require__(86); + + /** + * Gets all but the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.initial([1, 2, 3]); + * // => [1, 2] + */ + function initial(array) { + var length = array == null ? 0 : array.length; + return length ? baseSlice(array, 0, -1) : []; + } + + module.exports = initial; + + +/***/ }), +/* 249 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayMap = __webpack_require__(154), + baseIntersection = __webpack_require__(250), + baseRest = __webpack_require__(157), + castArrayLikeObject = __webpack_require__(251); + + /** + * Creates an array of unique values that are included in all given arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. The order and references of result values are + * determined by the first array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersection([2, 1], [2, 3]); + * // => [2] + */ + var intersection = baseRest(function(arrays) { + var mapped = arrayMap(arrays, castArrayLikeObject); + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped) + : []; + }); + + module.exports = intersection; + + +/***/ }), +/* 250 */ +/***/ (function(module, exports, __webpack_require__) { + + var SetCache = __webpack_require__(116), + arrayIncludes = __webpack_require__(148), + arrayIncludesWith = __webpack_require__(153), + arrayMap = __webpack_require__(154), + baseUnary = __webpack_require__(155), + cacheHas = __webpack_require__(156); + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMin = Math.min; + + /** + * The base implementation of methods like `_.intersection`, without support + * for iteratee shorthands, that accepts an array of arrays to inspect. + * + * @private + * @param {Array} arrays The arrays to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of shared values. + */ + function baseIntersection(arrays, iteratee, comparator) { + var includes = comparator ? arrayIncludesWith : arrayIncludes, + length = arrays[0].length, + othLength = arrays.length, + othIndex = othLength, + caches = Array(othLength), + maxLength = Infinity, + result = []; + + while (othIndex--) { + var array = arrays[othIndex]; + if (othIndex && iteratee) { + array = arrayMap(array, baseUnary(iteratee)); + } + maxLength = nativeMin(array.length, maxLength); + caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120)) + ? new SetCache(othIndex && array) + : undefined; + } + array = arrays[0]; + + var index = -1, + seen = caches[0]; + + outer: + while (++index < length && result.length < maxLength) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (!(seen + ? cacheHas(seen, computed) + : includes(result, computed, comparator) + )) { + othIndex = othLength; + while (--othIndex) { + var cache = caches[othIndex]; + if (!(cache + ? cacheHas(cache, computed) + : includes(arrays[othIndex], computed, comparator)) + ) { + continue outer; + } + } + if (seen) { + seen.push(computed); + } + result.push(value); + } + } + return result; + } + + module.exports = baseIntersection; + + +/***/ }), +/* 251 */ +/***/ (function(module, exports, __webpack_require__) { + + var isArrayLikeObject = __webpack_require__(166); + + /** + * Casts `value` to an empty array if it's not an array like object. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array|Object} Returns the cast array-like object. + */ + function castArrayLikeObject(value) { + return isArrayLikeObject(value) ? value : []; + } + + module.exports = castArrayLikeObject; + + +/***/ }), +/* 252 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayMap = __webpack_require__(154), + baseIntersection = __webpack_require__(250), + baseIteratee = __webpack_require__(168), + baseRest = __webpack_require__(157), + castArrayLikeObject = __webpack_require__(251), + last = __webpack_require__(228); + + /** + * This method is like `_.intersection` except that it accepts `iteratee` + * which is invoked for each element of each `arrays` to generate the criterion + * by which they're compared. The order and references of result values are + * determined by the first array. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [2.1] + * + * // The `_.property` iteratee shorthand. + * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }] + */ + var intersectionBy = baseRest(function(arrays) { + var iteratee = last(arrays), + mapped = arrayMap(arrays, castArrayLikeObject); + + if (iteratee === last(mapped)) { + iteratee = undefined; + } else { + mapped.pop(); + } + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped, baseIteratee(iteratee, 2)) + : []; + }); + + module.exports = intersectionBy; + + +/***/ }), +/* 253 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayMap = __webpack_require__(154), + baseIntersection = __webpack_require__(250), + baseRest = __webpack_require__(157), + castArrayLikeObject = __webpack_require__(251), + last = __webpack_require__(228); + + /** + * This method is like `_.intersection` except that it accepts `comparator` + * which is invoked to compare elements of `arrays`. The order and references + * of result values are determined by the first array. The comparator is + * invoked with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.intersectionWith(objects, others, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }] + */ + var intersectionWith = baseRest(function(arrays) { + var comparator = last(arrays), + mapped = arrayMap(arrays, castArrayLikeObject); + + comparator = typeof comparator == 'function' ? comparator : undefined; + if (comparator) { + mapped.pop(); + } + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped, undefined, comparator) + : []; + }); + + module.exports = intersectionWith; + + +/***/ }), +/* 254 */ +/***/ (function(module, exports) { + + /** Used for built-in method references. */ + var arrayProto = Array.prototype; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeJoin = arrayProto.join; + + /** + * Converts all elements in `array` into a string separated by `separator`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to convert. + * @param {string} [separator=','] The element separator. + * @returns {string} Returns the joined string. + * @example + * + * _.join(['a', 'b', 'c'], '~'); + * // => 'a~b~c' + */ + function join(array, separator) { + return array == null ? '' : nativeJoin.call(array, separator); + } + + module.exports = join; + + +/***/ }), +/* 255 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseFindIndex = __webpack_require__(150), + baseIsNaN = __webpack_require__(151), + strictLastIndexOf = __webpack_require__(256), + toInteger = __webpack_require__(100); + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMax = Math.max, + nativeMin = Math.min; + + /** + * This method is like `_.indexOf` except that it iterates over elements of + * `array` from right to left. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=array.length-1] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.lastIndexOf([1, 2, 1, 2], 2); + * // => 3 + * + * // Search from the `fromIndex`. + * _.lastIndexOf([1, 2, 1, 2], 2, 2); + * // => 1 + */ + function lastIndexOf(array, value, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = length; + if (fromIndex !== undefined) { + index = toInteger(fromIndex); + index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1); + } + return value === value + ? strictLastIndexOf(array, value, index) + : baseFindIndex(array, baseIsNaN, index, true); + } + + module.exports = lastIndexOf; + + +/***/ }), +/* 256 */ +/***/ (function(module, exports) { + + /** + * A specialized version of `_.lastIndexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function strictLastIndexOf(array, value, fromIndex) { + var index = fromIndex + 1; + while (index--) { + if (array[index] === value) { + return index; + } + } + return index; + } + + module.exports = strictLastIndexOf; + + +/***/ }), +/* 257 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseNth = __webpack_require__(258), + toInteger = __webpack_require__(100); + + /** + * Gets the element at index `n` of `array`. If `n` is negative, the nth + * element from the end is returned. + * + * @static + * @memberOf _ + * @since 4.11.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=0] The index of the element to return. + * @returns {*} Returns the nth element of `array`. + * @example + * + * var array = ['a', 'b', 'c', 'd']; + * + * _.nth(array, 1); + * // => 'b' + * + * _.nth(array, -2); + * // => 'c'; + */ + function nth(array, n) { + return (array && array.length) ? baseNth(array, toInteger(n)) : undefined; + } + + module.exports = nth; + + +/***/ }), +/* 258 */ +/***/ (function(module, exports, __webpack_require__) { + + var isIndex = __webpack_require__(99); + + /** + * The base implementation of `_.nth` which doesn't coerce arguments. + * + * @private + * @param {Array} array The array to query. + * @param {number} n The index of the element to return. + * @returns {*} Returns the nth element of `array`. + */ + function baseNth(array, n) { + var length = array.length; + if (!length) { + return; + } + n += n < 0 ? length : 0; + return isIndex(n, length) ? array[n] : undefined; + } + + module.exports = baseNth; + + +/***/ }), +/* 259 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseRest = __webpack_require__(157), + pullAll = __webpack_require__(260); + + /** + * Removes all given values from `array` using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove` + * to remove elements from an array by predicate. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {...*} [values] The values to remove. + * @returns {Array} Returns `array`. + * @example + * + * var array = ['a', 'b', 'c', 'a', 'b', 'c']; + * + * _.pull(array, 'a', 'c'); + * console.log(array); + * // => ['b', 'b'] + */ + var pull = baseRest(pullAll); + + module.exports = pull; + + +/***/ }), +/* 260 */ +/***/ (function(module, exports, __webpack_require__) { + + var basePullAll = __webpack_require__(261); + + /** + * This method is like `_.pull` except that it accepts an array of values to remove. + * + * **Note:** Unlike `_.difference`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @returns {Array} Returns `array`. + * @example + * + * var array = ['a', 'b', 'c', 'a', 'b', 'c']; + * + * _.pullAll(array, ['a', 'c']); + * console.log(array); + * // => ['b', 'b'] + */ + function pullAll(array, values) { + return (array && array.length && values && values.length) + ? basePullAll(array, values) + : array; + } + + module.exports = pullAll; + + +/***/ }), +/* 261 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayMap = __webpack_require__(154), + baseIndexOf = __webpack_require__(149), + baseIndexOfWith = __webpack_require__(262), + baseUnary = __webpack_require__(155), + copyArray = __webpack_require__(113); + + /** Used for built-in method references. */ + var arrayProto = Array.prototype; + + /** Built-in value references. */ + var splice = arrayProto.splice; + + /** + * The base implementation of `_.pullAllBy` without support for iteratee + * shorthands. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns `array`. + */ + function basePullAll(array, values, iteratee, comparator) { + var indexOf = comparator ? baseIndexOfWith : baseIndexOf, + index = -1, + length = values.length, + seen = array; + + if (array === values) { + values = copyArray(values); + } + if (iteratee) { + seen = arrayMap(array, baseUnary(iteratee)); + } + while (++index < length) { + var fromIndex = 0, + value = values[index], + computed = iteratee ? iteratee(value) : value; + + while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) { + if (seen !== array) { + splice.call(seen, fromIndex, 1); + } + splice.call(array, fromIndex, 1); + } + } + return array; + } + + module.exports = basePullAll; + + +/***/ }), +/* 262 */ +/***/ (function(module, exports) { + + /** + * This function is like `baseIndexOf` except that it accepts a comparator. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @param {Function} comparator The comparator invoked per element. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseIndexOfWith(array, value, fromIndex, comparator) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (comparator(array[index], value)) { + return index; + } + } + return -1; + } + + module.exports = baseIndexOfWith; + + +/***/ }), +/* 263 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIteratee = __webpack_require__(168), + basePullAll = __webpack_require__(261); + + /** + * This method is like `_.pullAll` except that it accepts `iteratee` which is + * invoked for each element of `array` and `values` to generate the criterion + * by which they're compared. The iteratee is invoked with one argument: (value). + * + * **Note:** Unlike `_.differenceBy`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns `array`. + * @example + * + * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }]; + * + * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x'); + * console.log(array); + * // => [{ 'x': 2 }] + */ + function pullAllBy(array, values, iteratee) { + return (array && array.length && values && values.length) + ? basePullAll(array, values, baseIteratee(iteratee, 2)) + : array; + } + + module.exports = pullAllBy; + + +/***/ }), +/* 264 */ +/***/ (function(module, exports, __webpack_require__) { + + var basePullAll = __webpack_require__(261); + + /** + * This method is like `_.pullAll` except that it accepts `comparator` which + * is invoked to compare elements of `array` to `values`. The comparator is + * invoked with two arguments: (arrVal, othVal). + * + * **Note:** Unlike `_.differenceWith`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.6.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns `array`. + * @example + * + * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }]; + * + * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual); + * console.log(array); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }] + */ + function pullAllWith(array, values, comparator) { + return (array && array.length && values && values.length) + ? basePullAll(array, values, undefined, comparator) + : array; + } + + module.exports = pullAllWith; + + +/***/ }), +/* 265 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayMap = __webpack_require__(154), + baseAt = __webpack_require__(266), + basePullAt = __webpack_require__(267), + compareAscending = __webpack_require__(270), + flatRest = __webpack_require__(271), + isIndex = __webpack_require__(99); + + /** + * Removes elements from `array` corresponding to `indexes` and returns an + * array of removed elements. + * + * **Note:** Unlike `_.at`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {...(number|number[])} [indexes] The indexes of elements to remove. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = ['a', 'b', 'c', 'd']; + * var pulled = _.pullAt(array, [1, 3]); + * + * console.log(array); + * // => ['a', 'c'] + * + * console.log(pulled); + * // => ['b', 'd'] + */ + var pullAt = flatRest(function(array, indexes) { + var length = array == null ? 0 : array.length, + result = baseAt(array, indexes); + + basePullAt(array, arrayMap(indexes, function(index) { + return isIndex(index, length) ? +index : index; + }).sort(compareAscending)); + + return result; + }); + + module.exports = pullAt; + + +/***/ }), +/* 266 */ +/***/ (function(module, exports, __webpack_require__) { + + var get = __webpack_require__(212); + + /** + * The base implementation of `_.at` without support for individual paths. + * + * @private + * @param {Object} object The object to iterate over. + * @param {string[]} paths The property paths to pick. + * @returns {Array} Returns the picked elements. + */ + function baseAt(object, paths) { + var index = -1, + length = paths.length, + result = Array(length), + skip = object == null; + + while (++index < length) { + result[index] = skip ? undefined : get(object, paths[index]); + } + return result; + } + + module.exports = baseAt; + + +/***/ }), +/* 267 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseUnset = __webpack_require__(268), + isIndex = __webpack_require__(99); + + /** Used for built-in method references. */ + var arrayProto = Array.prototype; + + /** Built-in value references. */ + var splice = arrayProto.splice; + + /** + * The base implementation of `_.pullAt` without support for individual + * indexes or capturing the removed elements. + * + * @private + * @param {Array} array The array to modify. + * @param {number[]} indexes The indexes of elements to remove. + * @returns {Array} Returns `array`. + */ + function basePullAt(array, indexes) { + var length = array ? indexes.length : 0, + lastIndex = length - 1; + + while (length--) { + var index = indexes[length]; + if (length == lastIndex || index !== previous) { + var previous = index; + if (isIndex(index)) { + splice.call(array, index, 1); + } else { + baseUnset(array, index); + } + } + } + return array; + } + + module.exports = basePullAt; + + +/***/ }), +/* 268 */ +/***/ (function(module, exports, __webpack_require__) { + + var castPath = __webpack_require__(214), + last = __webpack_require__(228), + parent = __webpack_require__(269), + toKey = __webpack_require__(221); + + /** + * The base implementation of `_.unset`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The property path to unset. + * @returns {boolean} Returns `true` if the property is deleted, else `false`. + */ + function baseUnset(object, path) { + path = castPath(path, object); + object = parent(object, path); + return object == null || delete object[toKey(last(path))]; + } + + module.exports = baseUnset; + + +/***/ }), +/* 269 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseGet = __webpack_require__(213), + baseSlice = __webpack_require__(86); + + /** + * Gets the parent value at `path` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} path The path to get the parent value of. + * @returns {*} Returns the parent value. + */ + function parent(object, path) { + return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1)); + } + + module.exports = parent; + + +/***/ }), +/* 270 */ +/***/ (function(module, exports, __webpack_require__) { + + var isSymbol = __webpack_require__(103); + + /** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ + function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = isSymbol(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = isSymbol(other); + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; + } + + module.exports = compareAscending; + + +/***/ }), +/* 271 */ +/***/ (function(module, exports, __webpack_require__) { + + var flatten = __webpack_require__(243), + overRest = __webpack_require__(159), + setToString = __webpack_require__(161); + + /** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ + function flatRest(func) { + return setToString(overRest(func, undefined, flatten), func + ''); + } + + module.exports = flatRest; + + +/***/ }), +/* 272 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIteratee = __webpack_require__(168), + basePullAt = __webpack_require__(267); + + /** + * Removes all elements from `array` that `predicate` returns truthy for + * and returns an array of the removed elements. The predicate is invoked + * with three arguments: (value, index, array). + * + * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull` + * to pull elements from an array by value. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = [1, 2, 3, 4]; + * var evens = _.remove(array, function(n) { + * return n % 2 == 0; + * }); + * + * console.log(array); + * // => [1, 3] + * + * console.log(evens); + * // => [2, 4] + */ + function remove(array, predicate) { + var result = []; + if (!(array && array.length)) { + return result; + } + var index = -1, + indexes = [], + length = array.length; + + predicate = baseIteratee(predicate, 3); + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result.push(value); + indexes.push(index); + } + } + basePullAt(array, indexes); + return result; + } + + module.exports = remove; + + +/***/ }), +/* 273 */ +/***/ (function(module, exports) { + + /** Used for built-in method references. */ + var arrayProto = Array.prototype; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeReverse = arrayProto.reverse; + + /** + * Reverses `array` so that the first element becomes the last, the second + * element becomes the second to last, and so on. + * + * **Note:** This method mutates `array` and is based on + * [`Array#reverse`](https://mdn.io/Array/reverse). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3]; + * + * _.reverse(array); + * // => [3, 2, 1] + * + * console.log(array); + * // => [3, 2, 1] + */ + function reverse(array) { + return array == null ? array : nativeReverse.call(array); + } + + module.exports = reverse; + + +/***/ }), +/* 274 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSlice = __webpack_require__(86), + isIterateeCall = __webpack_require__(87), + toInteger = __webpack_require__(100); + + /** + * Creates a slice of `array` from `start` up to, but not including, `end`. + * + * **Note:** This method is used instead of + * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are + * returned. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function slice(array, start, end) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + if (end && typeof end != 'number' && isIterateeCall(array, start, end)) { + start = 0; + end = length; + } + else { + start = start == null ? 0 : toInteger(start); + end = end === undefined ? length : toInteger(end); + } + return baseSlice(array, start, end); + } + + module.exports = slice; + + +/***/ }), +/* 275 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSortedIndex = __webpack_require__(276); + + /** + * Uses a binary search to determine the lowest index at which `value` + * should be inserted into `array` in order to maintain its sort order. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * _.sortedIndex([30, 50], 40); + * // => 1 + */ + function sortedIndex(array, value) { + return baseSortedIndex(array, value); + } + + module.exports = sortedIndex; + + +/***/ }), +/* 276 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSortedIndexBy = __webpack_require__(277), + identity = __webpack_require__(158), + isSymbol = __webpack_require__(103); + + /** Used as references for the maximum length and index of an array. */ + var MAX_ARRAY_LENGTH = 4294967295, + HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; + + /** + * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which + * performs a binary search of `array` to determine the index at which `value` + * should be inserted into `array` in order to maintain its sort order. + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + */ + function baseSortedIndex(array, value, retHighest) { + var low = 0, + high = array == null ? low : array.length; + + if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { + while (low < high) { + var mid = (low + high) >>> 1, + computed = array[mid]; + + if (computed !== null && !isSymbol(computed) && + (retHighest ? (computed <= value) : (computed < value))) { + low = mid + 1; + } else { + high = mid; + } + } + return high; + } + return baseSortedIndexBy(array, value, identity, retHighest); + } + + module.exports = baseSortedIndex; + + +/***/ }), +/* 277 */ +/***/ (function(module, exports, __webpack_require__) { + + var isSymbol = __webpack_require__(103); + + /** Used as references for the maximum length and index of an array. */ + var MAX_ARRAY_LENGTH = 4294967295, + MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeFloor = Math.floor, + nativeMin = Math.min; + + /** + * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy` + * which invokes `iteratee` for `value` and each element of `array` to compute + * their sort ranking. The iteratee is invoked with one argument; (value). + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} iteratee The iteratee invoked per element. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + */ + function baseSortedIndexBy(array, value, iteratee, retHighest) { + value = iteratee(value); + + var low = 0, + high = array == null ? 0 : array.length, + valIsNaN = value !== value, + valIsNull = value === null, + valIsSymbol = isSymbol(value), + valIsUndefined = value === undefined; + + while (low < high) { + var mid = nativeFloor((low + high) / 2), + computed = iteratee(array[mid]), + othIsDefined = computed !== undefined, + othIsNull = computed === null, + othIsReflexive = computed === computed, + othIsSymbol = isSymbol(computed); + + if (valIsNaN) { + var setLow = retHighest || othIsReflexive; + } else if (valIsUndefined) { + setLow = othIsReflexive && (retHighest || othIsDefined); + } else if (valIsNull) { + setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull); + } else if (valIsSymbol) { + setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol); + } else if (othIsNull || othIsSymbol) { + setLow = false; + } else { + setLow = retHighest ? (computed <= value) : (computed < value); + } + if (setLow) { + low = mid + 1; + } else { + high = mid; + } + } + return nativeMin(high, MAX_ARRAY_INDEX); + } + + module.exports = baseSortedIndexBy; + + +/***/ }), +/* 278 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIteratee = __webpack_require__(168), + baseSortedIndexBy = __webpack_require__(277); + + /** + * This method is like `_.sortedIndex` except that it accepts `iteratee` + * which is invoked for `value` and each element of `array` to compute their + * sort ranking. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * var objects = [{ 'x': 4 }, { 'x': 5 }]; + * + * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.sortedIndexBy(objects, { 'x': 4 }, 'x'); + * // => 0 + */ + function sortedIndexBy(array, value, iteratee) { + return baseSortedIndexBy(array, value, baseIteratee(iteratee, 2)); + } + + module.exports = sortedIndexBy; + + +/***/ }), +/* 279 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSortedIndex = __webpack_require__(276), + eq = __webpack_require__(88); + + /** + * This method is like `_.indexOf` except that it performs a binary + * search on a sorted `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.sortedIndexOf([4, 5, 5, 5, 6], 5); + * // => 1 + */ + function sortedIndexOf(array, value) { + var length = array == null ? 0 : array.length; + if (length) { + var index = baseSortedIndex(array, value); + if (index < length && eq(array[index], value)) { + return index; + } + } + return -1; + } + + module.exports = sortedIndexOf; + + +/***/ }), +/* 280 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSortedIndex = __webpack_require__(276); + + /** + * This method is like `_.sortedIndex` except that it returns the highest + * index at which `value` should be inserted into `array` in order to + * maintain its sort order. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * _.sortedLastIndex([4, 5, 5, 5, 6], 5); + * // => 4 + */ + function sortedLastIndex(array, value) { + return baseSortedIndex(array, value, true); + } + + module.exports = sortedLastIndex; + + +/***/ }), +/* 281 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIteratee = __webpack_require__(168), + baseSortedIndexBy = __webpack_require__(277); + + /** + * This method is like `_.sortedLastIndex` except that it accepts `iteratee` + * which is invoked for `value` and each element of `array` to compute their + * sort ranking. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * var objects = [{ 'x': 4 }, { 'x': 5 }]; + * + * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); + * // => 1 + * + * // The `_.property` iteratee shorthand. + * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x'); + * // => 1 + */ + function sortedLastIndexBy(array, value, iteratee) { + return baseSortedIndexBy(array, value, baseIteratee(iteratee, 2), true); + } + + module.exports = sortedLastIndexBy; + + +/***/ }), +/* 282 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSortedIndex = __webpack_require__(276), + eq = __webpack_require__(88); + + /** + * This method is like `_.lastIndexOf` except that it performs a binary + * search on a sorted `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5); + * // => 3 + */ + function sortedLastIndexOf(array, value) { + var length = array == null ? 0 : array.length; + if (length) { + var index = baseSortedIndex(array, value, true) - 1; + if (eq(array[index], value)) { + return index; + } + } + return -1; + } + + module.exports = sortedLastIndexOf; + + +/***/ }), +/* 283 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSortedUniq = __webpack_require__(284); + + /** + * This method is like `_.uniq` except that it's designed and optimized + * for sorted arrays. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.sortedUniq([1, 1, 2]); + * // => [1, 2] + */ + function sortedUniq(array) { + return (array && array.length) + ? baseSortedUniq(array) + : []; + } + + module.exports = sortedUniq; + + +/***/ }), +/* 284 */ +/***/ (function(module, exports, __webpack_require__) { + + var eq = __webpack_require__(88); + + /** + * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ + function baseSortedUniq(array, iteratee) { + var index = -1, + length = array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + if (!index || !eq(computed, seen)) { + var seen = computed; + result[resIndex++] = value === 0 ? 0 : value; + } + } + return result; + } + + module.exports = baseSortedUniq; + + +/***/ }), +/* 285 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIteratee = __webpack_require__(168), + baseSortedUniq = __webpack_require__(284); + + /** + * This method is like `_.uniqBy` except that it's designed and optimized + * for sorted arrays. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor); + * // => [1.1, 2.3] + */ + function sortedUniqBy(array, iteratee) { + return (array && array.length) + ? baseSortedUniq(array, baseIteratee(iteratee, 2)) + : []; + } + + module.exports = sortedUniqBy; + + +/***/ }), +/* 286 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSlice = __webpack_require__(86); + + /** + * Gets all but the first element of `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.tail([1, 2, 3]); + * // => [2, 3] + */ + function tail(array) { + var length = array == null ? 0 : array.length; + return length ? baseSlice(array, 1, length) : []; + } + + module.exports = tail; + + +/***/ }), +/* 287 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSlice = __webpack_require__(86), + toInteger = __webpack_require__(100); + + /** + * Creates a slice of `array` with `n` elements taken from the beginning. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.take([1, 2, 3]); + * // => [1] + * + * _.take([1, 2, 3], 2); + * // => [1, 2] + * + * _.take([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.take([1, 2, 3], 0); + * // => [] + */ + function take(array, n, guard) { + if (!(array && array.length)) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + return baseSlice(array, 0, n < 0 ? 0 : n); + } + + module.exports = take; + + +/***/ }), +/* 288 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSlice = __webpack_require__(86), + toInteger = __webpack_require__(100); + + /** + * Creates a slice of `array` with `n` elements taken from the end. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.takeRight([1, 2, 3]); + * // => [3] + * + * _.takeRight([1, 2, 3], 2); + * // => [2, 3] + * + * _.takeRight([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.takeRight([1, 2, 3], 0); + * // => [] + */ + function takeRight(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + n = length - n; + return baseSlice(array, n < 0 ? 0 : n, length); + } + + module.exports = takeRight; + + +/***/ }), +/* 289 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIteratee = __webpack_require__(168), + baseWhile = __webpack_require__(233); + + /** + * Creates a slice of `array` with elements taken from the end. Elements are + * taken until `predicate` returns falsey. The predicate is invoked with + * three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.takeRightWhile(users, function(o) { return !o.active; }); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.matches` iteratee shorthand. + * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false }); + * // => objects for ['pebbles'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.takeRightWhile(users, ['active', false]); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.property` iteratee shorthand. + * _.takeRightWhile(users, 'active'); + * // => [] + */ + function takeRightWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, baseIteratee(predicate, 3), false, true) + : []; + } + + module.exports = takeRightWhile; + + +/***/ }), +/* 290 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIteratee = __webpack_require__(168), + baseWhile = __webpack_require__(233); + + /** + * Creates a slice of `array` with elements taken from the beginning. Elements + * are taken until `predicate` returns falsey. The predicate is invoked with + * three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.takeWhile(users, function(o) { return !o.active; }); + * // => objects for ['barney', 'fred'] + * + * // The `_.matches` iteratee shorthand. + * _.takeWhile(users, { 'user': 'barney', 'active': false }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.takeWhile(users, ['active', false]); + * // => objects for ['barney', 'fred'] + * + * // The `_.property` iteratee shorthand. + * _.takeWhile(users, 'active'); + * // => [] + */ + function takeWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, baseIteratee(predicate, 3)) + : []; + } + + module.exports = takeWhile; + + +/***/ }), +/* 291 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseFlatten = __webpack_require__(108), + baseRest = __webpack_require__(157), + baseUniq = __webpack_require__(292), + isArrayLikeObject = __webpack_require__(166); + + /** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2], [1, 2]); + * // => [2, 1] + */ + var union = baseRest(function(arrays) { + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true)); + }); + + module.exports = union; + + +/***/ }), +/* 292 */ +/***/ (function(module, exports, __webpack_require__) { + + var SetCache = __webpack_require__(116), + arrayIncludes = __webpack_require__(148), + arrayIncludesWith = __webpack_require__(153), + cacheHas = __webpack_require__(156), + createSet = __webpack_require__(293), + setToArray = __webpack_require__(184); + + /** Used as the size to enable large array optimizations. */ + var LARGE_ARRAY_SIZE = 200; + + /** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ + function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : createSet(array); + if (set) { + return setToArray(set); + } + isCommon = false; + includes = cacheHas; + seen = new SetCache; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; + } + + module.exports = baseUniq; + + +/***/ }), +/* 293 */ +/***/ (function(module, exports, __webpack_require__) { + + var Set = __webpack_require__(206), + noop = __webpack_require__(294), + setToArray = __webpack_require__(184); + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0; + + /** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ + var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) { + return new Set(values); + }; + + module.exports = createSet; + + +/***/ }), +/* 294 */ +/***/ (function(module, exports) { + + /** + * This method returns `undefined`. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example + * + * _.times(2, _.noop); + * // => [undefined, undefined] + */ + function noop() { + // No operation performed. + } + + module.exports = noop; + + +/***/ }), +/* 295 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseFlatten = __webpack_require__(108), + baseIteratee = __webpack_require__(168), + baseRest = __webpack_require__(157), + baseUniq = __webpack_require__(292), + isArrayLikeObject = __webpack_require__(166), + last = __webpack_require__(228); + + /** + * This method is like `_.union` except that it accepts `iteratee` which is + * invoked for each element of each `arrays` to generate the criterion by + * which uniqueness is computed. Result values are chosen from the first + * array in which the value occurs. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.unionBy([2.1], [1.2, 2.3], Math.floor); + * // => [2.1, 1.2] + * + * // The `_.property` iteratee shorthand. + * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */ + var unionBy = baseRest(function(arrays) { + var iteratee = last(arrays); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; + } + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), baseIteratee(iteratee, 2)); + }); + + module.exports = unionBy; + + +/***/ }), +/* 296 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseFlatten = __webpack_require__(108), + baseRest = __webpack_require__(157), + baseUniq = __webpack_require__(292), + isArrayLikeObject = __webpack_require__(166), + last = __webpack_require__(228); + + /** + * This method is like `_.union` except that it accepts `comparator` which + * is invoked to compare elements of `arrays`. Result values are chosen from + * the first array in which the value occurs. The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of combined values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.unionWith(objects, others, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] + */ + var unionWith = baseRest(function(arrays) { + var comparator = last(arrays); + comparator = typeof comparator == 'function' ? comparator : undefined; + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator); + }); + + module.exports = unionWith; + + +/***/ }), +/* 297 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseUniq = __webpack_require__(292); + + /** + * Creates a duplicate-free version of an array, using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons, in which only the first occurrence of each element + * is kept. The order of result values is determined by the order they occur + * in the array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.uniq([2, 1, 2]); + * // => [2, 1] + */ + function uniq(array) { + return (array && array.length) ? baseUniq(array) : []; + } + + module.exports = uniq; + + +/***/ }), +/* 298 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIteratee = __webpack_require__(168), + baseUniq = __webpack_require__(292); + + /** + * This method is like `_.uniq` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * uniqueness is computed. The order of result values is determined by the + * order they occur in the array. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.uniqBy([2.1, 1.2, 2.3], Math.floor); + * // => [2.1, 1.2] + * + * // The `_.property` iteratee shorthand. + * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */ + function uniqBy(array, iteratee) { + return (array && array.length) ? baseUniq(array, baseIteratee(iteratee, 2)) : []; + } + + module.exports = uniqBy; + + +/***/ }), +/* 299 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseUniq = __webpack_require__(292); + + /** + * This method is like `_.uniq` except that it accepts `comparator` which + * is invoked to compare elements of `array`. The order of result values is + * determined by the order they occur in the array.The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.uniqWith(objects, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }] + */ + function uniqWith(array, comparator) { + comparator = typeof comparator == 'function' ? comparator : undefined; + return (array && array.length) ? baseUniq(array, undefined, comparator) : []; + } + + module.exports = uniqWith; + + +/***/ }), +/* 300 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayFilter = __webpack_require__(189), + arrayMap = __webpack_require__(154), + baseProperty = __webpack_require__(226), + baseTimes = __webpack_require__(193), + isArrayLikeObject = __webpack_require__(166); + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMax = Math.max; + + /** + * This method is like `_.zip` except that it accepts an array of grouped + * elements and creates an array regrouping the elements to their pre-zip + * configuration. + * + * @static + * @memberOf _ + * @since 1.2.0 + * @category Array + * @param {Array} array The array of grouped elements to process. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]); + * // => [['a', 1, true], ['b', 2, false]] + * + * _.unzip(zipped); + * // => [['a', 'b'], [1, 2], [true, false]] + */ + function unzip(array) { + if (!(array && array.length)) { + return []; + } + var length = 0; + array = arrayFilter(array, function(group) { + if (isArrayLikeObject(group)) { + length = nativeMax(group.length, length); + return true; + } + }); + return baseTimes(length, function(index) { + return arrayMap(array, baseProperty(index)); + }); + } + + module.exports = unzip; + + +/***/ }), +/* 301 */ +/***/ (function(module, exports, __webpack_require__) { + + var apply = __webpack_require__(160), + arrayMap = __webpack_require__(154), + unzip = __webpack_require__(300); + + /** + * This method is like `_.unzip` except that it accepts `iteratee` to specify + * how regrouped values should be combined. The iteratee is invoked with the + * elements of each group: (...group). + * + * @static + * @memberOf _ + * @since 3.8.0 + * @category Array + * @param {Array} array The array of grouped elements to process. + * @param {Function} [iteratee=_.identity] The function to combine + * regrouped values. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip([1, 2], [10, 20], [100, 200]); + * // => [[1, 10, 100], [2, 20, 200]] + * + * _.unzipWith(zipped, _.add); + * // => [3, 30, 300] + */ + function unzipWith(array, iteratee) { + if (!(array && array.length)) { + return []; + } + var result = unzip(array); + if (iteratee == null) { + return result; + } + return arrayMap(result, function(group) { + return apply(iteratee, undefined, group); + }); + } + + module.exports = unzipWith; + + +/***/ }), +/* 302 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseDifference = __webpack_require__(115), + baseRest = __webpack_require__(157), + isArrayLikeObject = __webpack_require__(166); + + /** + * Creates an array excluding all given values using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * **Note:** Unlike `_.pull`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...*} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @see _.difference, _.xor + * @example + * + * _.without([2, 1, 2, 3], 1, 2); + * // => [3] + */ + var without = baseRest(function(array, values) { + return isArrayLikeObject(array) + ? baseDifference(array, values) + : []; + }); + + module.exports = without; + + +/***/ }), +/* 303 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayFilter = __webpack_require__(189), + baseRest = __webpack_require__(157), + baseXor = __webpack_require__(304), + isArrayLikeObject = __webpack_require__(166); + + /** + * Creates an array of unique values that is the + * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference) + * of the given arrays. The order of result values is determined by the order + * they occur in the arrays. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of filtered values. + * @see _.difference, _.without + * @example + * + * _.xor([2, 1], [2, 3]); + * // => [1, 3] + */ + var xor = baseRest(function(arrays) { + return baseXor(arrayFilter(arrays, isArrayLikeObject)); + }); + + module.exports = xor; + + +/***/ }), +/* 304 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseDifference = __webpack_require__(115), + baseFlatten = __webpack_require__(108), + baseUniq = __webpack_require__(292); + + /** + * The base implementation of methods like `_.xor`, without support for + * iteratee shorthands, that accepts an array of arrays to inspect. + * + * @private + * @param {Array} arrays The arrays to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of values. + */ + function baseXor(arrays, iteratee, comparator) { + var length = arrays.length; + if (length < 2) { + return length ? baseUniq(arrays[0]) : []; + } + var index = -1, + result = Array(length); + + while (++index < length) { + var array = arrays[index], + othIndex = -1; + + while (++othIndex < length) { + if (othIndex != index) { + result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator); + } + } + } + return baseUniq(baseFlatten(result, 1), iteratee, comparator); + } + + module.exports = baseXor; + + +/***/ }), +/* 305 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayFilter = __webpack_require__(189), + baseIteratee = __webpack_require__(168), + baseRest = __webpack_require__(157), + baseXor = __webpack_require__(304), + isArrayLikeObject = __webpack_require__(166), + last = __webpack_require__(228); + + /** + * This method is like `_.xor` except that it accepts `iteratee` which is + * invoked for each element of each `arrays` to generate the criterion by + * which by which they're compared. The order of result values is determined + * by the order they occur in the arrays. The iteratee is invoked with one + * argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [1.2, 3.4] + * + * // The `_.property` iteratee shorthand. + * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 2 }] + */ + var xorBy = baseRest(function(arrays) { + var iteratee = last(arrays); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; + } + return baseXor(arrayFilter(arrays, isArrayLikeObject), baseIteratee(iteratee, 2)); + }); + + module.exports = xorBy; + + +/***/ }), +/* 306 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayFilter = __webpack_require__(189), + baseRest = __webpack_require__(157), + baseXor = __webpack_require__(304), + isArrayLikeObject = __webpack_require__(166), + last = __webpack_require__(228); + + /** + * This method is like `_.xor` except that it accepts `comparator` which is + * invoked to compare elements of `arrays`. The order of result values is + * determined by the order they occur in the arrays. The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.xorWith(objects, others, _.isEqual); + * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] + */ + var xorWith = baseRest(function(arrays) { + var comparator = last(arrays); + comparator = typeof comparator == 'function' ? comparator : undefined; + return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator); + }); + + module.exports = xorWith; + + +/***/ }), +/* 307 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseRest = __webpack_require__(157), + unzip = __webpack_require__(300); + + /** + * Creates an array of grouped elements, the first of which contains the + * first elements of the given arrays, the second of which contains the + * second elements of the given arrays, and so on. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zip(['a', 'b'], [1, 2], [true, false]); + * // => [['a', 1, true], ['b', 2, false]] + */ + var zip = baseRest(unzip); + + module.exports = zip; + + +/***/ }), +/* 308 */ +/***/ (function(module, exports, __webpack_require__) { + + var assignValue = __webpack_require__(309), + baseZipObject = __webpack_require__(311); + + /** + * This method is like `_.fromPairs` except that it accepts two arrays, + * one of property identifiers and one of corresponding values. + * + * @static + * @memberOf _ + * @since 0.4.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject(['a', 'b'], [1, 2]); + * // => { 'a': 1, 'b': 2 } + */ + function zipObject(props, values) { + return baseZipObject(props || [], values || [], assignValue); + } + + module.exports = zipObject; + + +/***/ }), +/* 309 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseAssignValue = __webpack_require__(310), + eq = __webpack_require__(88); + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } + } + + module.exports = assignValue; + + +/***/ }), +/* 310 */ +/***/ (function(module, exports, __webpack_require__) { + + var defineProperty = __webpack_require__(164); + + /** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function baseAssignValue(object, key, value) { + if (key == '__proto__' && defineProperty) { + defineProperty(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } + } + + module.exports = baseAssignValue; + + +/***/ }), +/* 311 */ +/***/ (function(module, exports) { + + /** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property identifiers. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ + function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; + + while (++index < length) { + var value = index < valsLength ? values[index] : undefined; + assignFunc(result, props[index], value); + } + return result; + } + + module.exports = baseZipObject; + + +/***/ }), +/* 312 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSet = __webpack_require__(313), + baseZipObject = __webpack_require__(311); + + /** + * This method is like `_.zipObject` except that it supports property paths. + * + * @static + * @memberOf _ + * @since 4.1.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]); + * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } } + */ + function zipObjectDeep(props, values) { + return baseZipObject(props || [], values || [], baseSet); + } + + module.exports = zipObjectDeep; + + +/***/ }), +/* 313 */ +/***/ (function(module, exports, __webpack_require__) { + + var assignValue = __webpack_require__(309), + castPath = __webpack_require__(214), + isIndex = __webpack_require__(99), + isObject = __webpack_require__(97), + toKey = __webpack_require__(221); + + /** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ + function baseSet(object, path, value, customizer) { + if (!isObject(object)) { + return object; + } + path = castPath(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = toKey(path[index]), + newValue = value; + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = isObject(objValue) + ? objValue + : (isIndex(path[index + 1]) ? [] : {}); + } + } + assignValue(nested, key, newValue); + nested = nested[key]; + } + return object; + } + + module.exports = baseSet; + + +/***/ }), +/* 314 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseRest = __webpack_require__(157), + unzipWith = __webpack_require__(301); + + /** + * This method is like `_.zip` except that it accepts `iteratee` to specify + * how grouped values should be combined. The iteratee is invoked with the + * elements of each group: (...group). + * + * @static + * @memberOf _ + * @since 3.8.0 + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @param {Function} [iteratee=_.identity] The function to combine + * grouped values. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) { + * return a + b + c; + * }); + * // => [111, 222] + */ + var zipWith = baseRest(function(arrays) { + var length = arrays.length, + iteratee = length > 1 ? arrays[length - 1] : undefined; + + iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined; + return unzipWith(arrays, iteratee); + }); + + module.exports = zipWith; + + +/***/ }), +/* 315 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {module.exports = function ( handlerFunction ){ + var viewer = {}, + lastSelectedElement; + + viewer.handle = function ( selectedElement ){ + // Don't display details on a drag event, which will be prevented + if ( d3.event.defaultPrevented ) { + return; + } + + var isSelection = true; + + // Deselection of the focused element + if ( lastSelectedElement === selectedElement ) { + isSelection = false; + } + + if ( handlerFunction instanceof Function ) { + if ( isSelection ) { + handlerFunction(selectedElement); + } else { + handlerFunction(undefined); + } + } + + if ( isSelection ) { + lastSelectedElement = selectedElement; + } else { + lastSelectedElement = undefined; + } + }; + + /** + * Resets the displayed information to its default. + */ + viewer.reset = function (){ + if ( lastSelectedElement ) { + handlerFunction(undefined); + lastSelectedElement = undefined; + } + }; + + return viewer; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 316 */ +/***/ (function(module, exports, __webpack_require__) { + + var SetOperatorNode = __webpack_require__(20); + + module.exports = function (){ + + var filter = {}, + nodes, + properties, + enabled = false, + filteredNodes, + filteredProperties, + filterTools = __webpack_require__(76)(); + + + /** + * If enabled, all set operators including connected properties are filtered. + * @param untouchedNodes + * @param untouchedProperties + */ + filter.filter = function ( untouchedNodes, untouchedProperties ){ + nodes = untouchedNodes; + properties = untouchedProperties; + + if ( this.enabled() ) { + removeSetOperators(); + } + + filteredNodes = nodes; + filteredProperties = properties; + }; + + function removeSetOperators(){ + var filteredData = filterTools.filterNodesAndTidy(nodes, properties, isNoSetOperator); + + nodes = filteredData.nodes; + properties = filteredData.properties; + } + + function isNoSetOperator( node ){ + return !(node instanceof SetOperatorNode); + } + + filter.enabled = function ( p ){ + if ( !arguments.length ) return enabled; + enabled = p; + return filter; + }; + + + // Functions a filter must have + filter.filteredNodes = function (){ + return filteredNodes; + }; + + filter.filteredProperties = function (){ + return filteredProperties; + }; + + + return filter; + }; + + +/***/ }), +/* 317 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var SetOperatorNode = __webpack_require__(20); + var OwlThing = __webpack_require__(31); + var OwlNothing = __webpack_require__(30); + var elementTools = __webpack_require__(63)(); + + module.exports = function (){ + + var statistics = {}, + nodeCount, + occurencesOfClassAndDatatypeTypes = {}, + edgeCount, + occurencesOfPropertyTypes = {}, + classCount, + datatypeCount, + datatypePropertyCount, + objectPropertyCount, + propertyCount, + totalIndividualCount, + filteredNodes, + filteredProperties; + + + statistics.filter = function ( classesAndDatatypes, properties ){ + resetStoredData(); + + storeTotalCounts(classesAndDatatypes, properties); + storeClassAndDatatypeCount(classesAndDatatypes); + storePropertyCount(properties); + + storeOccurencesOfTypes(classesAndDatatypes, occurencesOfClassAndDatatypeTypes); + storeOccurencesOfTypes(properties, occurencesOfPropertyTypes); + + storeTotalIndividualCount(classesAndDatatypes); + + filteredNodes = classesAndDatatypes; + filteredProperties = properties; + }; + + function resetStoredData(){ + nodeCount = 0; + edgeCount = 0; + classCount = 0; + datatypeCount = 0; + datatypePropertyCount = 0; + objectPropertyCount = 0; + propertyCount = 0; + totalIndividualCount = 0; + } + + function storeTotalCounts( classesAndDatatypes, properties ){ + nodeCount = classesAndDatatypes.length; + + var seenProperties = __webpack_require__(62)(), i, l, property; + for ( i = 0, l = properties.length; i < l; i++ ) { + property = properties[i]; + if ( !seenProperties.has(property) ) { + edgeCount += 1; + } + + seenProperties.add(property); + if ( property.inverse() ) { + seenProperties.add(property.inverse()); + } + } + } + + function storeClassAndDatatypeCount( classesAndDatatypes ){ + // Each datatype should be counted just a single time + var datatypeSet = d3.set(), + hasThing = false, + hasNothing = false; + classCount = 0; + var old = 0, newcc = 0; + classesAndDatatypes.forEach(function ( node ){ + if ( elementTools.isDatatype(node) ) { + datatypeSet.add(node.defaultLabel()); + } else if ( !(node instanceof SetOperatorNode) ) { + if ( node instanceof OwlThing ) { + hasThing = true; + } else if ( node instanceof OwlNothing ) { + hasNothing = true; + } else { + old = classCount; + var adds = 1 + countElementArray(node.equivalents()); + classCount += adds; + newcc = classCount; + } + } else if ( node instanceof SetOperatorNode ) { + old = classCount; + classCount += 1; + newcc = classCount; + } + }); + + // count things and nothings just a single time + // classCount += hasThing ? 1 : 0; + // classCount += hasNothing ? 1 : 0; + + datatypeCount = datatypeSet.size(); + } + + function storePropertyCount( properties ){ + for ( var i = 0, l = properties.length; i < l; i++ ) { + var property = properties[i]; + var attr; + var result = false; + if ( property.attributes ) { + attr = property.attributes(); + if ( attr && attr.indexOf("datatype") !== -1 ) { + result = true; + } + } + if ( result === true ) { + datatypePropertyCount += getExtendedPropertyCount(property); + } else if ( elementTools.isObjectProperty(property) ) { + objectPropertyCount += getExtendedPropertyCount(property); + } + } + propertyCount = objectPropertyCount + datatypePropertyCount; + } + + function getExtendedPropertyCount( property ){ + // count the property itself + var count = 1; + + // and count properties this property represents + count += countElementArray(property.equivalents()); + count += countElementArray(property.redundantProperties()); + + return count; + } + + function countElementArray( properties ){ + if ( properties ) { + return properties.length; + } + return 0; + } + + function storeOccurencesOfTypes( elements, storage ){ + elements.forEach(function ( element ){ + var type = element.type(), + typeCount = storage[type]; + + if ( typeof typeCount === "undefined" ) { + typeCount = 0; + } else { + typeCount += 1; + } + storage[type] = typeCount; + }); + } + + function storeTotalIndividualCount( nodes ){ + var sawIndividuals = {}; + var totalCount = 0; + for ( var i = 0, l = nodes.length; i < l; i++ ) { + var individuals = nodes[i].individuals(); + + var tempCount = 0; + for ( var iA = 0; iA < individuals.length; iA++ ) { + if ( sawIndividuals[individuals[iA].iri()] === undefined ) { + sawIndividuals[individuals[iA].iri()] = 1; // this iri for that individual is now set to 1 >> seen it + tempCount++; + } + } + totalCount += tempCount; + } + totalIndividualCount = totalCount; + sawIndividuals = {}; // clear the object + + } + + + statistics.nodeCount = function (){ + return nodeCount; + }; + + statistics.occurencesOfClassAndDatatypeTypes = function (){ + return occurencesOfClassAndDatatypeTypes; + }; + + statistics.edgeCount = function (){ + return edgeCount; + }; + + statistics.occurencesOfPropertyTypes = function (){ + return occurencesOfPropertyTypes; + }; + + statistics.classCount = function (){ + return classCount; + }; + + statistics.datatypeCount = function (){ + return datatypeCount; + }; + + statistics.datatypePropertyCount = function (){ + return datatypePropertyCount; + }; + + statistics.objectPropertyCount = function (){ + return objectPropertyCount; + }; + + statistics.propertyCount = function (){ + return propertyCount; + }; + + statistics.totalIndividualCount = function (){ + return totalIndividualCount; + }; + + + // Functions a filter must have + statistics.filteredNodes = function (){ + return filteredNodes; + }; + + statistics.filteredProperties = function (){ + return filteredProperties; + }; + + + return statistics; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 318 */ +/***/ (function(module, exports, __webpack_require__) { + + var elementTools = __webpack_require__(63)(); + + module.exports = function (){ + + var filter = {}, + nodes, + properties, + enabled = false, + filteredNodes, + filteredProperties; + + + /** + * If enabled subclasses that have only subclass properties are filtered. + * @param untouchedNodes + * @param untouchedProperties + */ + filter.filter = function ( untouchedNodes, untouchedProperties ){ + nodes = untouchedNodes; + properties = untouchedProperties; + + if ( this.enabled() ) { + hideSubclassesWithoutOwnProperties(); + } + + filteredNodes = nodes; + filteredProperties = properties; + }; + + function hideSubclassesWithoutOwnProperties(){ + var unneededProperties = [], + unneededClasses = [], + subclasses = [], + connectedProperties, + subclass, + property, + i, // index, + l; // length + + + for ( i = 0, l = properties.length; i < l; i++ ) { + property = properties[i]; + if ( elementTools.isRdfsSubClassOf(property) ) { + subclasses.push(property.domain()); + } + } + + for ( i = 0, l = subclasses.length; i < l; i++ ) { + subclass = subclasses[i]; + connectedProperties = findRelevantConnectedProperties(subclass, properties); + + // Only remove the node and its properties, if they're all subclassOf properties + if ( areOnlySubclassProperties(connectedProperties) && + doesNotInheritFromMultipleClasses(subclass, connectedProperties) ) { + + unneededProperties = unneededProperties.concat(connectedProperties); + unneededClasses.push(subclass); + } + } + + nodes = removeUnneededElements(nodes, unneededClasses); + properties = removeUnneededElements(properties, unneededProperties); + } + + /** + * Looks recursively for connected properties. Because just subclasses are relevant, + * we just look recursively for their properties. + * + * @param node + * @param allProperties + * @param visitedNodes a visited nodes which is used on recursive invocation + * @returns {Array} + */ + function findRelevantConnectedProperties( node, allProperties, visitedNodes ){ + var connectedProperties = [], + property, + i, + l; + + for ( i = 0, l = allProperties.length; i < l; i++ ) { + property = allProperties[i]; + if ( property.domain() === node || + property.range() === node ) { + + connectedProperties.push(property); + + + /* Special case: SuperClass <-(1) Subclass <-(2) Subclass ->(3) e.g. Datatype + * We need to find the last property recursively. Otherwise, we would remove the subClassOf + * property (1) because we didn't see the datatype property (3). + */ + + // Look only for subclass properties, because these are the relevant properties + if ( elementTools.isRdfsSubClassOf(property) ) { + var domain = property.domain(); + visitedNodes = visitedNodes || __webpack_require__(62)(); + + // If we have the range, there might be a nested property on the domain + if ( node === property.range() && !visitedNodes.has(domain) ) { + visitedNodes.add(domain); + var nestedConnectedProperties = findRelevantConnectedProperties(domain, allProperties, visitedNodes); + connectedProperties = connectedProperties.concat(nestedConnectedProperties); + } + } + } + } + + return connectedProperties; + } + + function areOnlySubclassProperties( connectedProperties ){ + var onlySubclassProperties = true, + property, + i, + l; + + for ( i = 0, l = connectedProperties.length; i < l; i++ ) { + property = connectedProperties[i]; + + if ( !elementTools.isRdfsSubClassOf(property) ) { + onlySubclassProperties = false; + break; + } + } + + return onlySubclassProperties; + } + + function doesNotInheritFromMultipleClasses( subclass, connectedProperties ){ + var superClassCount = 0; + + for ( var i = 0, l = connectedProperties.length; i < l; i++ ) { + var property = connectedProperties[i]; + + if ( property.domain() === subclass ) { + superClassCount += 1; + } + + if ( superClassCount > 1 ) { + return false; + } + } + + return true; + } + + function removeUnneededElements( array, removableElements ){ + var disjoint = [], + element, + i, + l; + + for ( i = 0, l = array.length; i < l; i++ ) { + element = array[i]; + if ( removableElements.indexOf(element) === -1 ) { + disjoint.push(element); + } + } + return disjoint; + } + + filter.enabled = function ( p ){ + if ( !arguments.length ) return enabled; + enabled = p; + return filter; + }; + + + // Functions a filter must have + filter.filteredNodes = function (){ + return filteredNodes; + }; + + filter.filteredProperties = function (){ + return filteredProperties; + }; + + + return filter; + }; + + +/***/ }) +/******/ ]); \ No newline at end of file diff --git a/mo/webvowl/license.txt b/mo/webvowl/license.txt new file mode 100644 index 0000000..6df36db --- /dev/null +++ b/mo/webvowl/license.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-2019 Vincent Link, Steffen Lohmann, Eduard Marbach, Stefan Negru, Vitalis Wiens + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/pgo/.htaccess b/pgo/.htaccess new file mode 100644 index 0000000..308fa72 --- /dev/null +++ b/pgo/.htaccess @@ -0,0 +1,47 @@ +# Turn off MultiViews +Options -MultiViews + +# Directive to ensure *.rdf files served as appropriate content type, +# if not present in main apache config +AddType application/rdf+xml .rdf +AddType application/rdf+xml .owl +AddType text/turtle .ttl +AddType application/n-triples .n3 +AddType application/ld+json .jsonld +# Rewrite engine setup +RewriteEngine On +#Change the path to the folder here +RewriteBase /pgo + +# Rewrite rule to serve HTML content from the vocabulary URI if requested +RewriteCond %{HTTP_ACCEPT} !application/rdf\+xml.*(text/html|application/xhtml\+xml) +RewriteCond %{HTTP_ACCEPT} text/html [OR] +RewriteCond %{HTTP_ACCEPT} application/xhtml\+xml [OR] +RewriteCond %{HTTP_USER_AGENT} ^Mozilla/.* +RewriteRule ^$ index-de.html [R=303,L] + +# Rewrite rule to serve JSON-LD content from the vocabulary URI if requested +RewriteCond %{HTTP_ACCEPT} application/ld\+json +RewriteRule ^$ ontology.jsonld [R=303,L] + +# Rewrite rule to serve RDF/XML content from the vocabulary URI if requested +RewriteCond %{HTTP_ACCEPT} \*/\* [OR] +RewriteCond %{HTTP_ACCEPT} application/rdf\+xml +RewriteRule ^$ ontology.rdf [R=303,L] + +# Rewrite rule to serve N-Triples content from the vocabulary URI if requested +RewriteCond %{HTTP_ACCEPT} application/n-triples +RewriteRule ^$ ontology.nt [R=303,L] + +# Rewrite rule to serve TTL content from the vocabulary URI if requested +RewriteCond %{HTTP_ACCEPT} text/turtle [OR] +RewriteCond %{HTTP_ACCEPT} text/\* [OR] +RewriteCond %{HTTP_ACCEPT} \*/turtle +RewriteRule ^$ ontology.ttl [R=303,L] + +RewriteCond %{HTTP_ACCEPT} .+ +RewriteRule ^$ 406.html [R=406,L] +# Default response +# --------------------------- +# Rewrite rule to serve the RDF/XML content from the vocabulary URI by default +RewriteRule ^$ ontology.rdf [R=303,L] \ No newline at end of file diff --git a/pgo/406.html b/pgo/406.html new file mode 100644 index 0000000..1a2f4b5 --- /dev/null +++ b/pgo/406.html @@ -0,0 +1,10 @@ + + +406 Not Acceptable + + +

    Not Acceptable

    +

    An appropriate representation of the requested resource could not be found on this server.

    + Available variants: + + \ No newline at end of file diff --git a/pgo/index-de.html b/pgo/index-de.html new file mode 100644 index 0000000..6a4ed6c --- /dev/null +++ b/pgo/index-de.html @@ -0,0 +1,447 @@ + + + + + Platform MaterialDigital - Precipitate Geometry Ontology (PGO) + + + + + + + + + + + +
    +
    +
    language de en
    +

    Platform MaterialDigital - Precipitate Geometry Ontology (PGO)

    +

    Release 2023-12-13

    + + +
    +
    Diese Version:
    +
    https://w3id.org/pmd/pgo/1.0.0
    +
    Revision:
    +
    1.0.0
    +
    Autoren:
    +
    https://orcid.org/0000-0002-3717-7104
    https://orcid.org/0000-0002-7094-5371
    + +
    Importierte Ontologien:
    +
    prov-o#
    prov-o-inverses#
    co
    + +
    Download Serialisierung:
    JSON-LD RDF/XML N-Triples TTL
    Lizenz:
    http://insertlicenseURIhere.org +
    Visualisierung:
    Visualize with WebVowl
    +
    Zitieren als:
    +
    Markus Schilling, Bernd Bayerlein. (December 13th, 2023) PGO: Precipitate Geometry Ontology. Version 1.0.0, https://w3id.org/pmd/pgo
    +
    + +Ursprung dieser Seite
    +
    +
    +
    +Ontology Specification Draft +
    +

    Zusammenfassung

    +The Precipitate Geometry Ontology (PGO) is a small ontology used to describe data originating from transmission electron microscopy (TEM) analyses of precipitates. +It was created in the frame of the collaborative project Platform MaterialDigital (PMD, https://materialdigital.de). It is further part of a demonstrator showing possible interactions of semantic data created by the application of multiple ontologies and used by federated SPARQL querying - the "Orowan Demonstrator" (available at: https://github.com/materialdigital/demo-orowan). +
    +
    + + +

    Platform MaterialDigital - Precipitate Geometry Ontology (PGO): überblick zurück zum Inhaltsverzeichnis

    + +Diese Ontologie beinhaltet die folgenden Klassen und Eigenschaften. +

    Klassen

    + +
    + + + +

    Querverweis für... Platform MaterialDigital - Precipitate Geometry Ontology (PGO) Klassen, Object Properties und Data Properties zurück zum Inhaltsverzeichnis

    +Dieser Abschnitt enthält Details für jede Klasse und jedes definierte Property, die definiert wurden durch Platform MaterialDigital - Precipitate Geometry Ontology (PGO). +
    +

    Klassen

    + +
    +

    Ausscheidungc + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/pgo/Precipitate

    +
    + Als Subklasse von Particle sind Ausscheidungen fein verteilte metastabile Phasen (z. B. intermetallischen Verbindungen), die als wirksame Hindernisse für Versetzungsbewegungen in aushärtbaren metallischen Legierungen durch gezielte Wärmenbehandlungen erzeugt werden. +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/pgo +
    +
    +
    +
    hat Super-Klassen
    +
    + Partikel + c +
    +
    +
    +
    +

    Ausscheidungsabstandc + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/pgo/PrecipitateDistance

    +
    + Als Subklasse des Abstands ist der Ausscheidungsabstand ein Maß für den Abstand zwischen zwei Ausscheidungen in metallischen Legierungen. Üblicherweise wird dieser Abstand aus der Analyse von Dunkelfeld-TEM-Bildern gewonnen und in Nanometern angegeben. +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/pgo +
    +
    +
    +
    hat Super-Klassen
    +
    + distance +
    +
    hat Sub-Klassen
    +
    + Mittlerer Ausscheidungsabstand + c +
    +
    +
    +
    +

    Ausscheidungsflächec + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/pgo/PrecipitateArea

    +
    + Als Subklasse der Fläche ist die Ausscheidungsfläche ein Maß,welches zum Vergleich von Ausscheidungsgrößen verwendet wird. In der Regel wird für Ausscheidungspartikel eine kreisförmige Näherung verwendet. +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/pgo +
    +
    +
    +
    hat Super-Klassen
    +
    + area +
    +
    +
    +
    +

    Ausscheidungsnummerc + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/pgo/PrecipitateNumber

    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/pgo +
    +
    https://w3id.org/pmd/pgo
    +
    https://w3id.org/pmd/pgo
    +
    +
    +
    hat Super-Klassen
    +
    + index +
    +
    +
    +
    +

    Ausscheidungsradiusc + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/pgo/PrecipitateRadius

    +
    + Als Subklasse des Radius ist der Ausscheidungsradius ein Maß, mit dem eine spezifische Korrelation der Ausscheidungsgröße vorgenommen werden kann. Der Ausscheidungsradius wird in der Regel aus der kreisförmigen Annäherung der Ausscheidungsfläche ermittelt. +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/pgo +
    +
    +
    +
    hat Super-Klassen
    +
    + radius +
    +
    +
    +
    +

    Bildanalyse-Prozessc + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/pgo/ImageAnalysisProcess

    +
    + Als Unterklasse eines nicht-transformativen Analyseverfahrens ist das Bildanalyseverfahren ein Prozess, mit dem nützliche Informationen, wie z. B. Koordinaten von Ausscheidungen in metallischen Legierungen und deren Abständen, aus einem Bild extrahiert und für die weitere Verwendung interpretiert werden. +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/pgo +
    +
    +
    +
    hat Super-Klassen
    +
    + non transformative analysis process +
    +
    +
    +
    +

    calibration factorc + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/pgo/CalibrationFactor

    +
    + Als Subklasse des Values Objects bietet der Kalibrierungsfaktor einen Umrechnungsfaktor von Pixeln in reale Dimensionen, der die Skalierung von Bildern in metrische Einheiten ermöglicht. +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/pgo +
    +
    +
    +
    hat Super-Klassen
    +
    + value object +
    +
    +
    +
    +

    Dunkelfeldbildc + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/pgo/DarkFieldImage

    +
    + Als Subklasse des Bildes wird das Dunkelfeldbild mit einem hochauflösenden Transmissionselektronenmikroskop (HR-TEM) erzeugt. +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/pgo +
    +
    +
    +
    hat Super-Klassen
    +
    + image +
    +
    +
    +
    +

    Mittlerer Ausscheidungsabstandc + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/pgo/AveragePrecipitateDistance

    +
    + Als Subklasse der Ausscheidungsabstand wird der mittlere Ausscheidungsabstand aus mehreren Ausscheidungsabständen ermittelt, z. B. durch die Delauney-Triangulation. Der mittlere Ausscheidungsabstand lässt sich somit aus dem Median oder dem arithmetischen Mittelwert aller betrachteten Einzelmessungen von Ausscheidungsabständen berechnen. +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/pgo +
    +
    +
    +
    hat Super-Klassen
    +
    + Ausscheidungsabstand + c +
    +
    +
    +
    +

    Partikelc + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/pgo/Particle

    +
    + Als eine Subklasse von Objekt ist ein Partikel ein kleines, lokalisiertes Objekt, das durch mehrere physikalische oder chemische Eigenschaften wie Volumen, Dichte oder Masse beschrieben werden kann. +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/pgo +
    +
    +
    +
    hat Super-Klassen
    +
    + object +
    +
    hat Sub-Klassen
    +
    + Ausscheidung + c +
    +
    +
    +
    +

    Legende zurück zu ToC

    +
    +c: Klassen
    +
    +
    +
    +
    +

    Danksagung zurück zum Inhaltsverzeichnis

    +

    +Die Autoren bedanken sich beiSilvio Peroni für die Entwicklung von LODE, einer Umgebung zur Live-OWL-Dokumentation, die im Abschnitt Querverweise für die Darstellung verwendet wird, bei Daniel Garijo für die Entwicklung von Widoco, welches für die Templates in dieser Anwendung verwendet wird.

    +
    + + +
    + + \ No newline at end of file diff --git a/pgo/index-en.html b/pgo/index-en.html new file mode 100644 index 0000000..94569ff --- /dev/null +++ b/pgo/index-en.html @@ -0,0 +1,447 @@ + + + + + Platform MaterialDigital - Precipitate Geometry Ontology (PGO) + + + + + + + + + + + +
    +
    +
    language de en
    +

    Platform MaterialDigital - Precipitate Geometry Ontology (PGO)

    +

    Release 2023-12-13

    + + +
    +
    This version:
    +
    https://w3id.org/pmd/pgo/1.0.0
    +
    Revision:
    +
    1.0.0
    +
    Authors:
    +
    https://orcid.org/0000-0002-3717-7104
    https://orcid.org/0000-0002-7094-5371
    + +
    Imported Ontologies:
    +
    prov-o#
    prov-o-inverses#
    co
    + +
    Download serialization:
    JSON-LD RDF/XML N-Triples TTL
    License:
    http://insertlicenseURIhere.org +
    Visualization:
    Visualize with WebVowl
    +
    Cite as:
    +
    Markus Schilling, Bernd Bayerlein. (December 13th, 2023) PGO: Precipitate Geometry Ontology. Version 1.0.0, https://w3id.org/pmd/pgo
    +
    + +Provenance of this page
    +
    +
    +
    +Ontology Specification Draft +
    +

    Abstract

    +The Precipitate Geometry Ontology (PGO) is a small ontology used to describe data originating from transmission electron microscopy (TEM) analyses of precipitates. +It was created in the frame of the collaborative project Platform MaterialDigital (PMD, https://materialdigital.de). It is further part of a demonstrator showing possible interactions of semantic data created by the application of multiple ontologies and used by federated SPARQL querying - the "Orowan Demonstrator" (available at: https://github.com/materialdigital/demo-orowan). +
    +
    + + +

    Platform MaterialDigital - Precipitate Geometry Ontology (PGO): Overview back to ToC

    + +This ontology has the following classes and properties. +

    Classes

    + +
    + + + +

    Cross-reference for Platform MaterialDigital - Precipitate Geometry Ontology (PGO) classes, object properties and data properties back to ToC

    +This section provides details for each class and property defined by Platform MaterialDigital - Precipitate Geometry Ontology (PGO). +
    +

    Classes

    + +
    +

    Average Precipitate Distancec + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/pgo/AveragePrecipitateDistance

    +
    + As a subclass of precipitate distance, the average precipitate distance is determined from several precipitate distances via, e.g., the Delauney triangulation. Hence, the average precipitate distance can be calculated using the median and the arithmetic mean value of all individual measurements of precipitate distances regarded. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/pgo +
    +
    +
    +
    has super-classes
    +
    + Precipitate Distance + c +
    +
    +
    +
    +

    calibration factorc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/pgo/CalibrationFactor

    +
    + As a subclass of value object, the calibration factor provides a pixel-to-real-distance conversion factor, that allows image scaling to metric units. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/pgo +
    +
    +
    +
    has super-classes
    +
    + value object +
    +
    +
    +
    +

    Dark-field Imagec + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/pgo/DarkFieldImage

    +
    + As a subclass of image, the dark-field image is generated from a high-resolution transmission electron microscope (HR-TEM). +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/pgo +
    +
    +
    +
    has super-classes
    +
    + image +
    +
    +
    +
    +

    Image Analysis Processc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/pgo/ImageAnalysisProcess

    +
    + As subclass of a non-transformative analysis process, the image analysis process is a process by which useful information, such as precipitate coordinates and their distances, are extracted from an image and interpreted for further application. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/pgo +
    +
    +
    +
    has super-classes
    +
    + non transformative analysis process +
    +
    +
    +
    +

    Particlec + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/pgo/Particle

    +
    + As a subclass of object, a particle is a small localized object which can be described by several physical or chemical properties, such as volume, density, or mass. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/pgo +
    +
    +
    +
    has super-classes
    +
    + object +
    +
    has sub-classes
    +
    + Precipitate + c +
    +
    +
    +
    +

    Precipitatec + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/pgo/Precipitate

    +
    + As a subclass of particle, precipitates are finely distributed metastable phases (e.g., intermetallic compounds) that are created as effective obstacles to dislocation motion in age-hardenable metallic alloys by specific heat treatments. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/pgo +
    +
    +
    +
    has super-classes
    +
    + Particle + c +
    +
    +
    +
    +

    Precipitate Areac + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/pgo/PrecipitateArea

    +
    + As a subclass of the area, the precipitate area is a measure that is used to compare precipitate sizes. As a rule, a circular approximation is used for precipitation particles. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/pgo +
    +
    +
    +
    has super-classes
    +
    + area +
    +
    +
    +
    +

    Precipitate Distancec + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/pgo/PrecipitateDistance

    +
    + As a subclass of distance, the precipitate distance is a measure of the distance between two precipitates. Usually, this distance is obtained from analysing dark-field TEM images and given in nanometers. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/pgo +
    +
    +
    +
    has super-classes
    +
    + distance +
    +
    has sub-classes
    +
    + Average Precipitate Distance + c +
    +
    +
    +
    +

    Precipitate Numberc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/pgo/PrecipitateNumber

    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/pgo +
    +
    https://w3id.org/pmd/pgo
    +
    https://w3id.org/pmd/pgo
    +
    +
    +
    has super-classes
    +
    + index +
    +
    +
    +
    +

    Precipitate Radiusc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/pgo/PrecipitateRadius

    +
    + As a subclass of radius, precipitate radius is a measure used to perform a specific precipitate size correlation. The precipitate radius is usually obtained from the circular approximation of the precipitate area. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/pgo +
    +
    +
    +
    has super-classes
    +
    + radius +
    +
    +
    +
    +

    Legend back to ToC

    +
    +c: Classes
    +
    +
    +
    +
    +

    Acknowledgments back to ToC

    +

    +The authors would like to thank Silvio Peroni for developing LODE, a Live OWL Documentation Environment, which is used for representing the Cross Referencing Section of this document and Daniel Garijo for developing Widoco, the program used to create the template used in this documentation.

    +
    + + +
    + + \ No newline at end of file diff --git a/pgo/index.html b/pgo/index.html new file mode 100644 index 0000000..94569ff --- /dev/null +++ b/pgo/index.html @@ -0,0 +1,447 @@ + + + + + Platform MaterialDigital - Precipitate Geometry Ontology (PGO) + + + + + + + + + + + +
    +
    +
    language de en
    +

    Platform MaterialDigital - Precipitate Geometry Ontology (PGO)

    +

    Release 2023-12-13

    + + +
    +
    This version:
    +
    https://w3id.org/pmd/pgo/1.0.0
    +
    Revision:
    +
    1.0.0
    +
    Authors:
    +
    https://orcid.org/0000-0002-3717-7104
    https://orcid.org/0000-0002-7094-5371
    + +
    Imported Ontologies:
    +
    prov-o#
    prov-o-inverses#
    co
    + +
    Download serialization:
    JSON-LD RDF/XML N-Triples TTL
    License:
    http://insertlicenseURIhere.org +
    Visualization:
    Visualize with WebVowl
    +
    Cite as:
    +
    Markus Schilling, Bernd Bayerlein. (December 13th, 2023) PGO: Precipitate Geometry Ontology. Version 1.0.0, https://w3id.org/pmd/pgo
    +
    + +Provenance of this page
    +
    +
    +
    +Ontology Specification Draft +
    +

    Abstract

    +The Precipitate Geometry Ontology (PGO) is a small ontology used to describe data originating from transmission electron microscopy (TEM) analyses of precipitates. +It was created in the frame of the collaborative project Platform MaterialDigital (PMD, https://materialdigital.de). It is further part of a demonstrator showing possible interactions of semantic data created by the application of multiple ontologies and used by federated SPARQL querying - the "Orowan Demonstrator" (available at: https://github.com/materialdigital/demo-orowan). +
    +
    + + +

    Platform MaterialDigital - Precipitate Geometry Ontology (PGO): Overview back to ToC

    + +This ontology has the following classes and properties. +

    Classes

    + +
    + + + +

    Cross-reference for Platform MaterialDigital - Precipitate Geometry Ontology (PGO) classes, object properties and data properties back to ToC

    +This section provides details for each class and property defined by Platform MaterialDigital - Precipitate Geometry Ontology (PGO). +
    +

    Classes

    + +
    +

    Average Precipitate Distancec + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/pgo/AveragePrecipitateDistance

    +
    + As a subclass of precipitate distance, the average precipitate distance is determined from several precipitate distances via, e.g., the Delauney triangulation. Hence, the average precipitate distance can be calculated using the median and the arithmetic mean value of all individual measurements of precipitate distances regarded. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/pgo +
    +
    +
    +
    has super-classes
    +
    + Precipitate Distance + c +
    +
    +
    +
    +

    calibration factorc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/pgo/CalibrationFactor

    +
    + As a subclass of value object, the calibration factor provides a pixel-to-real-distance conversion factor, that allows image scaling to metric units. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/pgo +
    +
    +
    +
    has super-classes
    +
    + value object +
    +
    +
    +
    +

    Dark-field Imagec + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/pgo/DarkFieldImage

    +
    + As a subclass of image, the dark-field image is generated from a high-resolution transmission electron microscope (HR-TEM). +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/pgo +
    +
    +
    +
    has super-classes
    +
    + image +
    +
    +
    +
    +

    Image Analysis Processc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/pgo/ImageAnalysisProcess

    +
    + As subclass of a non-transformative analysis process, the image analysis process is a process by which useful information, such as precipitate coordinates and their distances, are extracted from an image and interpreted for further application. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/pgo +
    +
    +
    +
    has super-classes
    +
    + non transformative analysis process +
    +
    +
    +
    +

    Particlec + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/pgo/Particle

    +
    + As a subclass of object, a particle is a small localized object which can be described by several physical or chemical properties, such as volume, density, or mass. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/pgo +
    +
    +
    +
    has super-classes
    +
    + object +
    +
    has sub-classes
    +
    + Precipitate + c +
    +
    +
    +
    +

    Precipitatec + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/pgo/Precipitate

    +
    + As a subclass of particle, precipitates are finely distributed metastable phases (e.g., intermetallic compounds) that are created as effective obstacles to dislocation motion in age-hardenable metallic alloys by specific heat treatments. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/pgo +
    +
    +
    +
    has super-classes
    +
    + Particle + c +
    +
    +
    +
    +

    Precipitate Areac + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/pgo/PrecipitateArea

    +
    + As a subclass of the area, the precipitate area is a measure that is used to compare precipitate sizes. As a rule, a circular approximation is used for precipitation particles. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/pgo +
    +
    +
    +
    has super-classes
    +
    + area +
    +
    +
    +
    +

    Precipitate Distancec + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/pgo/PrecipitateDistance

    +
    + As a subclass of distance, the precipitate distance is a measure of the distance between two precipitates. Usually, this distance is obtained from analysing dark-field TEM images and given in nanometers. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/pgo +
    +
    +
    +
    has super-classes
    +
    + distance +
    +
    has sub-classes
    +
    + Average Precipitate Distance + c +
    +
    +
    +
    +

    Precipitate Numberc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/pgo/PrecipitateNumber

    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/pgo +
    +
    https://w3id.org/pmd/pgo
    +
    https://w3id.org/pmd/pgo
    +
    +
    +
    has super-classes
    +
    + index +
    +
    +
    +
    +

    Precipitate Radiusc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/pgo/PrecipitateRadius

    +
    + As a subclass of radius, precipitate radius is a measure used to perform a specific precipitate size correlation. The precipitate radius is usually obtained from the circular approximation of the precipitate area. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/pgo +
    +
    +
    +
    has super-classes
    +
    + radius +
    +
    +
    +
    +

    Legend back to ToC

    +
    +c: Classes
    +
    +
    +
    +
    +

    Acknowledgments back to ToC

    +

    +The authors would like to thank Silvio Peroni for developing LODE, a Live OWL Documentation Environment, which is used for representing the Cross Referencing Section of this document and Daniel Garijo for developing Widoco, the program used to create the template used in this documentation.

    +
    + + +
    + + \ No newline at end of file diff --git a/pgo/ontology.jsonld b/pgo/ontology.jsonld new file mode 100644 index 0000000..8d9f263 --- /dev/null +++ b/pgo/ontology.jsonld @@ -0,0 +1,266 @@ +[ { + "@id" : "https://w3id.org/pmd/pgo", + "@type" : [ "http://www.w3.org/2002/07/owl#Ontology" ], + "http://purl.org/dc/elements/1.1/creator" : [ { + "@id" : "https://orcid.org/0000-0002-3717-7104" + }, { + "@id" : "https://orcid.org/0000-0002-7094-5371" + } ], + "http://purl.org/dc/elements/1.1/license" : [ { + "@id" : "http://creativecommons.org/licenses/by/4.0" + } ], + "http://purl.org/dc/terms/bibliographicCitation" : [ { + "@value" : "Markus Schilling, Bernd Bayerlein. (December 13th, 2023) PGO: Precipitate Geometry Ontology. Version 1.0.0, https://w3id.org/pmd/pgo" + } ], + "http://purl.org/dc/terms/created" : [ { + "@value" : "2023-12-13" + } ], + "http://purl.org/dc/terms/title" : [ { + "@language" : "en", + "@value" : "Platform MaterialDigital - Precipitate Geometry Ontology (PGO)" + } ], + "http://www.w3.org/2000/01/rdf-schema#comment" : [ { + "@language" : "en", + "@value" : "The Precipitate Geometry Ontology (PGO) is a small ontology used to describe data originating from transmission electron microscopy (TEM) analyses of precipitates. \nIt was created in the frame of the collaborative project Platform MaterialDigital (PMD, https://materialdigital.de). It is further part of a demonstrator showing possible interactions of semantic data created by the application of multiple ontologies and used by federated SPARQL querying - the \"Orowan Demonstrator\" (available at: https://github.com/materialdigital/demo-orowan)." + } ], + "http://www.w3.org/2002/07/owl#imports" : [ { + "@id" : "https://w3id.org/pmd/co" + } ], + "http://www.w3.org/2002/07/owl#versionIRI" : [ { + "@id" : "https://w3id.org/pmd/pgo/1.0.0" + } ], + "http://www.w3.org/2002/07/owl#versionInfo" : [ { + "@value" : "1.0.0" + } ] +}, { + "@id" : "https://w3id.org/pmd/pgo/AveragePrecipitateDistance", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/pgo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Average Precipitate Distance" + }, { + "@language" : "de", + "@value" : "Mittlerer Ausscheidungsabstand" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/pgo/PrecipitateDistance" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Als Subklasse der Ausscheidungsabstand wird der mittlere Ausscheidungsabstand aus mehreren Ausscheidungsabständen ermittelt, z. B. durch die Delauney-Triangulation. Der mittlere Ausscheidungsabstand lässt sich somit aus dem Median oder dem arithmetischen Mittelwert aller betrachteten Einzelmessungen von Ausscheidungsabständen berechnen." + }, { + "@language" : "en", + "@value" : "As a subclass of precipitate distance, the average precipitate distance is determined from several precipitate distances via, e.g., the Delauney triangulation. Hence, the average precipitate distance can be calculated using the median and the arithmetic mean value of all individual measurements of precipitate distances regarded." + } ] +}, { + "@id" : "https://w3id.org/pmd/pgo/CalibrationFactor", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/pgo" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/ValueObject" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Als Subklasse des Values Objects bietet der Kalibrierungsfaktor einen Umrechnungsfaktor von Pixeln in reale Dimensionen, der die Skalierung von Bildern in metrische Einheiten ermöglicht." + }, { + "@language" : "en", + "@value" : "As a subclass of value object, the calibration factor provides a pixel-to-real-distance conversion factor, that allows image scaling to metric units." + }, { + "@language" : "en", + "@value" : "Calibration Factor" + }, { + "@language" : "de", + "@value" : "Kalibrierungsfaktor" + } ] +}, { + "@id" : "https://w3id.org/pmd/pgo/DarkFieldImage", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/pgo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Dark-field Image" + }, { + "@language" : "de", + "@value" : "Dunkelfeldbild" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/Image" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Als Subklasse des Bildes wird das Dunkelfeldbild mit einem hochauflösenden Transmissionselektronenmikroskop (HR-TEM) erzeugt." + }, { + "@language" : "en", + "@value" : "As a subclass of image, the dark-field image is generated from a high-resolution transmission electron microscope (HR-TEM)." + } ] +}, { + "@id" : "https://w3id.org/pmd/pgo/ImageAnalysisProcess", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/pgo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Bildanalyse-Prozess" + }, { + "@language" : "en", + "@value" : "Image Analysis Process" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/NonTransformativeAnalysisProcess" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Als Unterklasse eines nicht-transformativen Analyseverfahrens ist das Bildanalyseverfahren ein Prozess, mit dem nützliche Informationen, wie z. B. Koordinaten von Ausscheidungen in metallischen Legierungen und deren Abständen, aus einem Bild extrahiert und für die weitere Verwendung interpretiert werden." + }, { + "@language" : "en", + "@value" : "As subclass of a non-transformative analysis process, the image analysis process is a process by which useful information, such as precipitate coordinates and their distances, are extracted from an image and interpreted for further application." + } ] +}, { + "@id" : "https://w3id.org/pmd/pgo/Particle", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/pgo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Particle" + }, { + "@language" : "de", + "@value" : "Partikel" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/Object" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Als eine Subklasse von Objekt ist ein Partikel ein kleines, lokalisiertes Objekt, das durch mehrere physikalische oder chemische Eigenschaften wie Volumen, Dichte oder Masse beschrieben werden kann." + }, { + "@language" : "en", + "@value" : "As a subclass of object, a particle is a small localized object which can be described by several physical or chemical properties, such as volume, density, or mass." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@id" : "https://en.wikipedia.org/wiki/Particle" + } ] +}, { + "@id" : "https://w3id.org/pmd/pgo/Precipitate", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/pgo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Ausscheidung" + }, { + "@language" : "en", + "@value" : "Precipitate" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/pgo/Particle" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Als Subklasse von Particle sind Ausscheidungen fein verteilte metastabile Phasen (z. B. intermetallischen Verbindungen), die als wirksame Hindernisse für Versetzungsbewegungen in aushärtbaren metallischen Legierungen durch gezielte Wärmenbehandlungen erzeugt werden." + }, { + "@language" : "en", + "@value" : "As a subclass of particle, precipitates are finely distributed metastable phases (e.g., intermetallic compounds) that are created as effective obstacles to dislocation motion in age-hardenable metallic alloys by specific heat treatments." + } ] +}, { + "@id" : "https://w3id.org/pmd/pgo/PrecipitateArea", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/pgo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Ausscheidungsfläche" + }, { + "@language" : "en", + "@value" : "Precipitate Area" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/Area" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Als Subklasse der Fläche ist die Ausscheidungsfläche ein Maß,welches zum Vergleich von Ausscheidungsgrößen verwendet wird. In der Regel wird für Ausscheidungspartikel eine kreisförmige Näherung verwendet." + }, { + "@language" : "en", + "@value" : "As a subclass of the area, the precipitate area is a measure that is used to compare precipitate sizes. As a rule, a circular approximation is used for precipitation particles." + } ] +}, { + "@id" : "https://w3id.org/pmd/pgo/PrecipitateDistance", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/pgo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Ausscheidungsabstand" + }, { + "@language" : "en", + "@value" : "Precipitate Distance" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/Distance" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Als Subklasse des Abstands ist der Ausscheidungsabstand ein Maß für den Abstand zwischen zwei Ausscheidungen in metallischen Legierungen. Üblicherweise wird dieser Abstand aus der Analyse von Dunkelfeld-TEM-Bildern gewonnen und in Nanometern angegeben." + }, { + "@language" : "en", + "@value" : "As a subclass of distance, the precipitate distance is a measure of the distance between two precipitates. Usually, this distance is obtained from analysing dark-field TEM images and given in nanometers." + } ] +}, { + "@id" : "https://w3id.org/pmd/pgo/PrecipitateNumber", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/pgo" + }, { + "@language" : "de", + "@value" : "Die Ausscheidungsnummer ermöglicht die eindeutige Zuordnung der gemessenen Eigenschaften zu einem bestimmten Ausscheidung." + }, { + "@language" : "en", + "@value" : "The precipitate number enables the explicit assignment of measured properties to a specific precipitate." + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Ausscheidungsnummer" + }, { + "@language" : "en", + "@value" : "Precipitate Number" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/Index" + } ] +}, { + "@id" : "https://w3id.org/pmd/pgo/PrecipitateRadius", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/pgo" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Ausscheidungsradius" + }, { + "@language" : "en", + "@value" : "Precipitate Radius" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/Radius" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Als Subklasse des Radius ist der Ausscheidungsradius ein Maß, mit dem eine spezifische Korrelation der Ausscheidungsgröße vorgenommen werden kann. Der Ausscheidungsradius wird in der Regel aus der kreisförmigen Annäherung der Ausscheidungsfläche ermittelt." + }, { + "@language" : "en", + "@value" : "As a subclass of radius, precipitate radius is a measure used to perform a specific precipitate size correlation. The precipitate radius is usually obtained from the circular approximation of the precipitate area." + } ] +} ] \ No newline at end of file diff --git a/pgo/ontology.nt b/pgo/ontology.nt new file mode 100644 index 0000000..a085d43 --- /dev/null +++ b/pgo/ontology.nt @@ -0,0 +1,112 @@ + . + . + . + . + . + . + "Markus Schilling, Bernd Bayerlein. (December 13th, 2023) PGO: Precipitate Geometry Ontology. Version 1.0.0, https://w3id.org/pmd/pgo" . + "2023-12-13" . + "Platform MaterialDigital - Precipitate Geometry Ontology (PGO)"@en . + "The Precipitate Geometry Ontology (PGO) is a small ontology used to describe data originating from transmission electron microscopy (TEM) analyses of precipitates. \nIt was created in the frame of the collaborative project Platform MaterialDigital (PMD, https://materialdigital.de). It is further part of a demonstrator showing possible interactions of semantic data created by the application of multiple ontologies and used by federated SPARQL querying - the \"Orowan Demonstrator\" (available at: https://github.com/materialdigital/demo-orowan)."@en . + "1.0.0" . +# +# +# ################################################################# +# # +# # Classes +# # +# ################################################################# +# +# +# https://w3id.org/pmd/pgo/AveragePrecipitateDistance + . + . + . + "Average Precipitate Distance"@en . + "Mittlerer Ausscheidungsabstand"@de . + "Als Subklasse der Ausscheidungsabstand wird der mittlere Ausscheidungsabstand aus mehreren Ausscheidungsabständen ermittelt, z. B. durch die Delauney-Triangulation. Der mittlere Ausscheidungsabstand lässt sich somit aus dem Median oder dem arithmetischen Mittelwert aller betrachteten Einzelmessungen von Ausscheidungsabständen berechnen."@de . + "As a subclass of precipitate distance, the average precipitate distance is determined from several precipitate distances via, e.g., the Delauney triangulation. Hence, the average precipitate distance can be calculated using the median and the arithmetic mean value of all individual measurements of precipitate distances regarded."@en . +# +# https://w3id.org/pmd/pgo/CalibrationFactor + . + . + . + "Als Subklasse des Values Objects bietet der Kalibrierungsfaktor einen Umrechnungsfaktor von Pixeln in reale Dimensionen, der die Skalierung von Bildern in metrische Einheiten ermöglicht."@de . + "As a subclass of value object, the calibration factor provides a pixel-to-real-distance conversion factor, that allows image scaling to metric units."@en . + "Calibration Factor"@en . + "Kalibrierungsfaktor"@de . +# +# https://w3id.org/pmd/pgo/DarkFieldImage + . + . + . + "Dark-field Image"@en . + "Dunkelfeldbild"@de . + "Als Subklasse des Bildes wird das Dunkelfeldbild mit einem hochauflösenden Transmissionselektronenmikroskop (HR-TEM) erzeugt."@de . + "As a subclass of image, the dark-field image is generated from a high-resolution transmission electron microscope (HR-TEM)."@en . +# +# https://w3id.org/pmd/pgo/ImageAnalysisProcess + . + . + . + "Bildanalyse-Prozess"@de . + "Image Analysis Process"@en . + "Als Unterklasse eines nicht-transformativen Analyseverfahrens ist das Bildanalyseverfahren ein Prozess, mit dem nützliche Informationen, wie z. B. Koordinaten von Ausscheidungen in metallischen Legierungen und deren Abständen, aus einem Bild extrahiert und für die weitere Verwendung interpretiert werden."@de . + "As subclass of a non-transformative analysis process, the image analysis process is a process by which useful information, such as precipitate coordinates and their distances, are extracted from an image and interpreted for further application."@en . +# +# https://w3id.org/pmd/pgo/Particle + . + . + . + "Particle"@en . + "Partikel"@de . + "Als eine Subklasse von Objekt ist ein Partikel ein kleines, lokalisiertes Objekt, das durch mehrere physikalische oder chemische Eigenschaften wie Volumen, Dichte oder Masse beschrieben werden kann."@de . + "As a subclass of object, a particle is a small localized object which can be described by several physical or chemical properties, such as volume, density, or mass."@en . + . +# +# https://w3id.org/pmd/pgo/Precipitate + . + . + . + "Ausscheidung"@de . + "Precipitate"@en . + "Als Subklasse von Particle sind Ausscheidungen fein verteilte metastabile Phasen (z. B. intermetallischen Verbindungen), die als wirksame Hindernisse für Versetzungsbewegungen in aushärtbaren metallischen Legierungen durch gezielte Wärmenbehandlungen erzeugt werden."@de . + "As a subclass of particle, precipitates are finely distributed metastable phases (e.g., intermetallic compounds) that are created as effective obstacles to dislocation motion in age-hardenable metallic alloys by specific heat treatments."@en . +# +# https://w3id.org/pmd/pgo/PrecipitateArea + . + . + . + "Ausscheidungsfläche"@de . + "Precipitate Area"@en . + "Als Subklasse der Fläche ist die Ausscheidungsfläche ein Maß,welches zum Vergleich von Ausscheidungsgrößen verwendet wird. In der Regel wird für Ausscheidungspartikel eine kreisförmige Näherung verwendet."@de . + "As a subclass of the area, the precipitate area is a measure that is used to compare precipitate sizes. As a rule, a circular approximation is used for precipitation particles."@en . +# +# https://w3id.org/pmd/pgo/PrecipitateDistance + . + . + . + "Ausscheidungsabstand"@de . + "Precipitate Distance"@en . + "Als Subklasse des Abstands ist der Ausscheidungsabstand ein Maß für den Abstand zwischen zwei Ausscheidungen in metallischen Legierungen. Üblicherweise wird dieser Abstand aus der Analyse von Dunkelfeld-TEM-Bildern gewonnen und in Nanometern angegeben."@de . + "As a subclass of distance, the precipitate distance is a measure of the distance between two precipitates. Usually, this distance is obtained from analysing dark-field TEM images and given in nanometers."@en . +# +# https://w3id.org/pmd/pgo/PrecipitateNumber + . + . + . + "Die Ausscheidungsnummer ermöglicht die eindeutige Zuordnung der gemessenen Eigenschaften zu einem bestimmten Ausscheidung."@de . + "The precipitate number enables the explicit assignment of measured properties to a specific precipitate."@en . + "Ausscheidungsnummer"@de . + "Precipitate Number"@en . +# +# https://w3id.org/pmd/pgo/PrecipitateRadius + . + . + . + "Ausscheidungsradius"@de . + "Precipitate Radius"@en . + "Als Subklasse des Radius ist der Ausscheidungsradius ein Maß, mit dem eine spezifische Korrelation der Ausscheidungsgröße vorgenommen werden kann. Der Ausscheidungsradius wird in der Regel aus der kreisförmigen Annäherung der Ausscheidungsfläche ermittelt."@de . + "As a subclass of radius, precipitate radius is a measure used to perform a specific precipitate size correlation. The precipitate radius is usually obtained from the circular approximation of the precipitate area."@en . +# +# Generated by the OWL API (version 5.1.18) https://github.com/owlcs/owlapi/ diff --git a/pgo/ontology.rdf b/pgo/ontology.rdf new file mode 100644 index 0000000..4d12e0e --- /dev/null +++ b/pgo/ontology.rdf @@ -0,0 +1,188 @@ + + + + + + + + + Markus Schilling, Bernd Bayerlein. (December 13th, 2023) PGO: Precipitate Geometry Ontology. Version 1.0.0, https://w3id.org/pmd/pgo + 2023-12-13 + Platform MaterialDigital - Precipitate Geometry Ontology (PGO) + The Precipitate Geometry Ontology (PGO) is a small ontology used to describe data originating from transmission electron microscopy (TEM) analyses of precipitates. +It was created in the frame of the collaborative project Platform MaterialDigital (PMD, https://materialdigital.de). It is further part of a demonstrator showing possible interactions of semantic data created by the application of multiple ontologies and used by federated SPARQL querying - the "Orowan Demonstrator" (available at: https://github.com/materialdigital/demo-orowan). + 1.0.0 + + + + + + + + + + + + + + + + + Average Precipitate Distance + Mittlerer Ausscheidungsabstand + Als Subklasse der Ausscheidungsabstand wird der mittlere Ausscheidungsabstand aus mehreren Ausscheidungsabständen ermittelt, z. B. durch die Delauney-Triangulation. Der mittlere Ausscheidungsabstand lässt sich somit aus dem Median oder dem arithmetischen Mittelwert aller betrachteten Einzelmessungen von Ausscheidungsabständen berechnen. + As a subclass of precipitate distance, the average precipitate distance is determined from several precipitate distances via, e.g., the Delauney triangulation. Hence, the average precipitate distance can be calculated using the median and the arithmetic mean value of all individual measurements of precipitate distances regarded. + + + + + + + + + + + Als Subklasse des Values Objects bietet der Kalibrierungsfaktor einen Umrechnungsfaktor von Pixeln in reale Dimensionen, der die Skalierung von Bildern in metrische Einheiten ermöglicht. + As a subclass of value object, the calibration factor provides a pixel-to-real-distance conversion factor, that allows image scaling to metric units. + Calibration Factor + Kalibrierungsfaktor + + + + + + + + + + + Dark-field Image + Dunkelfeldbild + Als Subklasse des Bildes wird das Dunkelfeldbild mit einem hochauflösenden Transmissionselektronenmikroskop (HR-TEM) erzeugt. + As a subclass of image, the dark-field image is generated from a high-resolution transmission electron microscope (HR-TEM). + + + + + + + + + + + Bildanalyse-Prozess + Image Analysis Process + Als Unterklasse eines nicht-transformativen Analyseverfahrens ist das Bildanalyseverfahren ein Prozess, mit dem nützliche Informationen, wie z. B. Koordinaten von Ausscheidungen in metallischen Legierungen und deren Abständen, aus einem Bild extrahiert und für die weitere Verwendung interpretiert werden. + As subclass of a non-transformative analysis process, the image analysis process is a process by which useful information, such as precipitate coordinates and their distances, are extracted from an image and interpreted for further application. + + + + + + + + + + + Particle + Partikel + Als eine Subklasse von Objekt ist ein Partikel ein kleines, lokalisiertes Objekt, das durch mehrere physikalische oder chemische Eigenschaften wie Volumen, Dichte oder Masse beschrieben werden kann. + As a subclass of object, a particle is a small localized object which can be described by several physical or chemical properties, such as volume, density, or mass. + + + + + + + + + + + + Ausscheidung + Precipitate + Als Subklasse von Particle sind Ausscheidungen fein verteilte metastabile Phasen (z. B. intermetallischen Verbindungen), die als wirksame Hindernisse für Versetzungsbewegungen in aushärtbaren metallischen Legierungen durch gezielte Wärmenbehandlungen erzeugt werden. + As a subclass of particle, precipitates are finely distributed metastable phases (e.g., intermetallic compounds) that are created as effective obstacles to dislocation motion in age-hardenable metallic alloys by specific heat treatments. + + + + + + + + + + + Ausscheidungsfläche + Precipitate Area + Als Subklasse der Fläche ist die Ausscheidungsfläche ein Maß,welches zum Vergleich von Ausscheidungsgrößen verwendet wird. In der Regel wird für Ausscheidungspartikel eine kreisförmige Näherung verwendet. + As a subclass of the area, the precipitate area is a measure that is used to compare precipitate sizes. As a rule, a circular approximation is used for precipitation particles. + + + + + + + + + + + Ausscheidungsabstand + Precipitate Distance + Als Subklasse des Abstands ist der Ausscheidungsabstand ein Maß für den Abstand zwischen zwei Ausscheidungen in metallischen Legierungen. Üblicherweise wird dieser Abstand aus der Analyse von Dunkelfeld-TEM-Bildern gewonnen und in Nanometern angegeben. + As a subclass of distance, the precipitate distance is a measure of the distance between two precipitates. Usually, this distance is obtained from analysing dark-field TEM images and given in nanometers. + + + + + + + + + + + Die Ausscheidungsnummer ermöglicht die eindeutige Zuordnung der gemessenen Eigenschaften zu einem bestimmten Ausscheidung. + The precipitate number enables the explicit assignment of measured properties to a specific precipitate. + Ausscheidungsnummer + Precipitate Number + + + + + + + + + + + Ausscheidungsradius + Precipitate Radius + Als Subklasse des Radius ist der Ausscheidungsradius ein Maß, mit dem eine spezifische Korrelation der Ausscheidungsgröße vorgenommen werden kann. Der Ausscheidungsradius wird in der Regel aus der kreisförmigen Annäherung der Ausscheidungsfläche ermittelt. + As a subclass of radius, precipitate radius is a measure used to perform a specific precipitate size correlation. The precipitate radius is usually obtained from the circular approximation of the precipitate area. + + + + + + + + diff --git a/pgo/ontology.ttl b/pgo/ontology.ttl new file mode 100644 index 0000000..3c4ac44 --- /dev/null +++ b/pgo/ontology.ttl @@ -0,0 +1,127 @@ +@prefix : . +@prefix owl: . +@prefix rdf: . +@prefix xml: . +@prefix xsd: . +@prefix rdfs: . +@base . + + rdf:type owl:Ontology ; + owl:versionIRI ; + owl:imports ; + , + ; + ; + "Markus Schilling, Bernd Bayerlein. (December 13th, 2023) PGO: Precipitate Geometry Ontology. Version 1.0.0, https://w3id.org/pmd/pgo" ; + "2023-12-13" ; + "Platform MaterialDigital - Precipitate Geometry Ontology (PGO)"@en ; + rdfs:comment """The Precipitate Geometry Ontology (PGO) is a small ontology used to describe data originating from transmission electron microscopy (TEM) analyses of precipitates. +It was created in the frame of the collaborative project Platform MaterialDigital (PMD, https://materialdigital.de). It is further part of a demonstrator showing possible interactions of semantic data created by the application of multiple ontologies and used by federated SPARQL querying - the \"Orowan Demonstrator\" (available at: https://github.com/materialdigital/demo-orowan)."""@en ; + owl:versionInfo "1.0.0" . + +################################################################# +# Classes +################################################################# + +### https://w3id.org/pmd/pgo/AveragePrecipitateDistance + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Average Precipitate Distance"@en , + "Mittlerer Ausscheidungsabstand"@de ; + "Als Subklasse der Ausscheidungsabstand wird der mittlere Ausscheidungsabstand aus mehreren Ausscheidungsabständen ermittelt, z. B. durch die Delauney-Triangulation. Der mittlere Ausscheidungsabstand lässt sich somit aus dem Median oder dem arithmetischen Mittelwert aller betrachteten Einzelmessungen von Ausscheidungsabständen berechnen."@de , + "As a subclass of precipitate distance, the average precipitate distance is determined from several precipitate distances via, e.g., the Delauney triangulation. Hence, the average precipitate distance can be calculated using the median and the arithmetic mean value of all individual measurements of precipitate distances regarded."@en . + + +### https://w3id.org/pmd/pgo/CalibrationFactor + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + "Als Subklasse des Values Objects bietet der Kalibrierungsfaktor einen Umrechnungsfaktor von Pixeln in reale Dimensionen, der die Skalierung von Bildern in metrische Einheiten ermöglicht."@de , + "As a subclass of value object, the calibration factor provides a pixel-to-real-distance conversion factor, that allows image scaling to metric units."@en , + "Calibration Factor"@en , + "Kalibrierungsfaktor"@de . + + +### https://w3id.org/pmd/pgo/DarkFieldImage + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Dark-field Image"@en , + "Dunkelfeldbild"@de ; + "Als Subklasse des Bildes wird das Dunkelfeldbild mit einem hochauflösenden Transmissionselektronenmikroskop (HR-TEM) erzeugt."@de , + "As a subclass of image, the dark-field image is generated from a high-resolution transmission electron microscope (HR-TEM)."@en . + + +### https://w3id.org/pmd/pgo/ImageAnalysisProcess + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Bildanalyse-Prozess"@de , + "Image Analysis Process"@en ; + "Als Unterklasse eines nicht-transformativen Analyseverfahrens ist das Bildanalyseverfahren ein Prozess, mit dem nützliche Informationen, wie z. B. Koordinaten von Ausscheidungen in metallischen Legierungen und deren Abständen, aus einem Bild extrahiert und für die weitere Verwendung interpretiert werden."@de , + "As subclass of a non-transformative analysis process, the image analysis process is a process by which useful information, such as precipitate coordinates and their distances, are extracted from an image and interpreted for further application."@en . + + +### https://w3id.org/pmd/pgo/Particle + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Particle"@en , + "Partikel"@de ; + "Als eine Subklasse von Objekt ist ein Partikel ein kleines, lokalisiertes Objekt, das durch mehrere physikalische oder chemische Eigenschaften wie Volumen, Dichte oder Masse beschrieben werden kann."@de , + "As a subclass of object, a particle is a small localized object which can be described by several physical or chemical properties, such as volume, density, or mass."@en ; + . + + +### https://w3id.org/pmd/pgo/Precipitate + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Ausscheidung"@de , + "Precipitate"@en ; + "Als Subklasse von Particle sind Ausscheidungen fein verteilte metastabile Phasen (z. B. intermetallischen Verbindungen), die als wirksame Hindernisse für Versetzungsbewegungen in aushärtbaren metallischen Legierungen durch gezielte Wärmenbehandlungen erzeugt werden."@de , + "As a subclass of particle, precipitates are finely distributed metastable phases (e.g., intermetallic compounds) that are created as effective obstacles to dislocation motion in age-hardenable metallic alloys by specific heat treatments."@en . + + +### https://w3id.org/pmd/pgo/PrecipitateArea + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Ausscheidungsfläche"@de , + "Precipitate Area"@en ; + "Als Subklasse der Fläche ist die Ausscheidungsfläche ein Maß,welches zum Vergleich von Ausscheidungsgrößen verwendet wird. In der Regel wird für Ausscheidungspartikel eine kreisförmige Näherung verwendet."@de , + "As a subclass of the area, the precipitate area is a measure that is used to compare precipitate sizes. As a rule, a circular approximation is used for precipitation particles."@en . + + +### https://w3id.org/pmd/pgo/PrecipitateDistance + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Ausscheidungsabstand"@de , + "Precipitate Distance"@en ; + "Als Subklasse des Abstands ist der Ausscheidungsabstand ein Maß für den Abstand zwischen zwei Ausscheidungen in metallischen Legierungen. Üblicherweise wird dieser Abstand aus der Analyse von Dunkelfeld-TEM-Bildern gewonnen und in Nanometern angegeben."@de , + "As a subclass of distance, the precipitate distance is a measure of the distance between two precipitates. Usually, this distance is obtained from analysing dark-field TEM images and given in nanometers."@en . + + +### https://w3id.org/pmd/pgo/PrecipitateNumber + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy , + "Die Ausscheidungsnummer ermöglicht die eindeutige Zuordnung der gemessenen Eigenschaften zu einem bestimmten Ausscheidung."@de , + "The precipitate number enables the explicit assignment of measured properties to a specific precipitate."@en ; + rdfs:label "Ausscheidungsnummer"@de , + "Precipitate Number"@en . + + +### https://w3id.org/pmd/pgo/PrecipitateRadius + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Ausscheidungsradius"@de , + "Precipitate Radius"@en ; + "Als Subklasse des Radius ist der Ausscheidungsradius ein Maß, mit dem eine spezifische Korrelation der Ausscheidungsgröße vorgenommen werden kann. Der Ausscheidungsradius wird in der Regel aus der kreisförmigen Annäherung der Ausscheidungsfläche ermittelt."@de , + "As a subclass of radius, precipitate radius is a measure used to perform a specific precipitate size correlation. The precipitate radius is usually obtained from the circular approximation of the precipitate area."@en . + + +### Generated by the OWL API (version 5.1.18) https://github.com/owlcs/owlapi/ diff --git a/pgo/provenance/provenance-de.html b/pgo/provenance/provenance-de.html new file mode 100644 index 0000000..c55928b --- /dev/null +++ b/pgo/provenance/provenance-de.html @@ -0,0 +1,17 @@ + + + + + + + + +
    +

    Herkunft von Platform MaterialDigital - Precipitate Geometry Ontology (PGO) Dokumentation (https://w3id.org/pmd/pgo/1.0.0)

    +
      +
    • Entwickler der Ontologie: https://orcid.org/0000-0002-3717-7104, https://orcid.org/0000-0002-7094-5371
    • Die Ontologie-Dokumentation ist Ergebnis der Anwendung vom Widoco Tool (das wiederum LODE zur Generierung der Querverweise verwendet.
    • +
    • Diese Dokumentation wurde generiert am: 2023-12-13
    +
    +

    zurück zu Dokumentation. TTL Format

    + + \ No newline at end of file diff --git a/pgo/provenance/provenance-de.ttl b/pgo/provenance/provenance-de.ttl new file mode 100644 index 0000000..f14d1d4 --- /dev/null +++ b/pgo/provenance/provenance-de.ttl @@ -0,0 +1,13 @@ +@prefix prov: . +@prefix dc: . +@prefix foaf: . +@prefix : <> . + a prov:Entity; + dc:title "Platform MaterialDigital - Precipitate Geometry Ontology (PGO)"; + prov:wasAttributedTo ; + dc:creator ; + prov:wasAttributedTo ; + dc:creator ; + prov:wasAttributedTo ,; + prov:wasGeneratedAt "2023-12-13"; +. diff --git a/pgo/provenance/provenance-en.html b/pgo/provenance/provenance-en.html new file mode 100644 index 0000000..9cd3c00 --- /dev/null +++ b/pgo/provenance/provenance-en.html @@ -0,0 +1,17 @@ + + + + + + + + +
    +

    Provenance for Platform MaterialDigital - Precipitate Geometry Ontology (PGO) Documentation (https://w3id.org/pmd/pgo/1.0.0)

    +
      +
    • Ontology created by: https://orcid.org/0000-0002-3717-7104, https://orcid.org/0000-0002-7094-5371
    • The ontology documentation was the result of using the Widoco tool (which itself uses LODE for generating the crossreference section).
    • +
    • The documentation was generated at 2023-12-13
    +
    +

    back to documentation. TTL format

    + + \ No newline at end of file diff --git a/pgo/provenance/provenance-en.ttl b/pgo/provenance/provenance-en.ttl new file mode 100644 index 0000000..f14d1d4 --- /dev/null +++ b/pgo/provenance/provenance-en.ttl @@ -0,0 +1,13 @@ +@prefix prov: . +@prefix dc: . +@prefix foaf: . +@prefix : <> . + a prov:Entity; + dc:title "Platform MaterialDigital - Precipitate Geometry Ontology (PGO)"; + prov:wasAttributedTo ; + dc:creator ; + prov:wasAttributedTo ; + dc:creator ; + prov:wasAttributedTo ,; + prov:wasGeneratedAt "2023-12-13"; +. diff --git a/pgo/readme.md b/pgo/readme.md new file mode 100644 index 0000000..246eeba --- /dev/null +++ b/pgo/readme.md @@ -0,0 +1,34 @@ +About Widoco output +=================== +The purpose of Widoco is to reuse and integrate existing tools for documentation, plus the set of features listed below: +* Separation of the sections of your html page so you can write them independently and replace only those needed. +* Automatic annotation in RDF-a of the html produced. +* Association of a provenance page which includes the history of your vocabulary (W3C PROV-O compliant). +* Metadata extraction from the ontology plus the means to complete it on the fly when generating your ontology. +* Guidelines on the main sections that your document should have and how to complete them. + +Widoco will create 3 different folders: +| +|-provenance (a folder including an html and RDF serialization of how the documentation page was created) +|-resources (folder with the different resources) +|-sections (folder with the different sections of the documentation, separated for easy editing. Just edit one and the main page will be updated) + +Completing ontology metadata. +=================== +Widoco uses the ontology metadata to update a configuration file. If you complete that configuration file (ended up widoco.conf), the tool will enhance your html with additional details, such as how to cite the document, previous revisions, icons with the licence, etc. + +Browser issues +========== +The result of executing Widoco is an html file. We have tested it in Mozilla, IE and Chrome, and when the page is stored in a server all the browsers work correctly. If you view the file locally, we recommend you to use Mozilla Firefox (or Internet Explorer, if you must). Google Chrome will not show the contents correctly, as it doesn't allow XMLHttpRequest without HTTP. If you want to view the page locally with Google Chrome you have two possibilities: + +a) Place the file in a server and access it via its URL (for example, put it in dropbox and access through its public url). + +b) Execute Chrome with the following commands : + +(WIN) chrome.exe --allow-file-access-from-files, + +(OSX) open /Applications/Google\ Chrome.app/ --args --allow-file-access-from-files + +(UNX) /usr/bin/google-chrome --allow-file-access-from-files + +Do you have a problem? open an issue at https://github.com/dgarijo/Widoco \ No newline at end of file diff --git a/pgo/resources/extra.css b/pgo/resources/extra.css new file mode 100644 index 0000000..16689d3 --- /dev/null +++ b/pgo/resources/extra.css @@ -0,0 +1,124 @@ +body { + text-align: justify; +} + +h1 { + line-height: 110%; +} + +.hlist { + border: 1px solid navy; + padding:5px; + background-color: #F4FFFF; +} + +.hlist li { + display: inline; + display: inline-table; + list-style-type: none; + padding-right: 20px; + +} + +.entity { + border: 1px solid navy; + margin:5px 0px 5px 0px; + padding: 5px; +} + +.type-c { + cursor:help; + color:orange; +} + +.type-op { + cursor:help; + color:navy; +} + +.type-dp { + cursor:help; + color:green; +} + +.type-ap { + cursor:help; + color:maroon; +} + +.type-ni { + cursor:help; + color:brown; +} + +.logic { + color:purple; + font-weight:bold; +} + +h3 { + margin-top: 3px; + padding-bottom: 5px; + border-bottom: 1px solid navy; +} + +h2 { + margin-top:40px; +} + +.dotted { + border-bottom: 1px dotted gray; +} + +dt { + margin-top:5px; +} + +.description { + border-top: 1px dashed gray; + border-bottom: 1px dashed gray; + background-color: rgb(242, 243, 244); + margin-top:5px; + padding-bottom:5px; +} + +.description dl { + background-color: rgb(242, 243, 244); +} + +.description ul { + padding-left: 12px; + margin-top: 0px; +} + +.backlink { + font-size:10pt; + text-align:right; + float:right; + color:black; + padding: 2px; + border: 1px dotted navy; + background-color: #F4FFFF; +} + +.imageblock { + text-align: center; +} + +.imageblock img { + border:1px solid gray; +} + +.endnote { + margin-top: 40px; + border-top: 1px solid gray; + padding-top: 10px; + text-align: center; + color:gray; + font-size:70%; +} + +.literal { + color:green; + font-style:italic; +} \ No newline at end of file diff --git a/pgo/resources/jquery.js b/pgo/resources/jquery.js new file mode 100644 index 0000000..48590ec --- /dev/null +++ b/pgo/resources/jquery.js @@ -0,0 +1,18 @@ +/*! + * jQuery JavaScript Library v1.6.2 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Thu Jun 30 14:16:56 2011 -0400 + */ +(function(a,b){function cv(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cs(a){if(!cg[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ch||(ch=c.createElement("iframe"),ch.frameBorder=ch.width=ch.height=0),b.appendChild(ch);if(!ci||!ch.createElement)ci=(ch.contentWindow||ch.contentDocument).document,ci.write((c.compatMode==="CSS1Compat"?"":"")+""),ci.close();d=ci.createElement(a),ci.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ch)}cg[a]=e}return cg[a]}function cr(a,b){var c={};f.each(cm.concat.apply([],cm.slice(0,b)),function(){c[this]=a});return c}function cq(){cn=b}function cp(){setTimeout(cq,0);return cn=f.now()}function cf(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ce(){try{return new a.XMLHttpRequest}catch(b){}}function b$(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bx(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function bm(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(be,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bl(a){f.nodeName(a,"input")?bk(a):"getElementsByTagName"in a&&f.grep(a.getElementsByTagName("input"),bk)}function bk(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bj(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bi(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bh(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i=0===c})}function V(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function N(a,b){return(a&&a!=="*"?a+".":"")+b.replace(z,"`").replace(A,"&")}function M(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;ic)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function K(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function E(){return!0}function D(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"$1-$2").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z])/ig,x=function(a,b){return b.toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.2",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!A){A=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a);return c===b||D.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(b,c,d){a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),d=c.documentElement,(!d||!d.nodeName||d.nodeName==="parsererror")&&e.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c
    a",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.firstChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0},m&&f.extend(p,{position:"absolute",left:-1e3,top:-1e3});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="
    ",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="
    t
    ",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0),o.innerHTML="",n.removeChild(o);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([a-z])([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g=f.expando,h=typeof c=="string",i,j=a.nodeType,k=j?f.cache:a,l=j?a[f.expando]:a[f.expando]&&f.expando;if((!l||e&&l&&!k[l][g])&&h&&d===b)return;l||(j?a[f.expando]=l=++f.uuid:l=f.expando),k[l]||(k[l]={},j||(k[l].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?k[l][g]=f.extend(k[l][g],c):k[l]=f.extend(k[l],c);i=k[l],e&&(i[g]||(i[g]={}),i=i[g]),d!==b&&(i[f.camelCase(c)]=d);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[f.camelCase(c)]||i[c]:i}},removeData:function(b,c,d){if(!!f.acceptData(b)){var e=f.expando,g=b.nodeType,h=g?f.cache:b,i=g?b[f.expando]:f.expando;if(!h[i])return;if(c){var j=d?h[i][e]:h[i];if(j){delete j[c];if(!l(j))return}}if(d){delete h[i][e];if(!l(h[i]))return}var k=h[i][e];f.support.deleteExpando||h!=a?delete h[i]:h[i]=null,k?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=k):g&&(f.support.deleteExpando?delete b[f.expando]:b.removeAttribute?b.removeAttribute(f.expando):b[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;d=e.value;return typeof d=="string"?d.replace(p,""):d==null?"":d}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);j&&(c=f.attrFix[c]||c,i=f.attrHooks[c],i||(t.test(c)?i=w:v&&c!=="className"&&(f.nodeName(a,"form")||u.test(c))&&(i=v)));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j&&(h=i.get(a,c))!==null)return h;h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.support.getSetAttribute?a.removeAttribute(b):(f.attr(a,b,""),a.removeAttributeNode(a.getAttributeNode(b))),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},tabIndex:{get:function(a){var c=a.getAttributeNode("tabIndex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}},value:{get:function(a,b){if(v&&f.nodeName(a,"button"))return v.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(v&&f.nodeName(a,"button"))return v.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);i&&(c=f.propFix[c]||c,h=f.propHooks[c]);return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==b?g:a[c]},propHooks:{}}),w={get:function(a,c){return f.prop(a,c)?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},f.support.getSetAttribute||(f.attrFix=f.propFix,v=f.attrHooks.name=f.attrHooks.title=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,c){var d=a.getAttributeNode(c);if(d){d.nodeValue=b;return b}}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var x=/\.(.*)$/,y=/^(?:textarea|input|select)$/i,z=/\./g,A=/ /g,B=/[^\w\s.|`]/g,C=function(a){return a.replace(B,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=D;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=D);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),C).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i. +shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d!=null?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},J=function(c){var d=c.target,e,g;if(!!y.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=I(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:J,beforedeactivate:J,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&J.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&J.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",I(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in H)f.event.add(this,c+".specialChange",H[c]);return y.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return y.test(this.nodeName)}},H=f.event.special.change.filters,H.focus=H.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

    ";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
    ";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g0)for(h=g;h0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=T.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a=="string")return f.inArray(this[0],a?f(a):this.parent().children());return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(V(c[0])||V(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=S.call(arguments);O.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!U[a]?f.unique(e):e,(this.length>1||Q.test(d))&&P.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var X=/ jQuery\d+="(?:\d+|null)"/g,Y=/^\s+/,Z=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,$=/<([\w:]+)/,_=/",""],legend:[1,"
    ","
    "],thead:[1,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],col:[2,"","
    "],area:[1,"",""],_default:[0,"",""]};bf.optgroup=bf.option,bf.tbody=bf.tfoot=bf.colgroup=bf.caption=bf.thead,bf.th=bf.td,f.support.htmlSerialize||(bf._default=[1,"div
    ","
    "]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(X,""):null;if(typeof a=="string"&&!bb.test(a)&&(f.support.leadingWhitespace||!Y.test(a))&&!bf[($.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Z,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j +)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bi(a,d),e=bj(a),g=bj(d);for(h=0;e[h];++h)bi(e[h],g[h])}if(b){bh(a,d);if(c){e=bj(a),g=bj(d);for(h=0;e[h];++h)bh(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!ba.test(k))k=b.createTextNode(k);else{k=k.replace(Z,"<$1>");var l=($.exec(k)||["",""])[1].toLowerCase(),m=bf[l]||bf._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=_.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&Y.test(k)&&o.insertBefore(b.createTextNode(Y.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bo.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle;c.zoom=1;var e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.filter=bn.test(g)?g.replace(bn,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bx(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(by=function(a,c){var d,e,g;c=c.replace(bp,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bz=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bq.test(d)&&br.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bx=by||bz,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bB=/%20/g,bC=/\[\]$/,bD=/\r?\n/g,bE=/#.*$/,bF=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bG=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bH=/^(?:about|app|app\-storage|.+\-extension|file|widget):$/,bI=/^(?:GET|HEAD)$/,bJ=/^\/\//,bK=/\?/,bL=/)<[^<]*)*<\/script>/gi,bM=/^(?:select|textarea)/i,bN=/\s+/,bO=/([?&])_=[^&]*/,bP=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bQ=f.fn.load,bR={},bS={},bT,bU;try{bT=e.href}catch(bV){bT=c.createElement("a"),bT.href="",bT=bT.href}bU=bP.exec(bT.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bQ)return bQ.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
    ").append(c.replace(bL,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bM.test(this.nodeName)||bG.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bD,"\r\n")}}):{name:b.name,value:c.replace(bD,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?f.extend(!0,a,f.ajaxSettings,b):(b=a,a=f.extend(!0,f.ajaxSettings,b));for(var c in{context:1,url:1})c in b?a[c]=b[c]:c in f.ajaxSettings&&(a[c]=f.ajaxSettings[c]);return a},ajaxSettings:{url:bT,isLocal:bH.test(bU[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":"*/*"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML}},ajaxPrefilter:bW(bR),ajaxTransport:bW(bS),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a?4:0;var o,r,u,w=l?bZ(d,v,l):b,x,y;if(a>=200&&a<300||a===304){if(d.ifModified){if(x=v.getResponseHeader("Last-Modified"))f.lastModified[k]=x;if(y=v.getResponseHeader("Etag"))f.etag[k]=y}if(a===304)c="notmodified",o=!0;else try{r=b$(d,w),c="success",o=!0}catch(z){c="parsererror",u=z}}else{u=c;if(!c||a)c="error",a<0&&(a=0)}v.status=a,v.statusText=c,o?h.resolveWith(e,[r,c,v]):h.rejectWith(e,[v,c,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,c]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bF.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bE,"").replace(bJ,bU[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bN),d.crossDomain==null&&(r=bP.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bU[1]&&r[2]==bU[2]&&(r[3]||(r[1]==="http:"?80:443))==(bU[3]||(bU[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bX(bR,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bI.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bK.test(d.url)?"&":"?")+d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bO,"$1_="+x);d.url=y+(y===d.url?(bK.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", */*; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bX(bS,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){status<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)bY(g,a[g],c,e);return d.join("&").replace(bB,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var b_=f.now(),ca=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+b_++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ca.test(b.url)||e&&ca.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ca,l),b.url===j&&(e&&(k=k.replace(ca,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cb=a.ActiveXObject?function(){for(var a in cd)cd[a](0,1)}:!1,cc=0,cd;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ce()||cf()}:ce,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cb&&delete cd[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cc,cb&&(cd||(cd={},f(a).unload(cb)),cd[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cg={},ch,ci,cj=/^(?:toggle|show|hide)$/,ck=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cl,cm=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cn,co=a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||a.oRequestAnimationFrame;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cr("show",3),a,b,c);for(var g=0,h=this.length;g=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b
    ";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cu.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cu.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cv(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cv(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a&&a.style?parseFloat(f.css(a,d,"padding")):null},f.fn["outer"+c]=function(a){var b=this[0];return b&&b.style?parseFloat(f.css(b,d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c];return e.document.compatMode==="CSS1Compat"&&g||e.document.body["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var h=f.css(e,d),i=parseFloat(h);return f.isNaN(i)?h:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window); \ No newline at end of file diff --git a/pgo/resources/marked.min.js b/pgo/resources/marked.min.js new file mode 100644 index 0000000..17021ae --- /dev/null +++ b/pgo/resources/marked.min.js @@ -0,0 +1,6 @@ +/** + * marked - a markdown parser + * Copyright (c) 2011-2014, Christopher Jeffrey. (MIT Licensed) + * https://github.com/chjj/marked + */ +(function(){var block={newline:/^\n+/,code:/^( {4}[^\n]+\n*)+/,fences:noop,hr:/^( *[-*_]){3,} *(?:\n+|$)/,heading:/^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/,nptable:noop,lheading:/^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,blockquote:/^( *>[^\n]+(\n(?!def)[^\n]+)*\n*)+/,list:/^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:/^ *(?:comment|closed|closing) *(?:\n{2,}|\s*$)/,def:/^ *\[([^\]]+)\]: *]+)>?(?: +["(]([^\n]+)[")])? *(?:\n+|$)/,table:noop,paragraph:/^((?:[^\n]+\n?(?!hr|heading|lheading|blockquote|tag|def))+)\n*/,text:/^[^\n]+/};block.bullet=/(?:[*+-]|\d+\.)/;block.item=/^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/;block.item=replace(block.item,"gm")(/bull/g,block.bullet)();block.list=replace(block.list)(/bull/g,block.bullet)("hr","\\n+(?=\\1?(?:[-*_] *){3,}(?:\\n+|$))")("def","\\n+(?="+block.def.source+")")();block.blockquote=replace(block.blockquote)("def",block.def)();block._tag="(?!(?:"+"a|em|strong|small|s|cite|q|dfn|abbr|data|time|code"+"|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo"+"|span|br|wbr|ins|del|img)\\b)\\w+(?!:/|[^\\w\\s@]*@)\\b";block.html=replace(block.html)("comment",//)("closed",/<(tag)[\s\S]+?<\/\1>/)("closing",/])*?>/)(/tag/g,block._tag)();block.paragraph=replace(block.paragraph)("hr",block.hr)("heading",block.heading)("lheading",block.lheading)("blockquote",block.blockquote)("tag","<"+block._tag)("def",block.def)();block.normal=merge({},block);block.gfm=merge({},block.normal,{fences:/^ *(`{3,}|~{3,}) *(\S+)? *\n([\s\S]+?)\s*\1 *(?:\n+|$)/,paragraph:/^/});block.gfm.paragraph=replace(block.paragraph)("(?!","(?!"+block.gfm.fences.source.replace("\\1","\\2")+"|"+block.list.source.replace("\\1","\\3")+"|")();block.tables=merge({},block.gfm,{nptable:/^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/,table:/^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/});function Lexer(options){this.tokens=[];this.tokens.links={};this.options=options||marked.defaults;this.rules=block.normal;if(this.options.gfm){if(this.options.tables){this.rules=block.tables}else{this.rules=block.gfm}}}Lexer.rules=block;Lexer.lex=function(src,options){var lexer=new Lexer(options);return lexer.lex(src)};Lexer.prototype.lex=function(src){src=src.replace(/\r\n|\r/g,"\n").replace(/\t/g," ").replace(/\u00a0/g," ").replace(/\u2424/g,"\n");return this.token(src,true)};Lexer.prototype.token=function(src,top,bq){var src=src.replace(/^ +$/gm,""),next,loose,cap,bull,b,item,space,i,l;while(src){if(cap=this.rules.newline.exec(src)){src=src.substring(cap[0].length);if(cap[0].length>1){this.tokens.push({type:"space"})}}if(cap=this.rules.code.exec(src)){src=src.substring(cap[0].length);cap=cap[0].replace(/^ {4}/gm,"");this.tokens.push({type:"code",text:!this.options.pedantic?cap.replace(/\n+$/,""):cap});continue}if(cap=this.rules.fences.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"code",lang:cap[2],text:cap[3]});continue}if(cap=this.rules.heading.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"heading",depth:cap[1].length,text:cap[2]});continue}if(top&&(cap=this.rules.nptable.exec(src))){src=src.substring(cap[0].length);item={type:"table",header:cap[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:cap[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:cap[3].replace(/\n$/,"").split("\n")};for(i=0;i ?/gm,"");this.token(cap,top,true);this.tokens.push({type:"blockquote_end"});continue}if(cap=this.rules.list.exec(src)){src=src.substring(cap[0].length);bull=cap[2];this.tokens.push({type:"list_start",ordered:bull.length>1});cap=cap[0].match(this.rules.item);next=false;l=cap.length;i=0;for(;i1&&b.length>1)){src=cap.slice(i+1).join("\n")+src;i=l-1}}loose=next||/\n\n(?!\s*$)/.test(item);if(i!==l-1){next=item.charAt(item.length-1)==="\n";if(!loose)loose=next}this.tokens.push({type:loose?"loose_item_start":"list_item_start"});this.token(item,false,bq);this.tokens.push({type:"list_item_end"})}this.tokens.push({type:"list_end"});continue}if(cap=this.rules.html.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:this.options.sanitize?"paragraph":"html",pre:cap[1]==="pre"||cap[1]==="script"||cap[1]==="style",text:cap[0]});continue}if(!bq&&top&&(cap=this.rules.def.exec(src))){src=src.substring(cap[0].length);this.tokens.links[cap[1].toLowerCase()]={href:cap[2],title:cap[3]};continue}if(top&&(cap=this.rules.table.exec(src))){src=src.substring(cap[0].length);item={type:"table",header:cap[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:cap[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:cap[3].replace(/(?: *\| *)?\n$/,"").split("\n")};for(i=0;i])/,autolink:/^<([^ >]+(@|:\/)[^ >]+)>/,url:noop,tag:/^|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/,link:/^!?\[(inside)\]\(href\)/,reflink:/^!?\[(inside)\]\s*\[([^\]]*)\]/,nolink:/^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/,strong:/^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/,em:/^\b_((?:__|[\s\S])+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,code:/^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/,br:/^ {2,}\n(?!\s*$)/,del:noop,text:/^[\s\S]+?(?=[\\?(?:\s+['"]([\s\S]*?)['"])?\s*/;inline.link=replace(inline.link)("inside",inline._inside)("href",inline._href)();inline.reflink=replace(inline.reflink)("inside",inline._inside)();inline.normal=merge({},inline);inline.pedantic=merge({},inline.normal,{strong:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,em:/^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/});inline.gfm=merge({},inline.normal,{escape:replace(inline.escape)("])","~|])")(),url:/^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/,del:/^~~(?=\S)([\s\S]*?\S)~~/,text:replace(inline.text)("]|","~]|")("|","|https?://|")()});inline.breaks=merge({},inline.gfm,{br:replace(inline.br)("{2,}","*")(),text:replace(inline.gfm.text)("{2,}","*")()});function InlineLexer(links,options){this.options=options||marked.defaults;this.links=links;this.rules=inline.normal;this.renderer=this.options.renderer||new Renderer;this.renderer.options=this.options;if(!this.links){throw new Error("Tokens array requires a `links` property.")}if(this.options.gfm){if(this.options.breaks){this.rules=inline.breaks}else{this.rules=inline.gfm}}else if(this.options.pedantic){this.rules=inline.pedantic}}InlineLexer.rules=inline;InlineLexer.output=function(src,links,options){var inline=new InlineLexer(links,options);return inline.output(src)};InlineLexer.prototype.output=function(src){var out="",link,text,href,cap;while(src){if(cap=this.rules.escape.exec(src)){src=src.substring(cap[0].length);out+=cap[1];continue}if(cap=this.rules.autolink.exec(src)){src=src.substring(cap[0].length);if(cap[2]==="@"){text=cap[1].charAt(6)===":"?this.mangle(cap[1].substring(7)):this.mangle(cap[1]);href=this.mangle("mailto:")+text}else{text=escape(cap[1]);href=text}out+=this.renderer.link(href,null,text);continue}if(!this.inLink&&(cap=this.rules.url.exec(src))){src=src.substring(cap[0].length);text=escape(cap[1]);href=text;out+=this.renderer.link(href,null,text);continue}if(cap=this.rules.tag.exec(src)){if(!this.inLink&&/^/i.test(cap[0])){this.inLink=false}src=src.substring(cap[0].length);out+=this.options.sanitize?escape(cap[0]):cap[0];continue}if(cap=this.rules.link.exec(src)){src=src.substring(cap[0].length);this.inLink=true;out+=this.outputLink(cap,{href:cap[2],title:cap[3]});this.inLink=false;continue}if((cap=this.rules.reflink.exec(src))||(cap=this.rules.nolink.exec(src))){src=src.substring(cap[0].length);link=(cap[2]||cap[1]).replace(/\s+/g," ");link=this.links[link.toLowerCase()];if(!link||!link.href){out+=cap[0].charAt(0);src=cap[0].substring(1)+src;continue}this.inLink=true;out+=this.outputLink(cap,link);this.inLink=false;continue}if(cap=this.rules.strong.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.strong(this.output(cap[2]||cap[1]));continue}if(cap=this.rules.em.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.em(this.output(cap[2]||cap[1]));continue}if(cap=this.rules.code.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.codespan(escape(cap[2],true));continue}if(cap=this.rules.br.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.br();continue}if(cap=this.rules.del.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.del(this.output(cap[1]));continue}if(cap=this.rules.text.exec(src)){src=src.substring(cap[0].length);out+=escape(this.smartypants(cap[0]));continue}if(src){throw new Error("Infinite loop on byte: "+src.charCodeAt(0))}}return out};InlineLexer.prototype.outputLink=function(cap,link){var href=escape(link.href),title=link.title?escape(link.title):null;return cap[0].charAt(0)!=="!"?this.renderer.link(href,title,this.output(cap[1])):this.renderer.image(href,title,escape(cap[1]))};InlineLexer.prototype.smartypants=function(text){if(!this.options.smartypants)return text;return text.replace(/--/g,"").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1").replace(/'/g,"").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1").replace(/"/g,"").replace(/\.{3}/g,"")};InlineLexer.prototype.mangle=function(text){var out="",l=text.length,i=0,ch;for(;i.5){ch="x"+ch.toString(16)}out+="&#"+ch+";"}return out};function Renderer(options){this.options=options||{}}Renderer.prototype.code=function(code,lang,escaped){if(this.options.highlight){var out=this.options.highlight(code,lang);if(out!=null&&out!==code){escaped=true;code=out}}if(!lang){return"
    "+(escaped?code:escape(code,true))+"\n
    "}return'
    '+(escaped?code:escape(code,true))+"\n
    \n"};Renderer.prototype.blockquote=function(quote){return"
    \n"+quote+"
    \n"};Renderer.prototype.html=function(html){return html};Renderer.prototype.heading=function(text,level,raw){return"'+text+"\n"};Renderer.prototype.hr=function(){return this.options.xhtml?"
    \n":"
    \n"};Renderer.prototype.list=function(body,ordered){var type=ordered?"ol":"ul";return"<"+type+">\n"+body+"\n"};Renderer.prototype.listitem=function(text){return"
  • "+text+"
  • \n"};Renderer.prototype.paragraph=function(text){return"

    "+text+"

    \n"};Renderer.prototype.table=function(header,body){return"\n"+"\n"+header+"\n"+"\n"+body+"\n"+"
    \n"};Renderer.prototype.tablerow=function(content){return"\n"+content+"\n"};Renderer.prototype.tablecell=function(content,flags){var type=flags.header?"th":"td";var tag=flags.align?"<"+type+' style="text-align:'+flags.align+'">':"<"+type+">";return tag+content+"\n"};Renderer.prototype.strong=function(text){return""+text+""};Renderer.prototype.em=function(text){return""+text+""};Renderer.prototype.codespan=function(text){return""+text+""};Renderer.prototype.br=function(){return this.options.xhtml?"
    ":"
    "};Renderer.prototype.del=function(text){return""+text+""};Renderer.prototype.link=function(href,title,text){if(this.options.sanitize){try{var prot=decodeURIComponent(unescape(href)).replace(/[^\w:]/g,"").toLowerCase()}catch(e){return""}if(prot.indexOf("javascript:")===0){return""}}var out='
    ";return out};Renderer.prototype.image=function(href,title,text){var out=''+text+'":">";return out};function Parser(options){this.tokens=[];this.token=null;this.options=options||marked.defaults;this.options.renderer=this.options.renderer||new Renderer;this.renderer=this.options.renderer;this.renderer.options=this.options}Parser.parse=function(src,options,renderer){var parser=new Parser(options,renderer);return parser.parse(src)};Parser.prototype.parse=function(src){this.inline=new InlineLexer(src.links,this.options,this.renderer);this.tokens=src.reverse();var out="";while(this.next()){out+=this.tok()}return out};Parser.prototype.next=function(){return this.token=this.tokens.pop()};Parser.prototype.peek=function(){return this.tokens[this.tokens.length-1]||0};Parser.prototype.parseText=function(){var body=this.token.text;while(this.peek().type==="text"){body+="\n"+this.next().text}return this.inline.output(body)};Parser.prototype.tok=function(){switch(this.token.type){case"space":{return""}case"hr":{return this.renderer.hr()}case"heading":{return this.renderer.heading(this.inline.output(this.token.text),this.token.depth,this.token.text)}case"code":{return this.renderer.code(this.token.text,this.token.lang,this.token.escaped)}case"table":{var header="",body="",i,row,cell,flags,j;cell="";for(i=0;i/g,">").replace(/"/g,""").replace(/'/g,"'")}function unescape(html){return html.replace(/&([#\w]+);/g,function(_,n){n=n.toLowerCase();if(n==="colon")return":";if(n.charAt(0)==="#"){return n.charAt(1)==="x"?String.fromCharCode(parseInt(n.substring(2),16)):String.fromCharCode(+n.substring(1))}return""})}function replace(regex,opt){regex=regex.source;opt=opt||"";return function self(name,val){if(!name)return new RegExp(regex,opt);val=val.source||val;val=val.replace(/(^|[^\[])\^/g,"$1");regex=regex.replace(name,val);return self}}function noop(){}noop.exec=noop;function merge(obj){var i=1,target,key;for(;iAn error occured:

    "+escape(e.message+"",true)+"
    "}throw e}}marked.options=marked.setOptions=function(opt){merge(marked.defaults,opt);return marked};marked.defaults={gfm:true,tables:true,breaks:false,pedantic:false,sanitize:false,smartLists:false,silent:false,highlight:null,langPrefix:"lang-",smartypants:false,headerPrefix:"",renderer:new Renderer,xhtml:false};marked.Parser=Parser;marked.parser=Parser.parse;marked.Renderer=Renderer;marked.Lexer=Lexer;marked.lexer=Lexer.lex;marked.InlineLexer=InlineLexer;marked.inlineLexer=InlineLexer.output;marked.parse=marked;if(typeof module!=="undefined"&&typeof exports==="object"){module.exports=marked}else if(typeof define==="function"&&define.amd){define(function(){return marked})}else{this.marked=marked}}).call(function(){return this||(typeof window!=="undefined"?window:global)}()); \ No newline at end of file diff --git a/pgo/resources/owl.css b/pgo/resources/owl.css new file mode 100644 index 0000000..9c00876 --- /dev/null +++ b/pgo/resources/owl.css @@ -0,0 +1,248 @@ +.RFC2119 { + text-transform: lowercase; + font-style: italic; +} +.nonterminal { + font-weight: bold; + font-family: sans-serif; + font-size: 95%; +} +#abstract br { + /* doesn't work right SOMETIMES + margin-bottom: 1em; */ +} +.name { + font-family: monospace; +} +.buttonpanel { + margin-top: 1ex; + margin-bottom: 1ex; + padding-left: 1ex; + padding-right: 1ex; + padding-top: 1ex; + padding-bottom: 0.6ex; + border: 1px dotted black; +} +.grammar { + margin-top: 1ex; + margin-bottom: 1ex; + padding-left: 1ex; + padding-right: 1ex; + padding-top: 1ex; + padding-bottom: 0.6ex; + border: 1px dashed #2f6fab; + font-family: monospace; +} +.image { + text-align: center; +} +.centered { + text-align: center; + padding-top: 4ex; + padding-bottom: 4ex; +} +.centered table { + margin: 0 auto; + text-align: left; +} +.caption { + font-weight: bold; +} +.indent { + margin-left: 20px; +} +.atrisknote { + padding: 5px; + margin-top: 10px; + margin-bottom: 10px; + border: solid 2px blue; + background-color: #FFA; +} +.atrisknotehead { + font-style: italic; +} + +/* Stying the examples. */ + +.anexample:before { + content: "Example:"; + font-family: sans-serif; + font-size: 1.6ex; + font-weight: bold; +} +.anexample { + margin-top: 1ex; + margin-bottom: 1ex; + padding-left: 1ex; + padding-right: 1ex; + padding-top: 1ex; + padding-bottom: 0.6ex; + border: 1px dashed #2f6fab; + background-color: #f9f9f9; +} +.anexample table { + background-color: #f9f9f9; +} + +/* Styling the parts in the functional-style syntax. */ + +div.fss { + margin-top: 10px; + margin-bottom: 10px; + margin-left: 20px; + margin-right: 20px; + font-family: monospace; +} +table.fss { + margin: 0px 0px 0px 0px; + padding: 0px 0px 0px 0px; + width: 100%; +} +table.fss caption.fss { + font-size: 1.5ex; + font-weight: bold; + text-align: left; + padding-left: 10px; +} +table.fss td:first-child { + font-family: monospace; + padding-left: 20px; + padding-right: 20px; + width: 60%; +} +table{ + background-color: #f4ffff; + border: 1px solid navy; + margin: 20px; + vertical-align: middle; +} +table td { + padding: 5px 15px; + text-align: left; +} + +/* Styling the parts in the RDF syntax. */ + +div.rdf{ + margin-top: 10px; + margin-bottom: 10px; + margin-left: 20px; + margin-right: 20px; + font-family: monospace; +} +table.rdf { + margin: 0px 0px 0px 0px; + padding: 0px 0px 0px 0px; + width: 100%; +} +table.rdf caption.rdf { + font-size: 1.5ex; + font-weight: bold; + text-align: left; + padding-left: 10px; +} +table.rdf td:first-child { + font-family: monospace; + padding-left: 20px; + padding-right: 20px; + width: 60%; +} + +/* Styling the XML syntax. */ + +div.xmlsyn { + margin-top: 10px; + margin-bottom: 10px; + margin-left: 20px; + margin-right: 20px; + font-family: monospace; +} +div.axioms { + margin-top: 10px; + margin-bottom: 10px; + margin-left: 20px; + margin-right: 20px; +} + +/* Other styles. */ + +table.complexity td { + text-align: center; +} +table.allname td { + font-family: monospace; +} +table.canonicalparsing { + margin-left: 20px; + border-style: none; +} +table.canonicalparsing td { + vertical-align: top; + padding: 2px 2px 2px 2px; +} +table.canonicalparsing td.two { + padding-left: 30px; +} + +/* The following are classes for templates used in the editing process. */ + +.review { + padding: 5px; + border: solid 1px black; + margin-left: 10%; + margin-top: 10px; + margin-bottom: 10px; + background-color: #FFA; + font-size: smaller; +} +.reviewauthor { + font-size: smaller; + font-style: italic; +} +.ednote { + padding: 5px; + border: solid 1px black; + margin-top: 10px; + margin-bottom: 10px; +} +.ednotehead { + font-weight: bold; +} + +/* override mediawiki's beautiful DL styling... */ +dl { + background: white; + width: 100%; + border: none; + margin-top: 0; + margin-bottom: 0; + padding-top: 0; + padding-bottom: 0; +} + +div { + margin-top: 0; + margin-bottom: 0; +} +#fulltitle { + font-size: 140%; + font-weight: bold; +} + +.xml { + color: red +} + +.rdbms{ +color: red +} + +/* just copying from wiki, so it stays through TR. Currently + affects Primer, at least */ +pre { + background-color:#F9F9F9; + border:1px dashed #2F6FAB; + color:black; + line-height:1.1em; + padding:1em; +} \ No newline at end of file diff --git a/pgo/resources/primer.css b/pgo/resources/primer.css new file mode 100644 index 0000000..3136dac --- /dev/null +++ b/pgo/resources/primer.css @@ -0,0 +1,103 @@ +/* define a class "noprint" for sections which don't get printed */ +.noprint { display: none; } + +/* our syntax menu for switching */ +div.syntaxmenu { + border: 1px dotted black; + padding:0.5em; + margin: 1em; +} + +.container { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; +} + +@media print { + div.syntaxmenu { display:none; } +} + +/* use tab-like headers for syntax examples */ +div.exampleheader { + font-size: 90%; + float: left; + background: #F9F9F9; + color: #2F6FAB; + border: 1px dashed #2F6FAB; + border-bottom: 0px; + padding-top: 2px; +} + +div.exampleheader span.exampleheader { + background: #F9F9F9; + padding-top: 0px; + padding-right: 10px; + padding-left: 10px; + padding-bottom: 3px; + padding-top: 0px; +} + +/* Also copy MediaWiki style here, so it will not look different when exported */ +div.fssyntax pre, div.rdfxml pre, div.owlxml pre, div.turtle pre, div.manchester pre { + background-color: #F9F9F9; + border: 1px dashed #2F6FAB; + color: black; + line-height: 1.1em; + padding: 1em; + clear: both; + margin-left: 0em; +} +/* Expansion to add the status*/ +.status { + position: fixed; + left: 0em; + top: 0em; + text-align: right; + vertical-align: middle; + /* Square version of the inside span. Slightly larger */ + width: 26em; + height: 26em; + z-index: -1; + opacity: 0.8; + + /** From http://stackoverflow.com/questions/1080792/how-to-draw-vertical-text-with-css-cross-browser */ + + -webkit-transform: rotate(-90deg); + -moz-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + -o-transform: rotate(-90deg); + transform: rotate(-90deg); + /* also accepts left, right, top, bottom coordinates; not + * required, but a good idea for styling */ + -webkit-transform-origin: 50% 50%; + -moz-transform-origin: 50% 50%; + -ms-transform-origin: 50% 50%; + -o-transform-origin: 50% 50%; + transform-origin: 50% 50%; + + /* Should be unset in IE9+ I think. */ + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); +} + +/* The actual status box */ + .status div { + display: block; + background: rgb(0, 90, 156); + color: white; + width: 24em; + padding-top: 0.3em; + padding-left: 0em; + padding-right: 5em; + padding-bottom: 0.3em; + /* Enable for debugging + border: red thin solid; + */ +} + +/* And text inside, don't confuse fonts as it breaks em above */ +.status div span { + font-family: "Tauri"; + font-size: larger; +} \ No newline at end of file diff --git a/pgo/resources/rec.css b/pgo/resources/rec.css new file mode 100644 index 0000000..d8a1ff2 --- /dev/null +++ b/pgo/resources/rec.css @@ -0,0 +1,88 @@ +/* Style for a "Recommendation" */ + +/* + Copyright 1997-2003 W3C (MIT, ERCIM, Keio). All Rights Reserved. + The following software licensing rules apply: + http://www.w3.org/Consortium/Legal/copyright-software */ + +/* $Id: base.css,v 1.25 2006/04/18 08:42:53 bbos Exp $ */ + +body { + padding: 2em 1em 2em 70px; + margin: 0; + font-family: sans-serif; + color: black; + background: white; + background-position: top left; + background-attachment: fixed; + background-repeat: no-repeat; + counter-reset:section; +} +:link { color: #00C; background: transparent } +:visited { color: #609; background: transparent } +a:active { color: #C00; background: transparent } + +a:link img, a:visited img { border-style: none } /* no border on img links */ + +a img { color: white; } /* trick to hide the border in Netscape 4 */ +@media all { /* hide the next rule from Netscape 4 */ + a img { color: inherit; } /* undo the color change above */ +} + +th, td { /* ns 4 */ + font-family: sans-serif; +} + +h1, h2, h3, h4, h5, h6 { text-align: left } +h2.list{counter-reset:subsection } +h2.list:before{counter-increment:section;content: counter(section) ". ";} +h3.list:before{counter-increment:subsection;content: counter(section) "." counter(subsection) ". "; + } +h3.list{margin-top: 20px; + border-bottom: 0px; } +/* background should be transparent, but WebTV has a bug */ +h1, h2, h3 { color: #005A9C; background: white } +h1 { font: 170% sans-serif } +h2 { font: 140% sans-serif } +h3 { font: 120% sans-serif } +h4 { font: bold 100% sans-serif } +h5 { font: italic 100% sans-serif } +h6 { font: small-caps 100% sans-serif } + +.hide { display: none } + +div.head { margin-bottom: 1em } +div.head h1 { margin-top: 2em; clear: both } +div.head table { margin-left: 2em; margin-top: 2em } + +p.copyright { font-size: small } +p.copyright small { font-size: small } + +@media screen { /* hide from IE3 */ +a[href]:hover { background: #ffa } +} + +pre { margin-left: 2em } +/* +p { + margin-top: 0.6em; + margin-bottom: 0.6em; +} +*/ +dt, dd { margin-top: 0; margin-bottom: 0 } /* opera 3.50 */ +dt { font-weight: bold } + +pre, code { font-family: monospace } /* navigator 4 requires this */ + +ul.toc, ol.toc { + list-style: disc; /* Mac NS has problem with 'none' */ + list-style: none; +} + +@media aural { + h1, h2, h3 { stress: 20; richness: 90 } + .hide { speak: none } + p.copyright { volume: x-soft; speech-rate: x-fast } + dt { pause-before: 20% } + pre { speak-punctuation: code } +} diff --git a/pgo/webvowl/css/webvowl.app.css b/pgo/webvowl/css/webvowl.app.css new file mode 100644 index 0000000..45526ce --- /dev/null +++ b/pgo/webvowl/css/webvowl.app.css @@ -0,0 +1,2477 @@ +@import url(http://fonts.googleapis.com/css?family=Open+Sans);/*---------------------------------------------- + WebVOWL page +----------------------------------------------*/ +html { + -ms-content-zooming: none; +} + + + +#loading-progress { + width: 50%; + margin: 10px 0; +} + +#drag_dropOverlay{ + width: 100%; + height:100%; + position:absolute; + top:0; + opacity: 0.5; + background-color: #3071a9; + pointer-events: none; + +} + +#dragDropContainer{ + width: 100%; + height:100%; + position:absolute; + top:0; + pointer-events: none; +} +#drag_icon_group{ + + +} + +#drag_msg{ + width: 50%; + background-color: #fefefe; + height: 50%; + border: black 2px solid; + border-radius: 20px; + left: 25%; + position: absolute; + top: 25%; + vertical-align: middle; + line-height: 10px; + text-align: center; + pointer-events: none; + padding: 10px; + font-size: 1.5em; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + + +#layoutLoadingProgressBarContainer { + height: 50px; + text-align: left; + line-height: 1.5; +} + +#FPS_Statistics { + /*position : absolute;*/ + /*top : 10px;*/ + /*right: 50px;*/ + padding-left: 60px; + padding-top: 60px; +} + +#reloadCachedOntology { + /*position : absolute;*/ + /*top : 10px;*/ + /*right: 50px;*/ +} + +#additionalInformationContainer { + position: absolute; + top: 10px; + right: 50px; +} + +#modeOfOperationString { + /*position: absolute;*/ + /*right: 50px;*/ + /*top : 60px;*/ + padding-left: 34px; +} + +#direct-text-input { + border: 1px solid #34495e; + width: 100%; + margin-top: 5px; + cursor: pointer; +} + +#directUploadBtn, #close_directUploadBtn { + border: 1px solid #34495e; + width: 100%; + margin-top: 5px; + cursor: pointer +} + +#di_controls { + +} + +#di_controls > ul { + list-style: none; + margin: 0; + padding: 5px 0 0 5px; + +} + +#progressBarContext { + border-radius: 10px; + background-color: #bdc3c7; + height: 25px; + border: solid 1px black; + + margin: auto; + +} + +#progressBarValue { + border-radius: 9px; + width: 0%; + background-color: #2980b9; + height: 25px; + line-height: 1.5; + text-align: center; +} + +/** adding searching Styles **/ +.dbEntry { + background-color: #ffffff; + color: #2980b9; + padding: 10px; + font-size: 14px; + border: none; + cursor: pointer; +} + +.debugOption { + +} + +.dbEntrySelected { + background-color: #bdc3c7; + color: #2980b9; + padding: 10px; + font-size: 14px; + border: none; + cursor: pointer; +} + +.dbEntry:hover, .dbEntry:focus { + background-color: #bdc3c7; +} + +.searchMenuEntry { + background-color: #ffffff; + bottom: 0; + font-size: 14px; + min-width: 50px; + margin: 0; + padding: 0; + z-index: 99; + border-radius: 4px 4px 0 0; + border: 1px solid rgba(0, 0, 0, 0.15); + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + box-sizing: border-box; + border-bottom: none; + display: none; + position: absolute; + list-style: none; +} + +.searchInputText { + background-color: #ffffff; + color: black; + border: black; + text-decoration: none; + max-width: 150px; + overflow: hidden; + text-overflow: ellipsis; + /*height: 20px;*/ + margin: 0; +} + +img, iframe { + border: none; +} + +.hidden { + display: none !important; +} + +.clear { + clear: both; +} + +a { + color: #69c; + text-decoration: none; +} + +a:hover { + color: #3498db; +} + +#optionsArea a { + color: #2980b9; +} + +#optionsArea a.highlighted { + background-color: #d90; +} + +.toolTipMenu li.highlighted { + background-color: #feb; +} + +#browserCheck { + /* checking for IE where WebVOWL is not working */ + background-color: #f00; + padding: 5px 0; + position: absolute; + text-align: center; + width: 100%; +} + +#browserCheck a { + color: #fff; +} + +#browserCheck a:hover { + text-decoration: underline; +} + +/*---------------------------------------------- + SideBar Animation Class; +----------------------------------------------- */ +@-webkit-keyframes sbExpandAnimation { + 0% { + width: 78%; + } + 100% { + width: 100%; + } +} + +@-moz-keyframes sbExpandAnimation { + 0% { + width: 78%; + } + 100% { + width: 100%; + } +} + +@-o-keyframes sbExpandAnimation { + 0% { + width: 78%; + } + 100% { + width: 100%; + } +} + +@keyframes sbExpandAnimation { + 0% { + width: 78%; + } + 100% { + width: 100%; + } +} + +/*Collapse Animation*/ +@-webkit-keyframes sbCollapseAnimation { + 0% { + width: 100%; + } + 100% { + width: 78%; + } +} + +@-moz-keyframes sbCollapseAnimation { + 0% { + width: 100%; + } + 100% { + width: 78%; + } +} + +@-o-keyframes sbCollapseAnimation { + 0% { + width: 100%; + } + 100% { + width: 78%; + } +} + +@keyframes sbCollapseAnimation { + 0% { + width: 100%; + } + 100% { + width: 78%; + } +} + +/*---------------------------------------------- + SideBar Animation Class; +----------------------------------------------- */ +@-webkit-keyframes l_sbExpandAnimation { + 0% { + width: 0px; + } + 100% { + width: 200px; + } +} + +@-moz-keyframes l_sbExpandAnimation { + 0% { + width: 0px; + } + 100% { + width: 200px; + } +} + +@-o-keyframes l_sbExpandAnimation { + 0% { + width: 0px; + } + 100% { + width: 200px; + } +} + +@keyframes l_sbExpandAnimation { + 0% { + width: 0px; + } + 100% { + width: 200px; + } +} + +/*Collapse Animation*/ +@-webkit-keyframes l_sbCollapseAnimation { + 0% { + width: 200px; + } + 100% { + width: 0px; + } +} + +@-moz-keyframes l_sbCollapseAnimation { + 0% { + width: 200px; + } + 100% { + width: 0px; + } +} + +@-o-keyframes l_sbCollapseAnimation { + 0% { + width: 200px; + } + 100% { + width: 0px; + } +} + +@keyframes l_sbCollapseAnimation { + 0% { + width: 200px; + } + 100% { + width: 0px; + } +} + +/*----------------- WARNING ANIMATIONS-------------*/ + +/*---------------------------------------------- + SideBar Animation Class; +----------------------------------------------- */ +@-webkit-keyframes warn_ExpandAnimation { + 0% { + top: -500px; + } + 100% { + top: 0; + } +} + +@-moz-keyframes warn_ExpandAnimation { + 0% { + top: -500px; + } + 100% { + top: 0; + } +} + +@-o-keyframes warn_ExpandAnimation { + 0% { + top: -500px; + } + 100% { + top: 0; + } +} + +@keyframes warn_ExpandAnimation { + 0% { + top: -500px; + } + 100% { + top: 0; + } +} + +/*Collapse Animation*/ +@-webkit-keyframes warn_CollapseAnimation { + 0% { + top: 0; + } + 100% { + top: -400px; + } +} + +@-moz-keyframes warn_CollapseAnimation { + 0% { + top: 0; + } + 100% { + top: -400px; + } +} + +@-o-keyframes warn_CollapseAnimation { + 0% { + top: 0; + } + 100% { + top: -400px; + } +} + +@keyframes warn_CollapseAnimation { + 0% { + top: 0; + } + 100% { + top: -400px; + } +} + +@keyframes msg_CollapseAnimation { + 0% { + top: 0; + } + 100% { + top: -400px; + } +} + +/*// add expand and collaps width for the warn module*/ +@-webkit-keyframes warn_ExpandLeftBarAnimation { + 0% { + left: 0; + } + 100% { + left: 100px; + } +} + +@-moz-keyframes warn_ExpandLeftBarAnimation { + 0% { + left: 0; + } + 100% { + left: 100px; + } +} + +@-o-keyframes warn_ExpandLeftBarAnimation { + 0% { + left: 0; + } + 100% { + left: 100px; + } +} + +@keyframes warn_ExpandLeftBarAnimation { + 0% { + left: 0; + } + 100% { + left: 100px; + } +} + +/*Collapse Animation*/ +@-webkit-keyframes warn_CollapseLeftBarAnimation { + 0% { + left: 100px; + } + 100% { + left: 0; + } +} + +@-moz-keyframes warn_CollapseLeftBarAnimation { + 0% { + left: 100px; + } + 100% { + left: 0; + } +} + +@-o-keyframes warn_CollapseLeftBarAnimation { + 0% { + left: 100px; + } + 100% { + left: 0; + } +} + +@keyframes warn_CollapseLeftBarAnimation { + 0% { + left: 100px; + } + 100% { + left: 0; + } +} + +/*// same for the right side expansion*/ + +/*// add expand and collaps width for the warn module*/ +@-webkit-keyframes warn_ExpandRightBarAnimation { + 0% { + width: 100%; + } + 100% { + width: 78%; + } +} + +@-moz-keyframes warn_ExpandRightBarAnimation { + 0% { + width: 100%; + } + 100% { + width: 78%; + } +} + +@-o-keyframes warn_ExpandRightBarAnimation { + 0% { + width: 100%; + } + 100% { + width: 78%; + } +} + +@keyframes warn_ExpandRightBarAnimation { + 0% { + width: 100%; + } + 100% { + width: 78%; + } + +} + +/*Collapse Animation*/ +@-webkit-keyframes warn_CollapseRightBarAnimation { + 0% { + width: 78%; + } + 100% { + width: 100%; + } +} + +@-moz-keyframes warn_CollapseRightBarAnimation { + 0% { + width: 78%; + } + 100% { + width: 100%; + } +} + +@-o-keyframes warn_CollapseRightBarAnimation { + 0% { + width: 78%; + } + 100% { + width: 100%; + } +} + +@keyframes warn_CollapseRightBarAnimation { + 0% { + width: 78%; + } + 100% { + width: 100%; + } +} + +/*---------------------------------------------- + LAYOUT +----------------------------------------------*/ +body { + background: rgb(24, 32, 42); + height: 100%; + font-size: 14px; + font-family: 'Open Sans', Helvetica, Arial, sans-serif; + line-height: 1; + margin: 0; + overflow: hidden; + padding: 0; + position: fixed; + width: 100%; +} + +main { + height: 100%; + margin: 0; + padding: 0; + position: relative; + width: 100%; +} + +#canvasArea { + position: relative; + margin: 0; + padding: 0; + width: 78%; +} + +#canvasArea #graph { + box-sizing: border-box; + margin: 0 0 2px 0; + background-color: #ecf0f1; + overflow: hidden; + padding: 0; + width: 100%; +} + +#canvasArea svg { + box-sizing: border-box; + margin: 0; + overflow: hidden; + padding: 0; +} + +#logo { + position: fixed; + /*padding: 10px;*/ + pointer-events: none; + /*border: solid 1px red;*/ +} + +#logo h2 { + color: #3498db; + margin: 0; + line-height: 0.7; + text-align: center; + font-size: 24px; +} + +#logo h2 span { + color: #34495E; + /*font-size: min(2vmin, 24px);*/ + font-size: 16px; +} + +@media screen and (max-device-height: 800px) { + #logo h2 { + font-size: calc(8px + 1.0vmin); + } + + #logo h2 span { + font-size: calc(3px + 1.0vmin); + } +} + +@media screen and (max-height: 800px) { + #logo h2 { + font-size: calc(8px + 1.0vmin); + } + + #logo h2 span { + font-size: calc(3px + 1.0vmin); + } +} + +@media screen and (max-device-width: 1200px) { + #logo h2 { + font-size: calc(8px + 1.0vmin); + } + + #logo h2 span { + font-size: calc(3px + 1.0vmin); + } +} + +@media screen and (max-width: 1200px) { + #logo h2 { + font-size: calc(8px + 1.0vmin); + } + + #logo h2 span { + font-size: calc(3px + 1.0vmin); + } +} + +.checkboxContainer input, .checkboxContainer label { + vertical-align: middle; +} + +.selected-ontology { + background-color: #eee; +} + +#credits { + border-top: solid 1px #bdc3c7; + font-size: 0.9em; +} + +.slideOption { + position: relative; + padding: 8px 5px; + outline: none; +} + +.slideOption .value { + float: right; + outline: none; +} + +.slideOption input[type="range"] { + box-sizing: border-box; + margin: 0; + outline: none; + -webkit-appearance: none; + -moz-appearance: none; + border-radius: 3px; + height: 12px; + width: 100%; + box-shadow: none; + left: 0; + position: relative; + transition: all 0.5s ease; + background-color: #eee; +} + +/*TRACK*/ +.slideOption input[type=range]::-webkit-slider-runnable-track { + -webkit-appearance: none; + background-color: #3071a9; + height: 3px; +} + +.slideOption input[type=range]::-moz-range-track { + -webkit-appearance: none; + background-color: #3071a9; + height: 3px; +} + +.slideOption input[type="range"]:hover { + outline: none; +} + +/*THUMB*/ +.slideOption input[type="range"]::-webkit-slider-thumb { + -webkit-appearance: none; + background-color: white; + border-radius: 3px; + border: solid 1px black; + transition: all 0.5s ease; + height: 10px; + width: 30px; + outline: none; + margin-top: -3px; +} + +.slideOption input[type="range"]::-moz-range-thumb { + -webkit-appearance: none; + background-color: white; + border-radius: 3px; + border: solid 1px black; + transition: all 0.5s ease; + height: 10px; + width: 30px; + outline: none; +} + +.slideOption input[type="range"]::-moz-range-thumb:hover { + background-color: #d90; + outline: none; +} + +.slideOption input[type="range"]::-webkit-slider-thumb:hover { + background-color: #d90; + /*color: #d90;*/ + outline: none; +} + +/*focus : remove border*/ +.slideOption input[type="range"]:focus { + outline: none; +} + +.slideOption input[type="range"]:active { + outline: none; +} + +.slideOption input[type="range"]::-moz-range-thumb:focus { + outline: none; +} + +.slideOption input[type="range"]::-moz-range-thumb:active { + outline: none; +} + +.slideOption input[type="range"]::-webkit-slider-thumb:focus { + outline: none; +} + +.slideOption input[type="range"]::-webkit-slider-thumb:active { + outline: none; +} + +.slideOption input[type="range"]:disabled { + box-sizing: border-box; + margin: 0; + outline: none; + -webkit-appearance: none; + -moz-appearance: none; + border-radius: 3px; + height: 12px; + width: 100%; + box-shadow: none; + left: 0; + position: relative; + transition: all 0.5s ease; + background-color: #787878; +} + +/*TRACK*/ +.slideOption input[type=range]:disabled::-webkit-slider-runnable-track { + -webkit-appearance: none; + background-color: #373737; + height: 3px; +} + +.slideOption input[type=range]:disabled::-moz-range-track { + -webkit-appearance: none; + background-color: #373737; + height: 3px; +} + +.slideOption input[type="range"]:disabled { + outline: none; +} + +/*THUMB*/ +.slideOption input[type="range"]:disabled::-webkit-slider-thumb { + -webkit-appearance: none; + background-color: #363636; + border-radius: 3px; + border: solid 1px #aaaaaa; + transition: all 0.5s ease; + height: 10px; + width: 30px; + outline: none; + margin-top: -3px; +} + +.slideOption input[type="range"]:disabled::-moz-range-thumb { + -webkit-appearance: none; + background-color: #aaaaaa; + border-radius: 3px; + border: solid 1px black; + transition: all 0.5s ease; + height: 10px; + width: 30px; + outline: none; +} + +.slideOption input[type="range"]:disabled::-moz-range-thumb { + background-color: #aaaaaa; + outline: none; +} + +.slideOption input[type="range"]:disabled::-webkit-slider-thumb { + background-color: #aaaaaa; + /*color: #d90;*/ + outline: none; +} + +.slideOption input[type="range"]:disabled:hover::-moz-range-thumb { + background-color: #404040; + outline: none; +} + +.slideOption input[type="range"]:disabled:hover::-webkit-slider-thumb { + background-color: #404040; + /*color: #d90;*/ + outline: none; +} + +#detailsArea { + top: 0; + right: 0; + bottom: 0; + color: #bdc3c7; + height: 100%; + width: 22%; + overflow-y: auto; + overflow-x: hidden; + position: fixed; + border-left: 1px solid #34495E; +} + +#detailsArea h1 { + border-bottom: solid 1px #34495e; + color: #ecf0f1; + display: block; + font-weight: 100; + font-size: 1.5em; + margin: 0; + padding: 10px 0; + text-align: center; +} + +#generalDetails { + width: auto; + box-sizing: border-box; + height: 100%; +} + +#generalDetails span #about { + border-bottom: solid 1px #34495e; + display: block; + padding: 10px; + text-align: center; + word-wrap: break-word; + color: #69c; +} + +#generalDetails h4 { + background: rgb(27, 37, 46); + color: #ecf0f1; + display: block; + font-size: 1.1em; + font-weight: 100; + margin: 0; + padding: 10px 0; + text-align: center; +} + +#detailsArea #generalDetails h5 { + border-bottom: solid 1px #34495e; + font-size: 0.9em; + font-weight: 100; + margin: 0; + padding: 5px; + text-align: center; +} + +#description { + text-align: justify; +} + +.accordion-container p { + font-size: 0.9em; + line-height: 1.3; + margin: 5px 10px; +} + +.statisticDetails span { + font-weight: 100; + font-style: italic; + margin: 10px 0; + padding: 10px; +} + +.statisticDetails div { + font-weight: 100; + font-style: italic; + margin: 10px 0; + padding: 0 10px; + display: inline; +} + +#selection-details .propDetails a { + color: #69c; +} + +#selection-details .propDetails > span { + font-weight: 100; + font-style: italic; + padding: 0 10px; +} + +#selection-details #classEquivUri span, #selection-details #disjointNodes span { + padding: 0; +} + +#selection-details .propDetails div { + font-weight: 100; + font-style: italic; + margin: 10px 0; + padding: 0 10px; + display: inline; +} + +#selection-details .propDetails div span { + padding: 0; +} + +/* give subclass property the same background color as the canvas */ +.subclass { + fill: #ecf0f1; +} + +.accordion-trigger { + background: #24323e; + cursor: pointer; + padding: .5em; +} + +.accordion-trigger.accordion-trigger-active:before { + padding-right: 4px; + content: "\25BC" +} + +.accordion-trigger:not(.accordion-trigger-active):before { + padding-right: 4px; + content: "\25BA" +} + +.accordion-container.scrollable { + max-height: 40%; + overflow: auto; +} + +.small-whitespace-separator { + height: 3px; +} + +#language { + background: transparent; + border: 1px solid #34495E; + color: #ecf0f1; +} + +#language option { + background-color: #24323e; +} + +.converter-form:not(:first-child) { + margin-top: 5px; +} + +.converter-form label { + display: inline-block; + line-height: normal; +} + +.converter-form input { + box-sizing: border-box; + height: 20px; + width: 74%; + border: 1px solid #34495E; +} + +.converter-form button { + cursor: pointer; + float: right; + height: 20px; + padding: 0; + width: 25%; + border: 1px solid #34495E; + background-color: #ecf0f1; +} + +#file-converter-label { + border: 1px solid #34495E; + box-sizing: border-box; + cursor: pointer; + height: 20px; + width: 74%; +} + +#killWarning { + cursor: pointer; + color: #ffffff; + font-weight: bold; +} + +/*#copyBt{*/ +/*box-sizing: border-box;*/ +/*color: #000000;*/ +/*float:right;*/ +/*position:absolute;*/ +/*right:2px;*/ +/*padding: 2px 7px 3px 7px;*/ +/*border: 1px solid #000000;*/ +/*background-color: #ecf0f1;*/ +/*cursor: pointer;*/ +/*}*/ + +#copyBt { + box-sizing: border-box; + height: 20px; + width: 31%; + border: 1px solid #34495E; +} + +#sidebarExpandButton { + height: 24px; + width: 24px; + /*background-color: white;*/ + /*box-shadow: 0px 1px 1px grey;*/ + box-sizing: border-box; + top: 10px; + color: #000000; + float: right; + position: absolute; + right: 0; + border: 1px solid #000000; + + text-align: center; + font-size: 1.5em; + cursor: pointer; +} + +.dropdownMenuClass { + height: 20px; + /*width: 69%;*/ + float: right; + border: 1px solid #34495E; + background-color: #34495E; + color: white; + /*border-bottom: 1px solid #d90;*/ + text-align: left; + width: auto; +} + +#typeEditForm_datatype { + padding-top: 5px; +} + +#typeEditor { + width: 165px; +} + +#typeEditor_datatype { + width: 165px; +} + +#leftSideBarCollapseButton { + box-sizing: border-box; + top: 50px; + /*padding:5px;*/ + color: #000000; + position: absolute; + left: 200px; + border: 1px solid #000000; + /*background-color: #ecf0f1;*/ + cursor: pointer; + width: 24px; + height: 24px; + font-size: 1.5em; + text-align: center; +} + +#leftSideBarCollapseButton:hover { + background-color: #d90; +} + +#sidebarExpandButton:hover { + background-color: #d90; +} + +.spanForCharSelection { + padding-left: 25px; +} + +.nodeEditSpan { + color: #000; + background-color: #fff; + text-align: center; + /*overflow: auto;*/ + border: none; + padding-top: 6px; +} + +.nodeEditSpan:focus { + outline: none; + border: none; +} + +.foreignelements { + /*width: 80px;*/ + /*height: 3px;*/ + border: none; +} + +.foreignelements:focus { + outline: none; + border: none; +} + +#leftSideBarContent { + color: #000000; + float: left; + position: absolute; + left: 0; + /*border: 1px solid #000000;*/ + background-color: rgb(24, 32, 42); + width: 100%; + height: 100%; +} + +#leftSideBarContent > h3 { + color: #ecf0f1; + display: block; + font-size: 1.1em; + font-weight: 100; + margin: 0 0 5px 0; + padding: 10px 0; + text-align: left; +} + +#generalDetailsEdit { + /*color: #ecf0f1;*/ + color: #ecf0f1; +} + +#generalDetailsEdit > div { + padding: 5px; +} + +#generalDetailsEdit > h3 { + color: #ecf0f1; + display: block; + font-size: 1.1em; + font-weight: 100; + margin: 0 0 5px 0; + padding: 10px 0; + text-align: left; +} + +.subAccordion { + color: #ecf0f1; + display: block; + font-size: 0.8em; + font-weight: 100; + margin: 0; + padding: 5px; + text-align: left; +} + +.subAccordionDescription { + padding: 0 5px; +} + +.boxed { + padding: 0 5px; +} + +.separatorLineRight { + border-right: 1px solid #f00; +} + +.editPrefixButton:hover { + color: #ff972d; + cursor: pointer; +} + +.editPrefixIcon:hover { + stroke: #ff972d; + stroke-width: 1px; + cursor: pointer; +} + +.editPrefixIcon { + stroke: #fffff; + stroke-width: 1px; + cursor: pointer; +} + +.deletePrefixButton:hover { + color: #ff972d; + cursor: pointer; +} + +.deletePrefixButton { + color: #ff0000; + cursor: pointer; +} + +.invisiblePrefixButton { + cursor: default; + color: rgb(24, 32, 42); +} + +#containerForAddPrefixButton { + width: 100%; + margin-top: 5px; +} + +.roundedButton { + border: 1px solid #000000; + border-radius: 20px; + padding: 0 5px; + background: #fff; + cursor: pointer; + color: black; + outline: none; +} + +.roundedButton:hover { + background: #318638; + cursor: pointer; + color: #fff; + outline: none; +} + +#prefixURL_Description { + padding: 5px 0 0 0; +} + +.prefixIRIElements { + display: inline-block; + padding: 3px; + border-bottom: 1px solid #34495E; + width: 100% +} + +.prefixInput { + width: 30px; + display: inline-block; + margin-right: 5px; +} + +.prefixURL { + width: 100px; + display: inline-block; + paddig-left: 5px; +} + +.selectedDefaultElement { + text-align: left; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + display: inline-block; + max-width: 200px; +} + +#editHeader { + color: #ecf0f1; + background-color: #394f5a; + display: block; + font-size: 1.1em; + font-weight: 100; + text-align: center; +} + +#leftHeader { + color: #ecf0f1; + background-color: #394f5a; + display: block; + font-size: 1.1em; + font-weight: 100; + text-align: center; + padding: 10px 0; + margin: 0; +} + +.containerForDefaultSelection { + color: #ecf0f1; + display: block; + font-size: 1.1em; + font-weight: 100; + margin: 0; + padding: 10px 20px; + text-align: left; +} + +.defaultSelected { + color: #a15d05; + background-color: #283943; +} + +.containerForDefaultSelection:hover { + color: #f19505; + background-color: #394f5a; + display: block; + cursor: pointer; +} + +#containerForLeftSideBar { + top: 50px; + float: left; + position: absolute; + background-color: #1b252e; + left: 0; + width: 200px; + height: 200px; + overflow-y: auto; + overflow-x: hidden; +} + +#leftSideBar { + width: 100%; + background-color: rgb(24, 32, 42); +} + +#loading-info { + box-sizing: border-box; + position: absolute; + text-align: center; + + width: 100%; + height: 80%; + top: 0; +} + +#loading-info > div { + display: inline-block; + color: #ffffff; + background-color: #18202A; + border-bottom-left-radius: 2px; + border-bottom-right-radius: 2px; +} + +#loading-info > * > * { + padding: 5px; +} + +#loading-info { + pointer-events: none; +} + +#loading-progress { + pointer-events: auto; + min-width: 220px; + border-radius: 10px; +} + +#show-loadingInfo-button { + font-size: 12px; + color: #fff; + cursor: pointer; + text-align: center; +} + +#loadingIndicator_closeButton:hover { + color: #ff972d; + cursor: pointer; + +} + +#loadingIndicator_closeButton { + color: #ffe30f; + cursor: pointer; + padding-bottom: 5px; + float: right; +} + +.busyProgressBar { + background-color: #000; + height: 25px; + position: relative; + animation: busy 2s linear infinite; +} + +@-webkit-keyframes busy { + 0% { + left: 0%; + } + 50% { + left: 80%; + } + 100% { + left: 0%; + } +} + +#bulletPoint_container { + padding-left: 15px; + margin-top: 0px; + margin-bottom: 0px; +} + +#bulletPoint_container > div { + margin-left: -15px; +} + +#loadingInfo-container { + box-sizing: border-box; + text-align: left; + line-height: 1.2; + padding-top: 5px; + overflow: auto; + /*white-space: nowrap;*/ + /*min-width: 250px;*/ + height: 120px; + min-height: 40px; + background-color: #3c3c3c; + +} + +#error-description-button { + margin: 5px 0 0 0; + font-size: 12px; + color: #69c; + cursor: pointer; + text-align: center; +} + +#error-description-container { + box-sizing: border-box; + text-align: left; +} + +#error-description-container pre { + background-color: #34495E; + padding: 2px; + margin: 0; + white-space: pre-wrap; + max-height: calc(100vh - 125px); + max-width: 75vw; + overflow: auto; +} + +.spin { + display: inline-block; + -webkit-animation: spin 2s infinite linear; + animation: spin 2s infinite linear; +} + +@-webkit-keyframes spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} + +@keyframes spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} + +.truncate { + max-width: 250px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.color-mode-switch { + float: right; + width: 90px; + cursor: pointer; + height: 20px; + padding: 0; + border: 0; + color: #555; + background-color: #ECEEEF; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2), inset 0 0 3px rgba(0, 0, 0, 0.1); +} + +.color-mode-switch:focus { + outline-width: 0; +} + +.color-mode-switch.active { + color: #FFF; + background-color: #32CD32; + box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.2), inset 0 0 3px rgba(0, 0, 0, 0.1); +} + +/* adding button pulse animation*/ +.filterMenuButtonHighlight { + background-color: #d90; +} + +@-webkit-keyframes buttonAnimation { + 0% { + background-color: unset; + } + 100% { + background-color: #d90; + } +} + +@-moz-keyframes buttonAnimation { + 0% { + background-color: unset; + } + 100% { + background-color: #d90; + } +} + +@-o-keyframes buttonAnimation { + 0% { + background-color: unset; + } + 100% { + background-color: #d90; + } +} + +@keyframes buttonAnimation { + 0% { + background-color: unset; + } + 100% { + background-color: #d90; + } +} + +.buttonPulse { + -webkit-animation-name: buttonAnimation; + -moz-animation-name: buttonAnimation; + -o-animation-name: buttonAnimation; + animation-name: buttonAnimation; + + -webkit-animation-duration: 0.5s; + -moz-animation-duration: 0.5s; + -o-animation-duration: 0.5s; + animation-duration: 0.5s; + + -webkit-animation-iteration-count: 3; + -moz-animation-iteration-count: 3; + -o-animation-iteration-count: 3; + animation-iteration-count: 3; + + -webkit-animation-timing-function: linear; + -moz-animation-timing-function: linear; + -o-animation-timing-function: linear; + animation-timing-function: linear; + + +} + +/*swipe bar definition*/ + +/*Overwriting individual menu widths*/ +#m_about { + max-width: 200px; + width: 200px; + position: absolute; + +} + +#m_modes { + max-width: 160px; + width: 160px; + position: absolute; +} + +#m_filter { + max-width: 170px; + width: 170px; + position: absolute; +} + +#m_gravity { + max-width: 180px; + width: 180px; + position: absolute; +} + +#m_export { + max-width: 160px; + width: 160px; + position: absolute; + +} + +#exportedUrl { + width: 100px; +} + +#m_select { + max-width: 300px; + width: 300px; + position: absolute; +} + +#m_config { + max-width: 240px; + width: 240px; + position: absolute; +} + +#m_search { + max-width: 250px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +/***************** REWRITING MENU ELEMENT CONTAINERS ***********************/ +/*Container which holds the swipeBar*/ +#swipeBarContainer { + position: fixed; + width: 77.8%; + height: 40px; + margin: 0; + padding: 0; + bottom: 0; +} + +/*Scroll-able container for the menu entries */ +#menuElementContainer { + margin: 0; + padding: 0; + overflow-x: auto; + overflow-y: hidden; + white-space: nowrap; + text-align: right; + list-style-type: none; +} + +/*Style for the individual menu entries*/ +#menuElementContainer > li { + display: inline-block; + box-sizing: border-box; + text-align: left; + position: relative; + height: 40px; + font-size: 14px; + color: #ffffff; + padding: 12px 0 0; + margin-left: -4px; +} + +/*Font-color Style for menu entries */ +#menuElementContainer > li > a { + color: #fff; + padding: 9px 12px 12px 30px; +} + +.menuElementSvgElement { + height: 20px; + width: 20px; + display: block; + position: absolute; + top: 10px; + left: 8px; +} + +.btn_shadowed { + background-color: #fefefe; + box-shadow: 1px 1px 1px gray; +} + +.reloadCachedOntologyIcon { + height: 20px; + width: 108px; + display: block; + position: absolute; + top: 20px; + left: 3px; + /*background: #ecf0f1;;*/ + border: solid 1px black; + border-radius: 10px; + cursor: pointer; +} + +.reloadCachedOntologyIcon:disabled { + background: #f4f4f4; + cursor: auto; + border: solid 1px darkgray; + +} + +.reloadCachedOntologyIcon:hover { + background: #d90; + cursor: pointer; +} + +.disabledReloadElement { + cursor: auto; + background: #F4F4F4; + pointer-events: auto; + border: solid 1px darkgray; + color: #bbbbbb; +} + +.disabledReloadElement:hover { + cursor: auto; + background: #EEEEEE; + pointer-events: auto; +} + +#menuElementContainer > li > input { + color: #000; + /*padding : 0 0.3em 0 1.5em;*/ + padding: 0.1em .3em 0.1em 1.5em; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + width: 120px; +} + +/*Hovered behavior for the menu entries*/ +#menuElementContainer > li > a:hover { + box-sizing: border-box; + background: #1B252E; + /*background : #d90;*/ + color: #bdc3c7; + +} + +#empty:hover { + box-sizing: border-box; + background: #e1e1e1; + /*background : #d90;*/ + color: #2980b9; +} + +#empty.disabled { + pointer-events: none; + cursor: default; + color: #979797; +} + +.disabled { + pointer-events: none; + cursor: default; + color: #979797; +} + +/*ToolTip Menu Definition*/ +.toolTipMenu { + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + box-sizing: border-box; + background-color: #ffffff; + border: 1px solid rgba(0, 0, 0, 0.15); + border-bottom: none; + border-radius: 4px 4px 0 0; + bottom: 0; + display: none; + font-size: 14px; + list-style: none; + /*max-width: 300px;*/ + margin: 0; + padding: 0; + white-space: normal; + position: absolute; + z-index: 99; +} + +.toolTipMenu > li:first-of-type { + border: none; +} + +.toolTipMenu a { + color: #2980b9; +} + +.toolTipMenu > li { + border-top: solid 1px #bdc3c7; +} + +.toolTipMenu li { + color: #2980b9; + display: block; +} + +/*MenuElement hovering enables the toolTip of the corresponding menu*/ +#menuElementContainer > li:hover .toolTipMenu { + display: block; +} + +#menuElementContainer li > ul.toolTipMenu li a:hover { + background: #e1e1e1; +} + +/****************************************************************************/ +/*ScrollButton behavior*/ +#scrollLeftButton { + height: 30px; + width: 30px; + padding: 5px 0 5px 10px; + color: #fff; + cursor: pointer; + position: absolute; + margin-top: -2px; + font-size: 2em; + background-color: #24323e; + left: 0; +} + +#scrollLeftButton:focus { + outline: none; +} + +#scrollLeftButton:before { + content: "<"; +} + +/*Right Scroll Button*/ +#scrollRightButton { + height: 30px; + width: 30px; + padding: 5px 0 5px 10px; + color: #fff; + cursor: pointer; + position: absolute; + margin-top: -2px; + font-size: 2em; + background-color: #24323e; + right: 0; +} + +#scrollRightButton:focus { + outline: none; +} + +#scrollRightButton:hover { + color: #bdc3c7; +} + +#scrollLeftButton:hover { + color: #bdc3c7; +} + +#scrollRightButton:before { + content: ">"; +} + +#centerGraphButton, #zoomInButton, #zoomOutButton { + border: 1px solid #000000; + text-align: center; + margin: -1px 0 0 0; + font-size: 1.5em; + padding: 0; + height: 28px; +} + +.noselect { + -webkit-touch-callout: none; /* iOS Safari */ + -webkit-user-select: none; /* Safari */ + -khtml-user-select: none; /* Konqueror HTML */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* Internet Explorer/Edge */ + user-select: none; + /* Non-prefixed version, currently + supported by Chrome and Opera */ +} + +#zoomOutButton { + line-height: 22px; +} + +#centerGraphButton { + line-height: 25px; +} + +#zoomInButton { + line-height: 25px; +} + +#zoomSlider > p:hover { + background-color: #d90; +} + +#zoomSliderParagraph { + color: #000000; + padding-top: 5px; + margin: -1px 0 0 0; + border: 1px solid #000000; + /*background-color: #ecf0f1;*/ + /*width: 28px;*/ + height: 150px; +} + +p#zoomSliderParagraph:hover { + background-color: #fff; +} + +/*todo put this in a proper position*/ +#zoomSlider { + width: 28px; + margin-top: -2px; + padding: 0; + font-size: 1.5em; + cursor: pointer; + position: absolute; + right: 20px; + bottom: 20px; + color: #000; + /*background-color: #ecf0f1;*/ + box-sizing: border-box; +} + +/****************************************************************************/ +/*Definition for the Icons before*/ +#menuElementContainer > li > a::before { + font-size: 1em; + margin: 0; + padding: 0 6px 0 0; +} + +#menuElementContainer a.highlighted { + background-color: #d90; +} + +/*#search-input-text.searchInputText {*/ +/*!*padding: 0 0.2em;*!*/ +/*color: black;*/ +/*}*/ + +.inner-addon { + position: relative; +} + +.searchIcon { + position: absolute; + /*padding: 0.15em 0;*/ + width: 17px; + height: 17px; + + pointer-events: none; +} + +.gearIcon { + position: absolute; + width: 17px; + height: 17px; + pointer-events: none; + left: -5px; +} + +/*#search-input-text::before {*/ +/*!*padding: 0 0.2em;*!*/ +/*!*color: black;*!*/ +/*font-size: 1.4em; !* todo : test this *!*/ +/*!*content: "\2315";*!*/ +/*content: "⚲";*/ +/*color: white;*/ +/*padding: 0;*/ +/*-webkit-transform: rotate(-45deg);*/ +/*!*content: "\2315" or "\1F50D"*!;*/ +/*display: inline-block;*/ +/*position: relative;*/ +/*top: 2px;*/ +/*left:-5px;*/ +/*}*/ + +li#c_search { + padding: 0 5px; + margin-left: 5px; + height: 20px; +} + +/*Menu icons before the links selection */ +/*#c_select > a::before { content: "\2263"; }*/ +/*#c_export > a::before { content: "\21E4"; }*/ +/*#c_gravity > a::before { content: "\2299"; }*/ +/*#c_filter > a::before { content: "\25BD"; }*/ +/*#c_modes > a::before { content: "\2606"; }*/ +/*#c_reset > a::before { content: "\21BB"; }*/ +/*#c_about > a::before { content: "\00A9"; }*/ + +li#c_locate { + padding: 0; +} + +#c_locate > a { + font-size: 2em; + padding: 0; +} + +a#pause-button { + padding: 12px 12px; +} + +/*Pause Button has a different behavior*/ +a#pause-button.paused::before { + content: "\25BA"; +} + +a#pause-button.paused:hover { + background-color: #d90; + color: #fff; +} + +a#pause-button:not(.paused)::before { + content: "II"; +} + +.toolTipMenu li:hover { + background-color: #e1e1e1; +} + +#emptyLiHover { + background-color: #FFFFFF; +} + +#emptyLiHover:hover { + background-color: #FFFFFF; +} + +.toggleOption li:hover { + background-color: #e1e1e1; +} + +.toggleOption { + padding: 8px 5px; +} + +#converter-option:hover { + background-color: #ffffff; +} + +.toolTipMenu li a:only-child, .option { + display: block; + float: none; + padding: 8px 5px; +} + +.customLocate { + padding: 0; + background-color: #32CD32; +} + +a#locateSearchResult { + padding-bottom: 0; + padding-top: 50px; + position: relative; + top: 5px; +} + +/*#sliderRange{*/ +/*padding: 0;*/ +/*margin: 7px 0 0 0;*/ +/*width:100%;*/ +/*height:5px;*/ +/*-webkit-appearance: none;*/ +/*outline: none;*/ +/*}*/ + +#zoomSliderElement { + color: #000; + position: relative; + padding-top: 0; + width: 155px; + height: 24px; + background-color: transparent; + -webkit-transform-origin-x: 73px; + -webkit-transform-origin-y: 73px; + -webkit-transform: rotate(-90deg); + -moz-transform-origin: 73px 73px; + transform: rotate(-90deg); + transform-origin: 73px 73px; + -webkit-appearance: none; + outline: none; + margin: 4px 0; +} + +/* ------------------ Zoom Slider styles --------------------------*/ +#zoomSliderElement::-webkit-scrollbar { + height: 0; +} + +#zoomSliderElement:hover { + cursor: crosshair; +} + +/*TRACK*/ +#zoomSliderElement::-webkit-slider-runnable-track { + width: 100%; + height: 5px; + cursor: pointer; + background: #3071a9; +} + +#zoomSliderElement::-moz-range-track { + width: 100%; + height: 5px; + cursor: pointer; + background: #3071a9; +} + +/*Thumb*/ +#zoomSliderElement::-webkit-slider-thumb { + -webkit-appearance: none; + border: 1px solid #000000; + height: 10px; + width: 30px; + margin-right: 50px; + border-radius: 3px; + background: #fff; + cursor: pointer; + outline: none; + margin-top: -3px; +} + +#zoomSliderElement::-ms-thumb { + -webkit-appearance: none; + border: 1px solid #000000; + height: 10px; + width: 30px; + margin-right: 50px; + border-radius: 3px; + background: #fff; + cursor: pointer; + outline: none; + margin-top: -3px; +} + +#zoomSliderElement::-ms-thumb:hover { + -webkit-appearance: none; + border: 1px solid #000000; + height: 10px; + width: 30px; + margin-right: 50px; + border-radius: 3px; + background: #d90; + cursor: pointer; + outline: none; + margin-top: -3px; +} + +#zoomSliderElement::-webkit-slider-thumb:hover { + -webkit-appearance: none; + border: 1px solid #000000; + height: 10px; + width: 30px; + margin-right: 50px; + border-radius: 3px; + background: #d90; + cursor: pointer; + outline: none; + margin-top: -3px; +} + +#zoomSliderElement::-moz-range-thumb { + border: 1px solid #000000; + height: 10px; + width: 30px; + border-radius: 3px; + /*background: #ffffff;*/ + cursor: pointer; + outline: none; +} + +#zoomSliderElement::-moz-range-thumb:hover { + border: 1px solid #000000; + height: 10px; + width: 30px; + border-radius: 3px; + background: #d90; + cursor: pointer; + outline: none; +} + +#zoomSliderElement::-moz-focus-outer { + border: 0; +} + +#locateSearchResult:focus { + outline: none; + +} + +a#locateSearchResult.highlighted:hover { + background-color: #d90; + color: red; +} + +a#locateSearchResult { + outline: none; + padding-bottom: 0; + padding-top: 0; + position: relative; + top: 5px; +} + +/*Editor hints*/ +#editorHint { + padding: 5px 5px; + position: absolute; + text-align: center; + width: 100%; + pointer-events: none; +} + +#editorHint label { + pointer-events: auto; + float: right; + padding: 5px 5px; + color: #ffdd00; +} + +#editorHint label:hover { + text-decoration: underline; + cursor: pointer; +} + +#editorHint > div { + pointer-events: auto; + text-align: left; + display: inline-block; + color: #ffffff; + font-size: 0.8em; + background-color: #18202A; + padding: 5px 5px; + border-radius: 5px; + +} + +#WarningErrorMessagesContainer { + position: absolute; + text-align: center; + top: 0; + pointer-events: none; +} + +/*Editor hints*/ +#WarningErrorMessages { + position: relative; + /*text-align: center;*/ + width: 50%; + pointer-events: auto; + margin: 10px 0; + padding-right: 12px; + overflow-y: auto; + overflow-x: hidden; +} + +#WarningErrorMessages label { + pointer-events: auto; + float: right; + padding: 5px 5px; + color: #ffdd00; +} + +#WarningErrorMessages span { + pointer-events: auto; + float: right; + padding: 5px 5px; +} + +#WarningErrorMessages label:hover { + text-decoration: underline; + cursor: pointer; +} + +#WarningErrorMessages > div { + pointer-events: auto; + text-align: left; + display: inline-block; + color: #ffffff; + font-size: 0.8em; + background-color: #18202A; + padding: 5px 5px; + border-radius: 10px; + border: solid 1px #ecf0f1; + width: 70%; + +} + +#WarningErrorMessagesContent > ul { + -webkit-padding-start: 20px; + padding: 0 16px; + +} + +#WarningErrorMessagesContent > ul > li { + padding: 5px; +} + +.converter-form-Editor { + /*display: inline-block;*/ +} + +.textLineEditWithLabel { + display: inline-block; + width: 100%; + border-bottom: 1px solid #34495E; + padding: 2px 0; + +} + +.converter-form-Editor label { + /*//display: inline-block;*/ + line-height: normal; +} + +.descriptionTextClass { + background-color: #34495E; + color: white; +} + +.prefixIRIElements input { + border: 1px solid #34495E; + background-color: #34495E; + color: white; +} + +.prefixIRIElements input:disabled { + background-color: rgb(24, 32, 42); + border: 1px solid rgb(24, 32, 42); + color: white; +} + +.converter-form-Editor input { + /*box-sizing: border-box;*/ + /*height: 18px;*/ + /*width: 69%;*/ + float: right; + border: 1px solid #34495E; + background-color: #34495E; + color: white; + /*border-bottom: 1px solid #d90;*/ + /*text-align: center;*/ + /*display: inline-block;*/ +} + +.converter-form-Editor input:disabled { + background-color: #545350; + border: 1px solid #34495E; + color: #939798; +} + +.disabledLabelForSlider { + color: #808080; +} diff --git a/pgo/webvowl/css/webvowl.css b/pgo/webvowl/css/webvowl.css new file mode 100644 index 0000000..bd06623 --- /dev/null +++ b/pgo/webvowl/css/webvowl.css @@ -0,0 +1,296 @@ +/*----------------------------------------------------------------- + VOWL graphical elements (part of spec) - mixed CSS and SVG styles +-----------------------------------------------------------------*/ + +/*-------- Text --------*/ +.text { + font-family: Helvetica, Arial, sans-serif; + font-size: 12px; +} + +.subtext { + font-size: 9px; +} + +.text.instance-count { + fill: #666; +} + +.external + text .instance-count { + fill: #aaa; +} + +.cardinality { + font-size: 10px; +} + +.text, .embedded { + pointer-events: none; +} + +/*------- Colors ------*/ +.class, .object, .disjoint, .objectproperty, .disjointwith, .equivalentproperty, .transitiveproperty, .functionalproperty, .inversefunctionalproperty, .symmetricproperty, .allvaluesfromproperty, .somevaluesfromproperty { + fill: #acf; +} + +.label .datatype, .datatypeproperty { + fill: #9c6; +} + +.rdf, .rdfproperty { + fill: #c9c; +} + +.literal, .node .datatype { + fill: #fc3; +} + +.deprecated, .deprecatedproperty { + fill: #ccc; +} + +.external, .externalproperty { + /*fill: #36c;*/ +} + +path, .nofill { + fill: none; +} + +marker path { + fill: #000; +} + +.class, path, line, .fineline { + stroke: #000; +} + +.white, .subclass, .subclassproperty, .external + text { + fill: #fff; +} + +.class.hovered, .property.hovered, .cardinality.hovered, .cardinality.focused, .filled.hovered, .filled.focused, .values-from.filled.hovered { + fill: #f00 !important; + cursor: pointer; +} + +.hoveredForEditing { + fill: #f00 !important; + cursor: pointer; +} + +.feature { + fill: #f00; + cursor: pointer; +} + +@-webkit-keyframes pulseAnimation { + 0% { + -webkit-transform: scale(1.5); + stroke-width: 3.33; + } + 50% { + stroke-width: 4; + } + 100% { + -webkit-transform: scale(1.0); + stroke-width: 5; + } +} + +@-moz-keyframes pulseAnimation { + 0% { + -webkit-transform: scale(1.5); + stroke-width: 3.33; + } + 50% { + stroke-width: 4; + } + 100% { + -webkit-transform: scale(1.0); + stroke-width: 5; + } +} + +@-o-keyframes pulseAnimation { + 0% { + -webkit-transform: scale(1.5); + stroke-width: 3.33; + } + 50% { + stroke-width: 4; + } + 100% { + -webkit-transform: scale(1.0); + stroke-width: 5; + } +} + +@keyframes pulseAnimation { + 0% { + -webkit-transform: scale(1.5); + stroke-width: 3.33; + } + 50% { + stroke-width: 4; + } + 100% { + -webkit-transform: scale(1.0); + stroke-width: 5; + } +} + +.searchResultA { + fill: none; + stroke-width: 5; + stroke: #f00; + -webkit-animation-name: pulseAnimation; + -moz-animation-name: pulseAnimation; + -o-animation-name: pulseAnimation; + animation-name: pulseAnimation; + + -webkit-animation-duration: 0.8s; + -moz-animation-duration: 0.8s; + -o-animation-duration: 0.8s; + animation-duration: 0.8s; + + -webkit-transform: translateZ(0); + -o-transform: translateZ(0); + -webkit-animation-iteration-count: 3; + -moz-animation-iteration-count: 3; + -o-animation-iteration-count: 3; + animation-iteration-count: 3; + + -webkit-animation-timing-function: linear; + -moz-animation-timing-function: linear; + -o-animation-timing-function: linear; + animation-timing-function: linear; + +} + +/* a class for not animated search results (hovered over node)*/ +.searchResultB { + fill: none; + stroke-width: 5; + stroke: #f00; +} + +.hovered-MathSymbol { + fill: none; + stroke: #f00 !important; +} + +.focused, path.hovered { + stroke: #f00 !important; +} + +.indirect-highlighting, .feature:hover { + fill: #f90; + cursor: pointer; +} + +.feature_hover { + fill: #f90; + cursor: pointer; +} + +.values-from { + stroke: #69c; +} + +.symbol, .values-from.filled { + fill: #69c; +} + +/*------- Strokes ------*/ +.class, path, line { + stroke-width: 2; +} + +.fineline { + stroke-width: 1; +} + +.dashed, .anonymous { + stroke-dasharray: 8; +} + +.dotted { + stroke-dasharray: 3; +} + +rect.focused, circle.focused { + stroke-width: 4px; +} + +.nostroke { + stroke: none; +} + +/*----------------------------------------------------------------- + Additional elements for the WebVOWL demo (NOT part of spec) +-----------------------------------------------------------------*/ + +.addDataPropertyElement { + fill: #9c6 !important; + cursor: pointer; + stroke-width: 2; + stroke: black; +} + +.addDataPropertyElement:hover { + fill: #f90 !important; + cursor: pointer; + stroke-width: 2; + stroke: black; +} + +.superHiddenElement { + fill: rgba(255, 153, 0, 0.4); + cursor: pointer; + stroke-width: 0; + stroke: black; + /*opacity:0;*/ +} + +.superOpacityElement { + opacity: 0; +} + +.deleteParentElement:hover { + fill: #f90; + cursor: pointer; + stroke-width: 2; + stroke: black; +} + +.deleteParentElement { + fill: #f00; + cursor: pointer; + stroke-width: 2; + stroke: black; +} + +.classNodeDragPath { + stroke: black; + stroke-width: 2px; +} + +.classDraggerNodeHovered { + fill: #f90; + stroke: black; + stroke-width: 2px; + cursor: pointer; +} + +.classDraggerNode { + fill: #acf; + stroke: black; + stroke-width: 2px; +} + +marker path { + /* Safari and Chrome workaround for inheriting the style of its link. + Use any value that is larger than the length of the marker path. */ + stroke-dasharray: 100; +} diff --git a/pgo/webvowl/data/foaf.json b/pgo/webvowl/data/foaf.json new file mode 100644 index 0000000..4897985 --- /dev/null +++ b/pgo/webvowl/data/foaf.json @@ -0,0 +1,2894 @@ +{ + "_comment" : "Created with OWL2VOWL (version 0.3.7), http://vowl.visualdataweb.org", + "header" : { + "languages" : [ "undefined" ], + "baseIris" : [ "http://schema.org", "http://www.w3.org/2000/01/rdf-schema", "http://www.w3.org/2003/01/geo/wgs84_pos", "http://purl.org/dc/terms", "http://www.w3.org/2001/XMLSchema", "http://xmlns.com/foaf/0.1", "http://www.w3.org/2000/10/swap/pim/contact", "http://www.w3.org/2004/02/skos/core" ], + "prefixList" : { + "owl" : "http://www.w3.org/2002/07/owl#", + "rdf" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#", + "wot" : "http://xmlns.com/wot/0.1/", + "xsd" : "http://www.w3.org/2001/XMLSchema#", + "dc" : "http://purl.org/dc/elements/1.1/", + "xml" : "http://www.w3.org/XML/1998/namespace", + "vs" : "http://www.w3.org/2003/06/sw-vocab-status/ns#", + "foaf" : "http://xmlns.com/foaf/0.1/", + "rdfs" : "http://www.w3.org/2000/01/rdf-schema#" + }, + "title" : { + "undefined" : "Friend of a Friend (FOAF) vocabulary" + }, + "iri" : "http://xmlns.com/foaf/0.1/", + "description" : { + "undefined" : "The Friend of a Friend (FOAF) RDF vocabulary, described using W3C RDF Schema and the Web Ontology Language." + }, + "other" : { + "title" : [ { + "identifier" : "title", + "language" : "undefined", + "value" : "Friend of a Friend (FOAF) vocabulary", + "type" : "label" + } ] + } + }, + "namespace" : [ ], + "class" : [ { + "id" : "3", + "type" : "owl:Thing" + }, { + "id" : "9", + "type" : "owl:Class" + }, { + "id" : "1", + "type" : "owl:equivalentClass" + }, { + "id" : "18", + "type" : "owl:Thing" + }, { + "id" : "19", + "type" : "owl:Thing" + }, { + "id" : "5", + "type" : "owl:Thing" + }, { + "id" : "20", + "type" : "rdfs:Literal" + }, { + "id" : "8", + "type" : "rdfs:Literal" + }, { + "id" : "11", + "type" : "owl:Class" + }, { + "id" : "21", + "type" : "owl:Thing" + }, { + "id" : "22", + "type" : "rdfs:Literal" + }, { + "id" : "24", + "type" : "rdfs:Literal" + }, { + "id" : "26", + "type" : "rdfs:Literal" + }, { + "id" : "27", + "type" : "rdfs:Literal" + }, { + "id" : "37", + "type" : "owl:equivalentClass" + }, { + "id" : "45", + "type" : "rdfs:Literal" + }, { + "id" : "46", + "type" : "rdfs:Literal" + }, { + "id" : "53", + "type" : "rdfs:Literal" + }, { + "id" : "56", + "type" : "rdfs:Literal" + }, { + "id" : "59", + "type" : "rdfs:Literal" + }, { + "id" : "60", + "type" : "owl:Class" + }, { + "id" : "61", + "type" : "rdfs:Literal" + }, { + "id" : "6", + "type" : "rdfs:Literal" + }, { + "id" : "62", + "type" : "rdfs:Literal" + }, { + "id" : "12", + "type" : "owl:equivalentClass" + }, { + "id" : "55", + "type" : "rdfs:Literal" + }, { + "id" : "69", + "type" : "rdfs:Literal" + }, { + "id" : "71", + "type" : "owl:Class" + }, { + "id" : "36", + "type" : "owl:Class" + }, { + "id" : "86", + "type" : "owl:Class" + }, { + "id" : "83", + "type" : "owl:Class" + }, { + "id" : "94", + "type" : "owl:Class" + }, { + "id" : "73", + "type" : "rdfs:Literal" + }, { + "id" : "68", + "type" : "rdfs:Literal" + }, { + "id" : "93", + "type" : "rdfs:Literal" + }, { + "id" : "33", + "type" : "owl:Thing" + }, { + "id" : "49", + "type" : "rdfs:Literal" + }, { + "id" : "29", + "type" : "owl:Thing" + }, { + "id" : "101", + "type" : "rdfs:Literal" + }, { + "id" : "39", + "type" : "owl:Thing" + }, { + "id" : "63", + "type" : "owl:equivalentClass" + }, { + "id" : "64", + "type" : "owl:equivalentClass" + }, { + "id" : "102", + "type" : "owl:equivalentClass" + }, { + "id" : "78", + "type" : "owl:Class" + }, { + "id" : "77", + "type" : "owl:Class" + }, { + "id" : "13", + "type" : "owl:equivalentClass" + }, { + "id" : "58", + "type" : "rdfs:Literal" + }, { + "id" : "100", + "type" : "rdfs:Literal" + }, { + "id" : "106", + "type" : "rdfs:Literal" + }, { + "id" : "52", + "type" : "rdfs:Literal" + }, { + "id" : "88", + "type" : "rdfs:Literal" + }, { + "id" : "118", + "type" : "rdfs:Literal" + }, { + "id" : "126", + "type" : "owl:Class" + }, { + "id" : "2", + "type" : "owl:equivalentClass" + }, { + "id" : "32", + "type" : "owl:equivalentClass" + }, { + "id" : "10", + "type" : "owl:Class" + } ], + "classAttribute" : [ { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "3", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2004/02/skos/core#Concept", + "baseIri" : "http://www.w3.org/2004/02/skos/core", + "instances" : 0, + "label" : { + "IRI-based" : "Concept", + "undefined" : "Concept" + }, + "attributes" : [ "external" ], + "id" : "9" + }, { + "iri" : "http://xmlns.com/foaf/0.1/Agent", + "equivalent" : [ "13" ], + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Agent", + "undefined" : "Agent" + }, + "subClasses" : [ "10", "11", "12" ], + "comment" : { + "undefined" : "An agent (eg. person, group, software or physical artifact)." + }, + "attributes" : [ "equivalent" ], + "id" : "1" + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "18", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "19", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "5", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "20", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "id" : "8", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://xmlns.com/foaf/0.1/Organization", + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Organization", + "undefined" : "Organization" + }, + "comment" : { + "undefined" : "An organization." + }, + "id" : "11", + "superClasses" : [ "1" ] + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "21", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "22", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "24", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "26", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "27", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://schema.org/CreativeWork", + "baseIri" : "http://schema.org", + "instances" : 0, + "label" : { + "IRI-based" : "CreativeWork" + }, + "attributes" : [ "external", "equivalent" ], + "id" : "37" + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "45", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "46", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "53", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "56", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "59", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://xmlns.com/foaf/0.1/Project", + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Project", + "undefined" : "Project" + }, + "comment" : { + "undefined" : "A project (a collective endeavour of some kind)." + }, + "id" : "60" + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "61", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "6", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "62", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://xmlns.com/foaf/0.1/Person", + "equivalent" : [ "63", "64" ], + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Person", + "undefined" : "Person" + }, + "comment" : { + "undefined" : "A person." + }, + "attributes" : [ "equivalent" ], + "id" : "12", + "superClasses" : [ "1", "36" ] + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "55", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "69", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://xmlns.com/foaf/0.1/PersonalProfileDocument", + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "PersonalProfileDocument", + "undefined" : "PersonalProfileDocument" + }, + "comment" : { + "undefined" : "A personal profile RDF document." + }, + "id" : "71", + "superClasses" : [ "2" ] + }, { + "iri" : "http://www.w3.org/2003/01/geo/wgs84_pos#SpatialThing", + "baseIri" : "http://www.w3.org/2003/01/geo/wgs84_pos", + "instances" : 0, + "label" : { + "IRI-based" : "SpatialThing", + "undefined" : "Spatial Thing" + }, + "subClasses" : [ "12" ], + "attributes" : [ "external" ], + "id" : "36" + }, { + "iri" : "http://xmlns.com/foaf/0.1/OnlineChatAccount", + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "OnlineChatAccount", + "undefined" : "Online Chat Account" + }, + "comment" : { + "undefined" : "An online chat account." + }, + "id" : "86", + "superClasses" : [ "78" ] + }, { + "iri" : "http://xmlns.com/foaf/0.1/OnlineGamingAccount", + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "OnlineGamingAccount", + "undefined" : "Online Gaming Account" + }, + "comment" : { + "undefined" : "An online gaming account." + }, + "id" : "83", + "superClasses" : [ "78" ] + }, { + "iri" : "http://xmlns.com/foaf/0.1/LabelProperty", + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "LabelProperty", + "undefined" : "Label Property" + }, + "comment" : { + "undefined" : "A foaf:LabelProperty is any RDF property with texual values that serve as labels." + }, + "id" : "94" + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "id" : "73", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "id" : "68", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "id" : "93", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "33", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "id" : "49", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "29", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "id" : "101", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "39", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2000/10/swap/pim/contact#Person", + "baseIri" : "http://www.w3.org/2000/10/swap/pim/contact", + "instances" : 0, + "label" : { + "IRI-based" : "Person" + }, + "attributes" : [ "external", "equivalent" ], + "id" : "63" + }, { + "iri" : "http://schema.org/Person", + "baseIri" : "http://schema.org", + "instances" : 0, + "label" : { + "IRI-based" : "Person" + }, + "attributes" : [ "external", "equivalent" ], + "id" : "64" + }, { + "iri" : "http://schema.org/ImageObject", + "baseIri" : "http://schema.org", + "instances" : 0, + "label" : { + "IRI-based" : "ImageObject" + }, + "attributes" : [ "external", "equivalent" ], + "id" : "102" + }, { + "iri" : "http://xmlns.com/foaf/0.1/OnlineAccount", + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "OnlineAccount", + "undefined" : "Online Account" + }, + "subClasses" : [ "77", "86", "83" ], + "comment" : { + "undefined" : "An online account." + }, + "id" : "78" + }, { + "iri" : "http://xmlns.com/foaf/0.1/OnlineEcommerceAccount", + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "OnlineEcommerceAccount", + "undefined" : "Online E-commerce Account" + }, + "comment" : { + "undefined" : "An online e-commerce account." + }, + "id" : "77", + "superClasses" : [ "78" ] + }, { + "iri" : "http://purl.org/dc/terms/Agent", + "baseIri" : "http://purl.org/dc/terms", + "instances" : 0, + "label" : { + "IRI-based" : "Agent" + }, + "attributes" : [ "external", "equivalent" ], + "id" : "13" + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "58", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "100", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "106", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "52", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "88", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "118", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Class", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "instances" : 0, + "label" : { + "IRI-based" : "Class" + }, + "attributes" : [ "external" ], + "id" : "126" + }, { + "iri" : "http://xmlns.com/foaf/0.1/Document", + "equivalent" : [ "37" ], + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Document", + "undefined" : "Document" + }, + "subClasses" : [ "71", "32" ], + "comment" : { + "undefined" : "A document." + }, + "attributes" : [ "equivalent" ], + "id" : "2" + }, { + "iri" : "http://xmlns.com/foaf/0.1/Image", + "equivalent" : [ "102" ], + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Image", + "undefined" : "Image" + }, + "comment" : { + "undefined" : "An image." + }, + "attributes" : [ "equivalent" ], + "id" : "32", + "superClasses" : [ "2" ] + }, { + "iri" : "http://xmlns.com/foaf/0.1/Group", + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Group", + "undefined" : "Group" + }, + "comment" : { + "undefined" : "A class of Agents." + }, + "id" : "10", + "superClasses" : [ "1" ] + } ], + "property" : [ { + "id" : "0", + "type" : "owl:objectProperty" + }, { + "id" : "4", + "type" : "owl:datatypeProperty" + }, { + "id" : "7", + "type" : "owl:datatypeProperty" + }, { + "id" : "14", + "type" : "owl:objectProperty" + }, { + "id" : "16", + "type" : "owl:objectProperty" + }, { + "id" : "17", + "type" : "owl:objectProperty" + }, { + "id" : "23", + "type" : "owl:objectProperty" + }, { + "id" : "25", + "type" : "owl:objectProperty" + }, { + "id" : "28", + "type" : "owl:objectProperty" + }, { + "id" : "30", + "type" : "owl:objectProperty" + }, { + "id" : "31", + "type" : "owl:objectProperty" + }, { + "id" : "35", + "type" : "owl:objectProperty" + }, { + "id" : "38", + "type" : "owl:objectProperty" + }, { + "id" : "44", + "type" : "owl:datatypeProperty" + }, { + "id" : "47", + "type" : "owl:objectProperty" + }, { + "id" : "48", + "type" : "owl:datatypeProperty" + }, { + "id" : "50", + "type" : "owl:objectProperty" + }, { + "id" : "51", + "type" : "owl:datatypeProperty" + }, { + "id" : "54", + "type" : "owl:datatypeProperty" + }, { + "id" : "57", + "type" : "owl:datatypeProperty" + }, { + "id" : "65", + "type" : "owl:datatypeProperty" + }, { + "id" : "66", + "type" : "owl:datatypeProperty" + }, { + "id" : "67", + "type" : "owl:datatypeProperty" + }, { + "id" : "70", + "type" : "owl:datatypeProperty" + }, { + "id" : "72", + "type" : "owl:datatypeProperty" + }, { + "id" : "15", + "type" : "owl:objectProperty" + }, { + "id" : "74", + "type" : "rdfs:SubClassOf" + }, { + "id" : "75", + "type" : "rdfs:SubClassOf" + }, { + "id" : "76", + "type" : "rdfs:SubClassOf" + }, { + "id" : "79", + "type" : "rdfs:SubClassOf" + }, { + "id" : "80", + "type" : "owl:objectProperty" + }, { + "id" : "81", + "type" : "owl:objectProperty" + }, { + "id" : "82", + "type" : "rdfs:SubClassOf" + }, { + "id" : "34", + "type" : "owl:objectProperty" + }, { + "id" : "85", + "type" : "rdfs:SubClassOf" + }, { + "id" : "87", + "type" : "owl:datatypeProperty" + }, { + "id" : "89", + "type" : "rdfs:SubClassOf" + }, { + "id" : "90", + "type" : "rdfs:SubClassOf" + }, { + "id" : "91", + "type" : "owl:objectProperty" + }, { + "id" : "92", + "type" : "owl:datatypeProperty" + }, { + "id" : "95", + "type" : "owl:datatypeProperty" + }, { + "id" : "96", + "type" : "owl:objectProperty" + }, { + "id" : "97", + "type" : "owl:datatypeProperty" + }, { + "id" : "98", + "type" : "rdfs:SubClassOf" + }, { + "id" : "99", + "type" : "owl:datatypeProperty" + }, { + "id" : "43", + "type" : "owl:objectProperty" + }, { + "id" : "42", + "type" : "owl:objectProperty" + }, { + "id" : "103", + "type" : "owl:datatypeProperty" + }, { + "id" : "104", + "type" : "owl:objectProperty" + }, { + "id" : "105", + "type" : "owl:datatypeProperty" + }, { + "id" : "107", + "type" : "owl:objectProperty" + }, { + "id" : "108", + "type" : "owl:datatypeProperty" + }, { + "id" : "109", + "type" : "owl:objectProperty" + }, { + "id" : "110", + "type" : "owl:objectProperty" + }, { + "id" : "40", + "type" : "owl:objectProperty" + }, { + "id" : "41", + "type" : "owl:objectProperty" + }, { + "id" : "84", + "type" : "owl:objectProperty" + }, { + "id" : "111", + "type" : "owl:datatypeProperty" + }, { + "id" : "112", + "type" : "owl:datatypeProperty" + }, { + "id" : "113", + "type" : "owl:datatypeProperty" + }, { + "id" : "114", + "type" : "owl:objectProperty" + }, { + "id" : "116", + "type" : "owl:disjointWith" + }, { + "id" : "117", + "type" : "owl:disjointWith" + }, { + "id" : "119", + "type" : "owl:datatypeProperty" + }, { + "id" : "120", + "type" : "owl:disjointWith" + }, { + "id" : "121", + "type" : "owl:disjointWith" + }, { + "id" : "122", + "type" : "owl:objectProperty" + }, { + "id" : "123", + "type" : "owl:datatypeProperty" + }, { + "id" : "124", + "type" : "owl:objectProperty" + }, { + "id" : "125", + "type" : "owl:datatypeProperty" + }, { + "id" : "127", + "type" : "owl:datatypeProperty" + }, { + "id" : "115", + "type" : "owl:objectProperty" + }, { + "id" : "128", + "type" : "owl:objectProperty" + }, { + "id" : "129", + "type" : "owl:objectProperty" + } ], + "propertyAttribute" : [ { + "iri" : "http://xmlns.com/foaf/0.1/interest", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "interest", + "undefined" : "interest" + }, + "domain" : "1", + "comment" : { + "undefined" : "A page about a topic of interest to this person." + }, + "attributes" : [ "object" ], + "id" : "0" + }, { + "iri" : "http://xmlns.com/foaf/0.1/mbox_sha1sum", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "6", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "mbox_sha1sum", + "undefined" : "sha1sum of a personal mailbox URI name" + }, + "domain" : "5", + "comment" : { + "undefined" : "The sha1sum of the URI of an Internet mailbox associated with exactly one owner, the first owner of the mailbox." + }, + "attributes" : [ "datatype" ], + "id" : "4" + }, { + "iri" : "http://xmlns.com/foaf/0.1/nick", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "8", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "nick", + "undefined" : "nickname" + }, + "domain" : "5", + "comment" : { + "undefined" : "A short informal nickname characterising an agent (includes login identifiers, IRC and other chat nicknames)." + }, + "attributes" : [ "datatype" ], + "id" : "7" + }, { + "iri" : "http://xmlns.com/foaf/0.1/openid", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "openid", + "undefined" : "openid" + }, + "superproperty" : [ "15" ], + "domain" : "1", + "comment" : { + "undefined" : "An OpenID for an Agent." + }, + "attributes" : [ "inverse functional", "object" ], + "id" : "14" + }, { + "iri" : "http://xmlns.com/foaf/0.1/workInfoHomepage", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "workInfoHomepage", + "undefined" : "work info homepage" + }, + "domain" : "12", + "comment" : { + "undefined" : "A work info homepage of some person; a page about their work for some organization." + }, + "attributes" : [ "object" ], + "id" : "16" + }, { + "iri" : "http://xmlns.com/foaf/0.1/pastProject", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "3", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "pastProject", + "undefined" : "past project" + }, + "domain" : "12", + "comment" : { + "undefined" : "A project this person has previously worked on." + }, + "attributes" : [ "object" ], + "id" : "17" + }, { + "iri" : "http://xmlns.com/foaf/0.1/theme", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "19", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "archaic", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "theme", + "undefined" : "theme" + }, + "domain" : "19", + "comment" : { + "undefined" : "A theme." + }, + "attributes" : [ "object" ], + "id" : "23" + }, { + "iri" : "http://xmlns.com/foaf/0.1/knows", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "12", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "knows", + "undefined" : "knows" + }, + "domain" : "12", + "comment" : { + "undefined" : "A person known by this person (indicating some level of reciprocated interaction between the parties)." + }, + "attributes" : [ "object" ], + "id" : "25" + }, { + "iri" : "http://xmlns.com/foaf/0.1/focus", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "29", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "focus", + "undefined" : "focus" + }, + "domain" : "9", + "comment" : { + "undefined" : "The underlying or 'focal' entity associated with some SKOS-described concept." + }, + "attributes" : [ "object" ], + "id" : "28" + }, { + "iri" : "http://xmlns.com/foaf/0.1/phone", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "19", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "phone", + "undefined" : "phone" + }, + "domain" : "19", + "comment" : { + "undefined" : "A phone, specified using fully qualified tel: URI scheme (refs: http://www.w3.org/Addressing/schemes.html#tel)." + }, + "attributes" : [ "object" ], + "id" : "30" + }, { + "iri" : "http://xmlns.com/foaf/0.1/depicts", + "inverse" : "34", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "33", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "depicts", + "undefined" : "depicts" + }, + "domain" : "32", + "comment" : { + "undefined" : "A thing depicted in this representation." + }, + "attributes" : [ "object" ], + "id" : "31" + }, { + "iri" : "http://xmlns.com/foaf/0.1/based_near", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "36", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "based_near", + "undefined" : "based near" + }, + "domain" : "36", + "comment" : { + "undefined" : "A location that something is based near, for some broadly human notion of near." + }, + "attributes" : [ "object" ], + "id" : "35" + }, { + "iri" : "http://xmlns.com/foaf/0.1/page", + "inverse" : "40", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "page", + "undefined" : "page" + }, + "domain" : "39", + "subproperty" : [ "15", "41", "42", "43" ], + "comment" : { + "undefined" : "A page or document about this thing." + }, + "attributes" : [ "object" ], + "id" : "38" + }, { + "iri" : "http://xmlns.com/foaf/0.1/geekcode", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "26", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "archaic", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "geekcode", + "undefined" : "geekcode" + }, + "domain" : "12", + "comment" : { + "undefined" : "A textual geekcode for this person, see http://www.geekcode.com/geek.html" + }, + "attributes" : [ "datatype" ], + "id" : "44" + }, { + "iri" : "http://xmlns.com/foaf/0.1/primaryTopic", + "inverse" : "15", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "39", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "primaryTopic", + "undefined" : "primary topic" + }, + "domain" : "2", + "comment" : { + "undefined" : "The primary topic of some page or document." + }, + "attributes" : [ "object", "functional" ], + "id" : "47" + }, { + "iri" : "http://xmlns.com/foaf/0.1/givenName", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "49", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "givenName", + "undefined" : "Given name" + }, + "domain" : "19", + "comment" : { + "undefined" : "The given name of some person." + }, + "attributes" : [ "datatype" ], + "id" : "48" + }, { + "iri" : "http://xmlns.com/foaf/0.1/schoolHomepage", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "schoolHomepage", + "undefined" : "schoolHomepage" + }, + "domain" : "12", + "comment" : { + "undefined" : "A homepage of a school attended by the person." + }, + "attributes" : [ "object" ], + "id" : "50" + }, { + "iri" : "http://xmlns.com/foaf/0.1/gender", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "52", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "gender", + "undefined" : "gender" + }, + "domain" : "1", + "comment" : { + "undefined" : "The gender of this Agent (typically but not necessarily 'male' or 'female')." + }, + "attributes" : [ "datatype", "functional" ], + "id" : "51" + }, { + "iri" : "http://xmlns.com/foaf/0.1/dnaChecksum", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "55", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "archaic", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "dnaChecksum", + "undefined" : "DNA checksum" + }, + "domain" : "19", + "comment" : { + "undefined" : "A checksum for the DNA of some thing. Joke." + }, + "attributes" : [ "datatype" ], + "id" : "54" + }, { + "iri" : "http://xmlns.com/foaf/0.1/lastName", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "58", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "lastName", + "undefined" : "lastName" + }, + "domain" : "12", + "comment" : { + "undefined" : "The last name of a person." + }, + "attributes" : [ "datatype" ], + "id" : "57" + }, { + "iri" : "http://xmlns.com/foaf/0.1/status", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "45", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "status", + "undefined" : "status" + }, + "domain" : "1", + "comment" : { + "undefined" : "A string expressing what the user is happy for the general public (normally) to know about their current activity." + }, + "attributes" : [ "datatype" ], + "id" : "65" + }, { + "iri" : "http://xmlns.com/foaf/0.1/yahooChatID", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "46", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "yahooChatID", + "undefined" : "Yahoo chat ID" + }, + "domain" : "19", + "comment" : { + "undefined" : "A Yahoo chat ID" + }, + "attributes" : [ "datatype" ], + "id" : "66" + }, { + "iri" : "http://xmlns.com/foaf/0.1/name", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "68", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "name", + "undefined" : "name" + }, + "domain" : "19", + "comment" : { + "undefined" : "A name for some thing." + }, + "attributes" : [ "datatype" ], + "id" : "67" + }, { + "iri" : "http://xmlns.com/foaf/0.1/icqChatID", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "53", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "icqChatID", + "undefined" : "ICQ chat ID" + }, + "domain" : "19", + "comment" : { + "undefined" : "An ICQ chat ID" + }, + "attributes" : [ "datatype" ], + "id" : "70" + }, { + "iri" : "http://xmlns.com/foaf/0.1/givenname", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "73", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "archaic", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "givenname", + "undefined" : "Given name" + }, + "domain" : "19", + "comment" : { + "undefined" : "The given name of some person." + }, + "attributes" : [ "datatype" ], + "id" : "72" + }, { + "iri" : "http://xmlns.com/foaf/0.1/isPrimaryTopicOf", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "isPrimaryTopicOf", + "undefined" : "is primary topic of" + }, + "superproperty" : [ "38" ], + "domain" : "39", + "subproperty" : [ "14", "43" ], + "comment" : { + "undefined" : "A document that this thing is the primary topic of." + }, + "attributes" : [ "inverse functional", "object" ], + "id" : "15" + }, { + "range" : "2", + "domain" : "32", + "attributes" : [ "anonymous", "object" ], + "id" : "74" + }, { + "range" : "2", + "domain" : "71", + "attributes" : [ "anonymous", "object" ], + "id" : "75" + }, { + "range" : "78", + "domain" : "77", + "attributes" : [ "anonymous", "object" ], + "id" : "76" + }, { + "range" : "36", + "domain" : "12", + "attributes" : [ "anonymous", "object" ], + "id" : "79" + }, { + "iri" : "http://xmlns.com/foaf/0.1/accountServiceHomepage", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "accountServiceHomepage", + "undefined" : "account service homepage" + }, + "domain" : "78", + "comment" : { + "undefined" : "Indicates a homepage of the service provide for this online account." + }, + "attributes" : [ "object" ], + "id" : "80" + }, { + "iri" : "http://xmlns.com/foaf/0.1/logo", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "19", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "logo", + "undefined" : "logo" + }, + "domain" : "19", + "comment" : { + "undefined" : "A logo representing some thing." + }, + "attributes" : [ "inverse functional", "object" ], + "id" : "81" + }, { + "range" : "78", + "domain" : "83", + "attributes" : [ "anonymous", "object" ], + "id" : "82" + }, { + "iri" : "http://xmlns.com/foaf/0.1/depiction", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "32", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "depiction", + "undefined" : "depiction" + }, + "domain" : "33", + "subproperty" : [ "84" ], + "comment" : { + "undefined" : "A depiction of some thing." + }, + "attributes" : [ "object" ], + "id" : "34" + }, { + "range" : "78", + "domain" : "86", + "attributes" : [ "anonymous", "object" ], + "id" : "85" + }, { + "iri" : "http://xmlns.com/foaf/0.1/family_name", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "88", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "archaic", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "family_name", + "undefined" : "family_name" + }, + "domain" : "12", + "comment" : { + "undefined" : "The family name of some person." + }, + "attributes" : [ "datatype" ], + "id" : "87" + }, { + "range" : "1", + "domain" : "12", + "attributes" : [ "anonymous", "object" ], + "id" : "89" + }, { + "range" : "1", + "domain" : "11", + "attributes" : [ "anonymous", "object" ], + "id" : "90" + }, { + "iri" : "http://xmlns.com/foaf/0.1/fundedBy", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "19", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "archaic", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "fundedBy", + "undefined" : "funded by" + }, + "domain" : "19", + "comment" : { + "undefined" : "An organization funding a project or person." + }, + "attributes" : [ "object" ], + "id" : "91" + }, { + "iri" : "http://xmlns.com/foaf/0.1/title", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "93", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "title", + "undefined" : "title" + }, + "domain" : "19", + "comment" : { + "undefined" : "Title (Mr, Mrs, Ms, Dr. etc)" + }, + "attributes" : [ "datatype" ], + "id" : "92" + }, { + "iri" : "http://xmlns.com/foaf/0.1/accountName", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "59", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "accountName", + "undefined" : "account name" + }, + "domain" : "78", + "comment" : { + "undefined" : "Indicates the name (identifier) associated with this online account." + }, + "attributes" : [ "datatype" ], + "id" : "95" + }, { + "iri" : "http://xmlns.com/foaf/0.1/account", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "78", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "account", + "undefined" : "account" + }, + "domain" : "1", + "comment" : { + "undefined" : "Indicates an account held by this agent." + }, + "attributes" : [ "object" ], + "id" : "96" + }, { + "iri" : "http://xmlns.com/foaf/0.1/jabberID", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "69", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "jabberID", + "undefined" : "jabber ID" + }, + "domain" : "19", + "comment" : { + "undefined" : "A jabber ID for something." + }, + "attributes" : [ "datatype" ], + "id" : "97" + }, { + "range" : "1", + "domain" : "10", + "attributes" : [ "anonymous", "object" ], + "id" : "98" + }, { + "iri" : "http://xmlns.com/foaf/0.1/age", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "100", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "age", + "undefined" : "age" + }, + "domain" : "1", + "comment" : { + "undefined" : "The age in years of some agent." + }, + "attributes" : [ "datatype", "functional" ], + "id" : "99" + }, { + "iri" : "http://xmlns.com/foaf/0.1/homepage", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "homepage", + "undefined" : "homepage" + }, + "superproperty" : [ "15", "38" ], + "domain" : "39", + "comment" : { + "undefined" : "A homepage for some thing." + }, + "attributes" : [ "inverse functional", "object" ], + "id" : "43" + }, { + "iri" : "http://xmlns.com/foaf/0.1/tipjar", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "tipjar", + "undefined" : "tipjar" + }, + "superproperty" : [ "38" ], + "domain" : "1", + "comment" : { + "undefined" : "A tipjar document for this agent, describing means for payment and reward." + }, + "attributes" : [ "object" ], + "id" : "42" + }, { + "iri" : "http://xmlns.com/foaf/0.1/msnChatID", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "61", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "msnChatID", + "undefined" : "MSN chat ID" + }, + "domain" : "5", + "comment" : { + "undefined" : "An MSN chat ID" + }, + "attributes" : [ "datatype" ], + "id" : "103" + }, { + "iri" : "http://xmlns.com/foaf/0.1/topic_interest", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "18", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "topic_interest", + "undefined" : "topic_interest" + }, + "domain" : "1", + "comment" : { + "undefined" : "A thing of interest to this person." + }, + "attributes" : [ "object" ], + "id" : "104" + }, { + "iri" : "http://xmlns.com/foaf/0.1/aimChatID", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "106", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "aimChatID", + "undefined" : "AIM chat ID" + }, + "domain" : "19", + "comment" : { + "undefined" : "An AIM chat ID" + }, + "attributes" : [ "datatype" ], + "id" : "105" + }, { + "iri" : "http://xmlns.com/foaf/0.1/currentProject", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "3", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "currentProject", + "undefined" : "current project" + }, + "domain" : "12", + "comment" : { + "undefined" : "A current project this person works on." + }, + "attributes" : [ "object" ], + "id" : "107" + }, { + "iri" : "http://xmlns.com/foaf/0.1/skypeID", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "20", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "skypeID", + "undefined" : "Skype ID" + }, + "domain" : "1", + "comment" : { + "undefined" : "A Skype ID" + }, + "attributes" : [ "datatype" ], + "id" : "108" + }, { + "iri" : "http://xmlns.com/foaf/0.1/holdsAccount", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "78", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "archaic", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "holdsAccount", + "undefined" : "account" + }, + "domain" : "1", + "comment" : { + "undefined" : "Indicates an account held by this agent." + }, + "attributes" : [ "object" ], + "id" : "109" + }, { + "iri" : "http://xmlns.com/foaf/0.1/thumbnail", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "32", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "thumbnail", + "undefined" : "thumbnail" + }, + "domain" : "32", + "comment" : { + "undefined" : "A derived thumbnail image." + }, + "attributes" : [ "object" ], + "id" : "110" + }, { + "iri" : "http://xmlns.com/foaf/0.1/topic", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "39", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "topic", + "undefined" : "topic" + }, + "domain" : "2", + "comment" : { + "undefined" : "A topic of some page or document." + }, + "attributes" : [ "object" ], + "id" : "40" + }, { + "iri" : "http://xmlns.com/foaf/0.1/weblog", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "weblog", + "undefined" : "weblog" + }, + "superproperty" : [ "38" ], + "domain" : "1", + "comment" : { + "undefined" : "A weblog of some thing (whether person, group, company etc.)." + }, + "attributes" : [ "inverse functional", "object" ], + "id" : "41" + }, { + "iri" : "http://xmlns.com/foaf/0.1/img", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "32", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "img", + "undefined" : "image" + }, + "superproperty" : [ "34" ], + "domain" : "12", + "comment" : { + "undefined" : "An image that can be used to represent some thing (ie. those depictions which are particularly representative of something, eg. one's photo on a homepage)." + }, + "attributes" : [ "object" ], + "id" : "84" + }, { + "iri" : "http://xmlns.com/foaf/0.1/birthday", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "56", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "birthday", + "undefined" : "birthday" + }, + "domain" : "1", + "comment" : { + "undefined" : "The birthday of this Agent, represented in mm-dd string form, eg. '12-31'." + }, + "attributes" : [ "datatype", "functional" ], + "id" : "111" + }, { + "iri" : "http://xmlns.com/foaf/0.1/sha1", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "101", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "sha1", + "undefined" : "sha1sum (hex)" + }, + "domain" : "2", + "comment" : { + "undefined" : "A sha1sum hash, in hex." + }, + "attributes" : [ "datatype" ], + "id" : "112" + }, { + "iri" : "http://xmlns.com/foaf/0.1/firstName", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "24", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "firstName", + "undefined" : "firstName" + }, + "domain" : "12", + "comment" : { + "undefined" : "The first name of a person." + }, + "attributes" : [ "datatype" ], + "id" : "113" + }, { + "iri" : "http://xmlns.com/foaf/0.1/made", + "inverse" : "115", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "18", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "made", + "undefined" : "made" + }, + "domain" : "1", + "comment" : { + "undefined" : "Something that was made by this agent." + }, + "attributes" : [ "object" ], + "id" : "114" + }, { + "range" : "60", + "domain" : "2", + "attributes" : [ "anonymous", "object" ], + "id" : "116" + }, { + "range" : "12", + "domain" : "60", + "attributes" : [ "anonymous", "object" ], + "id" : "117" + }, { + "iri" : "http://xmlns.com/foaf/0.1/familyName", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "62", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "familyName", + "undefined" : "familyName" + }, + "domain" : "12", + "comment" : { + "undefined" : "The family name of some person." + }, + "attributes" : [ "datatype" ], + "id" : "119" + }, { + "range" : "2", + "domain" : "11", + "attributes" : [ "anonymous", "object" ], + "id" : "120" + }, { + "range" : "12", + "domain" : "11", + "attributes" : [ "anonymous", "object" ], + "id" : "121" + }, { + "iri" : "http://xmlns.com/foaf/0.1/member", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "1", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "member", + "undefined" : "member" + }, + "domain" : "10", + "comment" : { + "undefined" : "Indicates a member of a Group" + }, + "attributes" : [ "object" ], + "id" : "122" + }, { + "iri" : "http://xmlns.com/foaf/0.1/plan", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "27", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "plan", + "undefined" : "plan" + }, + "domain" : "12", + "comment" : { + "undefined" : "A .plan comment, in the tradition of finger and '.plan' files." + }, + "attributes" : [ "datatype" ], + "id" : "123" + }, { + "iri" : "http://xmlns.com/foaf/0.1/mbox", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "18", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "mbox", + "undefined" : "personal mailbox" + }, + "domain" : "1", + "comment" : { + "undefined" : "A personal mailbox, ie. an Internet mailbox associated with exactly one owner, the first owner of this mailbox. This is a 'static inverse functional property', in that there is (across time and change) at most one individual that ever has any particular value for foaf:mbox." + }, + "attributes" : [ "inverse functional", "object" ], + "id" : "124" + }, { + "iri" : "http://xmlns.com/foaf/0.1/surname", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "118", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "archaic", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "surname", + "undefined" : "Surname" + }, + "domain" : "12", + "comment" : { + "undefined" : "The surname of some person." + }, + "attributes" : [ "datatype" ], + "id" : "125" + }, { + "iri" : "http://xmlns.com/foaf/0.1/myersBriggs", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "22", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "myersBriggs", + "undefined" : "myersBriggs" + }, + "domain" : "12", + "comment" : { + "undefined" : "A Myers Briggs (MBTI) personality classification." + }, + "attributes" : [ "datatype" ], + "id" : "127" + }, { + "iri" : "http://xmlns.com/foaf/0.1/maker", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "1", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "maker", + "undefined" : "maker" + }, + "domain" : "18", + "comment" : { + "undefined" : "An agent that made this thing." + }, + "attributes" : [ "object" ], + "id" : "115" + }, { + "iri" : "http://xmlns.com/foaf/0.1/publications", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "publications", + "undefined" : "publications" + }, + "domain" : "12", + "comment" : { + "undefined" : "A link to the publications of this person." + }, + "attributes" : [ "object" ], + "id" : "128" + }, { + "iri" : "http://xmlns.com/foaf/0.1/workplaceHomepage", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "workplaceHomepage", + "undefined" : "workplace homepage" + }, + "domain" : "12", + "comment" : { + "undefined" : "A workplace homepage of some person; the homepage of an organization they work for." + }, + "attributes" : [ "object" ], + "id" : "129" + } ] +} \ No newline at end of file diff --git a/pgo/webvowl/data/ontology.json b/pgo/webvowl/data/ontology.json new file mode 100644 index 0000000..f9166d9 --- /dev/null +++ b/pgo/webvowl/data/ontology.json @@ -0,0 +1,16923 @@ +{ + "_comment" : "Created with OWL2VOWL (version 0.3.5), http://vowl.visualdataweb.org", + "header" : { + "languages" : [ "de", "en", "undefined" ], + "baseIris" : [ "http://www.w3.org/1999/02/22-rdf-syntax-ns", "http://qudt.org/schema/qudt", "http://purl.obolibrary.org/obo", "http://www.w3.org/2002/07/owl", "https://w3id.org/pmd/co", "http://www.w3.org/2001/XMLSchema", "http://purl.org/spar/datacite", "http://www.w3.org/2000/01/rdf-schema", "https://w3id.org/pmd/pgo", "http://www.w3.org/ns/prov", "http://www.w3.org/ns/oa", "http://purl.org/dc/terms", "http://w3id.org/DMI" ], + "title" : { + "en" : "Platform MaterialDigital - Precipitate Geometry Ontology (PGO)" + }, + "iri" : "https://w3id.org/pmd/pgo", + "version" : "1.0.0", + "author" : [ "https://orcid.org/0000-0002-3717-7104", "https://orcid.org/0000-0002-7094-5371" ], + "comments" : { + "en" : "The Precipitate Geometry Ontology (PGO) is a small ontology used to describe data originating from transmission electron microscopy (TEM) analyses of precipitates. \nIt was created in the frame of the collaborative project Platform MaterialDigital (PMD, https://materialdigital.de). It is further part of a demonstrator showing possible interactions of semantic data created by the application of multiple ontologies and used by federated SPARQL querying - the \"Orowan Demonstrator\" (available at: https://github.com/materialdigital/demo-orowan)." + }, + "other" : { + "license" : [ { + "identifier" : "license", + "language" : "undefined", + "value" : "http://creativecommons.org/licenses/by/4.0", + "type" : "iri" + } ], + "creator" : [ { + "identifier" : "creator", + "language" : "undefined", + "value" : "https://orcid.org/0000-0002-7094-5371", + "type" : "iri" + }, { + "identifier" : "creator", + "language" : "undefined", + "value" : "https://orcid.org/0000-0002-3717-7104", + "type" : "iri" + } ], + "created" : [ { + "identifier" : "created", + "language" : "undefined", + "value" : "2023-12-13", + "type" : "label" + } ], + "bibliographicCitation" : [ { + "identifier" : "bibliographicCitation", + "language" : "undefined", + "value" : "Markus Schilling, Bernd Bayerlein. (December 13th, 2023) PGO: Precipitate Geometry Ontology. Version 1.0.0, https://w3id.org/pmd/pgo", + "type" : "label" + } ], + "versionInfo" : [ { + "identifier" : "versionInfo", + "language" : "undefined", + "value" : "1.0.0", + "type" : "label" + } ], + "title" : [ { + "identifier" : "title", + "language" : "en", + "value" : "Platform MaterialDigital - Precipitate Geometry Ontology (PGO)", + "type" : "label" + } ] + } + }, + "namespace" : [ ], + "class" : [ { + "id" : "12", + "type" : "owl:Class" + }, { + "id" : "37", + "type" : "owl:Class" + }, { + "id" : "39", + "type" : "owl:Class" + }, { + "id" : "49", + "type" : "owl:Class" + }, { + "id" : "65", + "type" : "owl:Class" + }, { + "id" : "68", + "type" : "owl:Class" + }, { + "id" : "87", + "type" : "owl:Class" + }, { + "id" : "88", + "type" : "owl:Class" + }, { + "id" : "94", + "type" : "owl:Class" + }, { + "id" : "102", + "type" : "owl:Class" + }, { + "id" : "103", + "type" : "owl:Class" + }, { + "id" : "109", + "type" : "owl:Class" + }, { + "id" : "137", + "type" : "owl:Class" + }, { + "id" : "138", + "type" : "owl:Class" + }, { + "id" : "19", + "type" : "owl:Class" + }, { + "id" : "144", + "type" : "owl:Class" + }, { + "id" : "146", + "type" : "owl:Class" + }, { + "id" : "156", + "type" : "owl:Class" + }, { + "id" : "128", + "type" : "owl:Class" + }, { + "id" : "29", + "type" : "owl:Class" + }, { + "id" : "180", + "type" : "owl:Class" + }, { + "id" : "185", + "type" : "owl:Class" + }, { + "id" : "183", + "type" : "owl:Class" + }, { + "id" : "186", + "type" : "owl:Class" + }, { + "id" : "187", + "type" : "owl:Class" + }, { + "id" : "193", + "type" : "owl:Class" + }, { + "id" : "38", + "type" : "owl:Class" + }, { + "id" : "171", + "type" : "owl:Class" + }, { + "id" : "104", + "type" : "owl:Class" + }, { + "id" : "217", + "type" : "owl:Class" + }, { + "id" : "219", + "type" : "owl:Class" + }, { + "id" : "181", + "type" : "owl:Class" + }, { + "id" : "223", + "type" : "owl:Class" + }, { + "id" : "224", + "type" : "owl:Class" + }, { + "id" : "228", + "type" : "owl:Class" + }, { + "id" : "230", + "type" : "owl:Class" + }, { + "id" : "250", + "type" : "owl:Class" + }, { + "id" : "251", + "type" : "owl:Class" + }, { + "id" : "255", + "type" : "owl:Class" + }, { + "id" : "212", + "type" : "owl:intersectionOf" + }, { + "id" : "256", + "type" : "owl:Class" + }, { + "id" : "257", + "type" : "owl:Class" + }, { + "id" : "175", + "type" : "owl:Class" + }, { + "id" : "179", + "type" : "owl:Class" + }, { + "id" : "273", + "type" : "owl:Class" + }, { + "id" : "284", + "type" : "owl:Class" + }, { + "id" : "218", + "type" : "owl:Class" + }, { + "id" : "96", + "type" : "owl:Class" + }, { + "id" : "295", + "type" : "owl:Class" + }, { + "id" : "272", + "type" : "owl:Class" + }, { + "id" : "286", + "type" : "owl:Class" + }, { + "id" : "306", + "type" : "owl:Class" + }, { + "id" : "288", + "type" : "owl:Class" + }, { + "id" : "323", + "type" : "owl:Class" + }, { + "id" : "143", + "type" : "owl:Class" + }, { + "id" : "149", + "type" : "owl:Class" + }, { + "id" : "208", + "type" : "owl:Class" + }, { + "id" : "343", + "type" : "owl:Class" + }, { + "id" : "344", + "type" : "owl:Class" + }, { + "id" : "328", + "type" : "owl:Class" + }, { + "id" : "206", + "type" : "owl:Class" + }, { + "id" : "83", + "type" : "owl:Class" + }, { + "id" : "209", + "type" : "owl:Class" + }, { + "id" : "145", + "type" : "owl:Class" + }, { + "id" : "283", + "type" : "owl:Class" + }, { + "id" : "384", + "type" : "owl:intersectionOf" + }, { + "id" : "189", + "type" : "owl:intersectionOf" + }, { + "id" : "101", + "type" : "owl:Class" + }, { + "id" : "392", + "type" : "owl:Class" + }, { + "id" : "331", + "type" : "owl:intersectionOf" + }, { + "id" : "405", + "type" : "owl:unionOf" + }, { + "id" : "135", + "type" : "owl:Class" + }, { + "id" : "41", + "type" : "owl:Class" + }, { + "id" : "367", + "type" : "owl:Class" + }, { + "id" : "123", + "type" : "owl:Class" + }, { + "id" : "407", + "type" : "owl:intersectionOf" + }, { + "id" : "376", + "type" : "owl:Class" + }, { + "id" : "43", + "type" : "owl:Class" + }, { + "id" : "408", + "type" : "owl:unionOf" + }, { + "id" : "155", + "type" : "owl:unionOf" + }, { + "id" : "164", + "type" : "owl:Class" + }, { + "id" : "236", + "type" : "owl:Class" + }, { + "id" : "410", + "type" : "owl:unionOf" + }, { + "id" : "99", + "type" : "owl:Class" + }, { + "id" : "7", + "type" : "owl:unionOf" + }, { + "id" : "414", + "type" : "owl:unionOf" + }, { + "id" : "415", + "type" : "owl:unionOf" + }, { + "id" : "71", + "type" : "owl:unionOf" + }, { + "id" : "337", + "type" : "owl:Class" + }, { + "id" : "418", + "type" : "owl:unionOf" + }, { + "id" : "232", + "type" : "owl:Class" + }, { + "id" : "419", + "type" : "owl:unionOf" + }, { + "id" : "6", + "type" : "owl:Class" + }, { + "id" : "61", + "type" : "owl:Class" + }, { + "id" : "117", + "type" : "owl:Class" + }, { + "id" : "2", + "type" : "owl:Class" + }, { + "id" : "10", + "type" : "owl:unionOf" + }, { + "id" : "430", + "type" : "rdfs:Literal" + }, { + "id" : "429", + "type" : "rdfs:Literal" + }, { + "id" : "234", + "type" : "owl:Class" + }, { + "id" : "439", + "type" : "owl:Class" + }, { + "id" : "441", + "type" : "owl:Class" + }, { + "id" : "442", + "type" : "owl:Class" + }, { + "id" : "85", + "type" : "owl:Class" + }, { + "id" : "368", + "type" : "owl:Class" + }, { + "id" : "4", + "type" : "owl:Class" + }, { + "id" : "444", + "type" : "owl:Thing" + }, { + "id" : "106", + "type" : "owl:Class" + }, { + "id" : "445", + "type" : "rdfs:Literal" + }, { + "id" : "342", + "type" : "rdfs:Literal" + }, { + "id" : "446", + "type" : "rdfs:Literal" + }, { + "id" : "227", + "type" : "rdfs:Literal" + }, { + "id" : "447", + "type" : "owl:Class" + }, { + "id" : "448", + "type" : "owl:Thing" + }, { + "id" : "449", + "type" : "rdfs:Literal" + }, { + "id" : "426", + "type" : "owl:Thing" + }, { + "id" : "450", + "type" : "rdfs:Literal" + }, { + "id" : "81", + "type" : "rdfs:Literal" + }, { + "id" : "191", + "type" : "owl:Class" + }, { + "id" : "166", + "type" : "owl:intersectionOf" + }, { + "id" : "322", + "type" : "owl:Class" + }, { + "id" : "52", + "type" : "owl:Thing" + }, { + "id" : "259", + "type" : "owl:Class" + }, { + "id" : "456", + "type" : "rdfs:Literal" + }, { + "id" : "457", + "type" : "rdfs:Datatype" + }, { + "id" : "44", + "type" : "owl:Thing" + }, { + "id" : "11", + "type" : "owl:Thing" + }, { + "id" : "413", + "type" : "owl:Class" + }, { + "id" : "136", + "type" : "rdfs:Datatype" + }, { + "id" : "249", + "type" : "rdfs:Datatype" + }, { + "id" : "459", + "type" : "rdfs:Datatype" + }, { + "id" : "460", + "type" : "rdfs:Datatype" + }, { + "id" : "93", + "type" : "owl:Class" + }, { + "id" : "437", + "type" : "owl:Class" + }, { + "id" : "131", + "type" : "owl:Class" + }, { + "id" : "475", + "type" : "owl:Class" + }, { + "id" : "74", + "type" : "owl:Class" + }, { + "id" : "214", + "type" : "owl:intersectionOf" + }, { + "id" : "391", + "type" : "owl:intersectionOf" + }, { + "id" : "229", + "type" : "owl:Class" + }, { + "id" : "79", + "type" : "owl:Class" + }, { + "id" : "349", + "type" : "owl:Class" + }, { + "id" : "309", + "type" : "owl:Class" + }, { + "id" : "225", + "type" : "owl:Class" + }, { + "id" : "77", + "type" : "owl:Class" + }, { + "id" : "352", + "type" : "owl:Class" + }, { + "id" : "417", + "type" : "owl:Class" + }, { + "id" : "195", + "type" : "owl:Class" + }, { + "id" : "158", + "type" : "owl:Class" + }, { + "id" : "245", + "type" : "owl:Class" + }, { + "id" : "36", + "type" : "owl:Class" + }, { + "id" : "133", + "type" : "owl:Class" + }, { + "id" : "404", + "type" : "owl:Class" + }, { + "id" : "364", + "type" : "owl:Class" + }, { + "id" : "517", + "type" : "owl:Class" + }, { + "id" : "371", + "type" : "owl:Class" + }, { + "id" : "491", + "type" : "owl:Class" + }, { + "id" : "110", + "type" : "owl:Class" + }, { + "id" : "496", + "type" : "owl:Class" + }, { + "id" : "411", + "type" : "owl:Class" + }, { + "id" : "91", + "type" : "owl:Class" + }, { + "id" : "539", + "type" : "owl:Class" + }, { + "id" : "424", + "type" : "owl:Class" + }, { + "id" : "488", + "type" : "owl:Class" + }, { + "id" : "550", + "type" : "owl:intersectionOf" + }, { + "id" : "23", + "type" : "owl:Class" + }, { + "id" : "551", + "type" : "owl:Class" + }, { + "id" : "454", + "type" : "owl:Class" + }, { + "id" : "192", + "type" : "owl:Class" + }, { + "id" : "184", + "type" : "owl:Class" + }, { + "id" : "398", + "type" : "owl:Class" + }, { + "id" : "554", + "type" : "owl:Class" + }, { + "id" : "199", + "type" : "owl:Class" + }, { + "id" : "499", + "type" : "owl:Class" + }, { + "id" : "453", + "type" : "owl:Class" + }, { + "id" : "243", + "type" : "owl:Class" + }, { + "id" : "205", + "type" : "owl:Class" + }, { + "id" : "114", + "type" : "owl:Class" + }, { + "id" : "95", + "type" : "owl:Class" + }, { + "id" : "126", + "type" : "owl:Class" + }, { + "id" : "69", + "type" : "owl:Class" + }, { + "id" : "492", + "type" : "owl:Class" + }, { + "id" : "153", + "type" : "owl:Class" + }, { + "id" : "231", + "type" : "owl:Class" + }, { + "id" : "361", + "type" : "owl:Class" + }, { + "id" : "278", + "type" : "owl:Class" + }, { + "id" : "47", + "type" : "owl:Class" + }, { + "id" : "115", + "type" : "owl:Class" + }, { + "id" : "25", + "type" : "owl:Class" + }, { + "id" : "382", + "type" : "owl:Class" + }, { + "id" : "124", + "type" : "owl:Class" + }, { + "id" : "72", + "type" : "owl:Class" + }, { + "id" : "565", + "type" : "owl:intersectionOf" + }, { + "id" : "299", + "type" : "owl:Class" + }, { + "id" : "75", + "type" : "owl:Class" + }, { + "id" : "390", + "type" : "owl:intersectionOf" + }, { + "id" : "62", + "type" : "owl:Class" + }, { + "id" : "15", + "type" : "owl:Class" + }, { + "id" : "177", + "type" : "owl:Class" + }, { + "id" : "86", + "type" : "owl:Class" + }, { + "id" : "1", + "type" : "owl:Class" + }, { + "id" : "489", + "type" : "owl:Class" + }, { + "id" : "333", + "type" : "owl:Class" + }, { + "id" : "197", + "type" : "owl:Class" + }, { + "id" : "182", + "type" : "owl:Class" + }, { + "id" : "32", + "type" : "owl:Class" + }, { + "id" : "462", + "type" : "owl:Class" + }, { + "id" : "305", + "type" : "owl:Class" + }, { + "id" : "50", + "type" : "owl:Class" + }, { + "id" : "168", + "type" : "owl:Class" + }, { + "id" : "369", + "type" : "owl:Class" + }, { + "id" : "572", + "type" : "owl:Class" + }, { + "id" : "240", + "type" : "owl:Class" + }, { + "id" : "27", + "type" : "owl:Class" + }, { + "id" : "210", + "type" : "owl:Class" + }, { + "id" : "533", + "type" : "owl:Class" + }, { + "id" : "335", + "type" : "owl:Class" + }, { + "id" : "578", + "type" : "owl:Class" + }, { + "id" : "490", + "type" : "owl:Class" + }, { + "id" : "290", + "type" : "owl:Class" + }, { + "id" : "89", + "type" : "owl:Class" + }, { + "id" : "412", + "type" : "owl:Class" + }, { + "id" : "540", + "type" : "owl:Class" + }, { + "id" : "293", + "type" : "owl:Class" + }, { + "id" : "386", + "type" : "owl:Class" + }, { + "id" : "353", + "type" : "owl:Class" + }, { + "id" : "579", + "type" : "owl:Class" + }, { + "id" : "252", + "type" : "owl:Class" + }, { + "id" : "478", + "type" : "owl:Class" + }, { + "id" : "274", + "type" : "owl:Class" + }, { + "id" : "592", + "type" : "owl:Class" + }, { + "id" : "318", + "type" : "owl:Class" + }, { + "id" : "339", + "type" : "owl:Class" + }, { + "id" : "201", + "type" : "owl:Class" + }, { + "id" : "67", + "type" : "owl:Class" + }, { + "id" : "266", + "type" : "owl:Class" + }, { + "id" : "140", + "type" : "owl:Class" + }, { + "id" : "161", + "type" : "owl:Class" + }, { + "id" : "281", + "type" : "owl:Class" + }, { + "id" : "552", + "type" : "owl:Class" + }, { + "id" : "108", + "type" : "owl:Class" + }, { + "id" : "216", + "type" : "owl:intersectionOf" + }, { + "id" : "119", + "type" : "owl:Class" + }, { + "id" : "612", + "type" : "owl:Class" + }, { + "id" : "34", + "type" : "owl:Class" + }, { + "id" : "207", + "type" : "owl:Class" + }, { + "id" : "279", + "type" : "owl:Class" + }, { + "id" : "31", + "type" : "owl:Class" + }, { + "id" : "479", + "type" : "owl:Class" + }, { + "id" : "270", + "type" : "owl:Class" + }, { + "id" : "237", + "type" : "owl:Class" + }, { + "id" : "521", + "type" : "owl:Class" + }, { + "id" : "222", + "type" : "owl:Class" + }, { + "id" : "241", + "type" : "owl:Class" + }, { + "id" : "17", + "type" : "owl:Class" + }, { + "id" : "173", + "type" : "owl:Class" + }, { + "id" : "246", + "type" : "owl:Class" + }, { + "id" : "402", + "type" : "owl:Class" + }, { + "id" : "112", + "type" : "owl:Class" + }, { + "id" : "148", + "type" : "owl:intersectionOf" + }, { + "id" : "220", + "type" : "owl:Class" + }, { + "id" : "638", + "type" : "owl:Class" + }, { + "id" : "455", + "type" : "owl:Class" + }, { + "id" : "495", + "type" : "owl:Class" + }, { + "id" : "303", + "type" : "owl:Class" + }, { + "id" : "263", + "type" : "owl:Class" + }, { + "id" : "21", + "type" : "owl:Class" + }, { + "id" : "121", + "type" : "owl:Class" + }, { + "id" : "66", + "type" : "owl:Class" + }, { + "id" : "476", + "type" : "owl:Class" + }, { + "id" : "297", + "type" : "owl:Class" + }, { + "id" : "463", + "type" : "owl:Class" + }, { + "id" : "312", + "type" : "owl:Class" + }, { + "id" : "285", + "type" : "owl:Class" + }, { + "id" : "204", + "type" : "owl:Class" + }, { + "id" : "276", + "type" : "owl:Class" + }, { + "id" : "498", + "type" : "owl:Class" + }, { + "id" : "97", + "type" : "owl:Class" + }, { + "id" : "480", + "type" : "owl:Class" + }, { + "id" : "380", + "type" : "owl:Class" + }, { + "id" : "152", + "type" : "owl:Class" + } ], + "classAttribute" : [ { + "iri" : "https://w3id.org/pmd/co/Weight", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Weight.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/weight. Accessed 5 Dec. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The force with which a body is attracted toward the earth or a celestial body by gravitation and which is equal to the product of the mass and the local gravitational acceleration.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Gewicht", + "IRI-based" : "Weight", + "en" : "Weight" + }, + "attributes" : [ "external" ], + "id" : "12", + "superClasses" : [ "10" ] + }, { + "iri" : "https://w3id.org/pmd/co/WeightedYCoordinate", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Mass center of grey values in the other direction", + "type" : "label" + } ] + }, + "label" : { + "de" : "Gewichtete Y Koordinate", + "IRI-based" : "WeightedYCoordinate", + "en" : "Weighted Y coordinate" + }, + "attributes" : [ "external" ], + "id" : "37", + "superClasses" : [ "38" ] + }, { + "iri" : "https://w3id.org/pmd/co/ClassificationDocument", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This entity describes a document used to define the working or application range of a process node in accordance with standardized graduations.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Entität beschreibt ein Dokument, das dazu dient, den Arbeits- oder Anwendungsbereich eines Prozessknotens in Übereinstimmung mit genormten Abstufungen zu definieren.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Klassifzierungsdokument", + "IRI-based" : "ClassificationDocument", + "en" : "Classification Document" + }, + "attributes" : [ "external" ], + "id" : "39", + "superClasses" : [ "32" ] + }, { + "iri" : "https://w3id.org/pmd/co/OpticalMicroscopy", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Optical microscope.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/optical%20microscope. Accessed 24 Nov. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A microscopy process in which light rays are seen directly by the observer as distinguished from one (as an electron microscope) in which some transformation or system of indirect viewing is use.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Optische Mikroskopie", + "IRI-based" : "OpticalMicroscopy", + "en" : "Optical Microscopy" + }, + "attributes" : [ "external" ], + "id" : "49", + "superClasses" : [ "50" ] + }, { + "iri" : "https://w3id.org/pmd/co/Index", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Some running number.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Index", + "IRI-based" : "Index", + "en" : "Index" + }, + "subClasses" : [ "66", "67" ], + "attributes" : [ "external" ], + "id" : "65", + "superClasses" : [ "10" ] + }, { + "iri" : "https://w3id.org/pmd/co/ElectronMicroscope", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Electron microscope.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/electron%20microscope. Accessed 24 Nov. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An electron-optical instrument in which a beam of electrons is used to produce an enlarged image of a minute object.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Elektronenmikroskop", + "IRI-based" : "ElectronMicroscope", + "en" : "Electron Microscope" + }, + "attributes" : [ "external" ], + "id" : "68", + "superClasses" : [ "69" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Person", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-agent", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Person agents are people.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-types", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Person", + "undefined" : "Person" + }, + "attributes" : [ "external" ], + "id" : "87", + "superClasses" : [ "47" ] + }, { + "iri" : "https://w3id.org/pmd/co/Elliptical", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Elliptical.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/elliptical. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Shaped like an ellipse.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Geformt wie eine Ellipse.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Elliptisch", + "IRI-based" : "Elliptical", + "en" : "Elliptical" + }, + "attributes" : [ "external" ], + "id" : "88", + "superClasses" : [ "89" ] + }, { + "iri" : "https://w3id.org/pmd/co/ProvidedIdentifier", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A colloquial, human-generated descriptor.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Bereitgestellter Identifikator", + "IRI-based" : "ProvidedIdentifier", + "en" : "Provided Identifier" + }, + "subClasses" : [ "96", "97" ], + "attributes" : [ "external" ], + "id" : "94", + "superClasses" : [ "95" ] + }, { + "iri" : "https://w3id.org/pmd/co/ManufacturingNode", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A processing node that implements transformative processes as well as consumes and creates tangible objects and typically requires inputs\nIn general but not necessarily, a manufacture node includes intrinsic analysis nodes that create corresponding measurements with respect to the process implemented by the manufacture node.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Herstellungsknoten", + "IRI-based" : "ManufacturingNode", + "en" : "Manufacturing Node" + }, + "attributes" : [ "external" ], + "id" : "102", + "superClasses" : [ "93" ] + }, { + "iri" : "https://w3id.org/pmd/co/Acoustical", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Acoustic.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/acoustic. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Akustisch bezieht sich auf den Hörsinn oder die Hörorgane, auf Schall oder auf die Wissenschaft vom Schall. Hier spezifisch auf die akustischen Eigenschaften eines Materials.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Acoustical is relating to the sense or organs of hearing, to sound, or to the science of sounds. Here specifically on the acoustic properties of a material.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Akustisch", + "IRI-based" : "Acoustical", + "en" : "Acoustical" + }, + "attributes" : [ "external" ], + "id" : "103", + "superClasses" : [ "104" ] + }, { + "iri" : "https://w3id.org/pmd/co/Measurement", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "https://en.wikipedia.org/wiki/Measurement", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Die Wertekategorie Messung ermöglicht die Kategorisierung von ValueObjects als gemessen.\nMessung ist die Quantifizierung von Eigenschaften eines Objekts oder Ereignisses, die zum Vergleich mit anderen Objekten oder Ereignissen verwendet werden können.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "The ValueScope category Measurement enables the categorization of ValueObjects as measured.\nMeasurement is the quantification of attributes of an object or event, which can be used to compare with other objects or events.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This value scope describes that a :ValueObject is the quantification of attributes of an object or event, which can be used to compare with other objects or events.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Messwert", + "IRI-based" : "Measurement", + "en" : "Measurement" + }, + "attributes" : [ "external" ], + "id" : "109", + "superClasses" : [ "110" ] + }, { + "iri" : "https://w3id.org/pmd/co/Electrical", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Electric.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/electric. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Elektrisch bezieht sich auf Elektrizität oder etwas, das mit Elektrizität betrieben wird. Hier speziell auf die elektrischen Eigenschaften eines Materials.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Electrical is relating to electricity or something that is powered by electricity. Here specifically to the electrical properties of a material.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Elektrisch", + "IRI-based" : "Electrical", + "en" : "Electrical" + }, + "attributes" : [ "external" ], + "id" : "137", + "superClasses" : [ "104" ] + }, { + "iri" : "https://w3id.org/pmd/co/ElectronMicroscopy", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Electron microscope.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/electron%20microscope. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A microscopy process using an electron-optical instrument in which a beam of accelerated electrons as a source of illumination is applied to produce a magnified image of a tiny object.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Die Verwendung eines elektronenoptischen Instruments, bei dem ein Strahl beschleunigter Elektronen als Beleuchtungsquelle eingesetzt wird, um ein vergrößertes Bild eines kleinen Objekts zu erzeugen.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Elektronenmikroskopie", + "IRI-based" : "ElectronMicroscopy", + "en" : "Electron Microscopy" + }, + "attributes" : [ "external" ], + "id" : "138", + "superClasses" : [ "50" ] + }, { + "iri" : "https://w3id.org/pmd/co/VanderwaalsBond", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Van der Waals forces.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/van%20der%20Waals%20forces. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Van der Waals bond is given by the relatively weak attractive forces that act on neutral atoms and molecules and that arise because of the electric polarization induced in each of the particles by the presence of other particles.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Die Van-der-Waals-Bindung ist durch die relativ schwachen Anziehungskräfte gegeben, die auf neutrale Atome und Moleküle wirken und die aufgrund der elektrischen Polarisierung entstehen, die in jedem der Teilchen durch die Anwesenheit anderer Teilchen induziert wird.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Van der Waals Bindung", + "IRI-based" : "VanderwaalsBond", + "en" : "Vanderwaals Bond" + }, + "attributes" : [ "external" ], + "id" : "19", + "superClasses" : [ "1" ] + }, { + "iri" : "https://w3id.org/pmd/co/MechanicalTestingProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A mechanical testing process ia process that determines mechanical properties.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Mechanischer Testprozess", + "IRI-based" : "MechanicalTestingProcess", + "en" : "Mechanical Testing Process" + }, + "attributes" : [ "external" ], + "id" : "144", + "superClasses" : [ "145" ] + }, { + "iri" : "https://w3id.org/pmd/co/SemiCrystallineStructure", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Solid materials exhibiting a semi-crystalline structure contain both crystalline and amorphous sections (domains). Crystalline substances that are polycrystals rather than single crystals are not designated as semicrystalline, even if there is a thin amorphous film between the crystallites.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Feststoffe, die eine teilkristalline Struktur aufweisen, enthalten sowohl kristalline als auch amorphe Bereiche (Domänen). Kristalline Stoffe, die keine Einkristalle, sondern Polykristalle sind, werden nicht als teilkristallin bezeichnet, auch wenn sich zwischen den Kristalliten ein dünner amorpher Film befindet.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Semikristalline Struktur", + "IRI-based" : "SemiCrystallineStructure", + "en" : "Semi Crystalline Structure" + }, + "attributes" : [ "external" ], + "id" : "146", + "superClasses" : [ "77" ] + }, { + "iri" : "https://w3id.org/pmd/co/CalibrationDocument", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "https://www.merriam-webster.com/dictionary/calibration", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Entität beschreibt ein Dokument, welches Abweichungen eines Messgerätes oder einer Maßverkörperung gegenüber einem anderen Gerät oder einer anderen Maßverkörperung feststellt und dokumentiert. Typischerweise ist die Person, welche die Kalibrierung durchführte, angegeben.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This entity describes a document used to state that a set of graduations to indicate values or positions has been performed. Typically, the calibration operator is included.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Kalibrierschein", + "IRI-based" : "CalibrationDocument", + "en" : "Calibration Document" + }, + "attributes" : [ "external" ], + "id" : "156", + "superClasses" : [ "32" ] + }, { + "iri" : "https://w3id.org/pmd/co/EnvironmentalTemperature", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This property describes the observed temperature surrounding a tangible object considered. This may include room temperature and temperatures measured in test chambers.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Eigenschaft beschreibt die beobachtete Temperatur in der Umgebung eines betrachteten materiellen Objekts. Dazu können die Raumtemperatur und die in Prüfkammern gemessenen Temperaturen gehören.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Umgebungstemperatur", + "IRI-based" : "EnvironmentalTemperature", + "en" : "Environmental Temperature" + }, + "attributes" : [ "external" ], + "id" : "128", + "superClasses" : [ "124" ] + }, { + "iri" : "https://w3id.org/pmd/co/Width", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "https://www.merriam-webster.com/dictionary/width", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Entität bezeichnet eine horizontale Messung, die im rechten Winkel zur Länge eines Objekts vorgenommen wird.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This entity describes a horizontal measurement of an object taken at right angles to the length of the object.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Breite", + "IRI-based" : "Width", + "en" : "Width" + }, + "attributes" : [ "external" ], + "id" : "29", + "superClasses" : [ "10" ] + }, { + "iri" : "https://w3id.org/pmd/co/FurnaceCharacteristic", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Properties that describe the functions and capabilities of a heat treatment process node.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Ofencharakteristik", + "IRI-based" : "FurnaceCharacteristic", + "en" : "Furnace Characteristic" + }, + "subClasses" : [ "181", "182", "183", "184" ], + "attributes" : [ "external" ], + "id" : "180", + "superClasses" : [ "10" ] + }, { + "iri" : "https://w3id.org/pmd/co/Squared", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Square.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/square. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Having four equal sides and four right angles.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Geformt mit vier gleichen Seiten und vier rechten Winkeln.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Quadratisch", + "IRI-based" : "Squared", + "en" : "Squared" + }, + "attributes" : [ "external" ], + "id" : "185", + "superClasses" : [ "89" ] + }, { + "iri" : "https://w3id.org/pmd/co/RetortType", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Geometry and and orientation of the inner system boundaries of the heat treatment processing node.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Retortentyp", + "IRI-based" : "RetortType", + "en" : "Retort Type" + }, + "attributes" : [ "external" ], + "id" : "183", + "superClasses" : [ "180" ] + }, { + "iri" : "https://w3id.org/pmd/co/ProcessDuration", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A length of an interval of time in which a process is conducted.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Prozessdauer", + "IRI-based" : "ProcessDuration", + "en" : "Process Duration" + }, + "attributes" : [ "external" ], + "id" : "186", + "superClasses" : [ "10" ] + }, { + "iri" : "https://w3id.org/pmd/co/Stiffness", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Die Steifigkeit ist das Maß, bis zu dem ein Objekt einer Verformung als Reaktion auf eine einwirkende Kraft widersteht.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Stiffness is the extent to which an object resists deformation in response to an applied force.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Steifigkeit", + "IRI-based" : "Stiffness", + "en" : "Stiffness" + }, + "attributes" : [ "external" ], + "id" : "187", + "superClasses" : [ "10" ] + }, { + "iri" : "https://w3id.org/pmd/co/HeatTreatmentProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Heat-treat.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/heat-treat. Accessed 24 Nov. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A heat treatment is a conditioning process at (with) a defined temperature (change) and holding in order to achieve a change in the microstructure, residual stresses, defect distribution or local chemical composition of a material.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Wärmebehandlung", + "IRI-based" : "HeatTreatmentProcess", + "en" : "Heat Treatment Process" + }, + "attributes" : [ "external" ], + "id" : "193", + "superClasses" : [ "106" ] + }, { + "iri" : "https://w3id.org/pmd/co/YCoordinate", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Y-coordinate.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/y-coordinate. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Y-coordinate is a coordinate whose value is determined by measuring parallel to a y-axis.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Die Y-Koordinate ist eine Koordinate, deren Wert durch Messung parallel zu einer Y-Achse bestimmt wird.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Y Koordinate", + "IRI-based" : "YCoordinate", + "en" : "Y Coordinate" + }, + "subClasses" : [ "37" ], + "attributes" : [ "external" ], + "id" : "38", + "superClasses" : [ "117" ] + }, { + "iri" : "https://w3id.org/pmd/co/Thermocouple", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Thermocouple.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/thermocouple. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A device for measuring temperature in which a pair of wires of dissimilar metals (such as copper and iron) are joined and the free ends of the wires are connected to an instrument (such as a voltmeter) that measures the difference in potential created at the junction of the two metals.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Ein Gerät zur Temperaturmessung, bei dem ein Paar Drähte aus unterschiedlichen Metallen (z. B. Kupfer und Eisen) verbunden und die freien Enden der Drähte mit einem Instrument (z. B. einem Voltmeter) verbunden werden, das die an der Verbindungsstelle erzeugte der beiden Metalle Potentialdifferenz misst .", + "type" : "label" + } ] + }, + "label" : { + "de" : "Thermoelement", + "IRI-based" : "Thermocouple", + "en" : "Thermocouple" + }, + "attributes" : [ "external" ], + "id" : "171", + "superClasses" : [ "153" ] + }, { + "iri" : "https://w3id.org/pmd/co/MaterialProperty", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“List of materials properties.” Wikipedia The Free Encyclopedia, https://en.wikipedia.org/wiki/List_of_materials_properties. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Eine Materialeigenschaft ist eine intensive Eigenschaft eines Materials, d. h. eine physikalische Eigenschaft, die nicht von der Menge des Materials abhängt. Diese quantitativen Eigenschaften können als Maßstab verwendet werden, um die Vorteile eines Materials mit denen eines anderen zu vergleichen und so die Materialauswahl zu erleichtern.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A materials property is an intensive property of a material, i.e., a physical property that does not depend on the amount of the material. These quantitative properties may be used as a metric by which the benefits of one material versus another can be compared, thereby aiding in materials selection.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Materialeigenschaft", + "IRI-based" : "MaterialProperty", + "en" : "Material Property" + }, + "subClasses" : [ "103", "204", "205", "206", "207", "208", "209", "137", "210" ], + "attributes" : [ "external" ], + "id" : "104", + "superClasses" : [ "2" ] + }, { + "iri" : "https://w3id.org/pmd/co/CrossSectionDetermination", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Cross section.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/cross%20section. Accessed 24 Nov. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Cross section is a cutting or piece of something cut off at right angles to an axis\nalso : a representation of such a cutting.", + "type" : "label" + } ], + "example" : [ { + "identifier" : "example", + "language" : "en", + "value" : "Using the density of the test piece.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Querschnittsermittlung", + "IRI-based" : "CrossSectionDetermination", + "en" : "Cross Section Determination" + }, + "attributes" : [ "external" ], + "id" : "217", + "superClasses" : [ "218" ] + }, { + "iri" : "https://w3id.org/pmd/pgo/DarkFieldImage", + "baseIri" : "https://w3id.org/pmd/pgo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/pgo", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Als Subklasse des Bildes wird das Dunkelfeldbild mit einem hochauflösenden Transmissionselektronenmikroskop (HR-TEM) erzeugt.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "As a subclass of image, the dark-field image is generated from a high-resolution transmission electron microscope (HR-TEM).", + "type" : "label" + } ] + }, + "label" : { + "de" : "Dunkelfeldbild", + "IRI-based" : "DarkFieldImage", + "en" : "Dark-field Image" + }, + "attributes" : [ "external" ], + "id" : "219", + "superClasses" : [ "220" ] + }, { + "iri" : "https://w3id.org/pmd/co/HeatCapacity", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "https://en.wikipedia.org/wiki/Heat_capacity", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Heat capacity or thermal capacity is a physical property of matter, defined as the amount of heat to be supplied to an object to produce a unit change in its temperature.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Wärmekapazität", + "IRI-based" : "HeatCapacity", + "en" : "Heat Capacity" + }, + "attributes" : [ "external" ], + "id" : "181", + "superClasses" : [ "180" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Bundle", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-bundle-entity", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A bundle is a named set of provenance descriptions, and is itself an Entity, so allowing provenance of provenance to be expressed.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-bundle-declaration", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Bundle", + "undefined" : "Bundle" + }, + "comment" : { + "en" : "Note that there are kinds of bundles (e.g. handwritten letters, audio recordings, etc.) that are not expressed in PROV-O, but can be still be described by PROV-O." + }, + "attributes" : [ "external" ], + "id" : "223", + "superClasses" : [ "43" ] + }, { + "iri" : "https://w3id.org/pmd/co/Duration", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Eine Zeitspanne mit einer eigenen Zeitskala und einer in einer anderen Zeitskala verankerten Epoche. Eine Dauer kann durch einen einzigen Wert ausgedrückt werden, da sie die Zeitdifferenz zwischen zwei Zeitpunkten darstellt, z. B. die Differenz zwischen Endzeit und Startzeit oder die Differenz zwischen der aktuellen, momentanen Zeit und der Startzeit.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A period of time with its own timescale and an epoch anchored in another timescale. A duration can be expressed via a single value as it represents the time difference between two points in time, e.g. the difference between EndTime and StartTime or the difference between the current, momentary time and the StartTime.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Dauer", + "IRI-based" : "Duration", + "en" : "Duration" + }, + "attributes" : [ "external" ], + "id" : "224", + "superClasses" : [ "225" ] + }, { + "iri" : "https://w3id.org/pmd/co/BaseFraction", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The assumed base material of the objects or the remainder of the composition, e.g. for nickel-based alloy, iron-based alloy.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Basisanteil", + "IRI-based" : "BaseFraction", + "en" : "Base fraction" + }, + "attributes" : [ "external" ], + "id" : "228", + "superClasses" : [ "229" ] + }, { + "iri" : "https://w3id.org/pmd/co/Area", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The extent or measurement of a surface.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Fläche", + "IRI-based" : "Area", + "en" : "Area" + }, + "subClasses" : [ "231", "232" ], + "attributes" : [ "external" ], + "id" : "230", + "superClasses" : [ "10" ] + }, { + "iri" : "https://w3id.org/pmd/co/Note", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Additional information & knowledge for and by humans. Not expected to be parsable", + "type" : "label" + } ] + }, + "label" : { + "de" : "Bemerkung", + "IRI-based" : "Note", + "en" : "Note" + }, + "attributes" : [ "external" ], + "id" : "250", + "superClasses" : [ "10" ] + }, { + "iri" : "https://w3id.org/pmd/co/InsertSurface", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "https://www.merriam-webster.com/dictionary/surface", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Entität beschreibt den Zustand und die Qualität des Außenbereichs des Einsatzes eines Prozessknotens, z. B. die in Klemm- und Spannsystemen verwendeten Einsätze.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This entity describes the state and quality of the exterior of the insert of a processing node, e.g., the inserts used in grips.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Oberfläche Eines Einsatzstücks", + "IRI-based" : "InsertSurface", + "en" : "Insert Surface" + }, + "attributes" : [ "external" ], + "id" : "251", + "superClasses" : [ "252" ] + }, { + "iri" : "https://w3id.org/pmd/co/NodeModel", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Processing Node short description, e.g. \"Vacuum Furnace\"", + "type" : "label" + } ] + }, + "label" : { + "de" : "Knotenmodell", + "IRI-based" : "NodeModel", + "en" : "Node Model" + }, + "attributes" : [ "external" ], + "id" : "255", + "superClasses" : [ "34" ] + }, { + "iri" : "https://w3id.org/pmd/co/DigitalMaterialIdentifier", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The DigitalMaterialIdentifier value object refers to a dmi:DigitalMaterialIdentifier.\n\nA dmi:DigitalMaterialIdentifier is a resource identifier (IRI) that represents the specification of a material (in the sense of a material class) described in a specification document. The specification document can be, e.g., a standard, a datasheet, or any other citable document. Typically, a specification document requires some qualities that a material (in the sense of a portion of matter) has to comply with. Typical requirements include chemical compositions or physical properties.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "DigitalMaterialIdentifier", + "en" : "Digital Material Identifier" + }, + "intersection" : [ "95" ], + "attributes" : [ "intersection", "external" ], + "id" : "212", + "superClasses" : [ "95" ] + }, { + "iri" : "https://w3id.org/pmd/co/Thickness", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This entity describes the measured dimension in one direction of a test piece.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Entität beschreibt die gemessene Dimension in einer Richtung eines Prüfstücks.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Dicke", + "IRI-based" : "Thickness", + "en" : "Thickness" + }, + "attributes" : [ "external" ], + "id" : "256", + "superClasses" : [ "10" ] + }, { + "iri" : "https://w3id.org/pmd/co/DataCiteMetadata", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This value object refers to metadata which can be provided as DataCite element.", + "type" : "label" + } ], + "example" : [ { + "identifier" : "example", + "language" : "en", + "value" : "For example, to refer to a ISBN number, following triples might be created:\n\n :p1 a pmd:Process .\n :p1 pmd:characteristic :doc_vo1 .\n :doc_vo1 a pmd:Document .\n :doc_vo1 pmd:characteristic :isbn_vo1 .\n :doc_vo1 pmd:resource \"http://example.org/book.pdf\" .\n :isbn_vo1 a pmd:DataCiteMetadata .\n :isbn_vo1 pmd:relatesTo .\n :isbn_vo1 pmd:value \"9780262012423\". \n\n\"a document related to process :p1 has a ISBN number 9780262012423\"", + "type" : "label" + } ] + }, + "label" : { + "de" : "Data Cite Metadaten", + "IRI-based" : "DataCiteMetadata", + "en" : "DataCite Metadata" + }, + "attributes" : [ "external" ], + "id" : "257", + "superClasses" : [ "10" ] + }, { + "iri" : "https://w3id.org/pmd/co/DimensionMeasuringDevice", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This entity generically describes any tool that is used for the measurement of the dimensions of a tangible object, e.g., a caliper.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Entität beschreibt allgemein jedes Werkzeug, das für die Messung der Abmessungen eines greifbaren Objekts verwendet wird, z. B. eines Messschiebers.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Dimensionsmesswerkzeug", + "IRI-based" : "DimensionMeasuringDevice", + "en" : "Dimension Measuring Device" + }, + "attributes" : [ "external" ], + "id" : "175", + "superClasses" : [ "153" ] + }, { + "iri" : "https://w3id.org/pmd/co/Caliper", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "https://www.merriam-webster.com/dictionary/caliper", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "any of various measuring instruments having two usually adjustable arms, legs, or jaws used especially to measure the dimensions of objects, such as diameters or thicknesses", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "ein Messgerät mit zwei in der Regel verstellbaren Armen, Schenkeln oder Klemmbacken, das vor allem zur Messung der Abmessungen von Gegenständen, wie z. B. des Durchmessers oder der Dicke, verwendet wird", + "type" : "label" + } ] + }, + "label" : { + "de" : "Messschieber", + "IRI-based" : "Caliper", + "en" : "Caliper" + }, + "attributes" : [ "external" ], + "id" : "179", + "superClasses" : [ "153" ] + }, { + "iri" : "https://w3id.org/pmd/co/Regression", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Regression.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/regression. Accessed 24 Nov. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A functional relationship between two or more correlated variables that is often empirically determined from data and is used especially to predict values of one variable when given values of the others.\nSpecifically : a function that yields the mean value of a random variable under the condition that one or more independent variables have specified values.", + "type" : "label" + } ], + "example" : [ { + "identifier" : "example", + "language" : "en", + "value" : "Regression of y on x is linear", + "type" : "label" + } ] + }, + "label" : { + "de" : "Regression", + "IRI-based" : "Regression", + "en" : "Regression" + }, + "attributes" : [ "external" ], + "id" : "273", + "superClasses" : [ "274" ] + }, { + "iri" : "https://w3id.org/pmd/co/RegionOfInterest", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Some region of interest (ROI) in an image. Describe the ROI by use of Web Annotation Vocabulary (https://www.w3.org/TR/annotation-vocab/). The ROI is understood as the target of a (body-less) annotation. \n\nThe web annotation model suggests the use of different fragment specifications (https://www.w3.org/TR/annotation-model/#fragment-selector), however we suggest to prefer media fragments (https://www.w3.org/TR/media-frags/).", + "type" : "label" + } ], + "example" : [ { + "identifier" : "example", + "language" : "undefined", + "value" : ":image1 a pmd:Image\n:roi1 a pmd:RegionOfInterest .\n:roi1 oa:hasSource :image1 ;\n oa:hasSelector [\n a oa:FragmentSelector ;\n dcterms:conformsTo ;\n rdf:value \"xywh=160,120,320,240\" ] ] .", + "type" : "label" + } ] + }, + "label" : { + "de" : "Betrachteter Bereich", + "IRI-based" : "RegionOfInterest", + "en" : "Region of Interest" + }, + "attributes" : [ "external" ], + "id" : "284", + "superClasses" : [ "285" ] + }, { + "iri" : "https://w3id.org/pmd/co/Method", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Method.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/method. Accessed 5 Dec. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A way, technique, or process of or for doing something", + "type" : "label" + } ] + }, + "label" : { + "de" : "Methode", + "IRI-based" : "Method", + "en" : "Method" + }, + "subClasses" : [ "286", "274", "217" ], + "attributes" : [ "external" ], + "id" : "218", + "superClasses" : [ "10" ] + }, { + "iri" : "https://w3id.org/pmd/co/NodeName", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A human-generated identifier associated with a discernible, tangible or simulated entity intended to be unique in a given scope", + "type" : "label" + } ] + }, + "label" : { + "de" : "Knotenname", + "IRI-based" : "NodeName", + "en" : "Node Name" + }, + "attributes" : [ "external" ], + "id" : "96", + "superClasses" : [ "94", "34" ] + }, { + "iri" : "https://w3id.org/pmd/co/Address", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Address.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/address. Accessed 16 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Ein Ort, an dem mit einer Person oder Organisation kommuniziert werden kann.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A place where a person or organization may be communicated with.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Adresse", + "IRI-based" : "Address", + "en" : "Address" + }, + "attributes" : [ "external" ], + "id" : "295", + "superClasses" : [ "10" ] + }, { + "iri" : "https://w3id.org/pmd/co/NodeVersion", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Processing Node Version Number, e.g. \"2.24\"", + "type" : "label" + } ] + }, + "label" : { + "de" : "Knotenversion", + "IRI-based" : "NodeVersion", + "en" : "Node Version" + }, + "attributes" : [ "external" ], + "id" : "272", + "superClasses" : [ "34" ] + }, { + "iri" : "https://w3id.org/pmd/co/Norm", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Norm.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/norm. Accessed 24 Nov. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An authoritative standard.", + "type" : "label" + } ], + "example" : [ { + "identifier" : "example", + "language" : "en", + "value" : "Technical standard issued by the German Institute for Standardisation Registered Association (Deutsches Institut für Normung e.V. - DIN)", + "type" : "label" + } ] + }, + "label" : { + "de" : "Norm", + "IRI-based" : "Norm", + "en" : "Norm" + }, + "attributes" : [ "external" ], + "id" : "286", + "superClasses" : [ "218" ] + }, { + "iri" : "https://w3id.org/pmd/co/Voxel", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An element representing a value on a grid in three dimensional space.\nIn PMD, an infinitesimal part of an object which is made of a homogenuous material. Size depends on the observed material level. For now, geometrically, a cubus is assumed.\nMade of a material\nDifferent Voxels can have different material properties and material structure\nA (partial) logical object that describes (a part of) a physical object", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "An element representing a value on a grid in three dimensional space.\nIn PMD, an infinitesimal part of an object which is made of a homogenuous material. Size depends on the observed material level. For now, geometrically, a cubus is assumed.\nDifferent Voxels can have different material properties and material structure\nA (partial) logical object that describes (a part of) a physical object", + "type" : "label" + } ] + }, + "label" : { + "de" : "Voxel", + "IRI-based" : "Voxel", + "en" : "Voxel" + }, + "attributes" : [ "external" ], + "id" : "306", + "superClasses" : [ "285" ] + }, { + "iri" : "https://w3id.org/pmd/pgo/CalibrationFactor", + "baseIri" : "https://w3id.org/pmd/pgo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/pgo", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "As a subclass of value object, the calibration factor provides a pixel-to-real-distance conversion factor, that allows image scaling to metric units.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Calibration Factor", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Kalibrierungsfaktor", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Als Subklasse des Values Objects bietet der Kalibrierungsfaktor einen Umrechnungsfaktor von Pixeln in reale Dimensionen, der die Skalierung von Bildern in metrische Einheiten ermöglicht.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "CalibrationFactor" + }, + "attributes" : [ "external" ], + "id" : "288", + "superClasses" : [ "10" ] + }, { + "iri" : "https://w3id.org/pmd/co/Furnace", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Furnace.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/furnace. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Eine geschlossene Struktur, in der Wärme erzeugt wird (z. B. zum Heizen eines Hauses oder zum Einschmelzen von Erz).", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "An enclosed structure in which heat is produced (as for heating a house or for reducing ore).", + "type" : "label" + } ] + }, + "label" : { + "de" : "Ofen", + "IRI-based" : "Furnace", + "en" : "Furnace" + }, + "attributes" : [ "external" ], + "id" : "323", + "superClasses" : [ "93" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Communication", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasInformedBy", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-Communication", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "undefined", + "value" : "Communication is the exchange of an entity by two activities, one activity using the entity generated by the other.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "constraints" : [ { + "identifier" : "constraints", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-constraints-20130430/#prov-dm-constraints-fig", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-wasInformedBy", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Communication", + "undefined" : "Communication" + }, + "comment" : { + "en" : "An instance of prov:Communication provides additional descriptions about the binary prov:wasInformedBy relation from an informed prov:Activity to the prov:Activity that informed it. For example, :you_jumping_off_bridge prov:wasInformedBy :everyone_else_jumping_off_bridge; prov:qualifiedCommunication [ a prov:Communication; prov:activity :everyone_else_jumping_off_bridge; :foo :bar ]." + }, + "attributes" : [ "external" ], + "id" : "143", + "superClasses" : [ "199" ] + }, { + "iri" : "http://purl.obolibrary.org/obo/CHEBI_24431", + "baseIri" : "http://purl.obolibrary.org/obo", + "instances" : 0, + "annotations" : { + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChEBI ontology https://www.ebi.ac.uk/chebi/searchId.do?chebiId=CHEBI:24431#", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "CHEBI_24431", + "en" : "Chemical Entity" + }, + "attributes" : [ "external" ], + "id" : "149" + }, { + "iri" : "https://w3id.org/pmd/co/Thermal", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Thermal.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/thermal. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Thermal is relating to, or caused by heat. Here specifically to the thermal properties of a material.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Thermisch bedeutet in Bezug auf oder verursacht durch Wärme. Hier speziell auf die thermischen Eigenschaften eines Materials.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Thermisch", + "IRI-based" : "Thermal", + "en" : "Thermal" + }, + "attributes" : [ "external" ], + "id" : "208", + "superClasses" : [ "104" ] + }, { + "iri" : "https://w3id.org/pmd/co/Length", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "de", + "value" : "https://www.merriam-webster.com/dictionary/length", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Eine gemessene Entfernung oder Abmessung eines Objekts, normalerweise die längere oder längste Abmessung des Objekts.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A measured distance or dimension of an object, usually the longer or longest dimension of the object.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Länge", + "IRI-based" : "Length", + "en" : "Length" + }, + "attributes" : [ "external" ], + "id" : "343", + "superClasses" : [ "10" ] + }, { + "iri" : "https://w3id.org/pmd/co/CalibrationRange", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This property describes the region between the limits within which a quantity is measured, received or transmitted (typically by a process node, e.g. a machine), expressed by stating the lower and upper range values.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Eigenschaft beschreibt den Bereich zwischen den Grenzen, innerhalb derer eine Größe gemessen, empfangen oder übertragen wird (typischerweise von einem Prozessknoten, z. B. einer Maschine), ausgedrückt durch die Angabe des unteren und oberen Bereichswertes.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Kalibrierbereich", + "IRI-based" : "CalibrationRange", + "en" : "Calibration range" + }, + "attributes" : [ "external" ], + "id" : "344", + "superClasses" : [ "10" ] + }, { + "iri" : "https://w3id.org/pmd/pgo/PrecipitateRadius", + "baseIri" : "https://w3id.org/pmd/pgo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/pgo", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Als Subklasse des Radius ist der Ausscheidungsradius ein Maß, mit dem eine spezifische Korrelation der Ausscheidungsgröße vorgenommen werden kann. Der Ausscheidungsradius wird in der Regel aus der kreisförmigen Annäherung der Ausscheidungsfläche ermittelt.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "As a subclass of radius, precipitate radius is a measure used to perform a specific precipitate size correlation. The precipitate radius is usually obtained from the circular approximation of the precipitate area.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Ausscheidungsradius", + "IRI-based" : "PrecipitateRadius", + "en" : "Precipitate Radius" + }, + "attributes" : [ "external" ], + "id" : "328", + "superClasses" : [ "318" ] + }, { + "iri" : "https://w3id.org/pmd/co/Chemical", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Chemical.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/chemical. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Chemical is relating to, used in, or produced by chemistry or the phenomena of chemistry Here specifically to the chemical properties of a material.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Chemisch ist ein Begriff, der sich auf die Chemie oder die chemischen Phänomene bezieht, in der Chemie verwendet wird oder durch sie erzeugt wird. Hier geht es speziell um die chemischen Eigenschaften eines Materials.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Chemisch", + "IRI-based" : "Chemical", + "en" : "Chemical" + }, + "attributes" : [ "external" ], + "id" : "206", + "superClasses" : [ "104" ] + }, { + "iri" : "https://w3id.org/pmd/co/CoatingDesignation", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This property is a name or identifier of a material type which designates the most upper part of a component (coating).", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Eigenschaft ist ein Name oder Bezeichner eines Materialtyps, welcher den obersten Teil eines Bauteils (Beschichtung) bedeckt.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Beschichtungsbezeichnung", + "IRI-based" : "CoatingDesignation", + "en" : "Coating Designation" + }, + "attributes" : [ "external" ], + "id" : "83", + "superClasses" : [ "2" ] + }, { + "iri" : "https://w3id.org/pmd/co/Biological", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Biological.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/biological. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Biologisch bezieht sich auf die Biologie oder auf das Leben und lebende Prozesse. Hier speziell auf die biologischen Eigenschaften eines Materials.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Biological is relating to biology or to life and living processes. Here specifically to the biological properties of a material.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Biologisch", + "IRI-based" : "Biological", + "en" : "Biological" + }, + "attributes" : [ "external" ], + "id" : "209", + "superClasses" : [ "104" ] + }, { + "iri" : "https://w3id.org/pmd/co/AnalysingProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A process that is driven by the primary intent to gain new measurements.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Analyseprozess", + "IRI-based" : "AnalysingProcess", + "en" : "Analysing Process" + }, + "subClasses" : [ "368", "144", "369", "50", "241" ], + "attributes" : [ "external" ], + "id" : "145", + "superClasses" : [ "61" ] + }, { + "iri" : "https://w3id.org/pmd/co/PrimaryData", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Die Datenkategorie Primärdaten umfasst Daten, die vor / nach einem Prozess erfasst werden, entweder bezogen auf die Geometrie des Objekts (z.B. ao, bo, do, au, bu, du, Lu) oder als Register des gesamten Aufbaus (z.B. Skizzen, Fotos oder Videos)", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This data scope expresses that a ValueObject refers to data that is directly acquired during a process by sensors (time, force, length, temperature)", + "type" : "label" + } ] + }, + "label" : { + "de" : "Primärdaten", + "IRI-based" : "PrimaryData", + "en" : "Primary Data" + }, + "attributes" : [ "external" ], + "id" : "283", + "superClasses" : [ "237" ] + }, { + "iri" : "https://w3id.org/pmd/co/Manufacturer", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Processing Node's manufacturer name, e.g.: \"Ipsen\", \"UPC\" or \"Bosch\"", + "type" : "label" + } ] + }, + "label" : { + "de" : "Hersteller", + "IRI-based" : "Manufacturer", + "en" : "Manufacturer" + }, + "intersection" : [ "101" ], + "attributes" : [ "intersection", "external" ], + "id" : "384" + }, { + "iri" : "https://w3id.org/pmd/co/TestPieceName", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This property describes the designation of a test piece, usually given as human-readable identifier by humans.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Eigenschaft beschreibt die Bezeichnung eines Prüfkörpers, die in der Regel als menschenlesbarer Identifikator von Menschen vergeben wird.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Prüfkörpername", + "IRI-based" : "TestPieceName", + "en" : "Test Piece Name" + }, + "intersection" : [ "95" ], + "attributes" : [ "intersection", "external" ], + "id" : "189", + "superClasses" : [ "95" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Organization", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-agent", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "undefined", + "value" : "An organization is a social or legal institution such as a company, society, etc.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-types", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Organization", + "undefined" : "Organization" + }, + "subClasses" : [ "390", "391" ], + "attributes" : [ "external" ], + "id" : "101", + "superClasses" : [ "47" ] + }, { + "iri" : "https://w3id.org/pmd/co/Slide", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A moving piece that is guided by a part along its path, providing the mount for objects.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Schlitten", + "IRI-based" : "Slide", + "en" : "Slide" + }, + "attributes" : [ "external" ], + "id" : "392", + "superClasses" : [ "246" ] + }, { + "iri" : "https://w3id.org/pmd/co/ProcessDescription", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A descriptive text qualifying the nature of a process instance used as an identifier that is not strictly intended to be unique, e.g. \"1050°C30 840°C10/ÖL\".", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A human readable order of steps. Might include additional information that likes sketches and notes.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Prozessbeschreibung", + "IRI-based" : "ProcessDescription", + "en" : "Process Description" + }, + "intersection" : [ "266" ], + "attributes" : [ "intersection", "external" ], + "id" : "331", + "superClasses" : [ "266" ] + }, { + "instances" : 0, + "union" : [ "114", "119" ], + "attributes" : [ "union", "anonymous" ], + "id" : "405" + }, { + "iri" : "http://www.w3.org/ns/prov#Activity", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-Activity", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "undefined", + "value" : "An activity is something that occurs over a period of time and acts upon or with entities; it may include consuming, processing, transforming, modifying, relocating, using, or generating entities.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "starting-point", + "type" : "label" + } ], + "constraints" : [ { + "identifier" : "constraints", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-constraints-20130430/#prov-dm-constraints-fig", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-Activity", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Activity", + "undefined" : "Activity" + }, + "subClasses" : [ "62", "61" ], + "attributes" : [ "external" ], + "id" : "135" + }, { + "iri" : "https://w3id.org/pmd/co/ChemicalComposition", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "undefined", + "value" : "https://chem.libretexts.org/Courses/College_of_Marin/CHEM_114%3A_Introductory_Chemistry/06%3A_Chemical_Composition", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Chemical composition refers to the arrangement, type, and ratio of atoms in molecules of chemical substances. Chemical composition varies when chemicals are added or subtracted from a substance, when the ratio of substances changes, or when other chemical changes occur in chemicals.", + "type" : "label" + } ], + "example" : [ { + "identifier" : "example", + "language" : "undefined", + "value" : "ex:proc1 a pmd:Process .\nex:proc1 pmd:chacteristic ex:vo1 .\n\nex:vo1 a ValueObject .\nex:vo1 pmd:resource ex:chemComp1 .\nex:chemComp1 a pmd:ChemicalComposition .\n\nex:vo2 dcterm:partOf ex:chemComp1 .\nex:vo2 a pmd:ChemicalElement .\nex:vo2 pmd:relatesToElement CHEBI:28984 .\nex:vo2 pmd:relatesTo ex:vo3 .\n\npmd:MassFraction rdf:subClassOf ValueObject .\nex:vo3 a pmd:MassFraction .\nex:vo3 qudt:upperBound \"0.3\" .\nex:vo3 qudt:lowerBound \"0\" .\nex:vo3 qudt:unit qudt:PERCENT .\n\nex:vo4 a pmd:MassFraction .\nex:vo4 pmd:resource pmd:NotDetected .", + "type" : "label" + } ] + }, + "label" : { + "de" : "Chemische Zusammensetzung", + "IRI-based" : "ChemicalComposition", + "en" : "Chemical Composition" + }, + "attributes" : [ "external" ], + "id" : "41", + "superClasses" : [ "10" ] + }, { + "iri" : "https://w3id.org/pmd/co/FeretDiameter", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The Feret diameter or Feret's diameter is a measure of an object size along a specified direction. In general, it can be defined as the distance between the two parallel planes restricting the object perpendicular to that direction.\n(cf. Wikipedia: https://en.wikipedia.org/wiki/Feret_diameter)", + "type" : "label" + } ] + }, + "label" : { + "de" : "Äquivalentdurchmesser", + "IRI-based" : "FeretDiameter", + "en" : "Feret diameter" + }, + "attributes" : [ "external" ], + "id" : "367", + "superClasses" : [ "305" ] + }, { + "iri" : "https://w3id.org/pmd/co/AgingTemperature", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Variable Temperature during an Aging Process depending on the desired deposition formations.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Alterungstemperatur", + "IRI-based" : "AgingTemperature", + "en" : "Aging Temperature" + }, + "attributes" : [ "external" ], + "id" : "123", + "superClasses" : [ "124" ] + }, { + "iri" : "https://w3id.org/pmd/co/Initiator", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The person that commisioned the process.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Initiator", + "IRI-based" : "Initiator", + "en" : "Initiator" + }, + "intersection" : [ "87" ], + "attributes" : [ "intersection", "external" ], + "id" : "407" + }, { + "iri" : "https://w3id.org/pmd/co/ModulusOfElasticity", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "symbol" : [ { + "identifier" : "symbol", + "language" : "undefined", + "value" : "E", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "de", + "value" : "E-Modul", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Quotient der Änderung der Spannung ΔR und Änderung der prozentualen Dehnung Δe in dem untersuchten Bereich multipliziert mit 100 % \n\nAnmerkung: Es wird empfohlen, den Wert in GPa, gerundet auf 0,1 GPa, und nach ISO 80000-1 anzugeben.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "quotient of change of stress ΔR and change of percentage extension Δe in the range of evaluation, multiplied by 100 %\n\nNote: It is recommended to report the value in GPa rounded to the nearest 0.1 GPa and according to ISO 80000-1.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Elastizitätsmodul", + "IRI-based" : "ModulusOfElasticity", + "en" : "Modulus Of Elasticity" + }, + "attributes" : [ "external" ], + "id" : "376", + "superClasses" : [ "10" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Entity", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-entity", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An entity is a physical, digital, conceptual, or other kind of thing with some fixed aspects; entities may be real or imaginary. ", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "starting-point", + "type" : "label" + } ], + "constraints" : [ { + "identifier" : "constraints", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-constraints-20130430/#prov-dm-constraints-fig", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-Entity", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Entity", + "undefined" : "Entity" + }, + "subClasses" : [ "285", "223", "237", "259", "279", "386", "110", "10" ], + "attributes" : [ "external" ], + "id" : "43" + }, { + "instances" : 0, + "union" : [ "285", "259", "10" ], + "attributes" : [ "union", "anonymous" ], + "id" : "408" + }, { + "instances" : 0, + "union" : [ "93", "246" ], + "attributes" : [ "union", "anonymous" ], + "id" : "155" + }, { + "iri" : "https://w3id.org/pmd/co/RelatedProjectIdentifier", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Eigenschaft beschreibt einen benannten Wert, der dazu dient, zwischen Projekten zu unterscheiden, die mit dem betrachteten Projekt in Relation stehen. Zwei in Relation stehende Projekte könnten zum Beispiel ein Messprojekt sein, das Teil eines Projekts mit einem breiteren Betrachtungsbereich ist.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This property describes a named value intended to distinguish between projects that are related to the project considered. For instance, two related projects could be a measurement project that is part of project with a broader scope.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Identifikation Eines Verbundenen Projektes", + "IRI-based" : "RelatedProjectIdentifier", + "en" : "Related Project Identifier" + }, + "attributes" : [ "external" ], + "id" : "164", + "superClasses" : [ "95" ] + }, { + "iri" : "https://w3id.org/pmd/co/SecondaryData", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This data scope expresses that a ValueObject refers to characteristic values (e.g. test results) determined by equations or algorithms using primary data and/or metadata.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Der Datenkategorie Sekundärdaten umfasst Werte (z. B. Testergebnisse), die durch Gleichungen oder Algorithmen unter Verwendung von Primärdaten und Metadaten ermittelt werden.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Sekundärdaten", + "IRI-based" : "SecondaryData", + "en" : "Secondary Data" + }, + "attributes" : [ "external" ], + "id" : "236", + "superClasses" : [ "237" ] + }, { + "instances" : 0, + "union" : [ "135", "43", "47" ], + "attributes" : [ "union", "anonymous" ], + "id" : "410" + }, { + "iri" : "https://w3id.org/pmd/co/AssemblingProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A process to mount or demount a component.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Assemblierungsprozess", + "IRI-based" : "AssemblingProcess", + "en" : "Assembling Process" + }, + "subClasses" : [ "411", "412", "413" ], + "attributes" : [ "external" ], + "id" : "99", + "superClasses" : [ "61" ] + }, { + "instances" : 0, + "union" : [ "135", "43", "47" ], + "attributes" : [ "union", "anonymous" ], + "id" : "7" + }, { + "instances" : 0, + "union" : [ "93", "285", "62", "61", "259", "10" ], + "attributes" : [ "union", "anonymous" ], + "id" : "414" + }, { + "instances" : 0, + "union" : [ "135", "43", "47" ], + "attributes" : [ "union", "anonymous" ], + "id" : "415" + }, { + "instances" : 0, + "union" : [ "135", "43", "192", "47" ], + "attributes" : [ "union", "anonymous" ], + "id" : "71" + }, { + "iri" : "https://w3id.org/pmd/co/LoadCellCapacity", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "LoadCellCapacity", + "en" : "Load cell capacity" + }, + "attributes" : [ "external" ], + "id" : "337", + "superClasses" : [ "10" ] + }, { + "instances" : 0, + "union" : [ "339", "192" ], + "attributes" : [ "union", "anonymous" ], + "id" : "418" + }, { + "iri" : "https://w3id.org/pmd/co/CrossSectionArea", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "https://www.merriam-webster.com/dictionary/cross%20section", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This property describes the area of a cutting or piece of an object cut off or broken at right angles or related to an axis.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Eigenschaft beschreibt die Fläche eines Schnittes oder eines rechtwinklig geschnittenen oder gebrochenen Stücks eines Objektes in Bezug auf eine Achse.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Querschnittsfläche", + "IRI-based" : "CrossSectionArea", + "en" : "Cross Section Area" + }, + "attributes" : [ "external" ], + "id" : "232", + "superClasses" : [ "230" ] + }, { + "instances" : 0, + "union" : [ "222", "75", "195", "197" ], + "attributes" : [ "union", "anonymous" ], + "id" : "419" + }, { + "iri" : "http://www.w3.org/ns/prov#Influence", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasInfluencedBy", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-influence", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Influence is the capacity of an entity, activity, or agent to have an effect on the character, development, or behavior of another by means of usage, start, end, generation, invalidation, communication, derivation, attribution, association, or delegation.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-influence", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Influence", + "undefined" : "Influence" + }, + "subClasses" : [ "140", "161", "199" ], + "comment" : { + "en" : "Because prov:Influence is a broad relation, its most specific subclasses (e.g. prov:Communication, prov:Delegation, prov:End, prov:Revision, etc.) should be used when applicable." + }, + "attributes" : [ "external" ], + "id" : "6" + }, { + "iri" : "https://w3id.org/pmd/co/Process", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "IAO_0000117" : [ { + "identifier" : "IAO_0000117", + "language" : "en", + "value" : "A process is an activity comprising a series of actions or operations conducing to an end. In PMD, a process is conducted via processing nodes and has a discernable duration as part of a workflow. A process consumes objects and parameters. A process potentially generates new objects and measurements.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A process is an activity including a series of actions or operations conducing to an end. In PMD, a process is conducted via processing nodes and has a discernable duration as part of a workflow. A process consumes objects and parameters. A process potentially generates new objects and measurements.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Prozess", + "IRI-based" : "Process", + "en" : "Process" + }, + "subClasses" : [ "145", "424", "158", "91", "99", "106", "112" ], + "attributes" : [ "external" ], + "id" : "61", + "superClasses" : [ "135" ] + }, { + "iri" : "https://w3id.org/pmd/co/2DPixelCoordinates", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Ein Pixel kann durch ein Paar von Ganzzahlen identifiziert werden, die die Spalten- und Zeilennummer angeben, hier die 2D Pixel Koordinaten. Zum Beispiel würde ein Pixel mit den Koordinaten (1,2) in der Spalte Nummer 1 und der Zeile Nummer 2 liegen. Üblicherweise werden Spalten beginnend mit Null von links nach rechts nummeriert.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A pixel can be identified by a pair of integers indicating the column and row number, here the 2D pixel coordinates. For example, a pixel with coordinates (1,2) would be in column number 1 and row number 2. Typically, columns are numbered starting with zero from left to right.", + "type" : "label" + } ] + }, + "label" : { + "de" : "2D Pixel Koordinaten", + "IRI-based" : "2DPixelCoordinates", + "en" : "2D Pixel Coordinates" + }, + "subClasses" : [ "38", "121" ], + "attributes" : [ "external" ], + "id" : "117", + "superClasses" : [ "402" ] + }, { + "iri" : "https://w3id.org/pmd/co/MaterialRelated", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Klasse dient der qualitativen und quantitativen Beschreibung eines Materials, indem sie Informationen über ein Material angibt, z. B. durch die Einbeziehung von Materialeigenschaften, Materialstruktur usw.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This property is used to qualitatively and quantitatively describe a material by providing information on a material, e.g., by including material properties, material structure, etc.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Materialbezug", + "IRI-based" : "MaterialRelated", + "en" : "Material Related" + }, + "subClasses" : [ "126", "104", "133", "77", "83", "1" ], + "attributes" : [ "external" ], + "id" : "2", + "superClasses" : [ "10" ] + }, { + "iri" : "https://w3id.org/pmd/co/ValueObject", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A :ValueObject is an entity which represents a specific value. This value can be a numerical, textual, or a more complex data structure. If a literal value is to be specified, the :value datatype property has to be used. In cases where the value is represented by a resource (e.g. URI), the :resource object property has to be used.\n\nA value object, respectively its value, is always associated with an entity of type :Process, :ProcessingNode, :Object (e.g. :Specimen), :DigitalEntity, :Project, or other :ValueObject. The value is meant to be a charactaristic of the associated entity. To express this association it is indended to use the :characteristic object property if the value decribes some \\\"quality\\\", or the :participant (:input,:output) if it is participating a process.\n\nA value object might also refer to a unit. The :unit property might be used (e.g. with QUDT ontology).\n\nInstances of a value object might also be a type of :ValueScope, namely a :SetPoint (nominal value), or :Measurement (measured value). With :Setpoint the intend is to express, that the value is meant to be some preset, setting or nominal value. :Measurement expresses, that the value has been measured or determined somehow (see example).\n\nInstances of a value object might also be specified in a specific :DataScope (:Metadata, :PrimaryData, :SecondaryData).", + "type" : "label" + } ], + "example" : [ { + "identifier" : "example", + "language" : "en", + "value" : "- the length of a specimen\n- the model number of a machine\n- a person involved in a process\n- a force on an object", + "type" : "label" + }, { + "identifier" : "example", + "language" : "en", + "value" : ":Length rdfs:subClass :ValueObject .\nex:vo1 a :Length .\nex:vo1 a :Measurement .\nex:vo1 a :PrimaryData .\nex:vo1 :unit qudt:MilliM . \nex:vo1 :value \"123.45\"\nex:p1 a :LengthMeasuringProcess .\nex:p1 :characteristic ex:vo1 .", + "type" : "label" + }, { + "identifier" : "example", + "language" : "en", + "value" : "The length of a specimen, which has been measured as primary data. Its actual value is 123.45 millimeters.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Wertobjekt", + "IRI-based" : "ValueObject", + "en" : "Value Object" + }, + "union" : [ "290" ], + "subClasses" : [ "12", "17", "21", "25", "29", "34", "41", "250", "86", "402", "180", "148", "371", "343", "376", "186", "382", "256", "344", "257", "95", "187", "229", "65", "333", "337", "124", "218", "32", "290", "318", "89", "225", "295", "299", "2", "305", "263", "266", "270", "276", "281", "288", "234", "230" ], + "attributes" : [ "union", "external" ], + "id" : "10", + "superClasses" : [ "43" ] + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "430", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "429", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "https://w3id.org/pmd/co/Extension", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Increase in the extensometer gauge length at any moment during the test", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Zunahme der Extensometer-Messlänge zu einem beliebigen Zeitpunkt des Versuchs", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Dimensional analysis: L\nUnit (e.g. SI): mm", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Note: The extension might be measured using different channels (e.g. when using one or two extensometer channels); usually, the mean average value of involved channels is given as extension value, if applicable.\n\nNote: Optical extensometry may require a specific data storage method.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Verlängerung (der Extensometer-Messlänge)", + "IRI-based" : "Extension", + "en" : "Extension" + }, + "subClasses" : [ "243" ], + "attributes" : [ "external" ], + "id" : "234", + "superClasses" : [ "10" ] + }, { + "instances" : 0, + "union" : [ "6", "419" ], + "attributes" : [ "union", "anonymous" ], + "id" : "439" + }, { + "instances" : 0, + "union" : [ "6", "418" ], + "attributes" : [ "union", "anonymous" ], + "id" : "441" + }, { + "iri" : "https://w3id.org/pmd/co/StartTime", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The date and time when a plan/recipe or process is executed.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Startzeit", + "IRI-based" : "StartTime", + "en" : "Start Time" + }, + "attributes" : [ "external" ], + "id" : "442", + "superClasses" : [ "225" ] + }, { + "iri" : "https://w3id.org/pmd/co/TestPieceClassification", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Eigenschaft wird verwendet, um Informationen über einen Prüfkörper bezüglich seiner Einordnung gemäß entsprechender Normen zu liefern.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This property is used to provide information on a test piece concerning its graduation in accordance with corresponding standards.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Prüfkörperklassifizierung", + "IRI-based" : "TestPieceClassification", + "en" : "Test Piece Classification" + }, + "attributes" : [ "external" ], + "id" : "85", + "superClasses" : [ "86" ] + }, { + "iri" : "https://w3id.org/pmd/co/MeasuringProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A measurement process is an analysis process that acquires data (usually expressed in numbers) by using tools.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Messprozess", + "IRI-based" : "MeasuringProcess", + "en" : "Measuring Process" + }, + "attributes" : [ "external" ], + "id" : "368", + "superClasses" : [ "145" ] + }, { + "iri" : "https://w3id.org/pmd/co/IonicBond", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "\"Ionic bond.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/ionic%20bond. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Ionic bond is a chemical bond formed between oppositely charged species because of their mutual electrostatic attraction.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Eine Ionenbindung ist eine chemische Bindung, die zwischen entgegengesetzt geladenen Stoffen aufgrund ihrer gegenseitigen elektrostatischen Anziehung entsteht.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Ionische Bindung", + "IRI-based" : "IonicBond", + "en" : "Ionic Bond" + }, + "attributes" : [ "external" ], + "id" : "4", + "superClasses" : [ "1" ] + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "444", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "https://w3id.org/pmd/co/ConditioningProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Aktivität beschreibt den Prozess und die Maßnahmen, die ergriffen werden, um einen materiellen Gegenstand auf vordefinierte Umgebungsbedingungen einzustellen.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A process that comprises the procedure and measures by which a material object is adapted to predefined environmental conditions.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Konditionierungsprozess", + "IRI-based" : "ConditioningProcess", + "en" : "Conditioning Process" + }, + "subClasses" : [ "193", "437" ], + "attributes" : [ "external" ], + "id" : "106", + "superClasses" : [ "61" ] + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "id" : "445", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "id" : "342", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "id" : "446", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "id" : "227", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "https://w3id.org/pmd/co/Date", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A statement of the day of execution or making. Based on an the gregorian calender system.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Eine Erklärung über den Tag der Ausführung oder Herstellung. Basierend auf dem gregorianischen Kalendersystem.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Datum", + "IRI-based" : "Date", + "en" : "Date" + }, + "attributes" : [ "external" ], + "id" : "447", + "superClasses" : [ "225" ] + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "448", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "id" : "449", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "426", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "id" : "450", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "id" : "81", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/ns/prov#Invalidation", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasInvalidatedBy", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-Invalidation", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "undefined", + "value" : "Invalidation is the start of the destruction, cessation, or expiry of an existing entity by an activity. The entity is no longer available for use (or further invalidation) after invalidation. Any generation or usage of an entity precedes its invalidation.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "constraints" : [ { + "identifier" : "constraints", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-constraints-20130430/#prov-dm-constraints-fig", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-Invalidation", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Invalidation", + "undefined" : "Invalidation" + }, + "comment" : { + "en" : "An instance of prov:Invalidation provides additional descriptions about the binary prov:wasInvalidatedBy relation from an invalidated prov:Entity to the prov:Activity that invalidated it. For example, :uncracked_egg prov:wasInvalidatedBy :baking; prov:qualifiedInvalidation [ a prov:Invalidation; prov:activity :baking; :foo :bar ]." + }, + "attributes" : [ "external" ], + "id" : "191", + "superClasses" : [ "192", "199" ] + }, { + "iri" : "https://w3id.org/pmd/co/SpecimenName", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "This property describes the designation of a specimen, usually given as human-readable identifier by humans.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Eigenschaft beschreibt die Bezeichnung eines Prüfstücks, die in der Regel von Menschen als von Menschen lesbarer Identifikator vergeben wird.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Prüfstück Name", + "IRI-based" : "SpecimenName", + "en" : "Specimen Name" + }, + "intersection" : [ "95" ], + "attributes" : [ "intersection", "external" ], + "id" : "166", + "superClasses" : [ "95" ] + }, { + "iri" : "https://w3id.org/pmd/co/ClampingPressure", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Eigenschaft beschreibt als quantitativer Wert die Kraft pro Fläche (Druck), die beim Einbau einer Probe, eines Prüfkörpers oder eines Prüfstücks aufgebracht wird. Typischerweise ist das Aufbringen eines Klemmdrucks mit einer Art von Klemm- oder Spannzubehör (Grips) oder Ähnlichem verbunden.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This property describes the force per area (pressure) that is used during the mounting process of a sample, specimen, or test piece as a quantitative value. Typically, this process involves some sort of grips or the like.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Klemmdruck", + "IRI-based" : "ClampingPressure", + "en" : "Clamping Pressure" + }, + "attributes" : [ "external" ], + "id" : "322", + "superClasses" : [ "281" ] + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "52", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "https://w3id.org/pmd/co/Object", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A discernable, tangible or simulated entity that is processed in a process by a processing node.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Objekt", + "IRI-based" : "Object", + "en" : "Object" + }, + "subClasses" : [ "453", "454", "455", "246" ], + "attributes" : [ "external" ], + "id" : "259", + "superClasses" : [ "43" ] + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "456", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2001/XMLSchema#dateTime", + "baseIri" : "http://www.w3.org/2001/XMLSchema", + "id" : "457", + "label" : { + "IRI-based" : "dateTime" + } + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "44", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "11", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "https://w3id.org/pmd/co/MountingProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An assembly process in which a test piece or specimen is installed or otherwise integrated into a testing machine. This may also include the use of other processing nodes and components (e.g. grips).", + "type" : "label" + } ] + }, + "label" : { + "de" : "Montageprozess", + "IRI-based" : "MountingProcess", + "en" : "Mounting Process" + }, + "attributes" : [ "external" ], + "id" : "413", + "superClasses" : [ "99" ] + }, { + "iri" : "http://www.w3.org/2001/XMLSchema#dateTime", + "baseIri" : "http://www.w3.org/2001/XMLSchema", + "id" : "136", + "label" : { + "IRI-based" : "dateTime" + } + }, { + "iri" : "http://www.w3.org/2001/XMLSchema#dateTime", + "baseIri" : "http://www.w3.org/2001/XMLSchema", + "id" : "249", + "label" : { + "IRI-based" : "dateTime" + } + }, { + "iri" : "http://www.w3.org/2001/XMLSchema#dateTime", + "baseIri" : "http://www.w3.org/2001/XMLSchema", + "id" : "459", + "label" : { + "IRI-based" : "dateTime" + } + }, { + "iri" : "http://www.w3.org/2001/XMLSchema#dateTime", + "baseIri" : "http://www.w3.org/2001/XMLSchema", + "id" : "460", + "label" : { + "IRI-based" : "dateTime" + } + }, { + "iri" : "https://w3id.org/pmd/co/ProcessingNode", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Processing nodes are tools, equipment and accessories as well as software that are relevant for the performance of processes, such as e.g. mechanical and chemical test as well as simulation, prediction, and machine learning. Accordingly, processing nodes may be machines, parts of machines, and software applications.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Prozessknoten sind Werkzeuge, Geräte und Zubehör sowie Software, die für die Durchführung von Prozessen relevant sind, wie z. B. mechanische und chemische Tests sowie Simulationen, Vorhersagen und maschinelles Lernen. Dementsprechend können Prozessknoten Maschinen, Teile von Maschinen und Softwareanwendungen sein.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Prozessknoten", + "IRI-based" : "ProcessingNode", + "en" : "Processing Node" + }, + "subClasses" : [ "323", "102", "462", "153", "69", "353", "463" ], + "attributes" : [ "external" ], + "id" : "93", + "superClasses" : [ "47" ] + }, { + "iri" : "https://w3id.org/pmd/co/TemperatureChangingProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A conditioning process which is run to increase or decrease the temperature of an object or a space. Usually, this involves heating or cooling devices such as furnaces or cooling media.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Temperaturänderungsprozess", + "IRI-based" : "TemperatureChangingProcess", + "en" : "Temperature Changing Process" + }, + "attributes" : [ "external" ], + "id" : "437", + "superClasses" : [ "106" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Quotation", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasQuotedFrom", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-quotation", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A quotation is the repeat of (some or all of) an entity, such as text or image, by someone who may or may not be its original author. Quotation is a particular case of derivation.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-quotation", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Quotation", + "undefined" : "Quotation" + }, + "comment" : { + "en" : "An instance of prov:Quotation provides additional descriptions about the binary prov:wasQuotedFrom relation from some taken prov:Entity from an earlier, larger prov:Entity. For example, :here_is_looking_at_you_kid prov:wasQuotedFrom :casablanca_script; prov:qualifiedQuotation [ a prov:Quotation; prov:entity :casablanca_script; :foo :bar ]." + }, + "attributes" : [ "external" ], + "id" : "131", + "superClasses" : [ "75" ] + }, { + "iri" : "https://w3id.org/pmd/co/AgingTime", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The timespan that an Aging Process executes to completion.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Alterungszeit", + "IRI-based" : "AgingTime", + "en" : "Aging Time" + }, + "subClasses" : [ "476" ], + "attributes" : [ "external" ], + "id" : "475", + "superClasses" : [ "225" ] + }, { + "iri" : "http://www.w3.org/ns/prov#PrimarySource", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#hadPrimarySource", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-primary-source", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A primary source for a topic refers to something produced by some agent with direct experience and knowledge about the topic, at the time of the topic's study, without benefit from hindsight.\n\nBecause of the directness of primary sources, they 'speak for themselves' in ways that cannot be captured through the filter of secondary sources. As such, it is important for secondary sources to reference those primary sources from which they were derived, so that their reliability can be investigated.\n\nA primary source relation is a particular case of derivation of secondary materials from their primary sources. It is recognized that the determination of primary sources can be up to interpretation, and should be done according to conventions accepted within the application's domain.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-original-source", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "PrimarySource", + "undefined" : "PrimarySource" + }, + "comment" : { + "en" : "An instance of prov:PrimarySource provides additional descriptions about the binary prov:hadPrimarySource relation from some secondary prov:Entity to an earlier, primary prov:Entity. For example, :blog prov:hadPrimarySource :newsArticle; prov:qualifiedPrimarySource [ a prov:PrimarySource; prov:entity :newsArticle; :foo :bar ] ." + }, + "attributes" : [ "external" ], + "id" : "74", + "superClasses" : [ "75" ] + }, { + "iri" : "https://w3id.org/pmd/co/ProcessIdentifier", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Ein umgangssprachlicher, von Menschen erstellter, beschreibender Text, der die Art einer Prozessinstanz qualifiziert, die als Kennung verwendet wird, die nicht unbedingt eindeutig sein muss, z.B. “1050°C30 840°C10/ÖL”.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A colloquial, human-generated, descriptive text qualifying the nature of a process instance used as an identifier that is not strictly intended to be unique, e.g. “1050°C30 840°C10/ÖL”.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Prozessidentifikator", + "IRI-based" : "ProcessIdentifier", + "en" : "Process Identifier" + }, + "intersection" : [ "95" ], + "attributes" : [ "intersection", "external" ], + "id" : "214", + "superClasses" : [ "95" ] + }, { + "iri" : "https://w3id.org/pmd/co/Laboratory", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Laboratory.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/laboratory. Accessed 24 Nov. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A place equipped for experimental study in a science or for testing and analysis.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Labor", + "IRI-based" : "Laboratory", + "en" : "Laboratory" + }, + "intersection" : [ "101" ], + "attributes" : [ "intersection", "external" ], + "id" : "391", + "superClasses" : [ "101" ] + }, { + "iri" : "https://w3id.org/pmd/co/Fraction", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "Fraction" + }, + "subClasses" : [ "478", "479", "480", "228" ], + "attributes" : [ "external" ], + "id" : "229", + "superClasses" : [ "10" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Revision", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasRevisionOf", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-revision", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A revision is a derivation for which the resulting entity is a revised version of some original. The implication here is that the resulting entity contains substantial content from the original. Revision is a particular case of derivation.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-Revision", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Revision", + "undefined" : "Revision" + }, + "comment" : { + "en" : "An instance of prov:Revision provides additional descriptions about the binary prov:wasRevisionOf relation from some newer prov:Entity to an earlier prov:Entity. For example, :draft_2 prov:wasRevisionOf :draft_1; prov:qualifiedRevision [ a prov:Revision; prov:entity :draft_1; :foo :bar ]." + }, + "attributes" : [ "external" ], + "id" : "79", + "superClasses" : [ "75" ] + }, { + "iri" : "https://w3id.org/pmd/co/Rectangular", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Rectangular.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/rectangular. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Geformt wie ein Rechteck.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Shaped like a rectangle.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Rechteckig", + "IRI-based" : "Rectangular", + "en" : "Rectangular" + }, + "attributes" : [ "external" ], + "id" : "349", + "superClasses" : [ "89" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Role", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-attribute-role", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A role is the function of an entity or agent with respect to an activity, in the context of a usage, generation, invalidation, association, start, and end.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-attribute", + "type" : "label" + } ], + "seeAlso" : [ { + "identifier" : "seeAlso", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#hadRole", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "Role", + "undefined" : "Role" + }, + "subClasses" : [ "488", "489", "490", "491", "492" ], + "attributes" : [ "external" ], + "id" : "309" + }, { + "iri" : "https://w3id.org/pmd/co/Time", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Time.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/time. Accessed 25 Nov. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A nonspatial continuum that is measured in terms of events which succeed one another from past through present to future.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Zeit", + "IRI-based" : "Time", + "en" : "Time" + }, + "subClasses" : [ "442", "224", "495", "475", "496", "447" ], + "attributes" : [ "external" ], + "id" : "225", + "superClasses" : [ "10" ] + }, { + "iri" : "https://w3id.org/pmd/co/MaterialStructure", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Material - Classification by structure.” Wikipedia The Free Encyclopedia, https://en.wikipedia.org/wiki/Material#Classification_by_structure. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Die relevante Struktur von Materialien hat je nach Material eine unterschiedliche Längenskala. Die Struktur und Zusammensetzung eines Materials kann durch Mikroskopie oder Spektroskopie bestimmt werden.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "The relevant structure of materials has a different length scale depending on the material. The structure and composition of a material can be determined by microscopy or spectroscopy.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Materialstruktur", + "IRI-based" : "MaterialStructure", + "en" : "Material Structure" + }, + "subClasses" : [ "498", "146", "499" ], + "attributes" : [ "external" ], + "id" : "77", + "superClasses" : [ "2" ] + }, { + "iri" : "https://w3id.org/pmd/co/SimulationNode", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A simulation node is a processing node that represents a computational unit or processing element consuming and creating simulation objects and parameters. It performs specific tasks, calculations, or processes related to the simulation, and may be contributing to an overall simulation model. Simulation nodes are integral components in simulating dynamic processes, and they may interact with other nodes to collectively model complex systems or scenarios.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Simulationsknoten", + "IRI-based" : "SimulationNode", + "en" : "Simulation Node" + }, + "attributes" : [ "external" ], + "id" : "352", + "superClasses" : [ "353" ] + }, { + "iri" : "https://w3id.org/pmd/co/Pixel", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Pixel.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/pixel. Accessed 1 Dec. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Any of the small discrete elements that together constitute an image.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Pixel", + "IRI-based" : "Pixel", + "en" : "Pixel" + }, + "attributes" : [ "external" ], + "id" : "417", + "superClasses" : [ "285" ] + }, { + "iri" : "http://www.w3.org/ns/prov#End", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasEndedBy", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-End", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "End is when an activity is deemed to have been ended by an entity, known as trigger. The activity no longer exists after its end. Any usage, generation, or invalidation involving an activity precedes the activity's end. An end may refer to a trigger entity that terminated the activity, or to an activity, known as ender that generated the trigger.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "constraints" : [ { + "identifier" : "constraints", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-constraints-20130430/#prov-dm-constraints-fig", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-End", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "End", + "undefined" : "End" + }, + "comment" : { + "en" : "An instance of prov:End provides additional descriptions about the binary prov:wasEndedBy relation from some ended prov:Activity to an prov:Entity that ended it. For example, :ball_game prov:wasEndedBy :buzzer; prov:qualifiedEnd [ a prov:End; prov:entity :buzzer; :foo :bar; prov:atTime '2012-03-09T08:05:08-05:00'^^xsd:dateTime ]." + }, + "attributes" : [ "external" ], + "id" : "195", + "superClasses" : [ "161", "192" ] + }, { + "iri" : "https://w3id.org/pmd/co/SimulationProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "undefined", + "value" : "A process that is used for a simulation.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Simulationsprozess", + "IRI-based" : "SimulationProcess", + "en" : "Simulation Process" + }, + "attributes" : [ "external" ], + "id" : "158", + "superClasses" : [ "61" ] + }, { + "iri" : "https://w3id.org/pmd/co/Grips", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "https://www.merriam-webster.com/dictionary/grips", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This entity describes a part by which something, usually a tangible object, is grasped. Typically, grips are part of a mounting system (processing node) referring to a testing system.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Entität beschreibt ein Bauelement / Teil, mit dem etwas, normalerweise ein materielles Objekt, fest gegriffen oder eingespannt wird. Typischerweise sind Halterungen, Klemm- bzw. Spannsysteme Teil eines Befestigungssystems (Prozessknoten), das sich auf ein Prüfsystem bezieht.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Halterungsklemmen", + "IRI-based" : "Grips", + "en" : "Grips" + }, + "attributes" : [ "external" ], + "id" : "245", + "superClasses" : [ "246" ] + }, { + "iri" : "https://w3id.org/pmd/co/AccreditationDocument", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "https://www.merriam-webster.com/dictionary/accreditation", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Entität beschreibt ein Dokument, welches aussagt, dass einer Organisation, Person oder Einrichtung eine offizielle Konformität mit einer Norm anerkannt wurde. Dies kann z. B. Prozesse, Ausrüstungen oder ganze Laboratorien umfassen.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This entity describes a document used to state that an official authorization or approval to recognize or vouch for a conformation with a standard was granted to an organization, person, or entity. This may include, e.g., processes, (sets of) equipment, or entire laboratories.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Akkreditierungsdokument", + "IRI-based" : "AccreditationDocument", + "en" : "Accreditation Document" + }, + "attributes" : [ "external" ], + "id" : "36", + "superClasses" : [ "32" ] + }, { + "iri" : "https://w3id.org/pmd/co/MaterialDesignation", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "editorialNote" : [ { + "identifier" : "editorialNote", + "language" : "undefined", + "value" : "former \"Material\" : \"It is a substance or mixture of substances that constitutes an object. represented by the sum of material properties and material structure\"", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "undefined", + "value" : "It is a name or identifier of a material type. It designates a material. \nE.g. \"steel\", \"aluminium\", \"wood\", \"plastic\", \"rubber\".", + "type" : "label" + } ] + }, + "label" : { + "de" : "Materialbezeichnung", + "IRI-based" : "MaterialDesignation", + "en" : "Material Designation" + }, + "attributes" : [ "external" ], + "id" : "133", + "superClasses" : [ "2" ] + }, { + "iri" : "https://w3id.org/pmd/co/MinorAxisDiameter", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The longest diameter of an ellipse.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Hauptachsendurchmesser", + "IRI-based" : "MinorAxisDiameter", + "en" : "Major axis diameter" + }, + "attributes" : [ "external" ], + "id" : "404", + "superClasses" : [ "305" ] + }, { + "iri" : "https://w3id.org/pmd/co/MajorAxisDiameter", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The shortest diameter of an ellipse.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Halbachsendurchmesser", + "IRI-based" : "MajorAxisDiameter", + "en" : "Minor axis diameter" + }, + "attributes" : [ "external" ], + "id" : "364", + "superClasses" : [ "305" ] + }, { + "iri" : "https://w3id.org/pmd/co/BaseMaterial", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This entity is used to describe the material that was taken as granted as such and used in the beginning of a process chain under consideration.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Ausgangsmaterial", + "IRI-based" : "BaseMaterial", + "en" : "Base Material" + }, + "attributes" : [ "external" ], + "id" : "517", + "superClasses" : [ "454" ] + }, { + "iri" : "https://w3id.org/pmd/co/DataAcquisitionRate", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Eigenschaft bezeichnet die Anzahl der Messungen / Abfragen pro Zeiteinheit bei einer betrachteten Messung einer Messgröße (Abtast-/Abfragerate bei der Datenerfassung).", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This property denotes the number of measurements / queries per time period for a considered measurement of a measurement parameter (sampling / query rate during data acquisition).", + "type" : "label" + } ] + }, + "label" : { + "de" : "Datenerfassungsrate", + "IRI-based" : "DataAcquisitionRate", + "en" : "Data Acquisition Rate" + }, + "attributes" : [ "external" ], + "id" : "371", + "superClasses" : [ "10" ] + }, { + "iri" : "https://w3id.org/pmd/co/OperatorRole", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A role indicating that its bearer participates a process as operator.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "OperatorRole", + "en" : "Operator Role" + }, + "attributes" : [ "external" ], + "id" : "491", + "superClasses" : [ "309" ] + }, { + "iri" : "https://w3id.org/pmd/co/ValueScope", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This class expresses the categorization of :ValueObjects into measurements and setpoints.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "An entity that makes it possible to add categorization to \"ValueObjects\".", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Eine Entität, die es ermöglicht \"ValueObjects\" zusätzlich zu kategorisieren.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Wertekategorie", + "IRI-based" : "ValueScope", + "en" : "Value Scope" + }, + "subClasses" : [ "109", "521" ], + "attributes" : [ "external" ], + "id" : "110", + "superClasses" : [ "43" ] + }, { + "iri" : "https://w3id.org/pmd/co/CommissionTime", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Date and time an order or plan has been dispatched at.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Kommissionszeit", + "IRI-based" : "CommissionTime", + "en" : "Commission Time" + }, + "attributes" : [ "external" ], + "id" : "496", + "superClasses" : [ "225" ] + }, { + "iri" : "https://w3id.org/pmd/co/DemountingProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An assembling process in which a test piece or specimen is removed from a test machine.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Demontageprozess", + "IRI-based" : "DemountingProcess", + "en" : "Demounting Process" + }, + "attributes" : [ "external" ], + "id" : "411", + "superClasses" : [ "99" ] + }, { + "iri" : "https://w3id.org/pmd/co/GeometryChangingProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A process that is modifing the geometry of an object.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "GeometryChangingProcess", + "en" : "Geometry Changing Process" + }, + "subClasses" : [ "533" ], + "attributes" : [ "external" ], + "id" : "91", + "superClasses" : [ "61" ] + }, { + "iri" : "https://w3id.org/pmd/pgo/PrecipitateDistance", + "baseIri" : "https://w3id.org/pmd/pgo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/pgo", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "As a subclass of distance, the precipitate distance is a measure of the distance between two precipitates. Usually, this distance is obtained from analysing dark-field TEM images and given in nanometers.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Als Subklasse des Abstands ist der Ausscheidungsabstand ein Maß für den Abstand zwischen zwei Ausscheidungen in metallischen Legierungen. Üblicherweise wird dieser Abstand aus der Analyse von Dunkelfeld-TEM-Bildern gewonnen und in Nanometern angegeben.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Ausscheidungsabstand", + "IRI-based" : "PrecipitateDistance", + "en" : "Precipitate Distance" + }, + "subClasses" : [ "540" ], + "attributes" : [ "external" ], + "id" : "539", + "superClasses" : [ "263" ] + }, { + "iri" : "https://w3id.org/pmd/co/ManufacturingProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A process that is driven by the primary intent to transform objects.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Herstellungsprozess", + "IRI-based" : "ManufacturingProcess", + "en" : "Manufacture Process" + }, + "attributes" : [ "external" ], + "id" : "424", + "superClasses" : [ "61" ] + }, { + "iri" : "https://w3id.org/pmd/co/DepartmentRole", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "label" : { + "IRI-based" : "DepartmentRole", + "en" : "Department Role", + "undefined" : "A role indication that an organization is a sub section of another organization." + }, + "attributes" : [ "external" ], + "id" : "488", + "superClasses" : [ "309" ] + }, { + "iri" : "http://purl.org/spar/datacite/Identifier", + "baseIri" : "http://purl.org/spar/datacite", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://purl.org/spar/datacite", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "Identifier", + "en" : "DataCite Identifier" + }, + "intersection" : [ "257", "10" ], + "attributes" : [ "intersection", "external" ], + "id" : "550" + }, { + "iri" : "https://w3id.org/pmd/co/HydrogenBond", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "\"Hydrogen bond.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/hydrogen%20bond. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Eine Wasserstoffbindung ist eine elektrostatische Anziehung zwischen einem Wasserstoffatom in einem polaren Molekül (z. B. Wasser) und einem kleinen elektronegativen Atom (z. B. Sauerstoff, Stickstoff oder Fluor) in einem anderen Molekül der gleichen oder einer anderen polaren Substanz.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Hydrogen bond is an electrostatic attraction between a hydrogen atom in one polar molecule (as of water) and a small electronegative atom (as of oxygen, nitrogen, or fluorine) in usually another molecule of the same or a different polar substance.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Wasserstoffbindung", + "IRI-based" : "HydrogenBond", + "en" : "Hydrogen Bond" + }, + "attributes" : [ "external" ], + "id" : "23", + "superClasses" : [ "1" ] + }, { + "iri" : "http://purl.obolibrary.org/obo/IAO_0000078", + "baseIri" : "http://purl.obolibrary.org/obo", + "instances" : 0, + "annotations" : { + "IAO_0000111" : [ { + "identifier" : "IAO_0000111", + "language" : "en", + "value" : "curation status specification", + "type" : "label" + } ], + "IAO_0000115" : [ { + "identifier" : "IAO_0000115", + "language" : "en", + "value" : "The curation status of the term. The allowed values come from an enumerated list of predefined terms. See the specification of these instances for more detailed definitions of each enumerated value.", + "type" : "label" + } ], + "IAO_0000114" : [ { + "identifier" : "IAO_0000114", + "language" : "undefined", + "value" : "http://purl.obolibrary.org/obo/IAO_0000125", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "IAO_0000078", + "en" : "curation status specification" + }, + "individuals" : [ { + "iri" : "http://purl.obolibrary.org/obo/IAO_0000125", + "baseIri" : "http://purl.obolibrary.org/obo", + "annotations" : { + "IAO_0000111" : [ { + "identifier" : "IAO_0000111", + "language" : "en", + "value" : "pending final vetting", + "type" : "label" + } ], + "IAO_0000115" : [ { + "identifier" : "IAO_0000115", + "language" : "en", + "value" : "All definitions, placement in the asserted IS_A hierarchy and required minimal metadata are complete. The class is awaiting a final review by someone other than the term editor.", + "type" : "label" + } ] + }, + "labels" : { + "IRI-based" : "IAO_0000125", + "en" : "pending final vetting" + } + }, { + "iri" : "http://purl.obolibrary.org/obo/IAO_0000423", + "baseIri" : "http://purl.obolibrary.org/obo", + "annotations" : { + "IAO_0000111" : [ { + "identifier" : "IAO_0000111", + "language" : "en", + "value" : "to be replaced with external ontology term", + "type" : "label" + } ], + "IAO_0000115" : [ { + "identifier" : "IAO_0000115", + "language" : "en", + "value" : "Terms with this status should eventually replaced with a term from another ontology.", + "type" : "label" + } ], + "IAO_0000117" : [ { + "identifier" : "IAO_0000117", + "language" : "en", + "value" : "Alan Ruttenberg", + "type" : "label" + } ], + "IAO_0000119" : [ { + "identifier" : "IAO_0000119", + "language" : "en", + "value" : "group:OBI", + "type" : "label" + } ] + }, + "labels" : { + "IRI-based" : "IAO_0000423", + "en" : "to be replaced with external ontology term" + } + }, { + "iri" : "http://purl.obolibrary.org/obo/IAO_0000121", + "baseIri" : "http://purl.obolibrary.org/obo", + "annotations" : { + "IAO_0000111" : [ { + "identifier" : "IAO_0000111", + "language" : "en", + "value" : "organizational term", + "type" : "label" + } ], + "IAO_0000115" : [ { + "identifier" : "IAO_0000115", + "language" : "en", + "value" : "Term created to ease viewing/sort terms for development purpose, and will not be included in a release", + "type" : "label" + } ] + }, + "labels" : { + "IRI-based" : "IAO_0000121", + "en" : "organizational term" + } + }, { + "iri" : "http://purl.obolibrary.org/obo/IAO_0000122", + "baseIri" : "http://purl.obolibrary.org/obo", + "annotations" : { + "IAO_0000111" : [ { + "identifier" : "IAO_0000111", + "language" : "en", + "value" : "ready for release", + "type" : "label" + } ], + "IAO_0000115" : [ { + "identifier" : "IAO_0000115", + "language" : "en", + "value" : "Class has undergone final review, is ready for use, and will be included in the next release. Any class lacking \"ready_for_release\" should be considered likely to change place in hierarchy, have its definition refined, or be obsoleted in the next release. Those classes deemed \"ready_for_release\" will also derived from a chain of ancestor classes that are also \"ready_for_release.\"", + "type" : "label" + } ] + }, + "labels" : { + "IRI-based" : "IAO_0000122", + "en" : "ready for release" + } + }, { + "iri" : "http://purl.obolibrary.org/obo/IAO_0000002", + "baseIri" : "http://purl.obolibrary.org/obo", + "annotations" : { + "IAO_0000111" : [ { + "identifier" : "IAO_0000111", + "language" : "en", + "value" : "example to be eventually removed", + "type" : "label" + } ] + }, + "labels" : { + "IRI-based" : "IAO_0000002", + "en" : "example to be eventually removed" + } + }, { + "iri" : "http://purl.obolibrary.org/obo/IAO_0000123", + "baseIri" : "http://purl.obolibrary.org/obo", + "annotations" : { + "IAO_0000111" : [ { + "identifier" : "IAO_0000111", + "language" : "en", + "value" : "metadata incomplete", + "type" : "label" + } ], + "IAO_0000115" : [ { + "identifier" : "IAO_0000115", + "language" : "en", + "value" : "Class is being worked on; however, the metadata (including definition) are not complete or sufficiently clear to the branch editors.", + "type" : "label" + } ] + }, + "labels" : { + "IRI-based" : "IAO_0000123", + "en" : "metadata incomplete" + } + }, { + "iri" : "http://purl.obolibrary.org/obo/IAO_0000124", + "baseIri" : "http://purl.obolibrary.org/obo", + "annotations" : { + "IAO_0000111" : [ { + "identifier" : "IAO_0000111", + "language" : "en", + "value" : "uncurated", + "type" : "label" + } ], + "IAO_0000115" : [ { + "identifier" : "IAO_0000115", + "language" : "en", + "value" : "Nothing done yet beyond assigning a unique class ID and proposing a preferred term.", + "type" : "label" + } ] + }, + "labels" : { + "IRI-based" : "IAO_0000124", + "en" : "uncurated" + } + }, { + "iri" : "http://purl.obolibrary.org/obo/IAO_0000120", + "baseIri" : "http://purl.obolibrary.org/obo", + "annotations" : { + "IAO_0000111" : [ { + "identifier" : "IAO_0000111", + "language" : "en", + "value" : "metadata complete", + "type" : "label" + } ], + "IAO_0000115" : [ { + "identifier" : "IAO_0000115", + "language" : "en", + "value" : "Class has all its metadata, but is either not guaranteed to be in its final location in the asserted IS_A hierarchy or refers to another class that is not complete.", + "type" : "label" + } ] + }, + "labels" : { + "IRI-based" : "IAO_0000120", + "en" : "metadata complete" + } + }, { + "iri" : "http://purl.obolibrary.org/obo/IAO_0000428", + "baseIri" : "http://purl.obolibrary.org/obo", + "annotations" : { + "IAO_0000115" : [ { + "identifier" : "IAO_0000115", + "language" : "en", + "value" : "A term that is metadata complete, has been reviewed, and problems have been identified that require discussion before release. Such a term requires editor note(s) to identify the outstanding issues.", + "type" : "label" + } ] + }, + "labels" : { + "IRI-based" : "IAO_0000428", + "en" : "requires discussion" + } + } ], + "attributes" : [ "external" ], + "id" : "551" + }, { + "iri" : "https://w3id.org/pmd/co/EngineeredMaterial", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A material that is synthesized within a manufacturing process.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Ein Material, das im Rahmen eines Herstellungsprozesses synthetisiert wird.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "EngineeredMaterial", + "en" : "Engineered Material" + }, + "subClasses" : [ "115", "517", "552" ], + "attributes" : [ "external" ], + "id" : "454", + "superClasses" : [ "259" ] + }, { + "iri" : "http://www.w3.org/ns/prov#InstantaneousEvent", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The PROV data model is implicitly based on a notion of instantaneous events (or just events), that mark transitions in the world. Events include generation, usage, or invalidation of entities, as well as starting or ending of activities. This notion of event is not first-class in the data model, but it is useful for explaining its other concepts and its semantics.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "constraints" : [ { + "identifier" : "constraints", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-constraints-20130430/#dfn-event", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "InstantaneousEvent", + "undefined" : "InstantaneousEvent" + }, + "subClasses" : [ "312", "201", "191", "195", "197" ], + "comment" : { + "en" : "An instantaneous event, or event for short, happens in the world and marks a change in the world, in its activities and in its entities. The term 'event' is commonly used in process algebra with a similar meaning. Events represent communications or interactions; they are assumed to be atomic and instantaneous." + }, + "attributes" : [ "external" ], + "id" : "192" + }, { + "iri" : "https://w3id.org/pmd/co/ThermalInsulation", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "https://en.wikipedia.org/wiki/Thermal_insulation", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Thermal insulation is the reduction of heat transfer (i.e., the transfer of thermal energy between objects of differing temperature) between objects in thermal contact or in range of radiative influence. Thermal insulation can be achieved with specially engineered methods or processes, as well as with suitable object shapes and materials.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Thermische Isolierung", + "IRI-based" : "ThermalInsulation", + "en" : "Thermal Insulation" + }, + "attributes" : [ "external" ], + "id" : "184", + "superClasses" : [ "180" ] + }, { + "iri" : "https://w3id.org/pmd/co/ErrorReportDocument", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Entität beschreibt ein Dokument, das Informationen über Fehler bereitstellt, die während der Anwendung eines Prozessknotens aufgetreten sind, wie z. B. eine Überschreitung des Arbeitsbereichs eines Messgeräts.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This entity describes a document used to provide information on errors that occurred during the application of a process node, such as, e.g., an overshooting exceeding the working range of a measurement device.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Fehlerberichtdokument", + "IRI-based" : "ErrorReportDocument", + "en" : "Error Report Document" + }, + "attributes" : [ "external" ], + "id" : "398", + "superClasses" : [ "32" ] + }, { + "iri" : "http://qudt.org/schema/qudt/Unit", + "baseIri" : "http://qudt.org/schema/qudt", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://qudt.org/schema/qudt", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "Unit" + }, + "individuals" : [ { + "iri" : "https://w3id.org/pmd/co/PixelUnit", + "baseIri" : "https://w3id.org/pmd/co", + "annotations" : { + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Pixel” Wikipedia The Free Encyclopedia, https://en.wikipedia.org/wiki/Pixel. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "In der digitalen Bildgebung ist ein Pixel (abgekürzt px), ein Pel oder ein Bildelement das kleinste adressierbare Element in einem Rasterbild oder der kleinste Punkt in einem alle Punkte adressierbaren Anzeigegerät. Bei den meisten digitalen Anzeigegeräten sind Pixel das kleinste Element, das durch Software manipuliert werden kann.\nHier wird es als eine Einheit von gezählten Pixeln bezeichnet. (Es handelt sich nicht um eine offiziell anerkannte Einheit.)", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "In digital imaging, a pixel (abbreviated px), pel, or picture element is the smallest addressable element in a raster image, or the smallest point in an all points addressable display device. In most digital display devices, pixels are the smallest element that can be manipulated through software. Here it is referred to as a unit of counted pixels. (It is not an officially recognized unit).", + "type" : "label" + } ] + }, + "labels" : { + "de" : "Pixeleinheit", + "IRI-based" : "PixelUnit", + "en" : "Pixel Unit" + } + }, { + "iri" : "https://w3id.org/pmd/co/PixelPerNanometerUnit", + "baseIri" : "https://w3id.org/pmd/co", + "annotations" : { + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Einheit der gezählten Pixel pro Nanometer. (Es handelt sich nicht um eine offizielle Einheit.)", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Unit of counted pixels per nanometer. (It is not an official unit.)", + "type" : "label" + } ] + }, + "labels" : { + "de" : "Pixel pro Nanometer", + "IRI-based" : "PixelPerNanometerUnit", + "en" : "Pixel Per Nanometer" + } + } ], + "attributes" : [ "external" ], + "id" : "554" + }, { + "iri" : "http://www.w3.org/ns/prov#ActivityInfluence", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "editorsDefinition" : [ { + "identifier" : "editorsDefinition", + "language" : "en", + "value" : "ActivitiyInfluence is the capacity of an activity to have an effect on the character, development, or behavior of another by means of generation, invalidation, communication, or other.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "seeAlso" : [ { + "identifier" : "seeAlso", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#activity", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "ActivityInfluence", + "undefined" : "ActivityInfluence" + }, + "subClasses" : [ "143", "201", "191" ], + "comment" : { + "en" : "ActivityInfluence provides additional descriptions of an Activity's binary influence upon any other kind of resource. Instances of ActivityInfluence use the prov:activity property to cite the influencing Activity." + }, + "attributes" : [ "external" ], + "id" : "199", + "superClasses" : [ "6" ] + }, { + "iri" : "https://w3id.org/pmd/co/AmorphousStructure", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Amorphous solid - Structure.” Wikipedia The Free Encyclopedia, https://en.wikipedia.org/wiki/Amorphous_solid. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Amorphous materials have an internal structure consisting of interconnected structural blocks that can be similar to the basic structural units found in the corresponding crystalline phase of the same compound. Unlike in crystalline materials, however, no long-range order exists. Amorphous materials therefore cannot be defined by a finite unit cell. ", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Amorphe Materialien haben eine innere Struktur, die aus miteinander verbundenen Strukturblöcken besteht, die den grundlegenden Struktureinheiten in der entsprechenden kristallinen Phase der gleichen Verbindung ähnlich sein können. Anders als bei kristallinen Materialien besteht jedoch keine langfristige Ordnung. Amorphe Materialien können daher nicht durch eine bestimmte Einheitszelle definiert werden. ", + "type" : "label" + } ] + }, + "label" : { + "de" : "Amorphe Struktur", + "IRI-based" : "AmorphousStructure", + "en" : "Amorphous Structure" + }, + "attributes" : [ "external" ], + "id" : "499", + "superClasses" : [ "77" ] + }, { + "iri" : "https://w3id.org/pmd/co/Medium", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Substance that surrounds an object inside the system boundaries of a processing node.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Medium", + "IRI-based" : "Medium", + "en" : "Medium" + }, + "attributes" : [ "external" ], + "id" : "453", + "superClasses" : [ "259" ] + }, { + "iri" : "https://w3id.org/pmd/co/PercentageExtension", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "extension expressed as a percentage of the extensometer gauge length\n\nNote: The percentage extension is commonly called engineering strain.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "in Prozent angegebene Verlängerung der Extensometer-Messlänge\n\nAnmerkung: Die Extensometer-Dehnung wird oftmals auch als technische Dehnung bezeichnet.", + "type" : "label" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "de", + "value" : "technische Dehnung", + "type" : "label" + }, { + "identifier" : "altLabel", + "language" : "en", + "value" : "(engineering) strain", + "type" : "label" + } ] + }, + "label" : { + "de" : "Extensometer-Dehnung", + "IRI-based" : "PercentageExtension", + "en" : "Percentage Extension" + }, + "attributes" : [ "external" ], + "id" : "243", + "superClasses" : [ "234" ] + }, { + "iri" : "https://w3id.org/pmd/co/Radiological", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Radiological.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/radiological. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Radiologisch bezieht sich auf die Radiologie. Hier speziell auf die radiologischen Eigenschaften eines Materials.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Radiological is relating to radiology. Here specifically to the radiological properties of a material.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Radiologisch", + "IRI-based" : "Radiological", + "en" : "Radiological" + }, + "attributes" : [ "external" ], + "id" : "205", + "superClasses" : [ "104" ] + }, { + "iri" : "https://w3id.org/pmd/co/Specimen", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "undefined", + "value" : "An object designed for a specific analysis.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Prüfling", + "IRI-based" : "Specimen", + "en" : "Specimen" + }, + "attributes" : [ "external" ], + "id" : "114", + "superClasses" : [ "115" ] + }, { + "iri" : "https://w3id.org/pmd/co/Identifier", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A named value intended to distinguish between entities.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Identifikator", + "IRI-based" : "Identifier", + "en" : "Identifier" + }, + "subClasses" : [ "94", "212", "214", "216", "189", "164", "166", "168" ], + "attributes" : [ "external" ], + "id" : "95", + "superClasses" : [ "10" ] + }, { + "iri" : "https://w3id.org/pmd/co/MaterialQuality", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "i.e. Materialgüte", + "type" : "label" + } ] + }, + "label" : { + "de" : "Materialqualität", + "IRI-based" : "MaterialQuality", + "en" : "Material Quality" + }, + "attributes" : [ "external" ], + "id" : "126", + "superClasses" : [ "2" ] + }, { + "iri" : "https://w3id.org/pmd/co/Micropscope", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Microscope.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/microscope. Accessed 5 Dec. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An optical instrument consisting of a lens or combination of lenses for making enlarged images of minute objects.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Mikroskop", + "IRI-based" : "Micropscope", + "en" : "Microscope" + }, + "subClasses" : [ "68" ], + "attributes" : [ "external" ], + "id" : "69", + "superClasses" : [ "93" ] + }, { + "iri" : "https://w3id.org/pmd/co/LaboratoryRole", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "A role indicating that an organization participates in a process as laboratory.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "LaboratoryRole", + "en" : "Laboratory Role" + }, + "attributes" : [ "external" ], + "id" : "492", + "superClasses" : [ "309" ] + }, { + "iri" : "https://w3id.org/pmd/co/MeasuringDevice", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "undefined", + "value" : "A processing node capable of determining a specific quality.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Messgerät", + "IRI-based" : "MeasuringDevice", + "en" : "Measuring Device" + }, + "subClasses" : [ "171", "173", "175", "177", "179", "152" ], + "attributes" : [ "external" ], + "id" : "153", + "superClasses" : [ "93" ] + }, { + "iri" : "https://w3id.org/pmd/pgo/PrecipitateArea", + "baseIri" : "https://w3id.org/pmd/pgo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/pgo", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Als Subklasse der Fläche ist die Ausscheidungsfläche ein Maß,welches zum Vergleich von Ausscheidungsgrößen verwendet wird. In der Regel wird für Ausscheidungspartikel eine kreisförmige Näherung verwendet.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "As a subclass of the area, the precipitate area is a measure that is used to compare precipitate sizes. As a rule, a circular approximation is used for precipitation particles.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Ausscheidungsfläche", + "IRI-based" : "PrecipitateArea", + "en" : "Precipitate Area" + }, + "attributes" : [ "external" ], + "id" : "231", + "superClasses" : [ "230" ] + }, { + "iri" : "https://w3id.org/pmd/co/Filter", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "https://en.wikipedia.org/wiki/Filter_%28software%29", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A filter is a computer program or subroutine to process a stream, producing another stream. While a single filter can be used individually, they are frequently strung together to form a pipeline.", + "type" : "label" + } ], + "example" : [ { + "identifier" : "example", + "language" : "en", + "value" : "Smoothing algorithm", + "type" : "label" + } ] + }, + "label" : { + "de" : "Filter", + "IRI-based" : "Filter", + "en" : "Filter" + }, + "attributes" : [ "external" ], + "id" : "361", + "superClasses" : [ "274" ] + }, { + "iri" : "http://www.w3.org/ns/prov#EmptyCollection", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "collections", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An empty collection is a collection without members.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "EmptyCollection", + "en" : "EmptyCollection" + }, + "attributes" : [ "external" ], + "id" : "278", + "superClasses" : [ "279" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Agent", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-agent", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An agent is something that bears some form of responsibility for an activity taking place, for the existence of an entity, or for another agent's activity. ", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "starting-point", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-Agent", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Agent", + "undefined" : "Agent" + }, + "subClasses" : [ "87", "93", "101", "108" ], + "attributes" : [ "external" ], + "id" : "47" + }, { + "iri" : "https://w3id.org/pmd/co/Sample", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ISO 18589-1:2019-11 (international standardization committee: ISO/TC 85/SC 2/WG 17)", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Portion of material, usually selected from a larger quantity of material, collected and taken away for testing", + "type" : "label" + } ] + }, + "label" : { + "de" : "Probe", + "IRI-based" : "Sample", + "en" : "Sample" + }, + "subClasses" : [ "114", "119" ], + "attributes" : [ "external" ], + "id" : "115", + "superClasses" : [ "454" ] + }, { + "iri" : "https://w3id.org/pmd/co/Location", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Location.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/location. Accessed 17 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A position or site occupied or available for occupancy or marked by some distinguishing feature.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Eine Position oder ein Ort, der besetzt ist oder besetzt werden kann oder durch ein bestimmtes Merkmal gekennzeichnet ist.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Ort", + "IRI-based" : "Location", + "en" : "Location" + }, + "attributes" : [ "external" ], + "id" : "25", + "superClasses" : [ "10" ] + }, { + "iri" : "https://w3id.org/pmd/co/TestingRate", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "rate (resp. rates) used during the test", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "während des Versuchs verwendete Geschwindigkeit(en)", + "type" : "label" + } ] + }, + "label" : { + "de" : "Prüfgeschwindigkeit", + "IRI-based" : "TestingRate", + "en" : "Testing Rate" + }, + "attributes" : [ "external" ], + "id" : "382", + "superClasses" : [ "10" ] + }, { + "iri" : "https://w3id.org/pmd/co/Temperature", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Temperature.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/temperature. Accessed 25 Nov. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The degree of hotness or coldness measured on a definite scale.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Temperatur", + "IRI-based" : "Temperature", + "en" : "Temperature" + }, + "subClasses" : [ "123", "128" ], + "attributes" : [ "external" ], + "id" : "124", + "superClasses" : [ "10" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Location", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-attribute-location", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A location can be an identifiable geographic place (ISO 19112), but it can also be a non-geographic place such as a directory, row, or column. As such, there are numerous ways in which location can be expressed, such as by a coordinate, address, landmark, and so forth.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-attribute", + "type" : "label" + } ], + "seeAlso" : [ { + "identifier" : "seeAlso", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#atLocation", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "Location", + "undefined" : "Location" + }, + "attributes" : [ "external" ], + "id" : "72" + }, { + "iri" : "https://w3id.org/pmd/co/Operator", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Operator.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/operator. Accessed 24 Nov. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A person that operates a machine or device.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Operator", + "IRI-based" : "Operator", + "en" : "Operator" + }, + "intersection" : [ "87" ], + "attributes" : [ "intersection", "external" ], + "id" : "565" + }, { + "iri" : "https://w3id.org/pmd/co/Force", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Force.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/force. Accessed 5 Dec. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Strength or energy exerted or brought to bear : cause of motion or change : active power.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Kraft", + "IRI-based" : "Force", + "en" : "Force" + }, + "attributes" : [ "external" ], + "id" : "299", + "superClasses" : [ "10" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Derivation", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasDerivedFrom", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-Derivation", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A derivation is a transformation of an entity into another, an update of an entity resulting in a new one, or the construction of a new entity based on a pre-existing entity.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "constraints" : [ { + "identifier" : "constraints", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-constraints-20130430/#prov-dm-constraints-fig", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#Derivation-Relation", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Derivation", + "undefined" : "Derivation" + }, + "subClasses" : [ "131", "74", "79" ], + "comment" : { + "en" : "An instance of prov:Derivation provides additional descriptions about the binary prov:wasDerivedFrom relation from some derived prov:Entity to another prov:Entity from which it was derived. For example, :chewed_bubble_gum prov:wasDerivedFrom :unwrapped_bubble_gum; prov:qualifiedDerivation [ a prov:Derivation; prov:entity :unwrapped_bubble_gum; :foo :bar ]." + }, + "attributes" : [ "external" ], + "id" : "75", + "superClasses" : [ "161" ] + }, { + "iri" : "https://w3id.org/pmd/co/Department", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A sub section of an organization.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Abteilung", + "IRI-based" : "Department", + "en" : "Department" + }, + "intersection" : [ "101" ], + "attributes" : [ "intersection", "external" ], + "id" : "390", + "superClasses" : [ "101" ] + }, { + "iri" : "https://w3id.org/pmd/co/Project", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A series of goal-orientated (intent) activities and interactions to achieve a specific outcome.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Eine Reihe von zielorientierten (absichtlichen) Aktivitäten und Interaktionen, um ein bestimmtes Ergebnis zu erzielen.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Projekt", + "IRI-based" : "Project", + "en" : "Project" + }, + "attributes" : [ "external" ], + "id" : "62", + "superClasses" : [ "135" ] + }, { + "iri" : "https://w3id.org/pmd/co/MetallicBond", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "\"Metallic bond.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/metallic%20bond. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Metallische Bindung ist die für den metallischen Zustand typische chemische Bindung, die durch bewegliche Valenzelektronen gekennzeichnet ist, die die Atome in der Regel in Kristallgittern zusammenhalten und für die gute elektrische und Wärmeleitfähigkeit von Metallen verantwortlich sind.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Metallic bond is the chemical bond typical of the metallic state and characterized by mobile valence electrons that hold the atoms together usually in crystal lattices and are responsible for the good electrical and heat conductivity of metals.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Metallbindung", + "IRI-based" : "MetallicBond", + "en" : "Metallic Bond" + }, + "attributes" : [ "external" ], + "id" : "15", + "superClasses" : [ "1" ] + }, { + "iri" : "https://w3id.org/pmd/co/MicrometerGauge", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "https://www.merriam-webster.com/dictionary/micrometer%20caliper", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Entität beschreibt ein Werkzeug zur Durchführung präziser Messungen mit einer Spindel, die durch eine Feingewindeschraube bewegt wird.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This entity describes a tool for making precise measurements having a spindle moved by a finely threaded screw.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Bügelmessschraube", + "IRI-based" : "MicrometerGauge", + "en" : "Micrometer Gauge" + }, + "attributes" : [ "external" ], + "id" : "177", + "superClasses" : [ "153" ] + }, { + "iri" : "https://w3id.org/pmd/co/TestPieceInfo", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This property is used to provide information on a test piece such as its geometric shape, classification, and other parameters, including specifications and nominal values. The information is provided with respect to corresponding standards.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Eigenschaft wird verwendet, um Informationen über einen Prüfkörper zu liefern, wie z. B. seine geometrische Form, seine Klassifizierung und andere Parameter, einschließlich von Spezifikationen und Nennwerte. Die Informationen werden in Bezug auf die entsprechenden Normen bereitgestellt.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Prüfkörperinformationen", + "IRI-based" : "TestPieceInfo", + "en" : "Test Piece Info" + }, + "subClasses" : [ "85" ], + "attributes" : [ "external" ], + "id" : "86", + "superClasses" : [ "10" ] + }, { + "iri" : "https://w3id.org/pmd/co/BondingType", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "\"Bond types.” American Heritage® Dictionary of the English Language, Fifth Edition, https://www.thefreedictionary.com/Bond+Types. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Any of several forces, especially the ionic bond, covalent bond, and metallic bond, by which atoms or ions are bound in a molecule or crystal.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Eine von mehreren Bindungen, insbesondere die Ionenbindung, die kovalente Bindung und die Metallbindung, durch die Atome oder Ionen in einem Molekül oder Kristall gebunden sind.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Bindungstyp", + "IRI-based" : "BondingType", + "en" : "BondingType" + }, + "subClasses" : [ "4", "15", "19", "23", "27" ], + "attributes" : [ "external" ], + "id" : "1", + "superClasses" : [ "2" ] + }, { + "iri" : "https://w3id.org/pmd/co/InitiatorRole", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A role indicating that its bearer has inititated a process.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Initiator Role", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "InitiatorRole" + }, + "attributes" : [ "external" ], + "id" : "489", + "superClasses" : [ "309" ] + }, { + "iri" : "https://w3id.org/pmd/co/Roughness", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "https://en.wikipedia.org/wiki/Surface_roughness", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Surface roughness, often shortened to roughness, is a component of surface finish (surface texture). It is quantified by the deviations in the direction of the normal vector of a real surface from its ideal form. If these deviations are large, the surface is rough; if they are small, the surface is smooth.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Die Oberflächenrauheit, oft abgekürzt als Rauheit, ist eine Komponente zur Beschreibung der Oberflächenbeschaffenheit (Oberflächentextur). Sie wird durch die Abweichungen in der Richtung des Normalenvektors einer realen Oberfläche von ihrer idealen Form quantifiziert. Sind diese Abweichungen groß, ist die Oberfläche rau (große Rauheit), sind sie klein, ist die Oberfläche glatt (geringe Rauheit).", + "type" : "label" + } ] + }, + "label" : { + "de" : "Oberflächenrauheit", + "IRI-based" : "Roughness", + "en" : "Roughness" + }, + "attributes" : [ "external" ], + "id" : "333", + "superClasses" : [ "10" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Start", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasStartedBy", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-Start", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Start is when an activity is deemed to have been started by an entity, known as trigger. The activity did not exist before its start. Any usage, generation, or invalidation involving an activity follows the activity's start. A start may refer to a trigger entity that set off the activity, or to an activity, known as starter, that generated the trigger.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "constraints" : [ { + "identifier" : "constraints", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-constraints-20130430/#prov-dm-constraints-fig", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-Start", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Start", + "undefined" : "Start" + }, + "comment" : { + "en" : "An instance of prov:Start provides additional descriptions about the binary prov:wasStartedBy relation from some started prov:Activity to an prov:Entity that started it. For example, :foot_race prov:wasStartedBy :bang; prov:qualifiedStart [ a prov:Start; prov:entity :bang; :foo :bar; prov:atTime '2012-03-09T08:05:08-05:00'^^xsd:dateTime ] ." + }, + "attributes" : [ "external" ], + "id" : "197", + "superClasses" : [ "161", "192" ] + }, { + "iri" : "https://w3id.org/pmd/co/MediaMovement", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Displacement of media surrounding objects inside the system boundaries of a processing node.", + "type" : "label" + } ], + "example" : [ { + "identifier" : "example", + "language" : "en", + "value" : "Circulation of a gaseous media within the systems boundaries.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Medienbewegung", + "IRI-based" : "MediaMovement", + "en" : "Media Movement" + }, + "attributes" : [ "external" ], + "id" : "182", + "superClasses" : [ "180" ] + }, { + "iri" : "https://w3id.org/pmd/co/Document", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Document.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/document. Accessed 16 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An original or official paper relied on as the basis, proof, or support of something", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Ein Original oder offizielles Papier, auf das man sich als Grundlage, Beweis oder Unterstützung von etwas stützt.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Dokument", + "IRI-based" : "Document", + "en" : "Document" + }, + "subClasses" : [ "31", "36", "39", "398", "156" ], + "attributes" : [ "external" ], + "id" : "32", + "superClasses" : [ "10" ] + }, { + "iri" : "https://w3id.org/pmd/co/TestingMachine", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This entity describes a processing node that is used to perform a defined test. A testing machine may be technically complex and contain several parts.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Entität beschreibt einen Prozessknoten, der für die Durchführung eines bestimmten Tests verwendet wird. Eine Prüfmaschine kann technisch komplex sein und aus mehreren Teilen bestehen.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Prüfmaschine", + "IRI-based" : "TestingMachine", + "en" : "Testing Machine" + }, + "attributes" : [ "external" ], + "id" : "462", + "superClasses" : [ "93" ] + }, { + "iri" : "https://w3id.org/pmd/co/Diameter", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Diameter.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/diameter. Accessed 5 Dec. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The length of a straight line through the center of an object or space.", + "type" : "label" + } ], + "constraints" : [ { + "identifier" : "constraints", + "language" : "undefined", + "value" : "TesileTest", + "type" : "label" + } ] + }, + "label" : { + "de" : "Durchmesser", + "IRI-based" : "Diameter", + "en" : "Diameter" + }, + "subClasses" : [ "404", "364", "367" ], + "attributes" : [ "external" ], + "id" : "305", + "superClasses" : [ "10" ] + }, { + "iri" : "https://w3id.org/pmd/co/MicroscopyProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Microscopy.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/microscopy. Accessed 24 Nov. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An analysing process in which an investigation is made with a microscope.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Mikroskopie", + "IRI-based" : "MicroscopyProcess", + "en" : "Microscopy Process" + }, + "subClasses" : [ "49", "138" ], + "attributes" : [ "external" ], + "id" : "50", + "superClasses" : [ "145" ] + }, { + "iri" : "https://w3id.org/pmd/co/SequenceNumber", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Strict monotonically increasing integer that indicates the position in an ordered list.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Sequenznummer", + "IRI-based" : "SequenceNumber", + "en" : "Sequence Number" + }, + "attributes" : [ "external" ], + "id" : "168", + "superClasses" : [ "95" ] + }, { + "iri" : "https://w3id.org/pmd/co/TransformativeAnalysisProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An analysis process that is transformative.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Transformativer Analyseprozess", + "IRI-based" : "TransformativeAnalysisProcess", + "en" : "Transformative Analysis Process" + }, + "attributes" : [ "external" ], + "id" : "369", + "superClasses" : [ "145" ] + }, { + "iri" : "http://www.w3.org/ns/oa#FragmentSelector", + "baseIri" : "http://www.w3.org/ns/oa", + "instances" : 0, + "annotations" : { + "example" : [ { + "identifier" : "example", + "language" : "undefined", + "value" : "http://www.w3.org/ns/oa#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "FragmentSelector", + "en" : "Fragment Selector" + }, + "attributes" : [ "external" ], + "id" : "572" + }, { + "iri" : "https://w3id.org/pmd/pgo/ImageAnalysisProcess", + "baseIri" : "https://w3id.org/pmd/pgo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/pgo", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Als Unterklasse eines nicht-transformativen Analyseverfahrens ist das Bildanalyseverfahren ein Prozess, mit dem nützliche Informationen, wie z. B. Koordinaten von Ausscheidungen in metallischen Legierungen und deren Abständen, aus einem Bild extrahiert und für die weitere Verwendung interpretiert werden.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "As subclass of a non-transformative analysis process, the image analysis process is a process by which useful information, such as precipitate coordinates and their distances, are extracted from an image and interpreted for further application.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Bildanalyse-Prozess", + "IRI-based" : "ImageAnalysisProcess", + "en" : "Image Analysis Process" + }, + "attributes" : [ "external" ], + "id" : "240", + "superClasses" : [ "241" ] + }, { + "iri" : "https://w3id.org/pmd/co/CovalentBond", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "\"Covalent bond.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/covalent%20bond. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Eine kovalente Bindung ist eine chemische Verbindung zwischen Atomen, die durch die gemeinsame Nutzung von Elektronen entsteht.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Covalent bond is a chemical bond formed between atoms by the sharing of electrons.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Kovalente Bindung", + "IRI-based" : "CovalentBond", + "en" : "Covalent Bond" + }, + "attributes" : [ "external" ], + "id" : "27", + "superClasses" : [ "1" ] + }, { + "iri" : "https://w3id.org/pmd/co/Magnetic", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Magnetic.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/magnetic. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Magnetisch bezieht sich auf einen Magneten oder auf Magnetismus. Hier speziell auf die magnetischen Eigenschaften eines Materials.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Magnetic is relating relating to a magnet or to magnetism. Here specifically to the magnetic properties of a material.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Magnetisch", + "IRI-based" : "Magnetic", + "en" : "Magnetic" + }, + "attributes" : [ "external" ], + "id" : "210", + "superClasses" : [ "104" ] + }, { + "iri" : "https://w3id.org/pmd/co/LengthChangingProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A geometry changing process which changes the length characteristic of an object.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "LengthChangingProcess", + "en" : "Length Changing Process" + }, + "comment" : { + "undefined" : "This class is used as an example of SWRL based reasoning. An instance belongs to the class if there are two embracing processes (previous and next) that determine different values after a length measurement (see SWRL rule)." + }, + "attributes" : [ "external" ], + "id" : "533", + "superClasses" : [ "91" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Attribution", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasAttributedTo", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-attribution", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Attribution is the ascribing of an entity to an agent.\n\nWhen an entity e is attributed to agent ag, entity e was generated by some unspecified activity that in turn was associated to agent ag. Thus, this relation is useful when the activity is not known, or irrelevant.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "constraints" : [ { + "identifier" : "constraints", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-constraints-20130430/#prov-dm-constraints-fig", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-attribution", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Attribution", + "undefined" : "Attribution" + }, + "comment" : { + "en" : "An instance of prov:Attribution provides additional descriptions about the binary prov:wasAttributedTo relation from an prov:Entity to some prov:Agent that had some responsible for it. For example, :cake prov:wasAttributedTo :baker; prov:qualifiedAttribution [ a prov:Attribution; prov:entity :baker; :foo :bar ]." + }, + "attributes" : [ "external" ], + "id" : "335", + "superClasses" : [ "140" ] + }, { + "iri" : "https://w3id.org/pmd/co/WeightedXCoordinate", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Mass center of grey values in one direction", + "type" : "label" + } ] + }, + "label" : { + "de" : "Gewichtete X Koordinate", + "IRI-based" : "WeightedXCoordinate", + "en" : "Weighted X coordinate" + }, + "attributes" : [ "external" ], + "id" : "578", + "superClasses" : [ "121" ] + }, { + "iri" : "https://w3id.org/pmd/co/ManufacturerRole", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A role indicating that its bearer is a manufacturer. The role is realized in a manufacturing process.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "ManufacturerRole", + "en" : "Manufacturer Role" + }, + "attributes" : [ "external" ], + "id" : "490", + "superClasses" : [ "309" ] + }, { + "iri" : "https://w3id.org/pmd/co/Metadata", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Die DataScope Metadaten umfassen Attribute und zusätzliche Daten (Provenienz), die z.B. die Fabrik, das Labor, das Prozesssystem und die Objekte betreffen und die eine Bewertung der Qualität / Zuverlässigkeit der Messungen und eine systematische Suche in einer Datenbank ermöglichen.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This data scope expresses that a :ValueObject refers to attributes and additional data (provenance) on production, laboratory, process system and objects that enable an evaluation of the quality/reliability of the measurements and a systematic search task in a database.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Metadaten", + "IRI-based" : "Metadata", + "en" : "Metadata" + }, + "attributes" : [ "external" ], + "id" : "290", + "superClasses" : [ "237", "10" ] + }, { + "iri" : "https://w3id.org/pmd/co/Shape", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Shape.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/shape. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Das sichtbare Ausstattungsmerkmal (räumliche Form oder Kontur) eines bestimmten Objektes oder einer Art von Objekt.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "The visible makeup characteristic (spatial form or contour) of a particular item or kind of item.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Form", + "IRI-based" : "Shape", + "en" : "Shape" + }, + "subClasses" : [ "88", "380", "185", "349" ], + "attributes" : [ "external" ], + "id" : "89", + "superClasses" : [ "10" ] + }, { + "iri" : "https://w3id.org/pmd/co/GripsAlignment", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An assembly process in which the grips used to grasp a tangible object, such as a sample, specimen or test piece, are arranged in a line. This process is usually part of the assembly process during testing, if applicable.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Klasse beschreibt den Prozess der Ausrichtung von Halterungen, die zum Fest-/Einspannen eines materiellen Objekts, wie z. B. einer Probe, eines Prüfkörpers oder eines Prüfstücks, verwendet werden. Dieser Vorgang ist in der Regel Teil des Montageprozesses während der Prüfung, falls ein solcher durchgeführt wird.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Ausrichtung Der Halterungen", + "IRI-based" : "GripsAlignment", + "en" : "Grips Alignment" + }, + "attributes" : [ "external" ], + "id" : "412", + "superClasses" : [ "99" ] + }, { + "iri" : "https://w3id.org/pmd/pgo/AveragePrecipitateDistance", + "baseIri" : "https://w3id.org/pmd/pgo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/pgo", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Als Subklasse der Ausscheidungsabstand wird der mittlere Ausscheidungsabstand aus mehreren Ausscheidungsabständen ermittelt, z. B. durch die Delauney-Triangulation. Der mittlere Ausscheidungsabstand lässt sich somit aus dem Median oder dem arithmetischen Mittelwert aller betrachteten Einzelmessungen von Ausscheidungsabständen berechnen.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "As a subclass of precipitate distance, the average precipitate distance is determined from several precipitate distances via, e.g., the Delauney triangulation. Hence, the average precipitate distance can be calculated using the median and the arithmetic mean value of all individual measurements of precipitate distances regarded.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Mittlerer Ausscheidungsabstand", + "IRI-based" : "AveragePrecipitateDistance", + "en" : "Average Precipitate Distance" + }, + "attributes" : [ "external" ], + "id" : "540", + "superClasses" : [ "539" ] + }, { + "iri" : "https://w3id.org/pmd/co/CreepStress", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Is the strain occuring with time, when a constant force is applied to a physical body.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Kriechspannung", + "IRI-based" : "CreepStress", + "en" : "Creep Stress" + }, + "attributes" : [ "external" ], + "id" : "293", + "superClasses" : [ "281" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Plan", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-Association", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "undefined", + "value" : "A plan is an entity that represents a set of actions or steps intended by one or more agents to achieve some goals.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + }, { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-Association", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Plan", + "undefined" : "Plan" + }, + "comment" : { + "en" : "There exist no prescriptive requirement on the nature of plans, their representation, the actions or steps they consist of, or their intended goals. Since plans may evolve over time, it may become necessary to track their provenance, so plans themselves are entities. Representing the plan explicitly in the provenance can be useful for various tasks: for example, to validate the execution as represented in the provenance record, to manage expectation failures, or to provide explanations." + }, + "attributes" : [ "external" ], + "id" : "386", + "superClasses" : [ "43" ] + }, { + "iri" : "https://w3id.org/pmd/co/ComputingNode", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Ein Rechnersystem, das eine Ausführungsumgebung bspw. für Simulationsprozesse oder Vorhersagemodelle bereitstellt.\nEin Rechenknoten kann virtuell (bspw. ein Container oder eine virtuelle Maschine) oder physisch (z. B. ein Bare-Metal-Server) ausgestaltet sein und verwendet in der Regel digitale Repräsentationen von Objekten als Eingaben und erzeugt digitale Messungen, wie z.B. Simulationsergebnisse oder Vorhersagen, als Ausgaben.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A computing system that provides an execution environment for, e.g., simulation processes or prediction models.\nA Computing Node can be virtual (e.g., a container or virtual machine) or physical (e.g., a bare-metal servers), uses digital represenations of objects as inputs and produces digital measurements, such as simulation results or predictions, as outputs.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Computerknoten", + "IRI-based" : "ComputingNode", + "en" : "Computing Node" + }, + "subClasses" : [ "352" ], + "attributes" : [ "external" ], + "id" : "353", + "superClasses" : [ "93" ] + }, { + "iri" : "https://w3id.org/pmd/co/TemperatureChangeDevice", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This entity generically describes any tool that is used for the alteration and adjustment of the temperature of a tangible object or the environment, e.g., a furnace and cooling media.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Entität beschreibt allgemein jedes Werkzeug, das zur Änderung und Einstellung der Temperatur eines materiellen Objekts oder der Umgebung verwendet wird, z. B. einen Ofen und Kühlmittel.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Temperaturänderungswerkzeug", + "IRI-based" : "TemperatureChangeDevice", + "en" : "Temperature Change Device" + }, + "attributes" : [ "external" ], + "id" : "579", + "superClasses" : [ "152" ] + }, { + "iri" : "https://w3id.org/pmd/co/QualifyingNodeAnnotation", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Description for Processing Node's utility, e.g. \"Rear Vacuum Furnace Oil Quenching\"", + "type" : "label" + } ] + }, + "label" : { + "de" : "Qualifizierende Knotenannotation", + "IRI-based" : "QualifyingNodeAnnotation", + "en" : "Qualifying Node Annotation" + }, + "subClasses" : [ "251" ], + "attributes" : [ "external" ], + "id" : "252", + "superClasses" : [ "34" ] + }, { + "iri" : "https://w3id.org/pmd/co/NotDetected", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Indicates that an chemical element has not been detected in a corresponding experiment.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Nicht nachgewiesen", + "IRI-based" : "NotDetected", + "en" : "Not Detected" + }, + "attributes" : [ "external" ], + "id" : "478", + "superClasses" : [ "229" ] + }, { + "iri" : "https://w3id.org/pmd/co/Algorithm", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Algorithm.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/algorithm. Accessed 24 Nov. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A procedure for solving a mathematical problem (as of finding the greatest common divisor) in a finite number of steps that frequently involves repetition of an operation.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Algorithmus", + "IRI-based" : "Algorithm", + "en" : "Algorithm" + }, + "subClasses" : [ "361", "273" ], + "attributes" : [ "external" ], + "id" : "274", + "superClasses" : [ "218" ] + }, { + "iri" : "http://w3id.org/DMI/DigitalMaterialIdentifier", + "baseIri" : "http://w3id.org/DMI", + "instances" : 0, + "annotations" : { + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A dmi:DigitalMaterialIdentifier is a resource identifier (IRI) that represents the specification of a material (in the sense of a material class) described in a specification document. The specification document can be, e.g., a standard, a datasheet, or any other citable document. Typically, a specification document requires some qualities that a material (in the sense of a portion of matter) has to comply with. Typical requirements include chemical compositions or physical properties.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Digital Material Identifier", + "IRI-based" : "DigitalMaterialIdentifier", + "en" : "Digital Material Identifier" + }, + "attributes" : [ "external" ], + "id" : "592" + }, { + "iri" : "https://w3id.org/pmd/co/Radius", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Radius.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/radius. Accessed 5 Dec. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A line segment extending from the center of a circle or sphere to the circumference or bounding surface.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Radius", + "IRI-based" : "Radius", + "en" : "Radius" + }, + "subClasses" : [ "328" ], + "attributes" : [ "external" ], + "id" : "318", + "superClasses" : [ "10" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Association", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasAssociatedWith", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-Association", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An activity association is an assignment of responsibility to an agent for an activity, indicating that the agent had a role in the activity. It further allows for a plan to be specified, which is the plan intended by the agent to achieve some goals in the context of this activity.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-Association", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Association", + "undefined" : "Association" + }, + "comment" : { + "en" : "An instance of prov:Association provides additional descriptions about the binary prov:wasAssociatedWith relation from an prov:Activity to some prov:Agent that had some responsiblity for it. For example, :baking prov:wasAssociatedWith :baker; prov:qualifiedAssociation [ a prov:Association; prov:agent :baker; :foo :bar ]." + }, + "attributes" : [ "external" ], + "id" : "339", + "superClasses" : [ "140" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Generation", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasGeneratedBy", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-Generation", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Generation is the completion of production of a new entity by an activity. This entity did not exist before generation and becomes available for usage after this generation.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "constraints" : [ { + "identifier" : "constraints", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-constraints-20130430/#prov-dm-constraints-fig", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-Generation", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Generation", + "undefined" : "Generation" + }, + "comment" : { + "en" : "An instance of prov:Generation provides additional descriptions about the binary prov:wasGeneratedBy relation from a generated prov:Entity to the prov:Activity that generated it. For example, :cake prov:wasGeneratedBy :baking; prov:qualifiedGeneration [ a prov:Generation; prov:activity :baking; :foo :bar ]." + }, + "attributes" : [ "external" ], + "id" : "201", + "superClasses" : [ "192", "199" ] + }, { + "iri" : "https://w3id.org/pmd/pgo/PrecipitateNumber", + "baseIri" : "https://w3id.org/pmd/pgo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "de", + "value" : "Die Ausscheidungsnummer ermöglicht die eindeutige Zuordnung der gemessenen Eigenschaften zu einem bestimmten Ausscheidung.", + "type" : "label" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/pgo", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "en", + "value" : "The precipitate number enables the explicit assignment of measured properties to a specific precipitate.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Ausscheidungsnummer", + "IRI-based" : "PrecipitateNumber", + "en" : "Precipitate Number" + }, + "attributes" : [ "external" ], + "id" : "67", + "superClasses" : [ "65" ] + }, { + "iri" : "https://w3id.org/pmd/co/Description", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "undefined", + "value" : "A descriptive text qualifying the nature of a thing (e.g. agent, activity, entity, object, ...).", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Ein beschreibender Text, der die Natur / Beschaffenheit / Informationen zu einer Entität qualifiziert (z.B. Aktivitäten, Entitäten, Objekten, ...).", + "type" : "label" + } ] + }, + "label" : { + "de" : "Beschreibung", + "IRI-based" : "Description", + "en" : "Description" + }, + "subClasses" : [ "331" ], + "attributes" : [ "external" ], + "id" : "266", + "superClasses" : [ "10" ] + }, { + "iri" : "http://www.w3.org/ns/prov#AgentInfluence", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "editorsDefinition" : [ { + "identifier" : "editorsDefinition", + "language" : "en", + "value" : "AgentInfluence is the capacity of an agent to have an effect on the character, development, or behavior of another by means of attribution, association, delegation, or other.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "seeAlso" : [ { + "identifier" : "seeAlso", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#agent", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "AgentInfluence", + "undefined" : "AgentInfluence" + }, + "subClasses" : [ "335", "339", "222" ], + "comment" : { + "en" : "AgentInfluence provides additional descriptions of an Agent's binary influence upon any other kind of resource. Instances of AgentInfluence use the prov:agent property to cite the influencing Agent." + }, + "attributes" : [ "external" ], + "id" : "140", + "superClasses" : [ "6" ] + }, { + "iri" : "http://www.w3.org/ns/prov#EntityInfluence", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "editorsDefinition" : [ { + "identifier" : "editorsDefinition", + "language" : "en", + "value" : "EntityInfluence is the capacity of an entity to have an effect on the character, development, or behavior of another by means of usage, start, end, derivation, or other. ", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "seeAlso" : [ { + "identifier" : "seeAlso", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#entity", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "EntityInfluence", + "undefined" : "EntityInfluence" + }, + "subClasses" : [ "312", "75", "195", "197" ], + "comment" : { + "en" : "It is not recommended that the type EntityInfluence be asserted without also asserting one of its more specific subclasses." + }, + "attributes" : [ "external" ], + "id" : "161", + "superClasses" : [ "6" ] + }, { + "iri" : "https://w3id.org/pmd/co/Stress", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "symbol" : [ { + "identifier" : "symbol", + "language" : "en", + "value" : "R", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Kraft zu einem beliebigen Zeitpunkt während des Versuchs dividiert durch den Anfangsquerschnitt (S_o) der Probe\n\nAnmerkung: Mit dem Begriff Spannung ist hier die technische Spannung ('Ingenieur-Spannung') gemeint.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "At any moment during the test, force divided by the original cross-sectional area, S_o, of the test piece\n\nNote: Here, all references to stress are to engineering stress.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Units: Pa (SI), psi", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Dimensional Analysis: \nML*-1T*-2", + "type" : "label" + } ] + }, + "label" : { + "de" : "Spannung", + "IRI-based" : "Stress", + "en" : "Stress" + }, + "subClasses" : [ "322", "293" ], + "attributes" : [ "external" ], + "id" : "281", + "superClasses" : [ "10" ] + }, { + "iri" : "https://w3id.org/pmd/co/Blank", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Blank.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/blank. Accessed 25 Nov. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A piece of material prepared to be made into something by a further operation.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Rohling", + "IRI-based" : "Blank", + "en" : "Blank" + }, + "attributes" : [ "external" ], + "id" : "552", + "superClasses" : [ "454" ] + }, { + "iri" : "http://www.w3.org/ns/prov#SoftwareAgent", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-agent", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A software agent is running software.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-types", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "SoftwareAgent", + "undefined" : "SoftwareAgent" + }, + "attributes" : [ "external" ], + "id" : "108", + "superClasses" : [ "47" ] + }, { + "iri" : "https://w3id.org/pmd/co/ProjectIdentifier", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Ein umgangssprachlicher, von Menschen erstellter, beschreibender Text, der die Art eines Projekts qualifiziert.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A colloquial, human-generated, descriptive text qualifying the nature of a project.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Projektidentifikator", + "IRI-based" : "ProjectIdentifier", + "en" : "Project Identifier" + }, + "intersection" : [ "95" ], + "attributes" : [ "intersection", "external" ], + "id" : "216", + "superClasses" : [ "95" ] + }, { + "iri" : "https://w3id.org/pmd/co/TestPiece", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "EN 10021:2006-12 (European standardization committee: CEN/TC 459/SC 12/WG 4)", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Teil einer Probe mit bestimmten Dimensionen, bearbeitet oder unbearbeitet, der in einen erforderlichen Zustand gebracht wird, um einer bestimmten Prüfung unterzogen zu werden.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Part of a sample with specified dimensions, machined or un-machined, brought to a required condition for submission to a given test.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Prüfkörper", + "IRI-based" : "TestPiece", + "en" : "Test Piece" + }, + "attributes" : [ "external" ], + "id" : "119", + "superClasses" : [ "115" ] + }, { + "iri" : "https://w3id.org/pmd/co/Dataset", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A collection of data published in one or more files. Usually instances of this class are also instances of DCAT dataset (see https://www.w3.org/TR/vocab-dcat-2/).", + "type" : "label" + } ] + }, + "label" : { + "de" : "Datensatz", + "IRI-based" : "Dataset", + "en" : "Dataset" + }, + "attributes" : [ "external" ], + "id" : "612", + "superClasses" : [ "285" ] + }, { + "iri" : "https://w3id.org/pmd/co/NodeInfo", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Descriptive values to specify a processing node.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Knoteninformation", + "IRI-based" : "NodeInfo", + "en" : "Node Info" + }, + "subClasses" : [ "297", "96", "303", "97", "252", "255", "272" ], + "attributes" : [ "external" ], + "id" : "34", + "superClasses" : [ "10" ] + }, { + "iri" : "https://w3id.org/pmd/co/Optical", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Optical.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/optical. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Optisch bezieht sich auf die Wissenschaft der Optik. Hier speziell auf die optischen Eigenschaften eines Materials.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Optical is relating to the science of optics. Here specifically to the optical properties of a material.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Optisch", + "IRI-based" : "Optical", + "en" : "Optical" + }, + "attributes" : [ "external" ], + "id" : "207", + "superClasses" : [ "104" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Collection", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "collections", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-collection", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A collection is an entity that provides a structure to some constituents, which are themselves entities. These constituents are said to be member of the collections.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Collection", + "undefined" : "Collection" + }, + "subClasses" : [ "278" ], + "attributes" : [ "external" ], + "id" : "279", + "superClasses" : [ "43" ] + }, { + "iri" : "https://w3id.org/pmd/co/InspectionDocument", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This entity describes a document used to give information on the examination of a tangible object, usually including an examination date, a typical examination interval and the state of the examined object. Typically, this is used for processing nodes.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Entität beschreibt ein Dokument, das Informationen über die Prüfung eines materiellen Objekts enthält, in der Regel versehen mit einem Prüfungsdatum, einem typischen Prüfungsintervall und dem Zustand des geprüften Objekts. Typischerweise wird ein solches Dokument für Prozessknoten verwendet.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Inspektionsdokument", + "IRI-based" : "InspectionDocument", + "en" : "Inspection Document" + }, + "attributes" : [ "external" ], + "id" : "31", + "superClasses" : [ "32" ] + }, { + "iri" : "https://w3id.org/pmd/co/VolumeFraction", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This value object describes one of several portions of the property of a body that is a measure of the amount of material it contains and causes it to have volume.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Volumen Anteil", + "IRI-based" : "VolumeFraction", + "en" : "Volume Fraction" + }, + "attributes" : [ "external" ], + "id" : "479", + "superClasses" : [ "229" ] + }, { + "iri" : "https://w3id.org/pmd/co/Precision", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Precision.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/precision. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The degree of refinement with which an operation is performed or a measurement stated.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Der Grad der Verfeinerung, mit dem eine Operation durchgeführt oder eine Messung angegeben wird.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Genauigkeit", + "IRI-based" : "Precision", + "en" : "Precision" + }, + "attributes" : [ "external" ], + "id" : "270", + "superClasses" : [ "10" ] + }, { + "iri" : "https://w3id.org/pmd/co/DataScope", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Die Entität Datenkategorie dient der Kategorisierung von Daten im Hinblick auf ihren Verwendungszweck in Übereinstimmung mit einem betrachteten Objekt oder Prozess.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This class is used to categorize data with respect to their intended usage in accordance with a regarded object or process.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Datenkategorie", + "IRI-based" : "DataScope", + "en" : "Data Scope" + }, + "subClasses" : [ "283", "290", "236" ], + "attributes" : [ "external" ], + "id" : "237", + "superClasses" : [ "43" ] + }, { + "iri" : "https://w3id.org/pmd/co/SetPoint", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "de", + "value" : "https://de.wikipedia.org/wiki/Sollwert", + "type" : "label" + }, { + "identifier" : "definitionSource", + "language" : "en", + "value" : "https://en.wikipedia.org/wiki/Setpoint_(control_system)", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Die Wertekategorie Sollwert bezeichnet allgemein den gewünschten Wert eines quantitativen Merkmals eines Systems, von dem der Istwert möglichst wenig abweichen soll.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This value scope expresses that a :ValueObject is the desired or target value for an essential variable, or process value (PV) of a control system.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Sollwert bezeichnet allgemein den angestrebten Wert eines quantitativen Merkmales eines Systems, von dem der tatsächliche Istwert so wenig wie möglich abweichen soll. Der Sollwert wird von einem anderen System (z. B. Technik, Mensch) vorgegeben.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "The ValueScope Setpoint generally refers to the desired value of a quantitative characteristic of a system, from which the actual value should deviate as little as possible.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Sollwert", + "IRI-based" : "SetPoint", + "en" : "Set Point" + }, + "attributes" : [ "external" ], + "id" : "521", + "superClasses" : [ "110" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Delegation", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#actedOnBehalfOf", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-delegation", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Delegation is the assignment of authority and responsibility to an agent (by itself or by another agent) to carry out a specific activity as a delegate or representative, while the agent it acts on behalf of retains some responsibility for the outcome of the delegated work.\n\nFor example, a student acted on behalf of his supervisor, who acted on behalf of the department chair, who acted on behalf of the university; all those agents are responsible in some way for the activity that took place but we do not say explicitly who bears responsibility and to what degree.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-delegation", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Delegation", + "undefined" : "Delegation" + }, + "comment" : { + "en" : "An instance of prov:Delegation provides additional descriptions about the binary prov:actedOnBehalfOf relation from a performing prov:Agent to some prov:Agent for whom it was performed. For example, :mixing prov:wasAssociatedWith :toddler . :toddler prov:actedOnBehalfOf :mother; prov:qualifiedDelegation [ a prov:Delegation; prov:entity :mother; :foo :bar ]." + }, + "attributes" : [ "external" ], + "id" : "222", + "superClasses" : [ "140" ] + }, { + "iri" : "https://w3id.org/pmd/co/NonTransformativeAnalysisProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An analysis process that is non-transformative.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Nicht-transformativer Analyseprozess", + "IRI-based" : "NonTransformativeAnalysisProcess", + "en" : "Non Transformative Analysis Process" + }, + "subClasses" : [ "240" ], + "attributes" : [ "external" ], + "id" : "241", + "superClasses" : [ "145" ] + }, { + "iri" : "https://w3id.org/pmd/co/Perimeter", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The perimeter of a two-dimensional shape is defined as the path or boundary that encloses the shape.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Der Durchmesser einer zweidimensionalen Form.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Umfang", + "IRI-based" : "Perimeter", + "en" : "Perimeter" + }, + "attributes" : [ "external" ], + "id" : "17", + "superClasses" : [ "10" ] + }, { + "iri" : "https://w3id.org/pmd/co/Extensometer", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Extensometer.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/extensometer. Accessed 5 Dec. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An instrument for measuring minute deformations of test specimens caused by tension, compression, bending, or twisting.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Extensometer", + "en" : "Extensometer" + }, + "attributes" : [ "external" ], + "id" : "173", + "superClasses" : [ "153" ] + }, { + "iri" : "https://w3id.org/pmd/co/Component", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Ein Objekt, das einer bestimmten technischen Anwendung dient. Bestandteil einer Zusammensetzung von Teilen, die eine technische Anwendung bilden.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "An object that serves a specific technical application. Constituent part of a compound of parts that builds a technical application.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Komponente", + "IRI-based" : "Component", + "en" : "Component" + }, + "subClasses" : [ "245", "392" ], + "attributes" : [ "external" ], + "id" : "246", + "superClasses" : [ "259" ] + }, { + "iri" : "https://w3id.org/pmd/co/Coordinates", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Coordinate.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/coordinate. Accessed 5 Dec. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Any of a set of numbers used in specifying the location of a point on a line, on a surface, or in space.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Koordinaten", + "IRI-based" : "Coordinates", + "en" : "Coordinates" + }, + "subClasses" : [ "117" ], + "attributes" : [ "external" ], + "id" : "402", + "superClasses" : [ "10" ] + }, { + "iri" : "https://w3id.org/pmd/co/AgingProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Das Aging oder Auslagern ist ein Anlassvorgang, der den Martensit (Härtungsgefüge) wieder duktil und verformbar macht. Dabei wird ein Agingvorgang genutzt, nämlich die Bildung von Ausscheidungen in Form von FeXCY - Carbiden", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A process that applies a method that causes a constituent to precipitate from solid solution.", + "type" : "label" + } ], + "example" : [ { + "identifier" : "example", + "language" : "en", + "value" : "The Process of austenitizing and quenching a steel alloy to achieve a martensitic microstructure for hardness increase.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Alterungsprozess", + "IRI-based" : "AgingProcess", + "en" : "Aging Process" + }, + "attributes" : [ "external" ], + "id" : "112", + "superClasses" : [ "61" ] + }, { + "iri" : "https://w3id.org/pmd/co/ChemicalObject", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Value object that describes the quantity (e.g. mass fraction) of a specific chemical object.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Chemisches Objekt", + "IRI-based" : "ChemicalObject", + "en" : "Chemical Object" + }, + "intersection" : [ "10" ], + "attributes" : [ "intersection", "external" ], + "id" : "148", + "superClasses" : [ "10" ] + }, { + "iri" : "https://w3id.org/pmd/co/Image", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Image.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/image. Accessed 25 Nov. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A visual representation of something", + "type" : "label" + } ] + }, + "label" : { + "de" : "Bild", + "IRI-based" : "Image", + "en" : "Image" + }, + "subClasses" : [ "219" ], + "attributes" : [ "external" ], + "id" : "220", + "superClasses" : [ "285" ] + }, { + "iri" : "https://w3id.org/pmd/pgo/Precipitate", + "baseIri" : "https://w3id.org/pmd/pgo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/pgo", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "As a subclass of particle, precipitates are finely distributed metastable phases (e.g., intermetallic compounds) that are created as effective obstacles to dislocation motion in age-hardenable metallic alloys by specific heat treatments.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Als Subklasse von Particle sind Ausscheidungen fein verteilte metastabile Phasen (z. B. intermetallischen Verbindungen), die als wirksame Hindernisse für Versetzungsbewegungen in aushärtbaren metallischen Legierungen durch gezielte Wärmenbehandlungen erzeugt werden.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Ausscheidung", + "IRI-based" : "Precipitate", + "en" : "Precipitate" + }, + "attributes" : [ "external" ], + "id" : "638", + "superClasses" : [ "455" ] + }, { + "iri" : "https://w3id.org/pmd/pgo/Particle", + "baseIri" : "https://w3id.org/pmd/pgo", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/pgo", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "undefined", + "value" : "https://en.wikipedia.org/wiki/Particle", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Als eine Subklasse von Objekt ist ein Partikel ein kleines, lokalisiertes Objekt, das durch mehrere physikalische oder chemische Eigenschaften wie Volumen, Dichte oder Masse beschrieben werden kann.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "As a subclass of object, a particle is a small localized object which can be described by several physical or chemical properties, such as volume, density, or mass.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Partikel", + "IRI-based" : "Particle", + "en" : "Particle" + }, + "subClasses" : [ "638" ], + "attributes" : [ "external" ], + "id" : "455", + "superClasses" : [ "259" ] + }, { + "iri" : "https://w3id.org/pmd/co/EndTime", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The date and time when the plan/recipe is supposed to have been finished", + "type" : "label" + } ] + }, + "label" : { + "de" : "Endzeit", + "IRI-based" : "EndTime", + "en" : "End Time" + }, + "attributes" : [ "external" ], + "id" : "495", + "superClasses" : [ "225" ] + }, { + "iri" : "https://w3id.org/pmd/co/NodeSeries", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Processing Node typename, e.g. \"ProTherm500\"", + "type" : "label" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "de", + "value" : "Knotentyp", + "type" : "label" + }, { + "identifier" : "altLabel", + "language" : "en", + "value" : "Node Type", + "type" : "label" + } ] + }, + "label" : { + "de" : "Serie", + "IRI-based" : "NodeSeries", + "en" : "Node Series" + }, + "attributes" : [ "external" ], + "id" : "303", + "superClasses" : [ "34" ] + }, { + "iri" : "https://w3id.org/pmd/co/Distance", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Distance.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/distance. Accessed 5 Dec. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Spatial remoteness.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Abstand", + "IRI-based" : "Distance", + "en" : "Distance" + }, + "subClasses" : [ "539" ], + "attributes" : [ "external" ], + "id" : "263", + "superClasses" : [ "10" ] + }, { + "iri" : "https://w3id.org/pmd/co/PixelDensity", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The pixel density of an electronic image device.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Pixeldichte", + "IRI-based" : "PixelDensity", + "en" : "Pixel density" + }, + "attributes" : [ "external" ], + "id" : "21", + "superClasses" : [ "10" ] + }, { + "iri" : "https://w3id.org/pmd/co/XCoordinate", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“X-coordinate.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/x-coordinate. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Die X-Koordinate ist eine Koordinate, deren Wert durch Messung parallel zu einer X-Achse bestimmt wird.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "X-coordinate is a coordinate whose value is determined by measuring parallel to an x-axis.", + "type" : "label" + } ] + }, + "label" : { + "de" : "X Korrdinate", + "IRI-based" : "XCoordinate", + "en" : "X Coordinate" + }, + "subClasses" : [ "578" ], + "attributes" : [ "external" ], + "id" : "121", + "superClasses" : [ "117" ] + }, { + "iri" : "https://w3id.org/pmd/co/ParticleNumber", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Die Partikelnummer ermöglicht die eindeutige Zuordnung der gemessenen Eigenschaften zu einem bestimmten Partikel.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "The particle number enables the explicit assignment of measured properties to a specific particle.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Partikelnummer", + "IRI-based" : "ParticleNumber", + "en" : "Particle Number" + }, + "attributes" : [ "external" ], + "id" : "66", + "superClasses" : [ "65" ] + }, { + "iri" : "https://w3id.org/pmd/co/AgingInterval", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Timespan a Temperature during an Aging Process is hold.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Alterungsintervall", + "IRI-based" : "AgingInterval", + "en" : "Aging Interval" + }, + "attributes" : [ "external" ], + "id" : "476", + "superClasses" : [ "475" ] + }, { + "iri" : "https://w3id.org/pmd/co/CollectionInterfaceHint", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A label in support of identifying a network interface and/or address used by a process node to provide primary data stored in ontologies", + "type" : "label" + } ] + }, + "label" : { + "de" : "Datenschnittstellenhinweis", + "IRI-based" : "CollectionInterfaceHint", + "en" : "Collection Interface Hint" + }, + "attributes" : [ "external" ], + "id" : "297", + "superClasses" : [ "34" ] + }, { + "iri" : "https://w3id.org/pmd/co/LoadCell", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "https://en.wikipedia.org/wiki/Load_cell", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A load cell converts a force such as tension, compression, pressure, or torque into an electrical signal that can be measured and standardized. It is a force transducer. As the force applied to the load cell increases, the electrical signal changes proportionally. The most common types of load cell are pneumatic, hydraulic, and strain gauges.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Kraftmessdose", + "IRI-based" : "LoadCell", + "en" : "Load Cell" + }, + "attributes" : [ "external" ], + "id" : "463", + "superClasses" : [ "93" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Usage", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#used", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-Usage", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Usage is the beginning of utilizing an entity by an activity. Before usage, the activity had not begun to utilize this entity and could not have been affected by the entity.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "constraints" : [ { + "identifier" : "constraints", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-constraints-20130430/#prov-dm-constraints-fig", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-Usage", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Usage", + "undefined" : "Usage" + }, + "comment" : { + "en" : "An instance of prov:Usage provides additional descriptions about the binary prov:used relation from some prov:Activity to an prov:Entity that it used. For example, :keynote prov:used :podium; prov:qualifiedUsage [ a prov:Usage; prov:entity :podium; :foo :bar ]." + }, + "attributes" : [ "external" ], + "id" : "312", + "superClasses" : [ "161", "192" ] + }, { + "iri" : "https://w3id.org/pmd/co/DigitalEntity", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An entity with digital representation.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "DigitalEntity", + "en" : "Digital Entity" + }, + "subClasses" : [ "220", "306", "612", "417", "284" ], + "attributes" : [ "external" ], + "id" : "285", + "superClasses" : [ "43" ] + }, { + "iri" : "https://w3id.org/pmd/co/Mechanical", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Mechanical.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/mechanical. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Mechanisch bedeutet, sich auf die Prinzipien der Mechanik zu beziehen, von ihnen beherrscht zu werden oder sie zu befolgen. Hier speziell auf die mechanischen Eigenschaften eines Materials.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Mechanical is relating to, governed by, or in accordance with the principles of mechanics. Here specifically to the mechanical properties of a material.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Mechanisch", + "IRI-based" : "Mechanical", + "en" : "Mechanical" + }, + "attributes" : [ "external" ], + "id" : "204", + "superClasses" : [ "104" ] + }, { + "iri" : "https://w3id.org/pmd/co/WorkingRange", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Eigenschaft beschreibt den Bereich zwischen den Grenzen, innerhalb derer ein Prozessknoten (z. B. eine Maschine) für ihren vorgesehenen Zweck verwendet werden kann, ausgedrückt durch die Angabe der in Rede stehenden unteren und oberen Bereichswerte.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This property describes the region between the limits within which a processing node (e.g., a machine) is capable of being used for its intended purpose, expressed by stating the lower and upper range values of interest.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Arbeitsbereich", + "IRI-based" : "WorkingRange", + "en" : "Working Range" + }, + "attributes" : [ "external" ], + "id" : "276", + "superClasses" : [ "10" ] + }, { + "iri" : "https://w3id.org/pmd/co/CrystallineStructure", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Crystal structure.” Wikipedia The Free Encyclopedia, https://en.wikipedia.org/wiki/Crystal_structure. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "In crystallography, crystal structure is a description of the ordered arrangement of atoms, ions or molecules in a crystalline material. Ordered structures occur from the intrinsic nature of the constituent particles to form symmetric patterns that repeat along the principal directions of three-dimensional space in matter.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "In der Kristallographie ist die Kristallstruktur eine Beschreibung der geordneten Anordnung von Atomen, Ionen oder Molekülen in einem kristallinen Material. Geordnete Strukturen ergeben sich aus der intrinsischen Natur der konstituierenden Teilchen, die symmetrische Muster bilden, die sich entlang der Hauptrichtungen des dreidimensionalen Raums in der Materie wiederholen.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Kristalline Struktur", + "IRI-based" : "CrystallineStructure", + "en" : "Crystalline Structure" + }, + "attributes" : [ "external" ], + "id" : "498", + "superClasses" : [ "77" ] + }, { + "iri" : "https://w3id.org/pmd/co/NodeSerialNumber", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A unique identifier of a processing node, typically provided by the manufacturer (manufacturer serial number, s/n).", + "type" : "label" + } ] + }, + "label" : { + "de" : "Knoten-Seriennummer", + "IRI-based" : "NodeSerialNumber", + "en" : "Node Serial Number" + }, + "attributes" : [ "external" ], + "id" : "97", + "superClasses" : [ "94", "34" ] + }, { + "iri" : "https://w3id.org/pmd/co/MassFraction", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This value object describes one of several portions of the property of a body that is a measure of the amount of material it contains and causes it to have weight in a gravitational field.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Masse Anteil", + "IRI-based" : "MassFraction", + "en" : "Mass Fraction" + }, + "attributes" : [ "external" ], + "id" : "480", + "superClasses" : [ "229" ] + }, { + "iri" : "https://w3id.org/pmd/co/Circular", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Circular.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/circular. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Having the form of a circle.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Geformt wie ein Kreis.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Kreisförmig", + "IRI-based" : "Circular", + "en" : "Circular" + }, + "attributes" : [ "external" ], + "id" : "380", + "superClasses" : [ "89" ] + }, { + "iri" : "https://w3id.org/pmd/co/TemperatureMeasuringDevice", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This entity generically describes any tool that is used for the measurement of the temperature of a tangible object or the environment, e.g., a thermocouple and thermometers.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Entität beschreibt allgemein jedes Werkzeug, das zur Messung der Temperatur eines materiellen Objekts oder der Umgebung verwendet wird, z. B. ein Thermoelement und Thermometer.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Temperaturmesswerkzeug", + "IRI-based" : "TemperatureMeasuringDevice", + "en" : "Temperature Measuring Device" + }, + "subClasses" : [ "579" ], + "attributes" : [ "external" ], + "id" : "152", + "superClasses" : [ "153" ] + } ], + "property" : [ { + "id" : "0", + "type" : "rdfs:SubClassOf" + }, { + "id" : "3", + "type" : "rdfs:SubClassOf" + }, { + "id" : "5", + "type" : "owl:objectProperty" + }, { + "id" : "9", + "type" : "owl:objectProperty" + }, { + "id" : "13", + "type" : "rdfs:SubClassOf" + }, { + "id" : "14", + "type" : "rdfs:SubClassOf" + }, { + "id" : "16", + "type" : "rdfs:SubClassOf" + }, { + "id" : "18", + "type" : "rdfs:SubClassOf" + }, { + "id" : "20", + "type" : "rdfs:SubClassOf" + }, { + "id" : "22", + "type" : "rdfs:SubClassOf" + }, { + "id" : "24", + "type" : "rdfs:SubClassOf" + }, { + "id" : "26", + "type" : "rdfs:SubClassOf" + }, { + "id" : "28", + "type" : "rdfs:SubClassOf" + }, { + "id" : "30", + "type" : "rdfs:SubClassOf" + }, { + "id" : "33", + "type" : "rdfs:SubClassOf" + }, { + "id" : "35", + "type" : "rdfs:SubClassOf" + }, { + "id" : "40", + "type" : "rdfs:SubClassOf" + }, { + "id" : "42", + "type" : "owl:objectProperty" + }, { + "id" : "46", + "type" : "owl:objectProperty" + }, { + "id" : "51", + "type" : "owl:objectProperty" + }, { + "id" : "60", + "type" : "owl:objectProperty" + }, { + "id" : "70", + "type" : "owl:objectProperty" + }, { + "id" : "73", + "type" : "rdfs:SubClassOf" + }, { + "id" : "76", + "type" : "rdfs:SubClassOf" + }, { + "id" : "78", + "type" : "rdfs:SubClassOf" + }, { + "id" : "80", + "type" : "owl:datatypeProperty" + }, { + "id" : "82", + "type" : "rdfs:SubClassOf" + }, { + "id" : "84", + "type" : "rdfs:SubClassOf" + }, { + "id" : "90", + "type" : "rdfs:SubClassOf" + }, { + "id" : "92", + "type" : "rdfs:SubClassOf" + }, { + "id" : "98", + "type" : "rdfs:SubClassOf" + }, { + "id" : "100", + "type" : "rdfs:SubClassOf" + }, { + "id" : "105", + "type" : "rdfs:SubClassOf" + }, { + "id" : "107", + "type" : "rdfs:SubClassOf" + }, { + "id" : "111", + "type" : "rdfs:SubClassOf" + }, { + "id" : "113", + "type" : "rdfs:SubClassOf" + }, { + "id" : "116", + "type" : "rdfs:SubClassOf" + }, { + "id" : "118", + "type" : "rdfs:SubClassOf" + }, { + "id" : "120", + "type" : "rdfs:SubClassOf" + }, { + "id" : "122", + "type" : "rdfs:SubClassOf" + }, { + "id" : "125", + "type" : "rdfs:SubClassOf" + }, { + "id" : "127", + "type" : "rdfs:SubClassOf" + }, { + "id" : "129", + "type" : "rdfs:SubClassOf" + }, { + "id" : "130", + "type" : "rdfs:SubClassOf" + }, { + "id" : "132", + "type" : "rdfs:SubClassOf" + }, { + "id" : "134", + "type" : "owl:datatypeProperty" + }, { + "id" : "139", + "type" : "owl:objectProperty" + }, { + "id" : "142", + "type" : "owl:objectProperty" + }, { + "id" : "147", + "type" : "owl:objectProperty" + }, { + "id" : "151", + "type" : "rdfs:SubClassOf" + }, { + "id" : "154", + "type" : "owl:objectProperty" + }, { + "id" : "157", + "type" : "rdfs:SubClassOf" + }, { + "id" : "159", + "type" : "rdfs:SubClassOf" + }, { + "id" : "160", + "type" : "owl:objectProperty" + }, { + "id" : "163", + "type" : "rdfs:SubClassOf" + }, { + "id" : "165", + "type" : "rdfs:SubClassOf" + }, { + "id" : "167", + "type" : "rdfs:SubClassOf" + }, { + "id" : "169", + "type" : "rdfs:SubClassOf" + }, { + "id" : "170", + "type" : "rdfs:SubClassOf" + }, { + "id" : "172", + "type" : "rdfs:SubClassOf" + }, { + "id" : "174", + "type" : "rdfs:SubClassOf" + }, { + "id" : "176", + "type" : "rdfs:SubClassOf" + }, { + "id" : "178", + "type" : "rdfs:SubClassOf" + }, { + "id" : "188", + "type" : "rdfs:SubClassOf" + }, { + "id" : "190", + "type" : "rdfs:SubClassOf" + }, { + "id" : "194", + "type" : "rdfs:SubClassOf" + }, { + "id" : "196", + "type" : "rdfs:SubClassOf" + }, { + "id" : "198", + "type" : "rdfs:SubClassOf" + }, { + "id" : "200", + "type" : "rdfs:SubClassOf" + }, { + "id" : "202", + "type" : "rdfs:SubClassOf" + }, { + "id" : "203", + "type" : "rdfs:SubClassOf" + }, { + "id" : "211", + "type" : "rdfs:SubClassOf" + }, { + "id" : "213", + "type" : "rdfs:SubClassOf" + }, { + "id" : "150", + "type" : "owl:objectProperty" + }, { + "id" : "215", + "type" : "rdfs:SubClassOf" + }, { + "id" : "221", + "type" : "owl:objectProperty" + }, { + "id" : "226", + "type" : "owl:datatypeProperty" + }, { + "id" : "233", + "type" : "rdfs:SubClassOf" + }, { + "id" : "235", + "type" : "rdfs:SubClassOf" + }, { + "id" : "238", + "type" : "rdfs:SubClassOf" + }, { + "id" : "239", + "type" : "rdfs:SubClassOf" + }, { + "id" : "242", + "type" : "rdfs:SubClassOf" + }, { + "id" : "244", + "type" : "rdfs:SubClassOf" + }, { + "id" : "247", + "type" : "rdfs:SubClassOf" + }, { + "id" : "248", + "type" : "owl:datatypeProperty" + }, { + "id" : "253", + "type" : "owl:objectProperty" + }, { + "id" : "63", + "type" : "owl:objectProperty" + }, { + "id" : "258", + "type" : "owl:objectProperty" + }, { + "id" : "261", + "type" : "rdfs:SubClassOf" + }, { + "id" : "262", + "type" : "rdfs:SubClassOf" + }, { + "id" : "264", + "type" : "rdfs:SubClassOf" + }, { + "id" : "265", + "type" : "rdfs:SubClassOf" + }, { + "id" : "267", + "type" : "rdfs:SubClassOf" + }, { + "id" : "268", + "type" : "owl:objectProperty" + }, { + "id" : "269", + "type" : "rdfs:SubClassOf" + }, { + "id" : "271", + "type" : "rdfs:SubClassOf" + }, { + "id" : "275", + "type" : "rdfs:SubClassOf" + }, { + "id" : "277", + "type" : "rdfs:SubClassOf" + }, { + "id" : "280", + "type" : "rdfs:SubClassOf" + }, { + "id" : "282", + "type" : "rdfs:SubClassOf" + }, { + "id" : "287", + "type" : "rdfs:SubClassOf" + }, { + "id" : "289", + "type" : "rdfs:SubClassOf" + }, { + "id" : "291", + "type" : "rdfs:SubClassOf" + }, { + "id" : "292", + "type" : "rdfs:SubClassOf" + }, { + "id" : "294", + "type" : "rdfs:SubClassOf" + }, { + "id" : "296", + "type" : "rdfs:SubClassOf" + }, { + "id" : "298", + "type" : "rdfs:SubClassOf" + }, { + "id" : "300", + "type" : "rdfs:SubClassOf" + }, { + "id" : "301", + "type" : "rdfs:SubClassOf" + }, { + "id" : "302", + "type" : "rdfs:SubClassOf" + }, { + "id" : "304", + "type" : "rdfs:SubClassOf" + }, { + "id" : "307", + "type" : "rdfs:SubClassOf" + }, { + "id" : "308", + "type" : "owl:objectProperty" + }, { + "id" : "310", + "type" : "rdfs:SubClassOf" + }, { + "id" : "311", + "type" : "rdfs:SubClassOf" + }, { + "id" : "313", + "type" : "rdfs:SubClassOf" + }, { + "id" : "314", + "type" : "rdfs:SubClassOf" + }, { + "id" : "315", + "type" : "rdfs:SubClassOf" + }, { + "id" : "316", + "type" : "rdfs:SubClassOf" + }, { + "id" : "317", + "type" : "rdfs:SubClassOf" + }, { + "id" : "319", + "type" : "rdfs:SubClassOf" + }, { + "id" : "320", + "type" : "rdfs:SubClassOf" + }, { + "id" : "321", + "type" : "rdfs:SubClassOf" + }, { + "id" : "324", + "type" : "rdfs:SubClassOf" + }, { + "id" : "325", + "type" : "rdfs:SubClassOf" + }, { + "id" : "326", + "type" : "rdfs:SubClassOf" + }, { + "id" : "327", + "type" : "rdfs:SubClassOf" + }, { + "id" : "329", + "type" : "rdfs:SubClassOf" + }, { + "id" : "330", + "type" : "rdfs:SubClassOf" + }, { + "id" : "332", + "type" : "rdfs:SubClassOf" + }, { + "id" : "334", + "type" : "rdfs:SubClassOf" + }, { + "id" : "336", + "type" : "rdfs:SubClassOf" + }, { + "id" : "338", + "type" : "rdfs:SubClassOf" + }, { + "id" : "340", + "type" : "rdfs:SubClassOf" + }, { + "id" : "341", + "type" : "owl:datatypeProperty" + }, { + "id" : "345", + "type" : "owl:objectProperty" + }, { + "id" : "346", + "type" : "rdfs:SubClassOf" + }, { + "id" : "347", + "type" : "rdfs:SubClassOf" + }, { + "id" : "348", + "type" : "rdfs:SubClassOf" + }, { + "id" : "350", + "type" : "rdfs:SubClassOf" + }, { + "id" : "351", + "type" : "rdfs:SubClassOf" + }, { + "id" : "354", + "type" : "rdfs:SubClassOf" + }, { + "id" : "355", + "type" : "rdfs:SubClassOf" + }, { + "id" : "356", + "type" : "owl:objectProperty" + }, { + "id" : "359", + "type" : "rdfs:SubClassOf" + }, { + "id" : "360", + "type" : "rdfs:SubClassOf" + }, { + "id" : "362", + "type" : "rdfs:SubClassOf" + }, { + "id" : "363", + "type" : "rdfs:SubClassOf" + }, { + "id" : "365", + "type" : "rdfs:SubClassOf" + }, { + "id" : "366", + "type" : "rdfs:SubClassOf" + }, { + "id" : "370", + "type" : "rdfs:SubClassOf" + }, { + "id" : "372", + "type" : "rdfs:SubClassOf" + }, { + "id" : "373", + "type" : "rdfs:SubClassOf" + }, { + "id" : "374", + "type" : "rdfs:SubClassOf" + }, { + "id" : "375", + "type" : "rdfs:SubClassOf" + }, { + "id" : "377", + "type" : "rdfs:SubClassOf" + }, { + "id" : "378", + "type" : "rdfs:SubClassOf" + }, { + "id" : "379", + "type" : "rdfs:SubClassOf" + }, { + "id" : "381", + "type" : "rdfs:SubClassOf" + }, { + "id" : "383", + "type" : "owl:objectProperty" + }, { + "id" : "385", + "type" : "owl:objectProperty" + }, { + "id" : "388", + "type" : "owl:objectProperty" + }, { + "id" : "393", + "type" : "owl:objectProperty" + }, { + "id" : "395", + "type" : "rdfs:SubClassOf" + }, { + "id" : "396", + "type" : "rdfs:SubClassOf" + }, { + "id" : "397", + "type" : "rdfs:SubClassOf" + }, { + "id" : "399", + "type" : "rdfs:SubClassOf" + }, { + "id" : "400", + "type" : "rdfs:SubClassOf" + }, { + "id" : "401", + "type" : "rdfs:SubClassOf" + }, { + "id" : "403", + "type" : "rdfs:SubClassOf" + }, { + "id" : "406", + "type" : "owl:objectProperty" + }, { + "id" : "394", + "type" : "owl:objectProperty" + }, { + "id" : "409", + "type" : "owl:objectProperty" + }, { + "id" : "358", + "type" : "owl:objectProperty" + }, { + "id" : "416", + "type" : "owl:someValuesFrom" + }, { + "id" : "420", + "type" : "owl:objectProperty" + }, { + "id" : "422", + "type" : "owl:objectProperty" + }, { + "id" : "425", + "type" : "owl:objectProperty" + }, { + "id" : "428", + "type" : "owl:someValuesFrom" + }, { + "id" : "431", + "type" : "owl:disjointWith" + }, { + "id" : "432", + "type" : "owl:disjointWith" + }, { + "id" : "433", + "type" : "owl:someValuesFrom" + }, { + "id" : "434", + "type" : "owl:disjointWith" + }, { + "id" : "435", + "type" : "owl:disjointWith" + }, { + "id" : "436", + "type" : "owl:disjointWith" + }, { + "id" : "438", + "type" : "owl:disjointWith" + }, { + "id" : "440", + "type" : "rdfs:SubClassOf" + }, { + "id" : "443", + "type" : "owl:objectProperty" + }, { + "id" : "451", + "type" : "owl:objectProperty" + }, { + "id" : "452", + "type" : "owl:objectProperty" + }, { + "id" : "458", + "type" : "owl:objectProperty" + }, { + "id" : "461", + "type" : "owl:datatypeProperty" + }, { + "id" : "464", + "type" : "rdfs:SubClassOf" + }, { + "id" : "465", + "type" : "rdfs:SubClassOf" + }, { + "id" : "466", + "type" : "rdfs:SubClassOf" + }, { + "id" : "467", + "type" : "rdfs:SubClassOf" + }, { + "id" : "468", + "type" : "owl:objectProperty" + }, { + "id" : "469", + "type" : "rdfs:SubClassOf" + }, { + "id" : "470", + "type" : "owl:objectProperty" + }, { + "id" : "471", + "type" : "owl:datatypeProperty" + }, { + "id" : "472", + "type" : "owl:objectProperty" + }, { + "id" : "474", + "type" : "owl:objectProperty" + }, { + "id" : "141", + "type" : "owl:objectProperty" + }, { + "id" : "477", + "type" : "rdfs:SubClassOf" + }, { + "id" : "481", + "type" : "rdfs:SubClassOf" + }, { + "id" : "482", + "type" : "rdfs:SubClassOf" + }, { + "id" : "483", + "type" : "rdfs:SubClassOf" + }, { + "id" : "484", + "type" : "rdfs:SubClassOf" + }, { + "id" : "485", + "type" : "rdfs:SubClassOf" + }, { + "id" : "486", + "type" : "rdfs:SubClassOf" + }, { + "id" : "487", + "type" : "rdfs:SubClassOf" + }, { + "id" : "493", + "type" : "rdfs:SubClassOf" + }, { + "id" : "45", + "type" : "owl:objectProperty" + }, { + "id" : "54", + "type" : "owl:objectProperty" + }, { + "id" : "494", + "type" : "rdfs:SubClassOf" + }, { + "id" : "497", + "type" : "owl:datatypeProperty" + }, { + "id" : "500", + "type" : "owl:objectProperty" + }, { + "id" : "501", + "type" : "owl:objectProperty" + }, { + "id" : "502", + "type" : "owl:objectProperty" + }, { + "id" : "503", + "type" : "rdfs:SubClassOf" + }, { + "id" : "504", + "type" : "rdfs:SubClassOf" + }, { + "id" : "505", + "type" : "rdfs:SubClassOf" + }, { + "id" : "506", + "type" : "rdfs:SubClassOf" + }, { + "id" : "507", + "type" : "rdfs:SubClassOf" + }, { + "id" : "508", + "type" : "rdfs:SubClassOf" + }, { + "id" : "509", + "type" : "rdfs:SubClassOf" + }, { + "id" : "510", + "type" : "rdfs:SubClassOf" + }, { + "id" : "511", + "type" : "rdfs:SubClassOf" + }, { + "id" : "512", + "type" : "rdfs:SubClassOf" + }, { + "id" : "513", + "type" : "rdfs:SubClassOf" + }, { + "id" : "514", + "type" : "rdfs:SubClassOf" + }, { + "id" : "515", + "type" : "rdfs:SubClassOf" + }, { + "id" : "516", + "type" : "rdfs:SubClassOf" + }, { + "id" : "518", + "type" : "owl:objectProperty" + }, { + "id" : "519", + "type" : "owl:objectProperty" + }, { + "id" : "520", + "type" : "owl:objectProperty" + }, { + "id" : "522", + "type" : "rdfs:SubClassOf" + }, { + "id" : "523", + "type" : "rdfs:SubClassOf" + }, { + "id" : "524", + "type" : "rdfs:SubClassOf" + }, { + "id" : "525", + "type" : "rdfs:SubClassOf" + }, { + "id" : "526", + "type" : "rdfs:SubClassOf" + }, { + "id" : "527", + "type" : "rdfs:SubClassOf" + }, { + "id" : "528", + "type" : "rdfs:SubClassOf" + }, { + "id" : "529", + "type" : "owl:objectProperty" + }, { + "id" : "531", + "type" : "rdfs:SubClassOf" + }, { + "id" : "532", + "type" : "rdfs:SubClassOf" + }, { + "id" : "534", + "type" : "rdfs:SubClassOf" + }, { + "id" : "535", + "type" : "owl:objectProperty" + }, { + "id" : "537", + "type" : "owl:objectProperty" + }, { + "id" : "8", + "type" : "owl:objectProperty" + }, { + "id" : "544", + "type" : "owl:objectProperty" + }, { + "id" : "545", + "type" : "rdfs:SubClassOf" + }, { + "id" : "57", + "type" : "owl:objectProperty" + }, { + "id" : "546", + "type" : "rdfs:SubClassOf" + }, { + "id" : "547", + "type" : "rdfs:SubClassOf" + }, { + "id" : "548", + "type" : "rdfs:SubClassOf" + }, { + "id" : "549", + "type" : "rdfs:SubClassOf" + }, { + "id" : "553", + "type" : "owl:objectProperty" + }, { + "id" : "53", + "type" : "owl:objectProperty" + }, { + "id" : "56", + "type" : "owl:objectProperty" + }, { + "id" : "556", + "type" : "owl:objectProperty" + }, { + "id" : "557", + "type" : "owl:datatypeProperty" + }, { + "id" : "558", + "type" : "rdfs:SubClassOf" + }, { + "id" : "559", + "type" : "rdfs:SubClassOf" + }, { + "id" : "560", + "type" : "rdfs:SubClassOf" + }, { + "id" : "561", + "type" : "owl:datatypeProperty" + }, { + "id" : "562", + "type" : "owl:objectProperty" + }, { + "id" : "564", + "type" : "owl:objectProperty" + }, { + "id" : "555", + "type" : "owl:objectProperty" + }, { + "id" : "538", + "type" : "owl:objectProperty" + }, { + "id" : "423", + "type" : "owl:objectProperty" + }, { + "id" : "542", + "type" : "owl:objectProperty" + }, { + "id" : "566", + "type" : "owl:objectProperty" + }, { + "id" : "421", + "type" : "owl:objectProperty" + }, { + "id" : "568", + "type" : "owl:objectProperty" + }, { + "id" : "387", + "type" : "owl:objectProperty" + }, { + "id" : "541", + "type" : "owl:objectProperty" + }, { + "id" : "569", + "type" : "owl:datatypeProperty" + }, { + "id" : "570", + "type" : "owl:objectProperty" + }, { + "id" : "571", + "type" : "owl:objectProperty" + }, { + "id" : "573", + "type" : "owl:datatypeProperty" + }, { + "id" : "574", + "type" : "owl:objectProperty" + }, { + "id" : "254", + "type" : "owl:objectProperty" + }, { + "id" : "577", + "type" : "owl:objectProperty" + }, { + "id" : "576", + "type" : "owl:objectProperty" + }, { + "id" : "543", + "type" : "owl:objectProperty" + }, { + "id" : "580", + "type" : "owl:objectProperty" + }, { + "id" : "581", + "type" : "owl:objectProperty" + }, { + "id" : "582", + "type" : "owl:objectProperty" + }, { + "id" : "584", + "type" : "owl:objectProperty" + }, { + "id" : "585", + "type" : "rdfs:SubClassOf" + }, { + "id" : "586", + "type" : "owl:objectProperty" + }, { + "id" : "587", + "type" : "rdfs:SubClassOf" + }, { + "id" : "588", + "type" : "rdfs:SubClassOf" + }, { + "id" : "589", + "type" : "rdfs:SubClassOf" + }, { + "id" : "567", + "type" : "owl:objectProperty" + }, { + "id" : "590", + "type" : "rdfs:SubClassOf" + }, { + "id" : "591", + "type" : "rdfs:SubClassOf" + }, { + "id" : "593", + "type" : "rdfs:SubClassOf" + }, { + "id" : "594", + "type" : "rdfs:SubClassOf" + }, { + "id" : "595", + "type" : "rdfs:SubClassOf" + }, { + "id" : "596", + "type" : "rdfs:SubClassOf" + }, { + "id" : "597", + "type" : "rdfs:SubClassOf" + }, { + "id" : "536", + "type" : "owl:objectProperty" + }, { + "id" : "598", + "type" : "rdfs:SubClassOf" + }, { + "id" : "599", + "type" : "rdfs:SubClassOf" + }, { + "id" : "600", + "type" : "rdfs:SubClassOf" + }, { + "id" : "601", + "type" : "owl:objectProperty" + }, { + "id" : "602", + "type" : "owl:objectProperty" + }, { + "id" : "603", + "type" : "rdfs:SubClassOf" + }, { + "id" : "604", + "type" : "rdfs:SubClassOf" + }, { + "id" : "605", + "type" : "rdfs:SubClassOf" + }, { + "id" : "606", + "type" : "rdfs:SubClassOf" + }, { + "id" : "607", + "type" : "rdfs:SubClassOf" + }, { + "id" : "608", + "type" : "rdfs:SubClassOf" + }, { + "id" : "609", + "type" : "rdfs:SubClassOf" + }, { + "id" : "610", + "type" : "rdfs:SubClassOf" + }, { + "id" : "389", + "type" : "owl:objectProperty" + }, { + "id" : "563", + "type" : "owl:objectProperty" + }, { + "id" : "613", + "type" : "rdfs:SubClassOf" + }, { + "id" : "614", + "type" : "rdfs:SubClassOf" + }, { + "id" : "615", + "type" : "rdfs:SubClassOf" + }, { + "id" : "616", + "type" : "rdfs:SubClassOf" + }, { + "id" : "617", + "type" : "rdfs:SubClassOf" + }, { + "id" : "618", + "type" : "rdfs:SubClassOf" + }, { + "id" : "619", + "type" : "rdfs:SubClassOf" + }, { + "id" : "620", + "type" : "rdfs:SubClassOf" + }, { + "id" : "621", + "type" : "rdfs:SubClassOf" + }, { + "id" : "622", + "type" : "rdfs:SubClassOf" + }, { + "id" : "623", + "type" : "rdfs:SubClassOf" + }, { + "id" : "624", + "type" : "rdfs:SubClassOf" + }, { + "id" : "625", + "type" : "owl:objectProperty" + }, { + "id" : "626", + "type" : "rdfs:SubClassOf" + }, { + "id" : "627", + "type" : "rdfs:SubClassOf" + }, { + "id" : "628", + "type" : "rdfs:SubClassOf" + }, { + "id" : "629", + "type" : "owl:objectProperty" + }, { + "id" : "630", + "type" : "owl:objectProperty" + }, { + "id" : "473", + "type" : "owl:objectProperty" + }, { + "id" : "631", + "type" : "rdfs:SubClassOf" + }, { + "id" : "632", + "type" : "rdfs:SubClassOf" + }, { + "id" : "633", + "type" : "rdfs:SubClassOf" + }, { + "id" : "634", + "type" : "rdfs:SubClassOf" + }, { + "id" : "635", + "type" : "rdfs:SubClassOf" + }, { + "id" : "427", + "type" : "owl:objectProperty" + }, { + "id" : "636", + "type" : "rdfs:SubClassOf" + }, { + "id" : "637", + "type" : "rdfs:SubClassOf" + }, { + "id" : "639", + "type" : "rdfs:SubClassOf" + }, { + "id" : "640", + "type" : "rdfs:SubClassOf" + }, { + "id" : "641", + "type" : "rdfs:SubClassOf" + }, { + "id" : "642", + "type" : "rdfs:SubClassOf" + }, { + "id" : "643", + "type" : "rdfs:SubClassOf" + }, { + "id" : "644", + "type" : "rdfs:SubClassOf" + }, { + "id" : "645", + "type" : "rdfs:SubClassOf" + }, { + "id" : "646", + "type" : "rdfs:SubClassOf" + }, { + "id" : "647", + "type" : "owl:objectProperty" + }, { + "id" : "55", + "type" : "owl:objectProperty" + }, { + "id" : "648", + "type" : "owl:objectProperty" + }, { + "id" : "649", + "type" : "owl:objectProperty" + }, { + "id" : "357", + "type" : "owl:objectProperty" + }, { + "id" : "530", + "type" : "owl:objectProperty" + }, { + "id" : "260", + "type" : "owl:objectProperty" + }, { + "id" : "650", + "type" : "owl:datatypeProperty" + }, { + "id" : "64", + "type" : "owl:objectProperty" + }, { + "id" : "583", + "type" : "owl:objectProperty" + }, { + "id" : "611", + "type" : "owl:objectProperty" + }, { + "id" : "48", + "type" : "owl:objectProperty" + }, { + "id" : "575", + "type" : "owl:objectProperty" + }, { + "id" : "162", + "type" : "owl:objectProperty" + }, { + "id" : "651", + "type" : "owl:disjointWith" + }, { + "id" : "652", + "type" : "owl:disjointWith" + }, { + "id" : "653", + "type" : "owl:someValuesFrom" + }, { + "id" : "654", + "type" : "owl:someValuesFrom" + }, { + "id" : "655", + "type" : "owl:someValuesFrom" + }, { + "id" : "656", + "type" : "owl:someValuesFrom" + }, { + "id" : "657", + "type" : "owl:someValuesFrom" + }, { + "id" : "658", + "type" : "owl:disjointWith" + }, { + "id" : "659", + "type" : "owl:objectProperty" + }, { + "id" : "661", + "type" : "owl:disjointWith" + }, { + "id" : "662", + "type" : "owl:disjointWith" + }, { + "id" : "663", + "type" : "owl:objectProperty" + }, { + "id" : "660", + "type" : "owl:objectProperty" + }, { + "id" : "664", + "type" : "owl:objectProperty" + }, { + "id" : "665", + "type" : "owl:objectProperty" + } ], + "propertyAttribute" : [ { + "range" : "2", + "domain" : "1", + "attributes" : [ "anonymous", "object" ], + "id" : "0" + }, { + "range" : "1", + "domain" : "4", + "attributes" : [ "anonymous", "object" ], + "id" : "3" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedInfluenceOf", + "inverse" : "8", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "7", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "qualifiedInfluenceOf", + "undefined" : "qualifiedInfluenceOf" + }, + "domain" : "6", + "attributes" : [ "object", "external" ], + "id" : "5" + }, { + "iri" : "https://w3id.org/pmd/co/resource", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "11", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "en", + "value" : "has resource", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "resource", + "en" : "resource" + }, + "domain" : "10", + "attributes" : [ "functional", "object", "external" ], + "id" : "9" + }, { + "range" : "10", + "domain" : "12", + "attributes" : [ "anonymous", "object" ], + "id" : "13" + }, { + "range" : "1", + "domain" : "15", + "attributes" : [ "anonymous", "object" ], + "id" : "14" + }, { + "range" : "10", + "domain" : "17", + "attributes" : [ "anonymous", "object" ], + "id" : "16" + }, { + "range" : "1", + "domain" : "19", + "attributes" : [ "anonymous", "object" ], + "id" : "18" + }, { + "range" : "10", + "domain" : "21", + "attributes" : [ "anonymous", "object" ], + "id" : "20" + }, { + "range" : "1", + "domain" : "23", + "attributes" : [ "anonymous", "object" ], + "id" : "22" + }, { + "range" : "10", + "domain" : "25", + "attributes" : [ "anonymous", "object" ], + "id" : "24" + }, { + "range" : "1", + "domain" : "27", + "attributes" : [ "anonymous", "object" ], + "id" : "26" + }, { + "range" : "10", + "domain" : "29", + "attributes" : [ "anonymous", "object" ], + "id" : "28" + }, { + "range" : "32", + "domain" : "31", + "attributes" : [ "anonymous", "object" ], + "id" : "30" + }, { + "range" : "10", + "domain" : "34", + "attributes" : [ "anonymous", "object" ], + "id" : "33" + }, { + "range" : "32", + "domain" : "36", + "attributes" : [ "anonymous", "object" ], + "id" : "35" + }, { + "range" : "10", + "domain" : "41", + "attributes" : [ "anonymous", "object" ], + "id" : "40" + }, { + "iri" : "http://www.w3.org/ns/prov#specializationOf", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "44", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "generalizationOf", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "alternate", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-specialization", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An entity that is a specialization of another shares all aspects of the latter, and additionally presents more specific aspects of the same thing as the latter. In particular, the lifetime of the entity being specialized contains that of any specialization. Examples of aspects include a time period, an abstraction, and a context associated with the entity.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "constraints" : [ { + "identifier" : "constraints", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-constraints-20130430/#prov-dm-constraints-fig", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-specialization", + "type" : "label" + } ], + "seeAlso" : [ { + "identifier" : "seeAlso", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#alternateOf", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "specializationOf", + "undefined" : "specializationOf" + }, + "superproperty" : [ "45" ], + "domain" : "43", + "attributes" : [ "object", "external" ], + "id" : "42" + }, { + "iri" : "http://www.w3.org/ns/prov#hadDelegate", + "inverse" : "48", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "47", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "hadDelegate", + "undefined" : "hadDelegate" + }, + "domain" : "47", + "attributes" : [ "object", "external" ], + "id" : "46" + }, { + "iri" : "http://www.w3.org/2002/07/owl#topObjectProperty", + "baseIri" : "http://www.w3.org/2002/07/owl", + "range" : "52", + "label" : { + "IRI-based" : "topObjectProperty" + }, + "domain" : "52", + "subproperty" : [ "53", "54", "55", "56", "57", "58", "59" ], + "attributes" : [ "object", "external" ], + "id" : "51" + }, { + "iri" : "https://w3id.org/pmd/co/belongsToProject", + "inverse" : "63", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "62", + "annotations" : { + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "belongs to process", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Association between a process and a project.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "belongsToProject" + }, + "superproperty" : [ "64" ], + "domain" : "61", + "attributes" : [ "object", "external" ], + "id" : "60" + }, { + "iri" : "http://www.w3.org/ns/prov#atLocation", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "72", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "locationOf", + "type" : "label" + } ], + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Location", + "type" : "iri" + } ], + "editorialNote" : [ { + "identifier" : "editorialNote", + "language" : "en", + "value" : "This property is not functional because the many values could be at a variety of granularies (In this building, in this room, in that chair).", + "type" : "label" + }, { + "identifier" : "editorialNote", + "language" : "en", + "value" : "The naming of prov:atLocation parallels prov:atTime, and is not named prov:hadLocation to avoid conflicting with the convention that prov:had* properties are used on prov:Influence classes.", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "atLocation", + "undefined" : "atLocation" + }, + "domain" : "71", + "comment" : { + "en" : "The Location of any resource.", + "undefined" : "This property has multiple RDFS domains to suit multiple OWL Profiles. See
    PROV-O OWL Profile." + }, + "attributes" : [ "object", "external" ], + "id" : "70" + }, { + "range" : "75", + "domain" : "74", + "attributes" : [ "anonymous", "object" ], + "id" : "73" + }, { + "range" : "2", + "domain" : "77", + "attributes" : [ "anonymous", "object" ], + "id" : "76" + }, { + "range" : "75", + "domain" : "79", + "attributes" : [ "anonymous", "object" ], + "id" : "78" + }, { + "iri" : "https://w3id.org/pmd/co/minValue", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "81", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "refers to all values equal or larger than the given one", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "minValue", + "en" : "min value" + }, + "domain" : "52", + "attributes" : [ "datatype", "external" ], + "id" : "80" + }, { + "range" : "2", + "domain" : "83", + "attributes" : [ "anonymous", "object" ], + "id" : "82" + }, { + "range" : "86", + "domain" : "85", + "attributes" : [ "anonymous", "object" ], + "id" : "84" + }, { + "range" : "61", + "domain" : "91", + "attributes" : [ "anonymous", "object" ], + "id" : "90" + }, { + "range" : "47", + "domain" : "93", + "attributes" : [ "anonymous", "object" ], + "id" : "92" + }, { + "range" : "61", + "domain" : "99", + "attributes" : [ "anonymous", "object" ], + "id" : "98" + }, { + "range" : "47", + "domain" : "101", + "attributes" : [ "anonymous", "object" ], + "id" : "100" + }, { + "range" : "61", + "domain" : "106", + "attributes" : [ "anonymous", "object" ], + "id" : "105" + }, { + "range" : "47", + "domain" : "108", + "attributes" : [ "anonymous", "object" ], + "id" : "107" + }, { + "range" : "61", + "domain" : "112", + "attributes" : [ "anonymous", "object" ], + "id" : "111" + }, { + "range" : "115", + "domain" : "114", + "attributes" : [ "anonymous", "object" ], + "id" : "113" + }, { + "range" : "117", + "domain" : "38", + "attributes" : [ "anonymous", "object" ], + "id" : "116" + }, { + "range" : "115", + "domain" : "119", + "attributes" : [ "anonymous", "object" ], + "id" : "118" + }, { + "range" : "117", + "domain" : "121", + "attributes" : [ "anonymous", "object" ], + "id" : "120" + }, { + "range" : "124", + "domain" : "123", + "attributes" : [ "anonymous", "object" ], + "id" : "122" + }, { + "range" : "2", + "domain" : "126", + "attributes" : [ "anonymous", "object" ], + "id" : "125" + }, { + "range" : "124", + "domain" : "128", + "attributes" : [ "anonymous", "object" ], + "id" : "127" + }, { + "range" : "2", + "domain" : "104", + "attributes" : [ "anonymous", "object" ], + "id" : "129" + }, { + "range" : "75", + "domain" : "131", + "attributes" : [ "anonymous", "object" ], + "id" : "130" + }, { + "range" : "2", + "domain" : "133", + "attributes" : [ "anonymous", "object" ], + "id" : "132" + }, { + "iri" : "http://www.w3.org/ns/prov#endedAtTime", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "136", + "annotations" : { + "editorialNote" : [ { + "identifier" : "editorialNote", + "language" : "en", + "value" : "It is the intent that the property chain holds: (prov:qualifiedEnd o prov:atTime) rdfs:subPropertyOf prov:endedAtTime.", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "starting-point", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#End", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#atTime", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "endedAtTime", + "undefined" : "endedAtTime" + }, + "domain" : "135", + "comment" : { + "en" : "The time at which an activity ended. See also prov:startedAtTime." + }, + "attributes" : [ "datatype", "external" ], + "id" : "134" + }, { + "iri" : "http://www.w3.org/ns/prov#agentOfInfluence", + "inverse" : "141", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "140", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "agentOfInfluence", + "undefined" : "agentOfInfluence" + }, + "domain" : "47", + "attributes" : [ "object", "external" ], + "id" : "139" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedCommunication", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "143", + "annotations" : { + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Communication", + "type" : "iri" + } ], + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "qualifiedCommunicationOf", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Communication", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "qualifiedCommunication", + "undefined" : "qualifiedCommunication" + }, + "superproperty" : [ "8" ], + "domain" : "135", + "comment" : { + "en" : "If this Activity prov:wasInformedBy Activity :a, then it can qualify how it was influenced using prov:qualifiedCommunication [ a prov:Communication; prov:activity :a; :foo :bar ]." + }, + "attributes" : [ "object", "external" ], + "id" : "142" + }, { + "iri" : "https://w3id.org/pmd/co/relatesToElement", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "149", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "relatesToElement", + "en" : "relates to element" + }, + "superproperty" : [ "150" ], + "domain" : "148", + "attributes" : [ "object", "external" ], + "id" : "147" + }, { + "range" : "153", + "domain" : "152", + "attributes" : [ "anonymous", "object" ], + "id" : "151" + }, { + "iri" : "https://w3id.org/pmd/co/component", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "155", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "en", + "value" : "has component", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The object property component, which is used in connection with ProcessingNode and its (modular) elements. It enables the representation of the individual, different parts of processing nodes. Essentially, the 'component property' is a way of breaking down a complex system into manageable and distinct parts in order to understand and manage the role of each part within the overall system.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Die Objekt-Eigenschaft Komponente, die in Verbindung mit ProzessKnoten und seinen (modularen) Elementen verwendet wird. Sie ermöglicht die Darstellung der einzelnen, unterschiedlichen Teile von ProzessKnoten. Im Wesentlichen ist die \"Komponenten-Eigenschaft\" eine Möglichkeit, ein komplexes System in überschaubare und eindeutige Teile zu zerlegen, um die Rolle der einzelnen Teile innerhalb des Gesamtsystems zu verstehen und zu verwalten.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "component", + "en" : "component" + }, + "domain" : "93", + "attributes" : [ "object", "external" ], + "id" : "154" + }, { + "range" : "61", + "domain" : "158", + "attributes" : [ "anonymous", "object" ], + "id" : "157" + }, { + "range" : "47", + "domain" : "87", + "attributes" : [ "anonymous", "object" ], + "id" : "159" + }, { + "iri" : "http://www.w3.org/ns/prov#entityOfInfluence", + "inverse" : "162", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "161", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "entityOfInfluence", + "undefined" : "entityOfInfluence" + }, + "domain" : "43", + "attributes" : [ "object", "external" ], + "id" : "160" + }, { + "range" : "95", + "domain" : "164", + "attributes" : [ "anonymous", "object" ], + "id" : "163" + }, { + "range" : "95", + "domain" : "166", + "attributes" : [ "anonymous", "object" ], + "id" : "165" + }, { + "range" : "95", + "domain" : "168", + "attributes" : [ "anonymous", "object" ], + "id" : "167" + }, { + "range" : "69", + "domain" : "68", + "attributes" : [ "anonymous", "object" ], + "id" : "169" + }, { + "range" : "153", + "domain" : "171", + "attributes" : [ "anonymous", "object" ], + "id" : "170" + }, { + "range" : "153", + "domain" : "173", + "attributes" : [ "anonymous", "object" ], + "id" : "172" + }, { + "range" : "153", + "domain" : "175", + "attributes" : [ "anonymous", "object" ], + "id" : "174" + }, { + "range" : "153", + "domain" : "177", + "attributes" : [ "anonymous", "object" ], + "id" : "176" + }, { + "range" : "153", + "domain" : "179", + "attributes" : [ "anonymous", "object" ], + "id" : "178" + }, { + "range" : "95", + "domain" : "189", + "attributes" : [ "anonymous", "object" ], + "id" : "188" + }, { + "range" : "192", + "domain" : "191", + "attributes" : [ "anonymous", "object" ], + "id" : "190" + }, { + "range" : "192", + "domain" : "195", + "attributes" : [ "anonymous", "object" ], + "id" : "194" + }, { + "range" : "192", + "domain" : "197", + "attributes" : [ "anonymous", "object" ], + "id" : "196" + }, { + "range" : "199", + "domain" : "143", + "attributes" : [ "anonymous", "object" ], + "id" : "198" + }, { + "range" : "199", + "domain" : "201", + "attributes" : [ "anonymous", "object" ], + "id" : "200" + }, { + "range" : "199", + "domain" : "191", + "attributes" : [ "anonymous", "object" ], + "id" : "202" + }, { + "range" : "95", + "domain" : "94", + "attributes" : [ "anonymous", "object" ], + "id" : "203" + }, { + "range" : "95", + "domain" : "212", + "attributes" : [ "anonymous", "object" ], + "id" : "211" + }, { + "range" : "95", + "domain" : "214", + "attributes" : [ "anonymous", "object" ], + "id" : "213" + }, { + "iri" : "https://w3id.org/pmd/co/relatesTo", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "11", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Describes a general relationship between domain objects.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "relatesTo", + "en" : "relates to" + }, + "domain" : "10", + "subproperty" : [ "147" ], + "attributes" : [ "object", "external" ], + "id" : "150" + }, { + "range" : "95", + "domain" : "216", + "attributes" : [ "anonymous", "object" ], + "id" : "215" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedDelegation", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "222", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "qualifiedDelegationOf", + "type" : "label" + } ], + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Delegation", + "type" : "iri" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#actedOnBehalfOf", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "qualifiedDelegation", + "undefined" : "qualifiedDelegation" + }, + "superproperty" : [ "8" ], + "domain" : "47", + "comment" : { + "en" : "If this Agent prov:actedOnBehalfOf Agent :ag, then it can qualify how with prov:qualifiedResponsibility [ a prov:Responsibility; prov:agent :ag; :foo :bar ]." + }, + "attributes" : [ "object", "external" ], + "id" : "221" + }, { + "iri" : "http://www.w3.org/2002/07/owl#topDataProperty", + "baseIri" : "http://www.w3.org/2002/07/owl", + "range" : "227", + "label" : { + "IRI-based" : "topDataProperty" + }, + "domain" : "52", + "attributes" : [ "datatype", "external" ], + "id" : "226" + }, { + "range" : "10", + "domain" : "234", + "attributes" : [ "anonymous", "object" ], + "id" : "233" + }, { + "range" : "237", + "domain" : "236", + "attributes" : [ "anonymous", "object" ], + "id" : "235" + }, { + "range" : "10", + "domain" : "230", + "attributes" : [ "anonymous", "object" ], + "id" : "238" + }, { + "range" : "241", + "domain" : "240", + "attributes" : [ "anonymous", "object" ], + "id" : "239" + }, { + "range" : "234", + "domain" : "243", + "attributes" : [ "anonymous", "object" ], + "id" : "242" + }, { + "range" : "246", + "domain" : "245", + "attributes" : [ "anonymous", "object" ], + "id" : "244" + }, { + "range" : "106", + "domain" : "193", + "attributes" : [ "anonymous", "object" ], + "id" : "247" + }, { + "iri" : "http://www.w3.org/ns/prov#atTime", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "249", + "annotations" : { + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#InstantaneousEvent", + "type" : "iri" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#endedAtTime", + "type" : "iri" + }, { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#generatedAtTime", + "type" : "iri" + }, { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#invalidatedAtTime", + "type" : "iri" + }, { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#startedAtTime", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "atTime", + "undefined" : "atTime" + }, + "domain" : "192", + "comment" : { + "en" : "The time at which an InstantaneousEvent occurred, in the form of xsd:dateTime." + }, + "attributes" : [ "datatype", "external" ], + "id" : "248" + }, { + "iri" : "http://www.w3.org/ns/prov#wasInvalidatedBy", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "135", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "invalidated", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#qualifiedInvalidation", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Invalidation", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasInvalidatedBy", + "undefined" : "wasInvalidatedBy" + }, + "superproperty" : [ "254" ], + "domain" : "43", + "attributes" : [ "object", "external" ], + "id" : "253" + }, { + "iri" : "https://w3id.org/pmd/co/process", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "61", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Describes that a process is associated with a project.", + "type" : "label" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "en", + "value" : "has process", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "process", + "en" : "process" + }, + "domain" : "62", + "attributes" : [ "object", "external" ], + "id" : "63" + }, { + "iri" : "https://w3id.org/pmd/co/composedOf", + "inverse" : "260", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "259", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This property is used to describe the fact that and which objects are composed of other objects, i.e. it is used to describe the specific constituents or ingredients that form a particular entity or object. \nAs a prepositional phrase, it indicates the elements, parts, or components that make up a whole.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This property is used to describe which voxels and materials an object is composed of.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "composedOf", + "en" : "composed of" + }, + "domain" : "259", + "attributes" : [ "object", "external" ], + "id" : "258" + }, { + "range" : "34", + "domain" : "97", + "attributes" : [ "anonymous", "object" ], + "id" : "261" + }, { + "range" : "10", + "domain" : "263", + "attributes" : [ "anonymous", "object" ], + "id" : "262" + }, { + "range" : "34", + "domain" : "252", + "attributes" : [ "anonymous", "object" ], + "id" : "264" + }, { + "range" : "10", + "domain" : "266", + "attributes" : [ "anonymous", "object" ], + "id" : "265" + }, { + "range" : "34", + "domain" : "255", + "attributes" : [ "anonymous", "object" ], + "id" : "267" + }, { + "iri" : "https://w3id.org/pmd/co/subordinateProcess", + "inverse" : "55", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "61", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This property is used to link a process to its subordinate processes.", + "type" : "label" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "undefined", + "value" : "has subordinate process", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "subordinateProcess", + "en" : "subordinate process" + }, + "domain" : "61", + "attributes" : [ "object", "external" ], + "id" : "268" + }, { + "range" : "10", + "domain" : "270", + "attributes" : [ "anonymous", "object" ], + "id" : "269" + }, { + "range" : "34", + "domain" : "272", + "attributes" : [ "anonymous", "object" ], + "id" : "271" + }, { + "range" : "10", + "domain" : "276", + "attributes" : [ "anonymous", "object" ], + "id" : "275" + }, { + "range" : "279", + "domain" : "278", + "attributes" : [ "anonymous", "object" ], + "id" : "277" + }, { + "range" : "10", + "domain" : "281", + "attributes" : [ "anonymous", "object" ], + "id" : "280" + }, { + "range" : "237", + "domain" : "283", + "attributes" : [ "anonymous", "object" ], + "id" : "282" + }, { + "range" : "10", + "domain" : "288", + "attributes" : [ "anonymous", "object" ], + "id" : "287" + }, { + "range" : "237", + "domain" : "290", + "attributes" : [ "anonymous", "object" ], + "id" : "289" + }, { + "range" : "10", + "domain" : "225", + "attributes" : [ "anonymous", "object" ], + "id" : "291" + }, { + "range" : "281", + "domain" : "293", + "attributes" : [ "anonymous", "object" ], + "id" : "292" + }, { + "range" : "10", + "domain" : "295", + "attributes" : [ "anonymous", "object" ], + "id" : "294" + }, { + "range" : "34", + "domain" : "297", + "attributes" : [ "anonymous", "object" ], + "id" : "296" + }, { + "range" : "10", + "domain" : "299", + "attributes" : [ "anonymous", "object" ], + "id" : "298" + }, { + "range" : "34", + "domain" : "96", + "attributes" : [ "anonymous", "object" ], + "id" : "300" + }, { + "range" : "10", + "domain" : "2", + "attributes" : [ "anonymous", "object" ], + "id" : "301" + }, { + "range" : "34", + "domain" : "303", + "attributes" : [ "anonymous", "object" ], + "id" : "302" + }, { + "range" : "10", + "domain" : "305", + "attributes" : [ "anonymous", "object" ], + "id" : "304" + }, { + "range" : "140", + "domain" : "222", + "attributes" : [ "anonymous", "object" ], + "id" : "307" + }, { + "iri" : "http://purl.obolibrary.org/obo/RO_0000087", + "baseIri" : "http://purl.obolibrary.org/obo", + "range" : "309", + "label" : { + "IRI-based" : "RO_0000087", + "en" : "has role" + }, + "domain" : "47", + "attributes" : [ "object", "external" ], + "id" : "308" + }, { + "range" : "10", + "domain" : "218", + "attributes" : [ "anonymous", "object" ], + "id" : "310" + }, { + "range" : "161", + "domain" : "312", + "attributes" : [ "anonymous", "object" ], + "id" : "311" + }, { + "range" : "10", + "domain" : "32", + "attributes" : [ "anonymous", "object" ], + "id" : "313" + }, { + "range" : "161", + "domain" : "75", + "attributes" : [ "anonymous", "object" ], + "id" : "314" + }, { + "range" : "10", + "domain" : "290", + "attributes" : [ "anonymous", "object" ], + "id" : "315" + }, { + "range" : "161", + "domain" : "195", + "attributes" : [ "anonymous", "object" ], + "id" : "316" + }, { + "range" : "10", + "domain" : "318", + "attributes" : [ "anonymous", "object" ], + "id" : "317" + }, { + "range" : "161", + "domain" : "197", + "attributes" : [ "anonymous", "object" ], + "id" : "319" + }, { + "range" : "10", + "domain" : "89", + "attributes" : [ "anonymous", "object" ], + "id" : "320" + }, { + "range" : "281", + "domain" : "322", + "attributes" : [ "anonymous", "object" ], + "id" : "321" + }, { + "range" : "10", + "domain" : "187", + "attributes" : [ "anonymous", "object" ], + "id" : "324" + }, { + "range" : "274", + "domain" : "273", + "attributes" : [ "anonymous", "object" ], + "id" : "325" + }, { + "range" : "10", + "domain" : "229", + "attributes" : [ "anonymous", "object" ], + "id" : "326" + }, { + "range" : "318", + "domain" : "328", + "attributes" : [ "anonymous", "object" ], + "id" : "327" + }, { + "range" : "10", + "domain" : "65", + "attributes" : [ "anonymous", "object" ], + "id" : "329" + }, { + "range" : "266", + "domain" : "331", + "attributes" : [ "anonymous", "object" ], + "id" : "330" + }, { + "range" : "10", + "domain" : "333", + "attributes" : [ "anonymous", "object" ], + "id" : "332" + }, { + "range" : "140", + "domain" : "335", + "attributes" : [ "anonymous", "object" ], + "id" : "334" + }, { + "range" : "10", + "domain" : "337", + "attributes" : [ "anonymous", "object" ], + "id" : "336" + }, { + "range" : "140", + "domain" : "339", + "attributes" : [ "anonymous", "object" ], + "id" : "338" + }, { + "range" : "10", + "domain" : "124", + "attributes" : [ "anonymous", "object" ], + "id" : "340" + }, { + "iri" : "https://w3id.org/pmd/co/fragmentPath", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "342", + "annotations" : { + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A path expression that addresses a specific element in a document.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "fragmentPath", + "en" : "fragment path" + }, + "domain" : "52", + "attributes" : [ "datatype", "external" ], + "id" : "341" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedRevision", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "79", + "annotations" : { + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Revision", + "type" : "iri" + } ], + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "revisedEntity", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasRevisionOf", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "qualifiedRevision", + "undefined" : "qualifiedRevision" + }, + "superproperty" : [ "8" ], + "domain" : "43", + "comment" : { + "en" : "If this Entity prov:wasRevisionOf Entity :e, then it can qualify how it was revised using prov:qualifiedRevision [ a prov:Revision; prov:entity :e; :foo :bar ]." + }, + "attributes" : [ "object", "external" ], + "id" : "345" + }, { + "range" : "89", + "domain" : "185", + "attributes" : [ "anonymous", "object" ], + "id" : "346" + }, { + "range" : "10", + "domain" : "256", + "attributes" : [ "anonymous", "object" ], + "id" : "347" + }, { + "range" : "89", + "domain" : "349", + "attributes" : [ "anonymous", "object" ], + "id" : "348" + }, { + "range" : "10", + "domain" : "344", + "attributes" : [ "anonymous", "object" ], + "id" : "350" + }, { + "range" : "353", + "domain" : "352", + "attributes" : [ "anonymous", "object" ], + "id" : "351" + }, { + "range" : "10", + "domain" : "257", + "attributes" : [ "anonymous", "object" ], + "id" : "354" + }, { + "range" : "252", + "domain" : "251", + "attributes" : [ "anonymous", "object" ], + "id" : "355" + }, { + "iri" : "https://w3id.org/pmd/co/executedBy", + "inverse" : "357", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "93", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This property represents which process is executed by which process node.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "executedBy", + "en" : "executed by" + }, + "superproperty" : [ "358" ], + "domain" : "61", + "attributes" : [ "object", "external" ], + "id" : "356" + }, { + "range" : "10", + "domain" : "95", + "attributes" : [ "anonymous", "object" ], + "id" : "359" + }, { + "range" : "274", + "domain" : "361", + "attributes" : [ "anonymous", "object" ], + "id" : "360" + }, { + "range" : "10", + "domain" : "180", + "attributes" : [ "anonymous", "object" ], + "id" : "362" + }, { + "range" : "305", + "domain" : "364", + "attributes" : [ "anonymous", "object" ], + "id" : "363" + }, { + "range" : "10", + "domain" : "148", + "attributes" : [ "anonymous", "object" ], + "id" : "365" + }, { + "range" : "305", + "domain" : "367", + "attributes" : [ "anonymous", "object" ], + "id" : "366" + }, { + "range" : "10", + "domain" : "371", + "attributes" : [ "anonymous", "object" ], + "id" : "370" + }, { + "range" : "50", + "domain" : "49", + "attributes" : [ "anonymous", "object" ], + "id" : "372" + }, { + "range" : "10", + "domain" : "343", + "attributes" : [ "anonymous", "object" ], + "id" : "373" + }, { + "range" : "50", + "domain" : "138", + "attributes" : [ "anonymous", "object" ], + "id" : "374" + }, { + "range" : "10", + "domain" : "376", + "attributes" : [ "anonymous", "object" ], + "id" : "375" + }, { + "range" : "89", + "domain" : "88", + "attributes" : [ "anonymous", "object" ], + "id" : "377" + }, { + "range" : "10", + "domain" : "186", + "attributes" : [ "anonymous", "object" ], + "id" : "378" + }, { + "range" : "89", + "domain" : "380", + "attributes" : [ "anonymous", "object" ], + "id" : "379" + }, { + "range" : "10", + "domain" : "382", + "attributes" : [ "anonymous", "object" ], + "id" : "381" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedInvalidation", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "191", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "qualifiedInvalidationOf", + "type" : "label" + } ], + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Invalidation", + "type" : "iri" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasInvalidatedBy", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "qualifiedInvalidation", + "undefined" : "qualifiedInvalidation" + }, + "superproperty" : [ "8" ], + "domain" : "43", + "comment" : { + "en" : "If this Entity prov:wasInvalidatedBy Activity :a, then it can qualify how it was invalidated using prov:qualifiedInvalidation [ a prov:Invalidation; prov:activity :a; :foo :bar ]." + }, + "attributes" : [ "object", "external" ], + "id" : "383" + }, { + "iri" : "http://www.w3.org/ns/prov#wasPlanOf", + "inverse" : "387", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "339", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasPlanOf", + "undefined" : "wasPlanOf" + }, + "domain" : "386", + "attributes" : [ "object", "external" ], + "id" : "385" + }, { + "iri" : "http://www.w3.org/ns/prov#wasPrimarySourceOf", + "inverse" : "389", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "43", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasPrimarySourceOf", + "undefined" : "wasPrimarySourceOf" + }, + "domain" : "43", + "attributes" : [ "object", "external" ], + "id" : "388" + }, { + "iri" : "http://www.w3.org/ns/prov#started", + "inverse" : "394", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "135", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "started", + "undefined" : "started" + }, + "domain" : "43", + "attributes" : [ "object", "external" ], + "id" : "393" + }, { + "range" : "32", + "domain" : "39", + "attributes" : [ "anonymous", "object" ], + "id" : "395" + }, { + "range" : "10", + "domain" : "250", + "attributes" : [ "anonymous", "object" ], + "id" : "396" + }, { + "range" : "32", + "domain" : "398", + "attributes" : [ "anonymous", "object" ], + "id" : "397" + }, { + "range" : "10", + "domain" : "86", + "attributes" : [ "anonymous", "object" ], + "id" : "399" + }, { + "range" : "32", + "domain" : "156", + "attributes" : [ "anonymous", "object" ], + "id" : "400" + }, { + "range" : "10", + "domain" : "402", + "attributes" : [ "anonymous", "object" ], + "id" : "401" + }, { + "range" : "305", + "domain" : "404", + "attributes" : [ "anonymous", "object" ], + "id" : "403" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedDerivation", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "75", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "qualifiedDerivationOf", + "type" : "label" + } ], + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Derivation", + "type" : "iri" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasDerivedFrom", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "qualifiedDerivation", + "undefined" : "qualifiedDerivation" + }, + "superproperty" : [ "8" ], + "domain" : "43", + "comment" : { + "en" : "If this Entity prov:wasDerivedFrom Entity :e, then it can qualify how it was derived using prov:qualifiedDerivation [ a prov:Derivation; prov:entity :e; :foo :bar ]." + }, + "attributes" : [ "object", "external" ], + "id" : "406" + }, { + "iri" : "http://www.w3.org/ns/prov#wasStartedBy", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "43", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "started", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#qualifiedStart", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Start", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasStartedBy", + "undefined" : "wasStartedBy" + }, + "superproperty" : [ "254" ], + "domain" : "135", + "comment" : { + "en" : "Start is when an activity is deemed to have started. A start may refer to an entity, known as trigger, that initiated the activity." + }, + "attributes" : [ "object", "external" ], + "id" : "394" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedEnd", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "195", + "annotations" : { + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#End", + "type" : "iri" + } ], + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "qualifiedEndOf", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasEndedBy", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "qualifiedEnd", + "undefined" : "qualifiedEnd" + }, + "superproperty" : [ "8" ], + "domain" : "135", + "comment" : { + "en" : "If this Activity prov:wasEndedBy Entity :e1, then it can qualify how it was ended using prov:qualifiedEnd [ a prov:End; prov:entity :e1; :foo :bar ]." + }, + "attributes" : [ "object", "external" ], + "id" : "409" + }, { + "iri" : "http://www.w3.org/ns/prov#wasAssociatedWith", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "47", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "wasAssociateFor", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "starting-point", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#qualifiedAssociation", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Association", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasAssociatedWith", + "undefined" : "wasAssociatedWith" + }, + "superproperty" : [ "254" ], + "domain" : "135", + "subproperty" : [ "356" ], + "comment" : { + "en" : "An prov:Agent that had some (unspecified) responsibility for the occurrence of this prov:Activity." + }, + "attributes" : [ "object", "external" ], + "id" : "358" + }, { + "iri" : "https://w3id.org/pmd/co/relatesTo", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "417", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Describes a general relationship between domain objects.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "relatesTo", + "en" : "relates to" + }, + "domain" : "117", + "subproperty" : [ "147" ], + "attributes" : [ "someValues", "object", "external" ], + "id" : "416" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedQuotationOf", + "inverse" : "421", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "43", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "qualifiedQuotationOf", + "undefined" : "qualifiedQuotationOf" + }, + "domain" : "131", + "attributes" : [ "object", "external" ], + "id" : "420" + }, { + "iri" : "http://www.w3.org/ns/prov#wasRevisionOf", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "44", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "hadRevision", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#qualifiedRevision", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Revision", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasRevisionOf", + "undefined" : "wasRevisionOf" + }, + "superproperty" : [ "423" ], + "domain" : "43", + "comment" : { + "en" : "A revision is a derivation that revises an entity into a revised version." + }, + "attributes" : [ "object", "external" ], + "id" : "422" + }, { + "iri" : "http://www.w3.org/ns/prov#hadInfluence", + "inverse" : "427", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "6", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "hadInfluence", + "undefined" : "hadInfluence" + }, + "domain" : "426", + "attributes" : [ "object", "external" ], + "id" : "425" + }, { + "iri" : "https://w3id.org/pmd/co/fromValue", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "429", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "undefined", + "value" : "refers to the begin of a value range", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "fromValue", + "en" : "from value" + }, + "domain" : "276", + "attributes" : [ "datatype", "someValues", "external" ], + "id" : "428" + }, { + "range" : "236", + "domain" : "283", + "attributes" : [ "anonymous", "object" ], + "id" : "431" + }, { + "range" : "369", + "domain" : "241", + "attributes" : [ "anonymous", "object" ], + "id" : "432" + }, { + "iri" : "https://w3id.org/pmd/co/toValue", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "430", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "undefined", + "value" : "refers to the end of a value range", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "toValue", + "en" : "to value" + }, + "domain" : "276", + "attributes" : [ "datatype", "someValues", "external" ], + "id" : "433" + }, { + "range" : "119", + "domain" : "114", + "attributes" : [ "anonymous", "object" ], + "id" : "434" + }, { + "range" : "236", + "domain" : "290", + "attributes" : [ "anonymous", "object" ], + "id" : "435" + }, { + "range" : "437", + "domain" : "413", + "attributes" : [ "anonymous", "object" ], + "id" : "436" + }, { + "range" : "61", + "domain" : "218", + "attributes" : [ "anonymous", "object" ], + "id" : "438" + }, { + "range" : "65", + "domain" : "66", + "attributes" : [ "anonymous", "object" ], + "id" : "440" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedAttribution", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "335", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "qualifiedAttributionOf", + "type" : "label" + } ], + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Attribution", + "type" : "iri" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasAttributedTo", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "qualifiedAttribution", + "undefined" : "qualifiedAttribution" + }, + "superproperty" : [ "8" ], + "domain" : "43", + "comment" : { + "en" : "If this Entity prov:wasAttributedTo Agent :ag, then it can qualify how it was influenced using prov:qualifiedAttribution [ a prov:Attribution; prov:agent :ag; :foo :bar ]." + }, + "attributes" : [ "object", "external" ], + "id" : "443" + }, { + "iri" : "http://www.w3.org/ns/prov#revisedEntity", + "inverse" : "345", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "43", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "revisedEntity", + "undefined" : "revisedEntity" + }, + "domain" : "79", + "attributes" : [ "object", "external" ], + "id" : "451" + }, { + "iri" : "http://www.w3.org/ns/prov#generalizationOf", + "inverse" : "42", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "43", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "generalizationOf", + "undefined" : "generalizationOf" + }, + "domain" : "44", + "attributes" : [ "object", "external" ], + "id" : "452" + }, { + "iri" : "http://www.w3.org/ns/prov#hadGeneration", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "201", + "annotations" : { + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Generation", + "type" : "iri" + } ], + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "generatedAsDerivation", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "hadGeneration", + "undefined" : "hadGeneration" + }, + "domain" : "75", + "comment" : { + "en" : "The _optional_ Generation involved in an Entity's Derivation." + }, + "attributes" : [ "object", "external" ], + "id" : "458" + }, { + "iri" : "http://www.w3.org/ns/prov#startedAtTime", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "457", + "annotations" : { + "editorialNote" : [ { + "identifier" : "editorialNote", + "language" : "en", + "value" : "It is the intent that the property chain holds: (prov:qualifiedStart o prov:atTime) rdfs:subPropertyOf prov:startedAtTime.", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "starting-point", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Start", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#atTime", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "startedAtTime", + "undefined" : "startedAtTime" + }, + "domain" : "135", + "comment" : { + "en" : "The time at which an activity started. See also prov:endedAtTime." + }, + "attributes" : [ "datatype", "external" ], + "id" : "461" + }, { + "range" : "218", + "domain" : "286", + "attributes" : [ "anonymous", "object" ], + "id" : "464" + }, { + "range" : "230", + "domain" : "232", + "attributes" : [ "anonymous", "object" ], + "id" : "465" + }, { + "range" : "218", + "domain" : "217", + "attributes" : [ "anonymous", "object" ], + "id" : "466" + }, { + "range" : "218", + "domain" : "274", + "attributes" : [ "anonymous", "object" ], + "id" : "467" + }, { + "iri" : "http://www.w3.org/ns/prov#wasQuotedFrom", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "43", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "quotedAs", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#qualifiedQuotation", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Quotation", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasQuotedFrom", + "undefined" : "wasQuotedFrom" + }, + "superproperty" : [ "423" ], + "domain" : "43", + "comment" : { + "en" : "An entity is derived from an original entity by copying, or 'quoting', some or all of it." + }, + "attributes" : [ "object", "external" ], + "id" : "468" + }, { + "range" : "230", + "domain" : "231", + "attributes" : [ "anonymous", "object" ], + "id" : "469" + }, { + "iri" : "http://www.w3.org/ns/prov#locationOf", + "inverse" : "70", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "71", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "locationOf", + "undefined" : "locationOf" + }, + "domain" : "72", + "attributes" : [ "object", "external" ], + "id" : "470" + }, { + "iri" : "https://w3id.org/pmd/co/jsonPath", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "449", + "annotations" : { + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A path expression that allows the elements of a JSON document to be specifically addressed.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "jsonPath", + "en" : "json path" + }, + "domain" : "52", + "attributes" : [ "datatype", "external" ], + "id" : "471" + }, { + "iri" : "http://www.w3.org/ns/prov#used", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "43", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "wasUsedBy", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "starting-point", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Usage", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#qualifiedUsage", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "used", + "undefined" : "used" + }, + "superproperty" : [ "254" ], + "domain" : "135", + "subproperty" : [ "473" ], + "comment" : { + "en" : "A prov:Entity that was used by this prov:Activity. For example, :baking prov:used :spoon, :egg, :oven ." + }, + "attributes" : [ "object", "external" ], + "id" : "472" + }, { + "iri" : "http://www.w3.org/ns/prov#hadUsage", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "312", + "annotations" : { + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Usage", + "type" : "iri" + } ], + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "wasUsedInDerivation", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "hadUsage", + "undefined" : "hadUsage" + }, + "domain" : "75", + "comment" : { + "en" : "The _optional_ Usage involved in an Entity's Derivation." + }, + "attributes" : [ "object", "external" ], + "id" : "474" + }, { + "iri" : "http://www.w3.org/ns/prov#agent", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "47", + "annotations" : { + "editorialNote" : [ { + "identifier" : "editorialNote", + "language" : "en", + "value" : "This property behaves in spirit like rdf:object; it references the object of a prov:wasInfluencedBy triple.", + "type" : "label" + } ], + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "agentOfInfluence", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "editorsDefinition" : [ { + "identifier" : "editorsDefinition", + "language" : "en", + "value" : "The prov:agent property references an prov:Agent which influenced a resource. This property applies to an prov:AgentInfluence, which is given by a subproperty of prov:qualifiedInfluence from the influenced prov:Entity, prov:Activity or prov:Agent.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "agent", + "undefined" : "agent" + }, + "superproperty" : [ "427" ], + "domain" : "140", + "attributes" : [ "object", "external" ], + "id" : "141" + }, { + "range" : "104", + "domain" : "210", + "attributes" : [ "anonymous", "object" ], + "id" : "477" + }, { + "range" : "104", + "domain" : "137", + "attributes" : [ "anonymous", "object" ], + "id" : "481" + }, { + "range" : "104", + "domain" : "207", + "attributes" : [ "anonymous", "object" ], + "id" : "482" + }, { + "range" : "104", + "domain" : "206", + "attributes" : [ "anonymous", "object" ], + "id" : "483" + }, { + "range" : "104", + "domain" : "209", + "attributes" : [ "anonymous", "object" ], + "id" : "484" + }, { + "range" : "104", + "domain" : "208", + "attributes" : [ "anonymous", "object" ], + "id" : "485" + }, { + "range" : "104", + "domain" : "103", + "attributes" : [ "anonymous", "object" ], + "id" : "486" + }, { + "range" : "38", + "domain" : "37", + "attributes" : [ "anonymous", "object" ], + "id" : "487" + }, { + "range" : "104", + "domain" : "205", + "attributes" : [ "anonymous", "object" ], + "id" : "493" + }, { + "iri" : "http://www.w3.org/ns/prov#alternateOf", + "inverse" : "45", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "43", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "alternateOf", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "alternate", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-alternate", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Two alternate entities present aspects of the same thing. These aspects may be the same or different, and the alternate entities may or may not overlap in time.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "constraints" : [ { + "identifier" : "constraints", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-constraints-20130430/#prov-dm-constraints-fig", + "type" : "label" + } ], + "seeAlso" : [ { + "identifier" : "seeAlso", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#specializationOf", + "type" : "iri" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-alternate", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "alternateOf", + "undefined" : "alternateOf" + }, + "domain" : "43", + "subproperty" : [ "42" ], + "attributes" : [ "object", "external" ], + "id" : "45" + }, { + "iri" : "https://w3id.org/pmd/co/characteristic", + "inverse" : "58", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "10", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Die Objekteigenschaft characterisitc, wird in Verbindung mit ProzessKnoten, Prozess und Objekt verwendet und dient zur Herstellung einer Verbindung mit dem WerteObjekt. Diese Eigenschaft ermöglicht die Abbildung von Beziehungen zwischen ProzessKnoten, Prozessen und Objekten und den dazugehörigen Werten oder Attributen (Metadaten), die in WerteObjekt ausgedrückt sind.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "The object property characteristic, in conjunction with ProcessingNode, Process and Object, is used to establish a connection with ValueObjects. This property enables the representation of relationships between ProcessingNodes, Processes and Objects and the associated values or attributes (metadata) that are stored in ValueObjects.", + "type" : "label" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "en", + "value" : "has characteristic", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "characteristic", + "en" : "characteristic" + }, + "superproperty" : [ "51" ], + "domain" : "414", + "attributes" : [ "object", "external" ], + "id" : "54" + }, { + "range" : "104", + "domain" : "204", + "attributes" : [ "anonymous", "object" ], + "id" : "494" + }, { + "iri" : "https://w3id.org/pmd/co/xPath", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "445", + "annotations" : { + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A non-XML-based path expression that allows the elements of an XML document to be specifically addressed.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "xPath", + "en" : "x path" + }, + "domain" : "52", + "attributes" : [ "datatype", "external" ], + "id" : "497" + }, { + "iri" : "https://w3id.org/pmd/co/state", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "444", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "state", + "en" : "state" + }, + "domain" : "405", + "attributes" : [ "object", "external" ], + "id" : "500" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedGeneration", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "201", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "qualifiedGenerationOf", + "type" : "label" + } ], + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Generation", + "type" : "iri" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasGeneratedBy", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "qualifiedGeneration", + "undefined" : "qualifiedGeneration" + }, + "superproperty" : [ "8" ], + "domain" : "43", + "comment" : { + "en" : "If this Activity prov:generated Entity :e, then it can qualify how it performed the Generation using prov:qualifiedGeneration [ a prov:Generation; prov:entity :e; :foo :bar ]." + }, + "attributes" : [ "object", "external" ], + "id" : "501" + }, { + "iri" : "http://www.w3.org/ns/prov#hadDerivation", + "inverse" : "423", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "43", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "hadDerivation", + "undefined" : "hadDerivation" + }, + "domain" : "43", + "attributes" : [ "object", "external" ], + "id" : "502" + }, { + "range" : "180", + "domain" : "183", + "attributes" : [ "anonymous", "object" ], + "id" : "503" + }, { + "range" : "180", + "domain" : "182", + "attributes" : [ "anonymous", "object" ], + "id" : "504" + }, { + "range" : "180", + "domain" : "184", + "attributes" : [ "anonymous", "object" ], + "id" : "505" + }, { + "range" : "94", + "domain" : "96", + "attributes" : [ "anonymous", "object" ], + "id" : "506" + }, { + "range" : "65", + "domain" : "67", + "attributes" : [ "anonymous", "object" ], + "id" : "507" + }, { + "range" : "180", + "domain" : "181", + "attributes" : [ "anonymous", "object" ], + "id" : "508" + }, { + "range" : "94", + "domain" : "97", + "attributes" : [ "anonymous", "object" ], + "id" : "509" + }, { + "range" : "99", + "domain" : "413", + "attributes" : [ "anonymous", "object" ], + "id" : "510" + }, { + "range" : "99", + "domain" : "412", + "attributes" : [ "anonymous", "object" ], + "id" : "511" + }, { + "range" : "6", + "domain" : "161", + "attributes" : [ "anonymous", "object" ], + "id" : "512" + }, { + "range" : "6", + "domain" : "140", + "attributes" : [ "anonymous", "object" ], + "id" : "513" + }, { + "range" : "43", + "domain" : "110", + "attributes" : [ "anonymous", "object" ], + "id" : "514" + }, { + "range" : "99", + "domain" : "411", + "attributes" : [ "anonymous", "object" ], + "id" : "515" + }, { + "range" : "43", + "domain" : "10", + "attributes" : [ "anonymous", "object" ], + "id" : "516" + }, { + "iri" : "http://www.w3.org/ns/prov#activity", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "135", + "annotations" : { + "editorialNote" : [ { + "identifier" : "editorialNote", + "language" : "en", + "value" : "This property behaves in spirit like rdf:object; it references the object of a prov:wasInfluencedBy triple.", + "type" : "label" + } ], + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "activityOfInfluence", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "editorsDefinition" : [ { + "identifier" : "editorsDefinition", + "language" : "undefined", + "value" : "The prov:activity property references an prov:Activity which influenced a resource. This property applies to an prov:ActivityInfluence, which is given by a subproperty of prov:qualifiedInfluence from the influenced prov:Entity, prov:Activity or prov:Agent.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "activity", + "undefined" : "activity" + }, + "superproperty" : [ "427" ], + "domain" : "199", + "attributes" : [ "object", "external" ], + "id" : "518" + }, { + "iri" : "http://www.w3.org/ns/prov#hadMember", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "43", + "annotations" : { + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Collection", + "type" : "iri" + } ], + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "wasMemberOf", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "hadMember", + "undefined" : "hadMember" + }, + "superproperty" : [ "254" ], + "domain" : "279", + "attributes" : [ "object", "external" ], + "id" : "519" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedGenerationOf", + "inverse" : "501", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "43", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "qualifiedGenerationOf", + "undefined" : "qualifiedGenerationOf" + }, + "domain" : "201", + "attributes" : [ "object", "external" ], + "id" : "520" + }, { + "range" : "43", + "domain" : "259", + "attributes" : [ "anonymous", "object" ], + "id" : "522" + }, { + "range" : "43", + "domain" : "237", + "attributes" : [ "anonymous", "object" ], + "id" : "523" + }, { + "range" : "43", + "domain" : "386", + "attributes" : [ "anonymous", "object" ], + "id" : "524" + }, { + "range" : "43", + "domain" : "279", + "attributes" : [ "anonymous", "object" ], + "id" : "525" + }, { + "range" : "135", + "domain" : "61", + "attributes" : [ "anonymous", "object" ], + "id" : "526" + }, { + "range" : "135", + "domain" : "62", + "attributes" : [ "anonymous", "object" ], + "id" : "527" + }, { + "range" : "43", + "domain" : "223", + "attributes" : [ "anonymous", "object" ], + "id" : "528" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedAssociationOf", + "inverse" : "530", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "135", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "qualifiedAssociationOf", + "undefined" : "qualifiedAssociationOf" + }, + "domain" : "339", + "attributes" : [ "object", "external" ], + "id" : "529" + }, { + "range" : "43", + "domain" : "285", + "attributes" : [ "anonymous", "object" ], + "id" : "531" + }, { + "range" : "101", + "domain" : "391", + "attributes" : [ "anonymous", "object" ], + "id" : "532" + }, { + "range" : "101", + "domain" : "390", + "attributes" : [ "anonymous", "object" ], + "id" : "534" + }, { + "iri" : "http://www.w3.org/ns/prov#ended", + "inverse" : "536", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "135", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "ended", + "undefined" : "ended" + }, + "domain" : "43", + "attributes" : [ "object", "external" ], + "id" : "535" + }, { + "iri" : "http://www.w3.org/ns/prov#wasUsedBy", + "inverse" : "472", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "135", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasUsedBy", + "undefined" : "wasUsedBy" + }, + "domain" : "43", + "subproperty" : [ "538" ], + "attributes" : [ "object", "external" ], + "id" : "537" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedInfluence", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "6", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "qualifiedInfluenceOf", + "type" : "label" + } ], + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Influence", + "type" : "iri" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasInfluencedBy", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "qualifiedInfluence", + "undefined" : "qualifiedInfluence" + }, + "domain" : "7", + "subproperty" : [ "443", "406", "541", "383", "221", "542", "421", "501", "142", "409", "530", "345", "543" ], + "comment" : { + "en" : "Because prov:qualifiedInfluence is a broad relation, the more specific relations (qualifiedCommunication, qualifiedDelegation, qualifiedEnd, etc.) should be used when applicable." + }, + "attributes" : [ "object", "external" ], + "id" : "8" + }, { + "iri" : "http://www.w3.org/ns/prov#informed", + "inverse" : "64", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "135", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "informed", + "undefined" : "informed" + }, + "domain" : "135", + "attributes" : [ "object", "external" ], + "id" : "544" + }, { + "range" : "145", + "domain" : "241", + "attributes" : [ "anonymous", "object" ], + "id" : "545" + }, { + "iri" : "http://www.w3.org/ns/oa#hasSource", + "baseIri" : "http://www.w3.org/ns/oa", + "range" : "52", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/oa#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "hasSource" + }, + "superproperty" : [ "51" ], + "domain" : "52", + "attributes" : [ "object", "external" ], + "id" : "57" + }, { + "range" : "145", + "domain" : "144", + "attributes" : [ "anonymous", "object" ], + "id" : "546" + }, { + "range" : "145", + "domain" : "368", + "attributes" : [ "anonymous", "object" ], + "id" : "547" + }, { + "range" : "145", + "domain" : "50", + "attributes" : [ "anonymous", "object" ], + "id" : "548" + }, { + "range" : "145", + "domain" : "369", + "attributes" : [ "anonymous", "object" ], + "id" : "549" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedEndOf", + "inverse" : "409", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "135", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "qualifiedEndOf", + "undefined" : "qualifiedEndOf" + }, + "domain" : "195", + "attributes" : [ "object", "external" ], + "id" : "553" + }, { + "iri" : "http://www.w3.org/ns/oa#hasSelector", + "baseIri" : "http://www.w3.org/ns/oa", + "range" : "52", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/oa#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "hasSelector" + }, + "superproperty" : [ "51" ], + "domain" : "52", + "attributes" : [ "object", "external" ], + "id" : "53" + }, { + "iri" : "https://w3id.org/pmd/co/participantOf", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "52", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "en", + "value" : "is participant of", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "participantOf", + "en" : "participant of" + }, + "superproperty" : [ "51" ], + "domain" : "52", + "subproperty" : [ "538", "555" ], + "attributes" : [ "object", "external" ], + "id" : "56" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedCommunicationOf", + "inverse" : "142", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "135", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "qualifiedCommunicationOf", + "undefined" : "qualifiedCommunicationOf" + }, + "domain" : "143", + "attributes" : [ "object", "external" ], + "id" : "556" + }, { + "iri" : "http://www.w3.org/ns/prov#generatedAtTime", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "460", + "annotations" : { + "editorialNote" : [ { + "identifier" : "editorialNote", + "language" : "en", + "value" : "It is the intent that the property chain holds: (prov:qualifiedGeneration o prov:atTime) rdfs:subPropertyOf prov:generatedAtTime.", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#atTime", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Generation", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "generatedAtTime", + "undefined" : "generatedAtTime" + }, + "domain" : "43", + "comment" : { + "en" : "The time at which an entity was completely created and is available for use." + }, + "attributes" : [ "datatype", "external" ], + "id" : "557" + }, { + "range" : "61", + "domain" : "145", + "attributes" : [ "anonymous", "object" ], + "id" : "558" + }, { + "range" : "6", + "domain" : "199", + "attributes" : [ "anonymous", "object" ], + "id" : "559" + }, { + "range" : "61", + "domain" : "424", + "attributes" : [ "anonymous", "object" ], + "id" : "560" + }, { + "iri" : "http://www.w3.org/ns/prov#value", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "450", + "annotations" : { + "editorialNote" : [ { + "identifier" : "editorialNote", + "language" : "en", + "value" : "This property serves the same purpose as rdf:value, but has been reintroduced to avoid some of the definitional ambiguity in the RDF specification (specifically, 'may be used in describing structured values').", + "type" : "label" + }, { + "identifier" : "editorialNote", + "language" : "undefined", + "value" : "The editor's definition comes from http://www.w3.org/TR/rdf-primer/#rdfvalue", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-attribute-value", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Provides a value that is a direct representation of an entity.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "value", + "undefined" : "value" + }, + "domain" : "43", + "attributes" : [ "datatype", "external" ], + "id" : "561" + }, { + "iri" : "http://www.w3.org/ns/prov#invalidated", + "inverse" : "253", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "43", + "annotations" : { + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Invalidation", + "type" : "iri" + } ], + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "wasInvalidatedBy", + "type" : "label" + } ], + "editorialNote" : [ { + "identifier" : "editorialNote", + "language" : "en", + "value" : "prov:invalidated is one of few inverse property defined, to allow Activity-oriented assertions in addition to Entity-oriented assertions.", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "invalidated", + "undefined" : "invalidated" + }, + "superproperty" : [ "563" ], + "domain" : "135", + "attributes" : [ "object", "external" ], + "id" : "562" + }, { + "iri" : "http://purl.org/spar/datacite/hasIdentifier", + "baseIri" : "http://purl.org/spar/datacite", + "range" : "550", + "label" : { + "IRI-based" : "hasIdentifier" + }, + "domain" : "448", + "attributes" : [ "object", "external" ], + "id" : "564" + }, { + "iri" : "https://w3id.org/pmd/co/outputOf", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "52", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "en", + "value" : "is output of", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "outputOf", + "en" : "output of" + }, + "superproperty" : [ "56" ], + "domain" : "52", + "attributes" : [ "object", "external" ], + "id" : "555" + }, { + "iri" : "https://w3id.org/pmd/co/inputOf", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "52", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "undefined", + "value" : "is input of", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "inputOf", + "en" : "input of" + }, + "superproperty" : [ "56", "537" ], + "domain" : "52", + "attributes" : [ "object", "external" ], + "id" : "538" + }, { + "iri" : "http://www.w3.org/ns/prov#wasDerivedFrom", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "43", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "hadDerivation", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A derivation is a transformation of an entity into another, an update of an entity resulting in a new one, or the construction of a new entity based on a pre-existing entity.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "starting-point", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Derivation", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#qualifiedDerivation", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasDerivedFrom", + "undefined" : "wasDerivedFrom" + }, + "superproperty" : [ "254" ], + "domain" : "43", + "subproperty" : [ "389", "422", "468" ], + "comment" : { + "en" : "The more specific subproperties of prov:wasDerivedFrom (i.e., prov:wasQuotedFrom, prov:wasRevisionOf, prov:hadPrimarySource) should be used when applicable." + }, + "attributes" : [ "object", "external" ], + "id" : "423" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedStart", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "197", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "qualifiedStartOf", + "type" : "label" + } ], + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Start", + "type" : "iri" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasStartedBy", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "qualifiedStart", + "undefined" : "qualifiedStart" + }, + "superproperty" : [ "8" ], + "domain" : "135", + "comment" : { + "en" : "If this Activity prov:wasStartedBy Entity :e1, then it can qualify how it was started using prov:qualifiedStart [ a prov:Start; prov:entity :e1; :foo :bar ]." + }, + "attributes" : [ "object", "external" ], + "id" : "542" + }, { + "iri" : "https://w3id.org/pmd/co/nextProcess", + "inverse" : "567", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "61", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This property is used to indicate the process that was run after the current process.", + "type" : "label" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "en", + "value" : "has next process", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "nextProcess", + "en" : "next process" + }, + "superproperty" : [ "64" ], + "domain" : "61", + "attributes" : [ "object", "external" ], + "id" : "566" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedQuotation", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "131", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "qualifiedQuotationOf", + "type" : "label" + } ], + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Quotation", + "type" : "iri" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasQuotedFrom", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "qualifiedQuotation", + "undefined" : "qualifiedQuotation" + }, + "superproperty" : [ "8" ], + "domain" : "43", + "comment" : { + "en" : "If this Entity prov:wasQuotedFrom Entity :e, then it can qualify how using prov:qualifiedQuotation [ a prov:Quotation; prov:entity :e; :foo :bar ]." + }, + "attributes" : [ "object", "external" ], + "id" : "421" + }, { + "iri" : "https://w3id.org/pmd/co/hasFunction", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "52", + "label" : { + "IRI-based" : "hasFunction" + }, + "domain" : "52", + "attributes" : [ "object", "external" ], + "id" : "568" + }, { + "iri" : "http://www.w3.org/ns/prov#hadPlan", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "386", + "annotations" : { + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Plan", + "type" : "iri" + } ], + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "wasPlanOf", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "hadPlan", + "undefined" : "hadPlan" + }, + "domain" : "339", + "comment" : { + "en" : "The _optional_ Plan adopted by an Agent in Association with some Activity. Plan specifications are out of the scope of this specification." + }, + "attributes" : [ "object", "external" ], + "id" : "387" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedUsage", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "312", + "annotations" : { + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Usage", + "type" : "iri" + } ], + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "qualifiedUsingActivity", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#used", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "qualifiedUsage", + "undefined" : "qualifiedUsage" + }, + "superproperty" : [ "8" ], + "domain" : "135", + "comment" : { + "en" : "If this Activity prov:used Entity :e, then it can qualify how it used it using prov:qualifiedUsage [ a prov:Usage; prov:entity :e; :foo :bar ]." + }, + "attributes" : [ "object", "external" ], + "id" : "541" + }, { + "iri" : "https://w3id.org/pmd/co/value", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "456", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Provides the actual value a value object is referring to.", + "type" : "label" + } ] + }, + "label" : { + "de" : "hat Wert", + "IRI-based" : "value", + "en" : "value" + }, + "domain" : "10", + "attributes" : [ "datatype", "external" ], + "id" : "569" + }, { + "iri" : "http://www.w3.org/ns/prov#wasUsedInDerivation", + "inverse" : "474", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "75", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasUsedInDerivation", + "undefined" : "wasUsedInDerivation" + }, + "domain" : "312", + "attributes" : [ "object", "external" ], + "id" : "570" + }, { + "iri" : "https://w3id.org/pmd/co/isResourceOf", + "inverse" : "9", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "10", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "isResourceOf", + "undefined" : "is resource of" + }, + "domain" : "11", + "attributes" : [ "object", "external" ], + "id" : "571" + }, { + "iri" : "https://w3id.org/pmd/co/maxValue", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "446", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "refers to all values equal or smaller than the given one", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "maxValue", + "en" : "max value" + }, + "domain" : "52", + "attributes" : [ "datatype", "external" ], + "id" : "573" + }, { + "iri" : "http://www.w3.org/ns/prov#wasAssociateFor", + "inverse" : "358", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "135", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasAssociateFor", + "undefined" : "wasAssociateFor" + }, + "domain" : "47", + "attributes" : [ "object", "external" ], + "id" : "574" + }, { + "iri" : "http://www.w3.org/ns/prov#wasInfluencedBy", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "415", + "annotations" : { + "editorialNote" : [ { + "identifier" : "editorialNote", + "language" : "en", + "value" : "The sub-properties of prov:wasInfluencedBy can be elaborated in more detail using the Qualification Pattern. For example, the binary relation :baking prov:used :spoon can be qualified by asserting :baking prov:qualifiedUsage [ a prov:Usage; prov:entity :spoon; prov:atLocation :kitchen ] .\n\nSubproperties of prov:wasInfluencedBy may also be asserted directly without being qualified.\n\nprov:wasInfluencedBy should not be used without also using one of its subproperties. \n", + "type" : "label" + } ], + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Influence", + "type" : "iri" + } ], + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "influenced", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#qualifiedInfluence", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Influence", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasInfluencedBy", + "undefined" : "wasInfluencedBy" + }, + "domain" : "410", + "subproperty" : [ "536", "575", "423", "576", "472", "358", "394", "48", "64", "253", "519" ], + "comment" : { + "en" : "Because prov:wasInfluencedBy is a broad relation, its more specific subproperties (e.g. prov:wasInformedBy, prov:actedOnBehalfOf, prov:wasEndedBy, etc.) should be used when applicable.", + "undefined" : "This property has multiple RDFS domains to suit multiple OWL Profiles. See PROV-O OWL Profile." + }, + "attributes" : [ "object", "external" ], + "id" : "254" + }, { + "iri" : "http://www.w3.org/ns/prov#hadRevision", + "inverse" : "422", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "43", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "hadRevision", + "undefined" : "hadRevision" + }, + "domain" : "44", + "attributes" : [ "object", "external" ], + "id" : "577" + }, { + "iri" : "http://www.w3.org/ns/prov#wasAttributedTo", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "47", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "contributed", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Attribution is the ascribing of an entity to an agent.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "starting-point", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Attribution", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#qualifiedAttribution", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasAttributedTo", + "undefined" : "wasAttributedTo" + }, + "superproperty" : [ "254" ], + "domain" : "43", + "comment" : { + "en" : "Attribution is the ascribing of an entity to an agent." + }, + "attributes" : [ "object", "external" ], + "id" : "576" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedPrimarySource", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "74", + "annotations" : { + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#PrimarySource", + "type" : "iri" + } ], + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "qualifiedSourceOf", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#hadPrimarySource", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "qualifiedPrimarySource", + "undefined" : "qualifiedPrimarySource" + }, + "superproperty" : [ "8" ], + "domain" : "43", + "comment" : { + "en" : "If this Entity prov:hadPrimarySource Entity :e, then it can qualify how using prov:qualifiedPrimarySource [ a prov:PrimarySource; prov:entity :e; :foo :bar ]." + }, + "attributes" : [ "object", "external" ], + "id" : "543" + }, { + "iri" : "http://www.w3.org/ns/prov#wasMemberOf", + "inverse" : "519", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "279", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasMemberOf", + "undefined" : "wasMemberOf" + }, + "domain" : "43", + "attributes" : [ "object", "external" ], + "id" : "580" + }, { + "iri" : "http://www.w3.org/ns/prov#hadActivity", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "135", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "wasActivityOfInfluence", + "type" : "label" + } ], + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Activity", + "type" : "iri" + } ], + "editorialNote" : [ { + "identifier" : "editorialNote", + "language" : "en", + "value" : "The multiple rdfs:domain assertions are intended. One is simpler and works for OWL-RL, the union is more specific but is not recognized by OWL-RL.", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "hadActivity", + "undefined" : "hadActivity" + }, + "domain" : "439", + "comment" : { + "en" : "The _optional_ Activity of an Influence, which used, generated, invalidated, or was the responsibility of some Entity. This property is _not_ used by ActivityInfluence (use prov:activity instead).", + "undefined" : "This property has multiple RDFS domains to suit multiple OWL Profiles. See PROV-O OWL Profile." + }, + "attributes" : [ "object", "external" ], + "id" : "581" + }, { + "iri" : "https://w3id.org/pmd/co/participant", + "inverse" : "56", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "408", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "undefined", + "value" : "has participant", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A relation between a process and an object, in which the objects is somehow involved in the process.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "participant", + "en" : "participant" + }, + "domain" : "61", + "subproperty" : [ "473", "583" ], + "attributes" : [ "object", "external" ], + "id" : "582" + }, { + "iri" : "http://www.w3.org/ns/prov#quotedAs", + "inverse" : "468", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "43", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "quotedAs", + "undefined" : "quotedAs" + }, + "domain" : "43", + "attributes" : [ "object", "external" ], + "id" : "584" + }, { + "range" : "77", + "domain" : "499", + "attributes" : [ "anonymous", "object" ], + "id" : "585" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedInvalidationOf", + "inverse" : "383", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "43", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "qualifiedInvalidationOf", + "undefined" : "qualifiedInvalidationOf" + }, + "domain" : "191", + "attributes" : [ "object", "external" ], + "id" : "586" + }, { + "range" : "110", + "domain" : "109", + "attributes" : [ "anonymous", "object" ], + "id" : "587" + }, { + "range" : "110", + "domain" : "521", + "attributes" : [ "anonymous", "object" ], + "id" : "588" + }, { + "range" : "91", + "domain" : "533", + "attributes" : [ "anonymous", "object" ], + "id" : "589" + }, { + "iri" : "https://w3id.org/pmd/co/previousProcess", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "61", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This property is used to indicate that which process was previously run.", + "type" : "label" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "undefined", + "value" : "has previous process", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "previousProcess", + "en" : "previous process" + }, + "domain" : "61", + "attributes" : [ "object", "external" ], + "id" : "567" + }, { + "range" : "539", + "domain" : "540", + "attributes" : [ "anonymous", "object" ], + "id" : "590" + }, { + "range" : "454", + "domain" : "115", + "attributes" : [ "anonymous", "object" ], + "id" : "591" + }, { + "range" : "454", + "domain" : "517", + "attributes" : [ "anonymous", "object" ], + "id" : "593" + }, { + "range" : "454", + "domain" : "552", + "attributes" : [ "anonymous", "object" ], + "id" : "594" + }, { + "range" : "192", + "domain" : "312", + "attributes" : [ "anonymous", "object" ], + "id" : "595" + }, { + "range" : "192", + "domain" : "201", + "attributes" : [ "anonymous", "object" ], + "id" : "596" + }, { + "range" : "77", + "domain" : "146", + "attributes" : [ "anonymous", "object" ], + "id" : "597" + }, { + "iri" : "http://www.w3.org/ns/prov#wasEndedBy", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "43", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "ended", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#End", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#qualifiedEnd", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasEndedBy", + "undefined" : "wasEndedBy" + }, + "superproperty" : [ "254" ], + "domain" : "135", + "comment" : { + "en" : "End is when an activity is deemed to have ended. An end may refer to an entity, known as trigger, that terminated the activity." + }, + "attributes" : [ "object", "external" ], + "id" : "536" + }, { + "range" : "309", + "domain" : "491", + "attributes" : [ "anonymous", "object" ], + "id" : "598" + }, { + "range" : "309", + "domain" : "492", + "attributes" : [ "anonymous", "object" ], + "id" : "599" + }, { + "range" : "225", + "domain" : "442", + "attributes" : [ "anonymous", "object" ], + "id" : "600" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedAttributionOf", + "inverse" : "443", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "43", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "qualifiedAttributionOf", + "undefined" : "qualifiedAttributionOf" + }, + "domain" : "335", + "attributes" : [ "object", "external" ], + "id" : "601" + }, { + "iri" : "http://www.w3.org/ns/prov#wasActivityOfInfluence", + "inverse" : "581", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "439", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasActivityOfInfluence", + "undefined" : "wasActivityOfInfluence" + }, + "domain" : "135", + "attributes" : [ "object", "external" ], + "id" : "602" + }, { + "range" : "225", + "domain" : "224", + "attributes" : [ "anonymous", "object" ], + "id" : "603" + }, { + "range" : "225", + "domain" : "495", + "attributes" : [ "anonymous", "object" ], + "id" : "604" + }, { + "range" : "225", + "domain" : "475", + "attributes" : [ "anonymous", "object" ], + "id" : "605" + }, { + "range" : "225", + "domain" : "496", + "attributes" : [ "anonymous", "object" ], + "id" : "606" + }, { + "range" : "225", + "domain" : "447", + "attributes" : [ "anonymous", "object" ], + "id" : "607" + }, { + "range" : "77", + "domain" : "498", + "attributes" : [ "anonymous", "object" ], + "id" : "608" + }, { + "range" : "309", + "domain" : "489", + "attributes" : [ "anonymous", "object" ], + "id" : "609" + }, { + "range" : "309", + "domain" : "490", + "attributes" : [ "anonymous", "object" ], + "id" : "610" + }, { + "iri" : "http://www.w3.org/ns/prov#hadPrimarySource", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "43", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "wasPrimarySourceOf", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#qualifiedPrimarySource", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#PrimarySource", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "hadPrimarySource", + "undefined" : "hadPrimarySource" + }, + "superproperty" : [ "423" ], + "domain" : "43", + "attributes" : [ "object", "external" ], + "id" : "389" + }, { + "iri" : "http://www.w3.org/ns/prov#influenced", + "inverse" : "254", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "410", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "wasInfluencedBy", + "type" : "label" + } ], + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Influence", + "type" : "iri" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "influenced", + "undefined" : "influenced" + }, + "domain" : "415", + "subproperty" : [ "611", "562" ], + "attributes" : [ "object", "external" ], + "id" : "563" + }, { + "range" : "285", + "domain" : "284", + "attributes" : [ "anonymous", "object" ], + "id" : "613" + }, { + "range" : "93", + "domain" : "353", + "attributes" : [ "anonymous", "object" ], + "id" : "614" + }, { + "range" : "152", + "domain" : "579", + "attributes" : [ "anonymous", "object" ], + "id" : "615" + }, { + "range" : "93", + "domain" : "463", + "attributes" : [ "anonymous", "object" ], + "id" : "616" + }, { + "range" : "475", + "domain" : "476", + "attributes" : [ "anonymous", "object" ], + "id" : "617" + }, { + "range" : "229", + "domain" : "478", + "attributes" : [ "anonymous", "object" ], + "id" : "618" + }, { + "range" : "229", + "domain" : "479", + "attributes" : [ "anonymous", "object" ], + "id" : "619" + }, { + "range" : "229", + "domain" : "480", + "attributes" : [ "anonymous", "object" ], + "id" : "620" + }, { + "range" : "229", + "domain" : "228", + "attributes" : [ "anonymous", "object" ], + "id" : "621" + }, { + "range" : "309", + "domain" : "488", + "attributes" : [ "anonymous", "object" ], + "id" : "622" + }, { + "range" : "93", + "domain" : "462", + "attributes" : [ "anonymous", "object" ], + "id" : "623" + }, { + "range" : "285", + "domain" : "612", + "attributes" : [ "anonymous", "object" ], + "id" : "624" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedStartOf", + "inverse" : "542", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "135", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "qualifiedStartOf", + "undefined" : "qualifiedStartOf" + }, + "domain" : "197", + "attributes" : [ "object", "external" ], + "id" : "625" + }, { + "range" : "93", + "domain" : "153", + "attributes" : [ "anonymous", "object" ], + "id" : "626" + }, { + "range" : "285", + "domain" : "417", + "attributes" : [ "anonymous", "object" ], + "id" : "627" + }, { + "range" : "93", + "domain" : "69", + "attributes" : [ "anonymous", "object" ], + "id" : "628" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedDerivationOf", + "inverse" : "406", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "43", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "qualifiedDerivationOf", + "undefined" : "qualifiedDerivationOf" + }, + "domain" : "75", + "attributes" : [ "object", "external" ], + "id" : "629" + }, { + "iri" : "https://w3id.org/pmd/co/unit", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "11", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Unit of measurement.", + "type" : "label" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "en", + "value" : "has unit", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "unit", + "en" : "unit" + }, + "domain" : "10", + "comment" : { + "undefined" : "Examples for rdsf:range are units from qudt or wikidata or own defindes units." + }, + "attributes" : [ "object", "external" ], + "id" : "630" + }, { + "iri" : "https://w3id.org/pmd/co/input", + "inverse" : "538", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "52", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This property is used to link the processes to their input objects.", + "type" : "label" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "undefined", + "value" : "has input", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "input", + "en" : "input" + }, + "superproperty" : [ "582", "472" ], + "domain" : "52", + "attributes" : [ "object", "external" ], + "id" : "473" + }, { + "range" : "246", + "domain" : "392", + "attributes" : [ "anonymous", "object" ], + "id" : "631" + }, { + "range" : "106", + "domain" : "437", + "attributes" : [ "anonymous", "object" ], + "id" : "632" + }, { + "range" : "402", + "domain" : "117", + "attributes" : [ "anonymous", "object" ], + "id" : "633" + }, { + "range" : "259", + "domain" : "453", + "attributes" : [ "anonymous", "object" ], + "id" : "634" + }, { + "range" : "220", + "domain" : "219", + "attributes" : [ "anonymous", "object" ], + "id" : "635" + }, { + "iri" : "http://www.w3.org/ns/prov#influencer", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "426", + "annotations" : { + "editorialNote" : [ { + "identifier" : "editorialNote", + "language" : "en", + "value" : "This property and its subproperties are used in the same way as the rdf:object property, i.e. to reference the object of an unqualified prov:wasInfluencedBy or prov:influenced triple.", + "type" : "label" + } ], + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "hadInfluence", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "editorsDefinition" : [ { + "identifier" : "editorsDefinition", + "language" : "en", + "value" : "This property is used as part of the qualified influence pattern. Subclasses of prov:Influence use these subproperties to reference the resource (Entity, Agent, or Activity) whose influence is being qualified.", + "type" : "label" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-influence", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "influencer", + "undefined" : "influencer" + }, + "domain" : "6", + "subproperty" : [ "141", "162", "518" ], + "comment" : { + "en" : "Subproperties of prov:influencer are used to cite the object of an unqualified PROV-O triple whose predicate is a subproperty of prov:wasInfluencedBy (e.g. prov:used, prov:wasGeneratedBy). prov:influencer is used much like rdf:object is used." + }, + "attributes" : [ "object", "external" ], + "id" : "427" + }, { + "range" : "259", + "domain" : "454", + "attributes" : [ "anonymous", "object" ], + "id" : "636" + }, { + "range" : "455", + "domain" : "638", + "attributes" : [ "anonymous", "object" ], + "id" : "637" + }, { + "range" : "259", + "domain" : "455", + "attributes" : [ "anonymous", "object" ], + "id" : "639" + }, { + "range" : "263", + "domain" : "539", + "attributes" : [ "anonymous", "object" ], + "id" : "640" + }, { + "range" : "259", + "domain" : "246", + "attributes" : [ "anonymous", "object" ], + "id" : "641" + }, { + "range" : "121", + "domain" : "578", + "attributes" : [ "anonymous", "object" ], + "id" : "642" + }, { + "range" : "93", + "domain" : "323", + "attributes" : [ "anonymous", "object" ], + "id" : "643" + }, { + "range" : "285", + "domain" : "220", + "attributes" : [ "anonymous", "object" ], + "id" : "644" + }, { + "range" : "93", + "domain" : "102", + "attributes" : [ "anonymous", "object" ], + "id" : "645" + }, { + "range" : "285", + "domain" : "306", + "attributes" : [ "anonymous", "object" ], + "id" : "646" + }, { + "iri" : "http://www.w3.org/ns/prov#contributed", + "inverse" : "576", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "43", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "contributed", + "undefined" : "contributed" + }, + "domain" : "47", + "attributes" : [ "object", "external" ], + "id" : "647" + }, { + "iri" : "https://w3id.org/pmd/co/superordinateProcess", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "52", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This property is used to link a process to its super ordinated processes.", + "type" : "label" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "en", + "value" : "has superordinate process", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "superordinateProcess", + "en" : "superordinate process" + }, + "superproperty" : [ "51" ], + "domain" : "52", + "attributes" : [ "object", "external" ], + "id" : "55" + }, { + "iri" : "http://www.w3.org/ns/prov#generatedAsDerivation", + "inverse" : "458", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "75", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "generatedAsDerivation", + "undefined" : "generatedAsDerivation" + }, + "domain" : "201", + "attributes" : [ "object", "external" ], + "id" : "648" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedDelegationOf", + "inverse" : "221", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "47", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "qualifiedDelegationOf", + "undefined" : "qualifiedDelegationOf" + }, + "domain" : "222", + "attributes" : [ "object", "external" ], + "id" : "649" + }, { + "iri" : "https://w3id.org/pmd/co/executes", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "61", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This property represents which ProcessingNode executes a Process.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "executes", + "en" : "executes" + }, + "domain" : "93", + "attributes" : [ "object", "external" ], + "id" : "357" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedAssociation", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "339", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "qualifiedAssociationOf", + "type" : "label" + } ], + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Association", + "type" : "iri" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasAssociatedWith", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "qualifiedAssociation", + "undefined" : "qualifiedAssociation" + }, + "superproperty" : [ "8" ], + "domain" : "135", + "comment" : { + "en" : "If this Activity prov:wasAssociatedWith Agent :ag, then it can qualify the Association using prov:qualifiedAssociation [ a prov:Association; prov:agent :ag; :foo :bar ]." + }, + "attributes" : [ "object", "external" ], + "id" : "530" + }, { + "iri" : "https://w3id.org/pmd/co/composes", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "259", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This property is used to describe which objects a voxel or a material contributes to compose.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Eigenschaft wird verwendet, um die Tatsache zu beschreiben, dass und welche Objekte andere Objekte zusammensetzen, d. h. sie wird verwendet, um die spezifischen Bestandteile oder Zutaten zu beschreiben, aus denen ein bestimmtes Gebilde oder Objekt besteht. \nAls Präpositionalphrase bezeichnet sie die Elemente, Teile oder Komponenten, aus denen sich ein anderes Objekt zusammensetzt.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This property is used to describe the fact that and which objects compose other objects, i.e. it is used to describe the specific constituents or ingredients forming a particular entity or object. \nAs a prepositional phrase, it indicates the elements, parts, or components that make up a whole of another object.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "composes", + "en" : "composes" + }, + "domain" : "259", + "attributes" : [ "object", "external" ], + "id" : "260" + }, { + "iri" : "http://www.w3.org/ns/prov#invalidatedAtTime", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "459", + "annotations" : { + "editorialNote" : [ { + "identifier" : "editorialNote", + "language" : "en", + "value" : "It is the intent that the property chain holds: (prov:qualifiedInvalidation o prov:atTime) rdfs:subPropertyOf prov:invalidatedAtTime.", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Invalidation", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#atTime", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "invalidatedAtTime", + "undefined" : "invalidatedAtTime" + }, + "domain" : "43", + "comment" : { + "en" : "The time at which an entity was invalidated (i.e., no longer usable)." + }, + "attributes" : [ "datatype", "external" ], + "id" : "650" + }, { + "iri" : "http://www.w3.org/ns/prov#wasInformedBy", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "135", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "informed", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "starting-point", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#qualifiedCommunication", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Communication", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasInformedBy", + "undefined" : "wasInformedBy" + }, + "superproperty" : [ "254" ], + "domain" : "135", + "subproperty" : [ "60", "566" ], + "comment" : { + "en" : "An activity a2 is dependent on or informed by another activity a1, by way of some unspecified entity that is generated by a1 and used by a2." + }, + "attributes" : [ "object", "external" ], + "id" : "64" + }, { + "iri" : "https://w3id.org/pmd/co/output", + "inverse" : "555", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "52", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "undefined", + "value" : "has output", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This property is used to link the processes to their output objects", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "output", + "en" : "output" + }, + "superproperty" : [ "582", "611" ], + "domain" : "52", + "attributes" : [ "object", "external" ], + "id" : "583" + }, { + "iri" : "http://www.w3.org/ns/prov#generated", + "inverse" : "575", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "43", + "annotations" : { + "editorialNote" : [ { + "identifier" : "editorialNote", + "language" : "en", + "value" : "prov:generated is one of few inverse property defined, to allow Activity-oriented assertions in addition to Entity-oriented assertions.", + "type" : "label" + } ], + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "wasGeneratedBy", + "type" : "label" + } ], + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Generation", + "type" : "iri" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "generated", + "undefined" : "generated" + }, + "superproperty" : [ "563" ], + "domain" : "135", + "subproperty" : [ "583" ], + "attributes" : [ "object", "external" ], + "id" : "611" + }, { + "iri" : "http://www.w3.org/ns/prov#actedOnBehalfOf", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "47", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "hadDelegate", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "starting-point", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Delegation", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#qualifiedDelegation", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "actedOnBehalfOf", + "undefined" : "actedOnBehalfOf" + }, + "superproperty" : [ "254" ], + "domain" : "47", + "comment" : { + "en" : "An object property to express the accountability of an agent towards another agent. The subordinate agent acted on behalf of the responsible agent in an actual activity. " + }, + "attributes" : [ "object", "external" ], + "id" : "48" + }, { + "iri" : "http://www.w3.org/ns/prov#wasGeneratedBy", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "135", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "generated", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "starting-point", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#qualifiedGeneration", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Generation", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasGeneratedBy", + "undefined" : "wasGeneratedBy" + }, + "superproperty" : [ "254" ], + "domain" : "43", + "attributes" : [ "object", "external" ], + "id" : "575" + }, { + "iri" : "http://www.w3.org/ns/prov#entity", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "43", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "entityOfInfluence", + "type" : "label" + } ], + "editorialNote" : [ { + "identifier" : "editorialNote", + "language" : "en", + "value" : "This property behaves in spirit like rdf:object; it references the object of a prov:wasInfluencedBy triple.", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "editorsDefinition" : [ { + "identifier" : "editorsDefinition", + "language" : "undefined", + "value" : "The prov:entity property references an prov:Entity which influenced a resource. This property applies to an prov:EntityInfluence, which is given by a subproperty of prov:qualifiedInfluence from the influenced prov:Entity, prov:Activity or prov:Agent.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "entity", + "undefined" : "entity" + }, + "superproperty" : [ "427" ], + "domain" : "161", + "attributes" : [ "object", "external" ], + "id" : "162" + }, { + "range" : "192", + "domain" : "47", + "attributes" : [ "anonymous", "object" ], + "id" : "651" + }, { + "range" : "192", + "domain" : "43", + "attributes" : [ "anonymous", "object" ], + "id" : "652" + }, { + "iri" : "http://purl.org/dc/terms/isPartOf", + "baseIri" : "http://purl.org/dc/terms", + "range" : "148", + "label" : { + "IRI-based" : "isPartOf" + }, + "superproperty" : [ "51" ], + "domain" : "41", + "attributes" : [ "someValues", "object", "external" ], + "id" : "653" + }, { + "iri" : "http://purl.obolibrary.org/obo/RO_0000087", + "baseIri" : "http://purl.obolibrary.org/obo", + "range" : "101", + "label" : { + "IRI-based" : "RO_0000087", + "en" : "has role" + }, + "domain" : "488", + "attributes" : [ "someValues", "object", "external" ], + "id" : "654" + }, { + "iri" : "https://w3id.org/pmd/co/characteristicOf", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "323", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "undefined", + "value" : "is characteristic of", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "characteristicOf", + "en" : "characteristic of" + }, + "superproperty" : [ "51" ], + "domain" : "180", + "attributes" : [ "someValues", "object", "external" ], + "id" : "655" + }, { + "iri" : "http://purl.obolibrary.org/obo/RO_0000087", + "baseIri" : "http://purl.obolibrary.org/obo", + "range" : "101", + "label" : { + "IRI-based" : "RO_0000087", + "en" : "has role" + }, + "domain" : "492", + "attributes" : [ "someValues", "object", "external" ], + "id" : "656" + }, { + "iri" : "https://w3id.org/pmd/co/characteristicOf", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "463", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "undefined", + "value" : "is characteristic of", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "characteristicOf", + "en" : "characteristic of" + }, + "superproperty" : [ "51" ], + "domain" : "337", + "attributes" : [ "someValues", "object", "external" ], + "id" : "657" + }, { + "range" : "283", + "domain" : "290", + "attributes" : [ "anonymous", "object" ], + "id" : "658" + }, { + "iri" : "http://www.w3.org/ns/prov#wasRoleIn", + "inverse" : "660", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "441", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasRoleIn", + "undefined" : "wasRoleIn" + }, + "domain" : "309", + "attributes" : [ "object", "external" ], + "id" : "659" + }, { + "range" : "43", + "domain" : "135", + "attributes" : [ "anonymous", "object" ], + "id" : "661" + }, { + "range" : "161", + "domain" : "199", + "attributes" : [ "anonymous", "object" ], + "id" : "662" + }, { + "iri" : "http://www.w3.org/ns/prov#activityOfInfluence", + "inverse" : "518", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "199", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "activityOfInfluence", + "undefined" : "activityOfInfluence" + }, + "domain" : "135", + "attributes" : [ "object", "external" ], + "id" : "663" + }, { + "iri" : "http://www.w3.org/ns/prov#hadRole", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "309", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "wasRoleIn", + "type" : "label" + } ], + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Role", + "type" : "iri" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "editorsDefinition" : [ { + "identifier" : "editorsDefinition", + "language" : "en", + "value" : "prov:hadRole references the Role (i.e. the function of an entity with respect to an activity), in the context of an instantaneous usage, generation, association, start, and end.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "hadRole", + "undefined" : "hadRole" + }, + "domain" : "441", + "comment" : { + "en" : "The _optional_ Role that an Entity assumed in the context of an Activity. For example, :baking prov:used :spoon; prov:qualified [ a prov:Usage; prov:entity :spoon; prov:hadRole roles:mixing_implement ].", + "undefined" : "This property has multiple RDFS domains to suit multiple OWL Profiles. See PROV-O OWL Profile." + }, + "attributes" : [ "object", "external" ], + "id" : "660" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedUsingActivity", + "inverse" : "541", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "135", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "qualifiedUsingActivity", + "undefined" : "qualifiedUsingActivity" + }, + "domain" : "312", + "attributes" : [ "object", "external" ], + "id" : "664" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedSourceOf", + "inverse" : "543", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "43", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "qualifiedSourceOf", + "undefined" : "qualifiedSourceOf" + }, + "domain" : "74", + "attributes" : [ "object", "external" ], + "id" : "665" + } ] +} \ No newline at end of file diff --git a/pgo/webvowl/data/template.json b/pgo/webvowl/data/template.json new file mode 100644 index 0000000..003d011 --- /dev/null +++ b/pgo/webvowl/data/template.json @@ -0,0 +1,163 @@ +{ + "namespace": [ + { + "name": "", + "iri": "" + } + ], + "header": { + "languages": [ + "all", + "occurring", + "languages" + ], + "title": { + "language": "label" + }, + "iri": "", + "version": "", + "author": [ + "Author One", + "Author Two" + ], + "description": { + "language": "label" + }, + "other": { + "someIdentifier": [ + { + "identifier": "someIdentifier", + "language": "undefined", + "value": "http://an.iri/", + "type": "iri" + } + ], + "someOtherIdentifier": [ + { + "identifier": "someOtherIdentifier", + "language": "undefined", + "value": "Some person", + "type": "label" + } + ] + } + }, + "metrics": { + "classCount": 40, + "datatypeCount": 13, + "objectPropertyCount": 23, + "datatypePropertyCount": 13, + "propertyCount": 36, + "nodeCount": 53, + "axiomCount": 216, + "individualCount": 8 + }, + "class": [ + { + "id": "", + "type": "" + } + ], + "classAttribute": [ + { + "id": "", + "label": "", + "iri": "", + "individuals": [ + { + "iri": "", + "labels": { + "language": "label" + }, + "annotations": {} + } + ], + "comment": "", + "equivalent": [ + "" + ], + "union": [ + "" + ], + "intersection": [ + "" + ], + "complement": [ + "" + ], + "attributes": [ + "deprecated", + "external", + "datatype", + "object", + "rdf" + ] + } + ], + "datatype": [ + { + "id": "", + "type": "" + } + ], + "datatypeAttribute": [ + { + "id": "", + "label": { + "language": "label" + }, + "iri": "", + "individuals": [ + { + "iri": "", + "labels": { + "language": "label" + }, + "annotations": {} + } + ], + "comment": "", + "equivalent": [ + "" + ] + } + ], + "property": [ + { + "id": "" + } + ], + "propertyAttribute": [ + { + "id": "", + "domain": "", + "range": "", + "inverse": "", + "label": { + "language": "label" + }, + "type": "", + "comment": "", + "cardinality": "", + "minCardinality": "", + "maxCardinality": "", + "subproperty": [ + "" + ], + "equivalent": [ + "" + ], + "attributes": [ + "deprecated", + "external", + "datatype", + "object", + "rdf", + "transitive", + "functional", + "inverse functional", + "symmetric" + ] + } + ] +} diff --git a/pgo/webvowl/favicon.ico b/pgo/webvowl/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..a857d51f1c78d8be8fe2103fde3a10b9a72b041b GIT binary patch literal 1150 zcmZ{iTS(MF6vpSDMI@zZq!kjD5lIgVRzmkE>Ln?=j=Cg=A2Q=;BWM3#W7MP z4OJ>kDK(AIMUUUlNiAY5G~ADT4`TD^KT8_Ohu^q3+sPs_m<2K*IxH|v#-41e7dK;P#seDD5<=IR4*mZa&J>`|7t0Yd|ZNFMV^(Tu4PXs)p070(cT z!?_f^eR>stth4Tx_DRfLmW9@fxmak561{^wOJBD@=O%G|eu)J=ogRGq;DxWH4!xh= z@eUb`We(&Z^`+KH+K#5I(Dl(;dm3I}*$?#hqqD9Ct+!9=G~Qf0#5-8DzLm8+&pK1v zMLdUh{?#`W|INMS#$jEe~o`qM<7dT(J;9K4tKUTz-2=hhc!xn87uCUtA9+ykHIIoj@=L3^bY(rf8C zb+d?AL1<7QstXeM2J(1@MZbZ8en{=<^Ipostpi&T9x_VKKBkraA%Ih5$fyyJJfz1` zk2d~akaZ*9;?dNV2n!i0+8boJUpg=vTosV+>66AGdF5;zOj?e@ + + + + + + + + + + + + + + WebVOWL + + + +
    +
    + + + + + + + +
    + + + + + +
    + +
    + + +
    + +
    +
    >
    + +
    + +
    + + +
    +
    +
    +

    +

    +

    +

    +

    -

    +
    +
    + + +
    +
    +
    +
    + + + + +
    + + + + + + + diff --git a/pgo/webvowl/js/d3.min.js b/pgo/webvowl/js/d3.min.js new file mode 100644 index 0000000..1664873 --- /dev/null +++ b/pgo/webvowl/js/d3.min.js @@ -0,0 +1,5 @@ +!function(){function n(n){return n&&(n.ownerDocument||n.document||n).documentElement}function t(n){return n&&(n.ownerDocument&&n.ownerDocument.defaultView||n.document&&n||n.defaultView)}function e(n,t){return t>n?-1:n>t?1:n>=t?0:NaN}function r(n){return null===n?NaN:+n}function i(n){return!isNaN(n)}function u(n){return{left:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)<0?r=u+1:i=u}return r},right:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)>0?i=u:r=u+1}return r}}}function o(n){return n.length}function a(n){for(var t=1;n*t%1;)t*=10;return t}function l(n,t){for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}function c(){this._=Object.create(null)}function f(n){return(n+="")===bo||n[0]===_o?_o+n:n}function s(n){return(n+="")[0]===_o?n.slice(1):n}function h(n){return f(n)in this._}function p(n){return(n=f(n))in this._&&delete this._[n]}function g(){var n=[];for(var t in this._)n.push(s(t));return n}function v(){var n=0;for(var t in this._)++n;return n}function d(){for(var n in this._)return!1;return!0}function y(){this._=Object.create(null)}function m(n){return n}function M(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function x(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.slice(1);for(var e=0,r=wo.length;r>e;++e){var i=wo[e]+t;if(i in n)return i}}function b(){}function _(){}function w(n){function t(){for(var t,r=e,i=-1,u=r.length;++ie;e++)for(var i,u=n[e],o=0,a=u.length;a>o;o++)(i=u[o])&&t(i,o,e);return n}function Z(n){return ko(n,qo),n}function V(n){var t,e;return function(r,i,u){var o,a=n[u].update,l=a.length;for(u!=e&&(e=u,t=0),i>=t&&(t=i+1);!(o=a[t])&&++t0&&(n=n.slice(0,a));var c=To.get(n);return c&&(n=c,l=B),a?t?i:r:t?b:u}function $(n,t){return function(e){var r=ao.event;ao.event=e,t[0]=this.__data__;try{n.apply(this,t)}finally{ao.event=r}}}function B(n,t){var e=$(n,t);return function(n){var t=this,r=n.relatedTarget;r&&(r===t||8&r.compareDocumentPosition(t))||e.call(t,n)}}function W(e){var r=".dragsuppress-"+ ++Do,i="click"+r,u=ao.select(t(e)).on("touchmove"+r,S).on("dragstart"+r,S).on("selectstart"+r,S);if(null==Ro&&(Ro="onselectstart"in e?!1:x(e.style,"userSelect")),Ro){var o=n(e).style,a=o[Ro];o[Ro]="none"}return function(n){if(u.on(r,null),Ro&&(o[Ro]=a),n){var t=function(){u.on(i,null)};u.on(i,function(){S(),t()},!0),setTimeout(t,0)}}}function J(n,e){e.changedTouches&&(e=e.changedTouches[0]);var r=n.ownerSVGElement||n;if(r.createSVGPoint){var i=r.createSVGPoint();if(0>Po){var u=t(n);if(u.scrollX||u.scrollY){r=ao.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var o=r[0][0].getScreenCTM();Po=!(o.f||o.e),r.remove()}}return Po?(i.x=e.pageX,i.y=e.pageY):(i.x=e.clientX,i.y=e.clientY),i=i.matrixTransform(n.getScreenCTM().inverse()),[i.x,i.y]}var a=n.getBoundingClientRect();return[e.clientX-a.left-n.clientLeft,e.clientY-a.top-n.clientTop]}function G(){return ao.event.changedTouches[0].identifier}function K(n){return n>0?1:0>n?-1:0}function Q(n,t,e){return(t[0]-n[0])*(e[1]-n[1])-(t[1]-n[1])*(e[0]-n[0])}function nn(n){return n>1?0:-1>n?Fo:Math.acos(n)}function tn(n){return n>1?Io:-1>n?-Io:Math.asin(n)}function en(n){return((n=Math.exp(n))-1/n)/2}function rn(n){return((n=Math.exp(n))+1/n)/2}function un(n){return((n=Math.exp(2*n))-1)/(n+1)}function on(n){return(n=Math.sin(n/2))*n}function an(){}function ln(n,t,e){return this instanceof ln?(this.h=+n,this.s=+t,void(this.l=+e)):arguments.length<2?n instanceof ln?new ln(n.h,n.s,n.l):_n(""+n,wn,ln):new ln(n,t,e)}function cn(n,t,e){function r(n){return n>360?n-=360:0>n&&(n+=360),60>n?u+(o-u)*n/60:180>n?o:240>n?u+(o-u)*(240-n)/60:u}function i(n){return Math.round(255*r(n))}var u,o;return n=isNaN(n)?0:(n%=360)<0?n+360:n,t=isNaN(t)?0:0>t?0:t>1?1:t,e=0>e?0:e>1?1:e,o=.5>=e?e*(1+t):e+t-e*t,u=2*e-o,new mn(i(n+120),i(n),i(n-120))}function fn(n,t,e){return this instanceof fn?(this.h=+n,this.c=+t,void(this.l=+e)):arguments.length<2?n instanceof fn?new fn(n.h,n.c,n.l):n instanceof hn?gn(n.l,n.a,n.b):gn((n=Sn((n=ao.rgb(n)).r,n.g,n.b)).l,n.a,n.b):new fn(n,t,e)}function sn(n,t,e){return isNaN(n)&&(n=0),isNaN(t)&&(t=0),new hn(e,Math.cos(n*=Yo)*t,Math.sin(n)*t)}function hn(n,t,e){return this instanceof hn?(this.l=+n,this.a=+t,void(this.b=+e)):arguments.length<2?n instanceof hn?new hn(n.l,n.a,n.b):n instanceof fn?sn(n.h,n.c,n.l):Sn((n=mn(n)).r,n.g,n.b):new hn(n,t,e)}function pn(n,t,e){var r=(n+16)/116,i=r+t/500,u=r-e/200;return i=vn(i)*na,r=vn(r)*ta,u=vn(u)*ea,new mn(yn(3.2404542*i-1.5371385*r-.4985314*u),yn(-.969266*i+1.8760108*r+.041556*u),yn(.0556434*i-.2040259*r+1.0572252*u))}function gn(n,t,e){return n>0?new fn(Math.atan2(e,t)*Zo,Math.sqrt(t*t+e*e),n):new fn(NaN,NaN,n)}function vn(n){return n>.206893034?n*n*n:(n-4/29)/7.787037}function dn(n){return n>.008856?Math.pow(n,1/3):7.787037*n+4/29}function yn(n){return Math.round(255*(.00304>=n?12.92*n:1.055*Math.pow(n,1/2.4)-.055))}function mn(n,t,e){return this instanceof mn?(this.r=~~n,this.g=~~t,void(this.b=~~e)):arguments.length<2?n instanceof mn?new mn(n.r,n.g,n.b):_n(""+n,mn,cn):new mn(n,t,e)}function Mn(n){return new mn(n>>16,n>>8&255,255&n)}function xn(n){return Mn(n)+""}function bn(n){return 16>n?"0"+Math.max(0,n).toString(16):Math.min(255,n).toString(16)}function _n(n,t,e){var r,i,u,o=0,a=0,l=0;if(r=/([a-z]+)\((.*)\)/.exec(n=n.toLowerCase()))switch(i=r[2].split(","),r[1]){case"hsl":return e(parseFloat(i[0]),parseFloat(i[1])/100,parseFloat(i[2])/100);case"rgb":return t(Nn(i[0]),Nn(i[1]),Nn(i[2]))}return(u=ua.get(n))?t(u.r,u.g,u.b):(null==n||"#"!==n.charAt(0)||isNaN(u=parseInt(n.slice(1),16))||(4===n.length?(o=(3840&u)>>4,o=o>>4|o,a=240&u,a=a>>4|a,l=15&u,l=l<<4|l):7===n.length&&(o=(16711680&u)>>16,a=(65280&u)>>8,l=255&u)),t(o,a,l))}function wn(n,t,e){var r,i,u=Math.min(n/=255,t/=255,e/=255),o=Math.max(n,t,e),a=o-u,l=(o+u)/2;return a?(i=.5>l?a/(o+u):a/(2-o-u),r=n==o?(t-e)/a+(e>t?6:0):t==o?(e-n)/a+2:(n-t)/a+4,r*=60):(r=NaN,i=l>0&&1>l?0:r),new ln(r,i,l)}function Sn(n,t,e){n=kn(n),t=kn(t),e=kn(e);var r=dn((.4124564*n+.3575761*t+.1804375*e)/na),i=dn((.2126729*n+.7151522*t+.072175*e)/ta),u=dn((.0193339*n+.119192*t+.9503041*e)/ea);return hn(116*i-16,500*(r-i),200*(i-u))}function kn(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function Nn(n){var t=parseFloat(n);return"%"===n.charAt(n.length-1)?Math.round(2.55*t):t}function En(n){return"function"==typeof n?n:function(){return n}}function An(n){return function(t,e,r){return 2===arguments.length&&"function"==typeof e&&(r=e,e=null),Cn(t,e,n,r)}}function Cn(n,t,e,r){function i(){var n,t=l.status;if(!t&&Ln(l)||t>=200&&300>t||304===t){try{n=e.call(u,l)}catch(r){return void o.error.call(u,r)}o.load.call(u,n)}else o.error.call(u,l)}var u={},o=ao.dispatch("beforesend","progress","load","error"),a={},l=new XMLHttpRequest,c=null;return!this.XDomainRequest||"withCredentials"in l||!/^(http(s)?:)?\/\//.test(n)||(l=new XDomainRequest),"onload"in l?l.onload=l.onerror=i:l.onreadystatechange=function(){l.readyState>3&&i()},l.onprogress=function(n){var t=ao.event;ao.event=n;try{o.progress.call(u,l)}finally{ao.event=t}},u.header=function(n,t){return n=(n+"").toLowerCase(),arguments.length<2?a[n]:(null==t?delete a[n]:a[n]=t+"",u)},u.mimeType=function(n){return arguments.length?(t=null==n?null:n+"",u):t},u.responseType=function(n){return arguments.length?(c=n,u):c},u.response=function(n){return e=n,u},["get","post"].forEach(function(n){u[n]=function(){return u.send.apply(u,[n].concat(co(arguments)))}}),u.send=function(e,r,i){if(2===arguments.length&&"function"==typeof r&&(i=r,r=null),l.open(e,n,!0),null==t||"accept"in a||(a.accept=t+",*/*"),l.setRequestHeader)for(var f in a)l.setRequestHeader(f,a[f]);return null!=t&&l.overrideMimeType&&l.overrideMimeType(t),null!=c&&(l.responseType=c),null!=i&&u.on("error",i).on("load",function(n){i(null,n)}),o.beforesend.call(u,l),l.send(null==r?null:r),u},u.abort=function(){return l.abort(),u},ao.rebind(u,o,"on"),null==r?u:u.get(zn(r))}function zn(n){return 1===n.length?function(t,e){n(null==t?e:null)}:n}function Ln(n){var t=n.responseType;return t&&"text"!==t?n.response:n.responseText}function qn(n,t,e){var r=arguments.length;2>r&&(t=0),3>r&&(e=Date.now());var i=e+t,u={c:n,t:i,n:null};return aa?aa.n=u:oa=u,aa=u,la||(ca=clearTimeout(ca),la=1,fa(Tn)),u}function Tn(){var n=Rn(),t=Dn()-n;t>24?(isFinite(t)&&(clearTimeout(ca),ca=setTimeout(Tn,t)),la=0):(la=1,fa(Tn))}function Rn(){for(var n=Date.now(),t=oa;t;)n>=t.t&&t.c(n-t.t)&&(t.c=null),t=t.n;return n}function Dn(){for(var n,t=oa,e=1/0;t;)t.c?(t.t8?function(n){return n/e}:function(n){return n*e},symbol:n}}function jn(n){var t=n.decimal,e=n.thousands,r=n.grouping,i=n.currency,u=r&&e?function(n,t){for(var i=n.length,u=[],o=0,a=r[0],l=0;i>0&&a>0&&(l+a+1>t&&(a=Math.max(1,t-l)),u.push(n.substring(i-=a,i+a)),!((l+=a+1)>t));)a=r[o=(o+1)%r.length];return u.reverse().join(e)}:m;return function(n){var e=ha.exec(n),r=e[1]||" ",o=e[2]||">",a=e[3]||"-",l=e[4]||"",c=e[5],f=+e[6],s=e[7],h=e[8],p=e[9],g=1,v="",d="",y=!1,m=!0;switch(h&&(h=+h.substring(1)),(c||"0"===r&&"="===o)&&(c=r="0",o="="),p){case"n":s=!0,p="g";break;case"%":g=100,d="%",p="f";break;case"p":g=100,d="%",p="r";break;case"b":case"o":case"x":case"X":"#"===l&&(v="0"+p.toLowerCase());case"c":m=!1;case"d":y=!0,h=0;break;case"s":g=-1,p="r"}"$"===l&&(v=i[0],d=i[1]),"r"!=p||h||(p="g"),null!=h&&("g"==p?h=Math.max(1,Math.min(21,h)):"e"!=p&&"f"!=p||(h=Math.max(0,Math.min(20,h)))),p=pa.get(p)||Fn;var M=c&&s;return function(n){var e=d;if(y&&n%1)return"";var i=0>n||0===n&&0>1/n?(n=-n,"-"):"-"===a?"":a;if(0>g){var l=ao.formatPrefix(n,h);n=l.scale(n),e=l.symbol+d}else n*=g;n=p(n,h);var x,b,_=n.lastIndexOf(".");if(0>_){var w=m?n.lastIndexOf("e"):-1;0>w?(x=n,b=""):(x=n.substring(0,w),b=n.substring(w))}else x=n.substring(0,_),b=t+n.substring(_+1);!c&&s&&(x=u(x,1/0));var S=v.length+x.length+b.length+(M?0:i.length),k=f>S?new Array(S=f-S+1).join(r):"";return M&&(x=u(k+x,k.length?f-b.length:1/0)),i+=v,n=x+b,("<"===o?i+n+k:">"===o?k+i+n:"^"===o?k.substring(0,S>>=1)+i+n+k.substring(S):i+(M?n:k+n))+e}}}function Fn(n){return n+""}function Hn(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function On(n,t,e){function r(t){var e=n(t),r=u(e,1);return r-t>t-e?e:r}function i(e){return t(e=n(new va(e-1)),1),e}function u(n,e){return t(n=new va(+n),e),n}function o(n,r,u){var o=i(n),a=[];if(u>1)for(;r>o;)e(o)%u||a.push(new Date(+o)),t(o,1);else for(;r>o;)a.push(new Date(+o)),t(o,1);return a}function a(n,t,e){try{va=Hn;var r=new Hn;return r._=n,o(r,t,e)}finally{va=Date}}n.floor=n,n.round=r,n.ceil=i,n.offset=u,n.range=o;var l=n.utc=In(n);return l.floor=l,l.round=In(r),l.ceil=In(i),l.offset=In(u),l.range=a,n}function In(n){return function(t,e){try{va=Hn;var r=new Hn;return r._=t,n(r,e)._}finally{va=Date}}}function Yn(n){function t(n){function t(t){for(var e,i,u,o=[],a=-1,l=0;++aa;){if(r>=c)return-1;if(i=t.charCodeAt(a++),37===i){if(o=t.charAt(a++),u=C[o in ya?t.charAt(a++):o],!u||(r=u(n,e,r))<0)return-1}else if(i!=e.charCodeAt(r++))return-1}return r}function r(n,t,e){_.lastIndex=0;var r=_.exec(t.slice(e));return r?(n.w=w.get(r[0].toLowerCase()),e+r[0].length):-1}function i(n,t,e){x.lastIndex=0;var r=x.exec(t.slice(e));return r?(n.w=b.get(r[0].toLowerCase()),e+r[0].length):-1}function u(n,t,e){N.lastIndex=0;var r=N.exec(t.slice(e));return r?(n.m=E.get(r[0].toLowerCase()),e+r[0].length):-1}function o(n,t,e){S.lastIndex=0;var r=S.exec(t.slice(e));return r?(n.m=k.get(r[0].toLowerCase()),e+r[0].length):-1}function a(n,t,r){return e(n,A.c.toString(),t,r)}function l(n,t,r){return e(n,A.x.toString(),t,r)}function c(n,t,r){return e(n,A.X.toString(),t,r)}function f(n,t,e){var r=M.get(t.slice(e,e+=2).toLowerCase());return null==r?-1:(n.p=r,e)}var s=n.dateTime,h=n.date,p=n.time,g=n.periods,v=n.days,d=n.shortDays,y=n.months,m=n.shortMonths;t.utc=function(n){function e(n){try{va=Hn;var t=new va;return t._=n,r(t)}finally{va=Date}}var r=t(n);return e.parse=function(n){try{va=Hn;var t=r.parse(n);return t&&t._}finally{va=Date}},e.toString=r.toString,e},t.multi=t.utc.multi=ct;var M=ao.map(),x=Vn(v),b=Xn(v),_=Vn(d),w=Xn(d),S=Vn(y),k=Xn(y),N=Vn(m),E=Xn(m);g.forEach(function(n,t){M.set(n.toLowerCase(),t)});var A={a:function(n){return d[n.getDay()]},A:function(n){return v[n.getDay()]},b:function(n){return m[n.getMonth()]},B:function(n){return y[n.getMonth()]},c:t(s),d:function(n,t){return Zn(n.getDate(),t,2)},e:function(n,t){return Zn(n.getDate(),t,2)},H:function(n,t){return Zn(n.getHours(),t,2)},I:function(n,t){return Zn(n.getHours()%12||12,t,2)},j:function(n,t){return Zn(1+ga.dayOfYear(n),t,3)},L:function(n,t){return Zn(n.getMilliseconds(),t,3)},m:function(n,t){return Zn(n.getMonth()+1,t,2)},M:function(n,t){return Zn(n.getMinutes(),t,2)},p:function(n){return g[+(n.getHours()>=12)]},S:function(n,t){return Zn(n.getSeconds(),t,2)},U:function(n,t){return Zn(ga.sundayOfYear(n),t,2)},w:function(n){return n.getDay()},W:function(n,t){return Zn(ga.mondayOfYear(n),t,2)},x:t(h),X:t(p),y:function(n,t){return Zn(n.getFullYear()%100,t,2)},Y:function(n,t){return Zn(n.getFullYear()%1e4,t,4)},Z:at,"%":function(){return"%"}},C={a:r,A:i,b:u,B:o,c:a,d:tt,e:tt,H:rt,I:rt,j:et,L:ot,m:nt,M:it,p:f,S:ut,U:Bn,w:$n,W:Wn,x:l,X:c,y:Gn,Y:Jn,Z:Kn,"%":lt};return t}function Zn(n,t,e){var r=0>n?"-":"",i=(r?-n:n)+"",u=i.length;return r+(e>u?new Array(e-u+1).join(t)+i:i)}function Vn(n){return new RegExp("^(?:"+n.map(ao.requote).join("|")+")","i")}function Xn(n){for(var t=new c,e=-1,r=n.length;++e68?1900:2e3)}function nt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.m=r[0]-1,e+r[0].length):-1}function tt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.d=+r[0],e+r[0].length):-1}function et(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.j=+r[0],e+r[0].length):-1}function rt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.H=+r[0],e+r[0].length):-1}function it(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.M=+r[0],e+r[0].length):-1}function ut(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.S=+r[0],e+r[0].length):-1}function ot(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.L=+r[0],e+r[0].length):-1}function at(n){var t=n.getTimezoneOffset(),e=t>0?"-":"+",r=xo(t)/60|0,i=xo(t)%60;return e+Zn(r,"0",2)+Zn(i,"0",2)}function lt(n,t,e){Ma.lastIndex=0;var r=Ma.exec(t.slice(e,e+1));return r?e+r[0].length:-1}function ct(n){for(var t=n.length,e=-1;++e=0?1:-1,a=o*e,l=Math.cos(t),c=Math.sin(t),f=u*c,s=i*l+f*Math.cos(a),h=f*o*Math.sin(a);ka.add(Math.atan2(h,s)),r=n,i=l,u=c}var t,e,r,i,u;Na.point=function(o,a){Na.point=n,r=(t=o)*Yo,i=Math.cos(a=(e=a)*Yo/2+Fo/4),u=Math.sin(a)},Na.lineEnd=function(){n(t,e)}}function dt(n){var t=n[0],e=n[1],r=Math.cos(e);return[r*Math.cos(t),r*Math.sin(t),Math.sin(e)]}function yt(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}function mt(n,t){return[n[1]*t[2]-n[2]*t[1],n[2]*t[0]-n[0]*t[2],n[0]*t[1]-n[1]*t[0]]}function Mt(n,t){n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}function xt(n,t){return[n[0]*t,n[1]*t,n[2]*t]}function bt(n){var t=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);n[0]/=t,n[1]/=t,n[2]/=t}function _t(n){return[Math.atan2(n[1],n[0]),tn(n[2])]}function wt(n,t){return xo(n[0]-t[0])a;++a)i.point((e=n[a])[0],e[1]);return void i.lineEnd()}var l=new Tt(e,n,null,!0),c=new Tt(e,null,l,!1);l.o=c,u.push(l),o.push(c),l=new Tt(r,n,null,!1),c=new Tt(r,null,l,!0),l.o=c,u.push(l),o.push(c)}}),o.sort(t),qt(u),qt(o),u.length){for(var a=0,l=e,c=o.length;c>a;++a)o[a].e=l=!l;for(var f,s,h=u[0];;){for(var p=h,g=!0;p.v;)if((p=p.n)===h)return;f=p.z,i.lineStart();do{if(p.v=p.o.v=!0,p.e){if(g)for(var a=0,c=f.length;c>a;++a)i.point((s=f[a])[0],s[1]);else r(p.x,p.n.x,1,i);p=p.n}else{if(g){f=p.p.z;for(var a=f.length-1;a>=0;--a)i.point((s=f[a])[0],s[1])}else r(p.x,p.p.x,-1,i);p=p.p}p=p.o,f=p.z,g=!g}while(!p.v);i.lineEnd()}}}function qt(n){if(t=n.length){for(var t,e,r=0,i=n[0];++r0){for(b||(u.polygonStart(),b=!0),u.lineStart();++o1&&2&t&&e.push(e.pop().concat(e.shift())),p.push(e.filter(Dt))}var p,g,v,d=t(u),y=i.invert(r[0],r[1]),m={point:o,lineStart:l,lineEnd:c,polygonStart:function(){m.point=f,m.lineStart=s,m.lineEnd=h,p=[],g=[]},polygonEnd:function(){m.point=o,m.lineStart=l,m.lineEnd=c,p=ao.merge(p);var n=Ot(y,g);p.length?(b||(u.polygonStart(),b=!0),Lt(p,Ut,n,e,u)):n&&(b||(u.polygonStart(),b=!0),u.lineStart(),e(null,null,1,u),u.lineEnd()),b&&(u.polygonEnd(),b=!1),p=g=null},sphere:function(){u.polygonStart(),u.lineStart(),e(null,null,1,u),u.lineEnd(),u.polygonEnd()}},M=Pt(),x=t(M),b=!1;return m}}function Dt(n){return n.length>1}function Pt(){var n,t=[];return{lineStart:function(){t.push(n=[])},point:function(t,e){n.push([t,e])},lineEnd:b,buffer:function(){var e=t;return t=[],n=null,e},rejoin:function(){t.length>1&&t.push(t.pop().concat(t.shift()))}}}function Ut(n,t){return((n=n.x)[0]<0?n[1]-Io-Uo:Io-n[1])-((t=t.x)[0]<0?t[1]-Io-Uo:Io-t[1])}function jt(n){var t,e=NaN,r=NaN,i=NaN;return{lineStart:function(){n.lineStart(),t=1},point:function(u,o){var a=u>0?Fo:-Fo,l=xo(u-e);xo(l-Fo)0?Io:-Io),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(a,r),n.point(u,r),t=0):i!==a&&l>=Fo&&(xo(e-i)Uo?Math.atan((Math.sin(t)*(u=Math.cos(r))*Math.sin(e)-Math.sin(r)*(i=Math.cos(t))*Math.sin(n))/(i*u*o)):(t+r)/2}function Ht(n,t,e,r){var i;if(null==n)i=e*Io,r.point(-Fo,i),r.point(0,i),r.point(Fo,i),r.point(Fo,0),r.point(Fo,-i),r.point(0,-i),r.point(-Fo,-i),r.point(-Fo,0),r.point(-Fo,i);else if(xo(n[0]-t[0])>Uo){var u=n[0]a;++a){var c=t[a],f=c.length;if(f)for(var s=c[0],h=s[0],p=s[1]/2+Fo/4,g=Math.sin(p),v=Math.cos(p),d=1;;){d===f&&(d=0),n=c[d];var y=n[0],m=n[1]/2+Fo/4,M=Math.sin(m),x=Math.cos(m),b=y-h,_=b>=0?1:-1,w=_*b,S=w>Fo,k=g*M;if(ka.add(Math.atan2(k*_*Math.sin(w),v*x+k*Math.cos(w))),u+=S?b+_*Ho:b,S^h>=e^y>=e){var N=mt(dt(s),dt(n));bt(N);var E=mt(i,N);bt(E);var A=(S^b>=0?-1:1)*tn(E[2]);(r>A||r===A&&(N[0]||N[1]))&&(o+=S^b>=0?1:-1)}if(!d++)break;h=y,g=M,v=x,s=n}}return(-Uo>u||Uo>u&&-Uo>ka)^1&o}function It(n){function t(n,t){return Math.cos(n)*Math.cos(t)>u}function e(n){var e,u,l,c,f;return{lineStart:function(){c=l=!1,f=1},point:function(s,h){var p,g=[s,h],v=t(s,h),d=o?v?0:i(s,h):v?i(s+(0>s?Fo:-Fo),h):0;if(!e&&(c=l=v)&&n.lineStart(),v!==l&&(p=r(e,g),(wt(e,p)||wt(g,p))&&(g[0]+=Uo,g[1]+=Uo,v=t(g[0],g[1]))),v!==l)f=0,v?(n.lineStart(),p=r(g,e),n.point(p[0],p[1])):(p=r(e,g),n.point(p[0],p[1]),n.lineEnd()),e=p;else if(a&&e&&o^v){var y;d&u||!(y=r(g,e,!0))||(f=0,o?(n.lineStart(),n.point(y[0][0],y[0][1]),n.point(y[1][0],y[1][1]),n.lineEnd()):(n.point(y[1][0],y[1][1]),n.lineEnd(),n.lineStart(),n.point(y[0][0],y[0][1])))}!v||e&&wt(e,g)||n.point(g[0],g[1]),e=g,l=v,u=d},lineEnd:function(){l&&n.lineEnd(),e=null},clean:function(){return f|(c&&l)<<1}}}function r(n,t,e){var r=dt(n),i=dt(t),o=[1,0,0],a=mt(r,i),l=yt(a,a),c=a[0],f=l-c*c;if(!f)return!e&&n;var s=u*l/f,h=-u*c/f,p=mt(o,a),g=xt(o,s),v=xt(a,h);Mt(g,v);var d=p,y=yt(g,d),m=yt(d,d),M=y*y-m*(yt(g,g)-1);if(!(0>M)){var x=Math.sqrt(M),b=xt(d,(-y-x)/m);if(Mt(b,g),b=_t(b),!e)return b;var _,w=n[0],S=t[0],k=n[1],N=t[1];w>S&&(_=w,w=S,S=_);var E=S-w,A=xo(E-Fo)E;if(!A&&k>N&&(_=k,k=N,N=_),C?A?k+N>0^b[1]<(xo(b[0]-w)Fo^(w<=b[0]&&b[0]<=S)){var z=xt(d,(-y+x)/m);return Mt(z,g),[b,_t(z)]}}}function i(t,e){var r=o?n:Fo-n,i=0;return-r>t?i|=1:t>r&&(i|=2),-r>e?i|=4:e>r&&(i|=8),i}var u=Math.cos(n),o=u>0,a=xo(u)>Uo,l=ve(n,6*Yo);return Rt(t,e,l,o?[0,-n]:[-Fo,n-Fo])}function Yt(n,t,e,r){return function(i){var u,o=i.a,a=i.b,l=o.x,c=o.y,f=a.x,s=a.y,h=0,p=1,g=f-l,v=s-c;if(u=n-l,g||!(u>0)){if(u/=g,0>g){if(h>u)return;p>u&&(p=u)}else if(g>0){if(u>p)return;u>h&&(h=u)}if(u=e-l,g||!(0>u)){if(u/=g,0>g){if(u>p)return;u>h&&(h=u)}else if(g>0){if(h>u)return;p>u&&(p=u)}if(u=t-c,v||!(u>0)){if(u/=v,0>v){if(h>u)return;p>u&&(p=u)}else if(v>0){if(u>p)return;u>h&&(h=u)}if(u=r-c,v||!(0>u)){if(u/=v,0>v){if(u>p)return;u>h&&(h=u)}else if(v>0){if(h>u)return;p>u&&(p=u)}return h>0&&(i.a={x:l+h*g,y:c+h*v}),1>p&&(i.b={x:l+p*g,y:c+p*v}),i}}}}}}function Zt(n,t,e,r){function i(r,i){return xo(r[0]-n)0?0:3:xo(r[0]-e)0?2:1:xo(r[1]-t)0?1:0:i>0?3:2}function u(n,t){return o(n.x,t.x)}function o(n,t){var e=i(n,1),r=i(t,1);return e!==r?e-r:0===e?t[1]-n[1]:1===e?n[0]-t[0]:2===e?n[1]-t[1]:t[0]-n[0]}return function(a){function l(n){for(var t=0,e=d.length,r=n[1],i=0;e>i;++i)for(var u,o=1,a=d[i],l=a.length,c=a[0];l>o;++o)u=a[o],c[1]<=r?u[1]>r&&Q(c,u,n)>0&&++t:u[1]<=r&&Q(c,u,n)<0&&--t,c=u;return 0!==t}function c(u,a,l,c){var f=0,s=0;if(null==u||(f=i(u,l))!==(s=i(a,l))||o(u,a)<0^l>0){do c.point(0===f||3===f?n:e,f>1?r:t);while((f=(f+l+4)%4)!==s)}else c.point(a[0],a[1])}function f(i,u){return i>=n&&e>=i&&u>=t&&r>=u}function s(n,t){f(n,t)&&a.point(n,t)}function h(){C.point=g,d&&d.push(y=[]),S=!0,w=!1,b=_=NaN}function p(){v&&(g(m,M),x&&w&&E.rejoin(),v.push(E.buffer())),C.point=s,w&&a.lineEnd()}function g(n,t){n=Math.max(-Ha,Math.min(Ha,n)),t=Math.max(-Ha,Math.min(Ha,t));var e=f(n,t);if(d&&y.push([n,t]),S)m=n,M=t,x=e,S=!1,e&&(a.lineStart(),a.point(n,t));else if(e&&w)a.point(n,t);else{var r={a:{x:b,y:_},b:{x:n,y:t}};A(r)?(w||(a.lineStart(),a.point(r.a.x,r.a.y)),a.point(r.b.x,r.b.y),e||a.lineEnd(),k=!1):e&&(a.lineStart(),a.point(n,t),k=!1)}b=n,_=t,w=e}var v,d,y,m,M,x,b,_,w,S,k,N=a,E=Pt(),A=Yt(n,t,e,r),C={point:s,lineStart:h,lineEnd:p,polygonStart:function(){a=E,v=[],d=[],k=!0},polygonEnd:function(){a=N,v=ao.merge(v);var t=l([n,r]),e=k&&t,i=v.length;(e||i)&&(a.polygonStart(),e&&(a.lineStart(),c(null,null,1,a),a.lineEnd()),i&&Lt(v,u,t,c,a),a.polygonEnd()),v=d=y=null}};return C}}function Vt(n){var t=0,e=Fo/3,r=ae(n),i=r(t,e);return i.parallels=function(n){return arguments.length?r(t=n[0]*Fo/180,e=n[1]*Fo/180):[t/Fo*180,e/Fo*180]},i}function Xt(n,t){function e(n,t){var e=Math.sqrt(u-2*i*Math.sin(t))/i;return[e*Math.sin(n*=i),o-e*Math.cos(n)]}var r=Math.sin(n),i=(r+Math.sin(t))/2,u=1+r*(2*i-r),o=Math.sqrt(u)/i;return e.invert=function(n,t){var e=o-t;return[Math.atan2(n,e)/i,tn((u-(n*n+e*e)*i*i)/(2*i))]},e}function $t(){function n(n,t){Ia+=i*n-r*t,r=n,i=t}var t,e,r,i;$a.point=function(u,o){$a.point=n,t=r=u,e=i=o},$a.lineEnd=function(){n(t,e)}}function Bt(n,t){Ya>n&&(Ya=n),n>Va&&(Va=n),Za>t&&(Za=t),t>Xa&&(Xa=t)}function Wt(){function n(n,t){o.push("M",n,",",t,u)}function t(n,t){o.push("M",n,",",t),a.point=e}function e(n,t){o.push("L",n,",",t)}function r(){a.point=n}function i(){o.push("Z")}var u=Jt(4.5),o=[],a={point:n,lineStart:function(){a.point=t},lineEnd:r,polygonStart:function(){a.lineEnd=i},polygonEnd:function(){a.lineEnd=r,a.point=n},pointRadius:function(n){return u=Jt(n),a},result:function(){if(o.length){var n=o.join("");return o=[],n}}};return a}function Jt(n){return"m0,"+n+"a"+n+","+n+" 0 1,1 0,"+-2*n+"a"+n+","+n+" 0 1,1 0,"+2*n+"z"}function Gt(n,t){Ca+=n,za+=t,++La}function Kt(){function n(n,r){var i=n-t,u=r-e,o=Math.sqrt(i*i+u*u);qa+=o*(t+n)/2,Ta+=o*(e+r)/2,Ra+=o,Gt(t=n,e=r)}var t,e;Wa.point=function(r,i){Wa.point=n,Gt(t=r,e=i)}}function Qt(){Wa.point=Gt}function ne(){function n(n,t){var e=n-r,u=t-i,o=Math.sqrt(e*e+u*u);qa+=o*(r+n)/2,Ta+=o*(i+t)/2,Ra+=o,o=i*n-r*t,Da+=o*(r+n),Pa+=o*(i+t),Ua+=3*o,Gt(r=n,i=t)}var t,e,r,i;Wa.point=function(u,o){Wa.point=n,Gt(t=r=u,e=i=o)},Wa.lineEnd=function(){n(t,e)}}function te(n){function t(t,e){n.moveTo(t+o,e),n.arc(t,e,o,0,Ho)}function e(t,e){n.moveTo(t,e),a.point=r}function r(t,e){n.lineTo(t,e)}function i(){a.point=t}function u(){n.closePath()}var o=4.5,a={point:t,lineStart:function(){a.point=e},lineEnd:i,polygonStart:function(){a.lineEnd=u},polygonEnd:function(){a.lineEnd=i,a.point=t},pointRadius:function(n){return o=n,a},result:b};return a}function ee(n){function t(n){return(a?r:e)(n)}function e(t){return ue(t,function(e,r){e=n(e,r),t.point(e[0],e[1])})}function r(t){function e(e,r){e=n(e,r),t.point(e[0],e[1])}function r(){M=NaN,S.point=u,t.lineStart()}function u(e,r){var u=dt([e,r]),o=n(e,r);i(M,x,m,b,_,w,M=o[0],x=o[1],m=e,b=u[0],_=u[1],w=u[2],a,t),t.point(M,x)}function o(){S.point=e,t.lineEnd()}function l(){ +r(),S.point=c,S.lineEnd=f}function c(n,t){u(s=n,h=t),p=M,g=x,v=b,d=_,y=w,S.point=u}function f(){i(M,x,m,b,_,w,p,g,s,v,d,y,a,t),S.lineEnd=o,o()}var s,h,p,g,v,d,y,m,M,x,b,_,w,S={point:e,lineStart:r,lineEnd:o,polygonStart:function(){t.polygonStart(),S.lineStart=l},polygonEnd:function(){t.polygonEnd(),S.lineStart=r}};return S}function i(t,e,r,a,l,c,f,s,h,p,g,v,d,y){var m=f-t,M=s-e,x=m*m+M*M;if(x>4*u&&d--){var b=a+p,_=l+g,w=c+v,S=Math.sqrt(b*b+_*_+w*w),k=Math.asin(w/=S),N=xo(xo(w)-1)u||xo((m*z+M*L)/x-.5)>.3||o>a*p+l*g+c*v)&&(i(t,e,r,a,l,c,A,C,N,b/=S,_/=S,w,d,y),y.point(A,C),i(A,C,N,b,_,w,f,s,h,p,g,v,d,y))}}var u=.5,o=Math.cos(30*Yo),a=16;return t.precision=function(n){return arguments.length?(a=(u=n*n)>0&&16,t):Math.sqrt(u)},t}function re(n){var t=ee(function(t,e){return n([t*Zo,e*Zo])});return function(n){return le(t(n))}}function ie(n){this.stream=n}function ue(n,t){return{point:t,sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}function oe(n){return ae(function(){return n})()}function ae(n){function t(n){return n=a(n[0]*Yo,n[1]*Yo),[n[0]*h+l,c-n[1]*h]}function e(n){return n=a.invert((n[0]-l)/h,(c-n[1])/h),n&&[n[0]*Zo,n[1]*Zo]}function r(){a=Ct(o=se(y,M,x),u);var n=u(v,d);return l=p-n[0]*h,c=g+n[1]*h,i()}function i(){return f&&(f.valid=!1,f=null),t}var u,o,a,l,c,f,s=ee(function(n,t){return n=u(n,t),[n[0]*h+l,c-n[1]*h]}),h=150,p=480,g=250,v=0,d=0,y=0,M=0,x=0,b=Fa,_=m,w=null,S=null;return t.stream=function(n){return f&&(f.valid=!1),f=le(b(o,s(_(n)))),f.valid=!0,f},t.clipAngle=function(n){return arguments.length?(b=null==n?(w=n,Fa):It((w=+n)*Yo),i()):w},t.clipExtent=function(n){return arguments.length?(S=n,_=n?Zt(n[0][0],n[0][1],n[1][0],n[1][1]):m,i()):S},t.scale=function(n){return arguments.length?(h=+n,r()):h},t.translate=function(n){return arguments.length?(p=+n[0],g=+n[1],r()):[p,g]},t.center=function(n){return arguments.length?(v=n[0]%360*Yo,d=n[1]%360*Yo,r()):[v*Zo,d*Zo]},t.rotate=function(n){return arguments.length?(y=n[0]%360*Yo,M=n[1]%360*Yo,x=n.length>2?n[2]%360*Yo:0,r()):[y*Zo,M*Zo,x*Zo]},ao.rebind(t,s,"precision"),function(){return u=n.apply(this,arguments),t.invert=u.invert&&e,r()}}function le(n){return ue(n,function(t,e){n.point(t*Yo,e*Yo)})}function ce(n,t){return[n,t]}function fe(n,t){return[n>Fo?n-Ho:-Fo>n?n+Ho:n,t]}function se(n,t,e){return n?t||e?Ct(pe(n),ge(t,e)):pe(n):t||e?ge(t,e):fe}function he(n){return function(t,e){return t+=n,[t>Fo?t-Ho:-Fo>t?t+Ho:t,e]}}function pe(n){var t=he(n);return t.invert=he(-n),t}function ge(n,t){function e(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*r+a*i;return[Math.atan2(l*u-f*o,a*r-c*i),tn(f*u+l*o)]}var r=Math.cos(n),i=Math.sin(n),u=Math.cos(t),o=Math.sin(t);return e.invert=function(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*u-l*o;return[Math.atan2(l*u+c*o,a*r+f*i),tn(f*r-a*i)]},e}function ve(n,t){var e=Math.cos(n),r=Math.sin(n);return function(i,u,o,a){var l=o*t;null!=i?(i=de(e,i),u=de(e,u),(o>0?u>i:i>u)&&(i+=o*Ho)):(i=n+o*Ho,u=n-.5*l);for(var c,f=i;o>0?f>u:u>f;f-=l)a.point((c=_t([e,-r*Math.cos(f),-r*Math.sin(f)]))[0],c[1])}}function de(n,t){var e=dt(t);e[0]-=n,bt(e);var r=nn(-e[1]);return((-e[2]<0?-r:r)+2*Math.PI-Uo)%(2*Math.PI)}function ye(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[n,t]})}}function me(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[t,n]})}}function Me(n){return n.source}function xe(n){return n.target}function be(n,t,e,r){var i=Math.cos(t),u=Math.sin(t),o=Math.cos(r),a=Math.sin(r),l=i*Math.cos(n),c=i*Math.sin(n),f=o*Math.cos(e),s=o*Math.sin(e),h=2*Math.asin(Math.sqrt(on(r-t)+i*o*on(e-n))),p=1/Math.sin(h),g=h?function(n){var t=Math.sin(n*=h)*p,e=Math.sin(h-n)*p,r=e*l+t*f,i=e*c+t*s,o=e*u+t*a;return[Math.atan2(i,r)*Zo,Math.atan2(o,Math.sqrt(r*r+i*i))*Zo]}:function(){return[n*Zo,t*Zo]};return g.distance=h,g}function _e(){function n(n,i){var u=Math.sin(i*=Yo),o=Math.cos(i),a=xo((n*=Yo)-t),l=Math.cos(a);Ja+=Math.atan2(Math.sqrt((a=o*Math.sin(a))*a+(a=r*u-e*o*l)*a),e*u+r*o*l),t=n,e=u,r=o}var t,e,r;Ga.point=function(i,u){t=i*Yo,e=Math.sin(u*=Yo),r=Math.cos(u),Ga.point=n},Ga.lineEnd=function(){Ga.point=Ga.lineEnd=b}}function we(n,t){function e(t,e){var r=Math.cos(t),i=Math.cos(e),u=n(r*i);return[u*i*Math.sin(t),u*Math.sin(e)]}return e.invert=function(n,e){var r=Math.sqrt(n*n+e*e),i=t(r),u=Math.sin(i),o=Math.cos(i);return[Math.atan2(n*u,r*o),Math.asin(r&&e*u/r)]},e}function Se(n,t){function e(n,t){o>0?-Io+Uo>t&&(t=-Io+Uo):t>Io-Uo&&(t=Io-Uo);var e=o/Math.pow(i(t),u);return[e*Math.sin(u*n),o-e*Math.cos(u*n)]}var r=Math.cos(n),i=function(n){return Math.tan(Fo/4+n/2)},u=n===t?Math.sin(n):Math.log(r/Math.cos(t))/Math.log(i(t)/i(n)),o=r*Math.pow(i(n),u)/u;return u?(e.invert=function(n,t){var e=o-t,r=K(u)*Math.sqrt(n*n+e*e);return[Math.atan2(n,e)/u,2*Math.atan(Math.pow(o/r,1/u))-Io]},e):Ne}function ke(n,t){function e(n,t){var e=u-t;return[e*Math.sin(i*n),u-e*Math.cos(i*n)]}var r=Math.cos(n),i=n===t?Math.sin(n):(r-Math.cos(t))/(t-n),u=r/i+n;return xo(i)i;i++){for(;r>1&&Q(n[e[r-2]],n[e[r-1]],n[i])<=0;)--r;e[r++]=i}return e.slice(0,r)}function qe(n,t){return n[0]-t[0]||n[1]-t[1]}function Te(n,t,e){return(e[0]-t[0])*(n[1]-t[1])<(e[1]-t[1])*(n[0]-t[0])}function Re(n,t,e,r){var i=n[0],u=e[0],o=t[0]-i,a=r[0]-u,l=n[1],c=e[1],f=t[1]-l,s=r[1]-c,h=(a*(l-c)-s*(i-u))/(s*o-a*f);return[i+h*o,l+h*f]}function De(n){var t=n[0],e=n[n.length-1];return!(t[0]-e[0]||t[1]-e[1])}function Pe(){rr(this),this.edge=this.site=this.circle=null}function Ue(n){var t=cl.pop()||new Pe;return t.site=n,t}function je(n){Be(n),ol.remove(n),cl.push(n),rr(n)}function Fe(n){var t=n.circle,e=t.x,r=t.cy,i={x:e,y:r},u=n.P,o=n.N,a=[n];je(n);for(var l=u;l.circle&&xo(e-l.circle.x)f;++f)c=a[f],l=a[f-1],nr(c.edge,l.site,c.site,i);l=a[0],c=a[s-1],c.edge=Ke(l.site,c.site,null,i),$e(l),$e(c)}function He(n){for(var t,e,r,i,u=n.x,o=n.y,a=ol._;a;)if(r=Oe(a,o)-u,r>Uo)a=a.L;else{if(i=u-Ie(a,o),!(i>Uo)){r>-Uo?(t=a.P,e=a):i>-Uo?(t=a,e=a.N):t=e=a;break}if(!a.R){t=a;break}a=a.R}var l=Ue(n);if(ol.insert(t,l),t||e){if(t===e)return Be(t),e=Ue(t.site),ol.insert(l,e),l.edge=e.edge=Ke(t.site,l.site),$e(t),void $e(e);if(!e)return void(l.edge=Ke(t.site,l.site));Be(t),Be(e);var c=t.site,f=c.x,s=c.y,h=n.x-f,p=n.y-s,g=e.site,v=g.x-f,d=g.y-s,y=2*(h*d-p*v),m=h*h+p*p,M=v*v+d*d,x={x:(d*m-p*M)/y+f,y:(h*M-v*m)/y+s};nr(e.edge,c,g,x),l.edge=Ke(c,n,null,x),e.edge=Ke(n,g,null,x),$e(t),$e(e)}}function Oe(n,t){var e=n.site,r=e.x,i=e.y,u=i-t;if(!u)return r;var o=n.P;if(!o)return-(1/0);e=o.site;var a=e.x,l=e.y,c=l-t;if(!c)return a;var f=a-r,s=1/u-1/c,h=f/c;return s?(-h+Math.sqrt(h*h-2*s*(f*f/(-2*c)-l+c/2+i-u/2)))/s+r:(r+a)/2}function Ie(n,t){var e=n.N;if(e)return Oe(e,t);var r=n.site;return r.y===t?r.x:1/0}function Ye(n){this.site=n,this.edges=[]}function Ze(n){for(var t,e,r,i,u,o,a,l,c,f,s=n[0][0],h=n[1][0],p=n[0][1],g=n[1][1],v=ul,d=v.length;d--;)if(u=v[d],u&&u.prepare())for(a=u.edges,l=a.length,o=0;l>o;)f=a[o].end(),r=f.x,i=f.y,c=a[++o%l].start(),t=c.x,e=c.y,(xo(r-t)>Uo||xo(i-e)>Uo)&&(a.splice(o,0,new tr(Qe(u.site,f,xo(r-s)Uo?{x:s,y:xo(t-s)Uo?{x:xo(e-g)Uo?{x:h,y:xo(t-h)Uo?{x:xo(e-p)=-jo)){var p=l*l+c*c,g=f*f+s*s,v=(s*p-c*g)/h,d=(l*g-f*p)/h,s=d+a,y=fl.pop()||new Xe;y.arc=n,y.site=i,y.x=v+o,y.y=s+Math.sqrt(v*v+d*d),y.cy=s,n.circle=y;for(var m=null,M=ll._;M;)if(y.yd||d>=a)return;if(h>g){if(u){if(u.y>=c)return}else u={x:d,y:l};e={x:d,y:c}}else{if(u){if(u.yr||r>1)if(h>g){if(u){if(u.y>=c)return}else u={x:(l-i)/r,y:l};e={x:(c-i)/r,y:c}}else{if(u){if(u.yp){if(u){if(u.x>=a)return}else u={x:o,y:r*o+i};e={x:a,y:r*a+i}}else{if(u){if(u.xu||s>o||r>h||i>p)){if(g=n.point){var g,v=t-n.x,d=e-n.y,y=v*v+d*d;if(l>y){var m=Math.sqrt(l=y);r=t-m,i=e-m,u=t+m,o=e+m,a=g}}for(var M=n.nodes,x=.5*(f+h),b=.5*(s+p),_=t>=x,w=e>=b,S=w<<1|_,k=S+4;k>S;++S)if(n=M[3&S])switch(3&S){case 0:c(n,f,s,x,b);break;case 1:c(n,x,s,h,b);break;case 2:c(n,f,b,x,p);break;case 3:c(n,x,b,h,p)}}}(n,r,i,u,o),a}function vr(n,t){n=ao.rgb(n),t=ao.rgb(t);var e=n.r,r=n.g,i=n.b,u=t.r-e,o=t.g-r,a=t.b-i;return function(n){return"#"+bn(Math.round(e+u*n))+bn(Math.round(r+o*n))+bn(Math.round(i+a*n))}}function dr(n,t){var e,r={},i={};for(e in n)e in t?r[e]=Mr(n[e],t[e]):i[e]=n[e];for(e in t)e in n||(i[e]=t[e]);return function(n){for(e in r)i[e]=r[e](n);return i}}function yr(n,t){return n=+n,t=+t,function(e){return n*(1-e)+t*e}}function mr(n,t){var e,r,i,u=hl.lastIndex=pl.lastIndex=0,o=-1,a=[],l=[];for(n+="",t+="";(e=hl.exec(n))&&(r=pl.exec(t));)(i=r.index)>u&&(i=t.slice(u,i),a[o]?a[o]+=i:a[++o]=i),(e=e[0])===(r=r[0])?a[o]?a[o]+=r:a[++o]=r:(a[++o]=null,l.push({i:o,x:yr(e,r)})),u=pl.lastIndex;return ur;++r)a[(e=l[r]).i]=e.x(n);return a.join("")})}function Mr(n,t){for(var e,r=ao.interpolators.length;--r>=0&&!(e=ao.interpolators[r](n,t)););return e}function xr(n,t){var e,r=[],i=[],u=n.length,o=t.length,a=Math.min(n.length,t.length);for(e=0;a>e;++e)r.push(Mr(n[e],t[e]));for(;u>e;++e)i[e]=n[e];for(;o>e;++e)i[e]=t[e];return function(n){for(e=0;a>e;++e)i[e]=r[e](n);return i}}function br(n){return function(t){return 0>=t?0:t>=1?1:n(t)}}function _r(n){return function(t){return 1-n(1-t)}}function wr(n){return function(t){return.5*(.5>t?n(2*t):2-n(2-2*t))}}function Sr(n){return n*n}function kr(n){return n*n*n}function Nr(n){if(0>=n)return 0;if(n>=1)return 1;var t=n*n,e=t*n;return 4*(.5>n?e:3*(n-t)+e-.75)}function Er(n){return function(t){return Math.pow(t,n)}}function Ar(n){return 1-Math.cos(n*Io)}function Cr(n){return Math.pow(2,10*(n-1))}function zr(n){return 1-Math.sqrt(1-n*n)}function Lr(n,t){var e;return arguments.length<2&&(t=.45),arguments.length?e=t/Ho*Math.asin(1/n):(n=1,e=t/4),function(r){return 1+n*Math.pow(2,-10*r)*Math.sin((r-e)*Ho/t)}}function qr(n){return n||(n=1.70158),function(t){return t*t*((n+1)*t-n)}}function Tr(n){return 1/2.75>n?7.5625*n*n:2/2.75>n?7.5625*(n-=1.5/2.75)*n+.75:2.5/2.75>n?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375}function Rr(n,t){n=ao.hcl(n),t=ao.hcl(t);var e=n.h,r=n.c,i=n.l,u=t.h-e,o=t.c-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.c:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return sn(e+u*n,r+o*n,i+a*n)+""}}function Dr(n,t){n=ao.hsl(n),t=ao.hsl(t);var e=n.h,r=n.s,i=n.l,u=t.h-e,o=t.s-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.s:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return cn(e+u*n,r+o*n,i+a*n)+""}}function Pr(n,t){n=ao.lab(n),t=ao.lab(t);var e=n.l,r=n.a,i=n.b,u=t.l-e,o=t.a-r,a=t.b-i;return function(n){return pn(e+u*n,r+o*n,i+a*n)+""}}function Ur(n,t){return t-=n,function(e){return Math.round(n+t*e)}}function jr(n){var t=[n.a,n.b],e=[n.c,n.d],r=Hr(t),i=Fr(t,e),u=Hr(Or(e,t,-i))||0;t[0]*e[1]180?t+=360:t-n>180&&(n+=360),r.push({i:e.push(Ir(e)+"rotate(",null,")")-2,x:yr(n,t)})):t&&e.push(Ir(e)+"rotate("+t+")")}function Vr(n,t,e,r){n!==t?r.push({i:e.push(Ir(e)+"skewX(",null,")")-2,x:yr(n,t)}):t&&e.push(Ir(e)+"skewX("+t+")")}function Xr(n,t,e,r){if(n[0]!==t[0]||n[1]!==t[1]){var i=e.push(Ir(e)+"scale(",null,",",null,")");r.push({i:i-4,x:yr(n[0],t[0])},{i:i-2,x:yr(n[1],t[1])})}else 1===t[0]&&1===t[1]||e.push(Ir(e)+"scale("+t+")")}function $r(n,t){var e=[],r=[];return n=ao.transform(n),t=ao.transform(t),Yr(n.translate,t.translate,e,r),Zr(n.rotate,t.rotate,e,r),Vr(n.skew,t.skew,e,r),Xr(n.scale,t.scale,e,r),n=t=null,function(n){for(var t,i=-1,u=r.length;++i=0;)e.push(i[r])}function oi(n,t){for(var e=[n],r=[];null!=(n=e.pop());)if(r.push(n),(u=n.children)&&(i=u.length))for(var i,u,o=-1;++oe;++e)(t=n[e][1])>i&&(r=e,i=t);return r}function yi(n){return n.reduce(mi,0)}function mi(n,t){return n+t[1]}function Mi(n,t){return xi(n,Math.ceil(Math.log(t.length)/Math.LN2+1))}function xi(n,t){for(var e=-1,r=+n[0],i=(n[1]-r)/t,u=[];++e<=t;)u[e]=i*e+r;return u}function bi(n){return[ao.min(n),ao.max(n)]}function _i(n,t){return n.value-t.value}function wi(n,t){var e=n._pack_next;n._pack_next=t,t._pack_prev=n,t._pack_next=e,e._pack_prev=t}function Si(n,t){n._pack_next=t,t._pack_prev=n}function ki(n,t){var e=t.x-n.x,r=t.y-n.y,i=n.r+t.r;return.999*i*i>e*e+r*r}function Ni(n){function t(n){f=Math.min(n.x-n.r,f),s=Math.max(n.x+n.r,s),h=Math.min(n.y-n.r,h),p=Math.max(n.y+n.r,p)}if((e=n.children)&&(c=e.length)){var e,r,i,u,o,a,l,c,f=1/0,s=-(1/0),h=1/0,p=-(1/0);if(e.forEach(Ei),r=e[0],r.x=-r.r,r.y=0,t(r),c>1&&(i=e[1],i.x=i.r,i.y=0,t(i),c>2))for(u=e[2],zi(r,i,u),t(u),wi(r,u),r._pack_prev=u,wi(u,i),i=r._pack_next,o=3;c>o;o++){zi(r,i,u=e[o]);var g=0,v=1,d=1;for(a=i._pack_next;a!==i;a=a._pack_next,v++)if(ki(a,u)){g=1;break}if(1==g)for(l=r._pack_prev;l!==a._pack_prev&&!ki(l,u);l=l._pack_prev,d++);g?(d>v||v==d&&i.ro;o++)u=e[o],u.x-=y,u.y-=m,M=Math.max(M,u.r+Math.sqrt(u.x*u.x+u.y*u.y));n.r=M,e.forEach(Ai)}}function Ei(n){n._pack_next=n._pack_prev=n}function Ai(n){delete n._pack_next,delete n._pack_prev}function Ci(n,t,e,r){var i=n.children;if(n.x=t+=r*n.x,n.y=e+=r*n.y,n.r*=r,i)for(var u=-1,o=i.length;++u=0;)t=i[u],t.z+=e,t.m+=e,e+=t.s+(r+=t.c)}function Pi(n,t,e){return n.a.parent===t.parent?n.a:e}function Ui(n){return 1+ao.max(n,function(n){return n.y})}function ji(n){return n.reduce(function(n,t){return n+t.x},0)/n.length}function Fi(n){var t=n.children;return t&&t.length?Fi(t[0]):n}function Hi(n){var t,e=n.children;return e&&(t=e.length)?Hi(e[t-1]):n}function Oi(n){return{x:n.x,y:n.y,dx:n.dx,dy:n.dy}}function Ii(n,t){var e=n.x+t[3],r=n.y+t[0],i=n.dx-t[1]-t[3],u=n.dy-t[0]-t[2];return 0>i&&(e+=i/2,i=0),0>u&&(r+=u/2,u=0),{x:e,y:r,dx:i,dy:u}}function Yi(n){var t=n[0],e=n[n.length-1];return e>t?[t,e]:[e,t]}function Zi(n){return n.rangeExtent?n.rangeExtent():Yi(n.range())}function Vi(n,t,e,r){var i=e(n[0],n[1]),u=r(t[0],t[1]);return function(n){return u(i(n))}}function Xi(n,t){var e,r=0,i=n.length-1,u=n[r],o=n[i];return u>o&&(e=r,r=i,i=e,e=u,u=o,o=e),n[r]=t.floor(u),n[i]=t.ceil(o),n}function $i(n){return n?{floor:function(t){return Math.floor(t/n)*n},ceil:function(t){return Math.ceil(t/n)*n}}:Sl}function Bi(n,t,e,r){var i=[],u=[],o=0,a=Math.min(n.length,t.length)-1;for(n[a]2?Bi:Vi,l=r?Wr:Br;return o=i(n,t,l,e),a=i(t,n,l,Mr),u}function u(n){return o(n)}var o,a;return u.invert=function(n){return a(n)},u.domain=function(t){return arguments.length?(n=t.map(Number),i()):n},u.range=function(n){return arguments.length?(t=n,i()):t},u.rangeRound=function(n){return u.range(n).interpolate(Ur)},u.clamp=function(n){return arguments.length?(r=n,i()):r},u.interpolate=function(n){return arguments.length?(e=n,i()):e},u.ticks=function(t){return Qi(n,t)},u.tickFormat=function(t,e){return nu(n,t,e)},u.nice=function(t){return Gi(n,t),i()},u.copy=function(){return Wi(n,t,e,r)},i()}function Ji(n,t){return ao.rebind(n,t,"range","rangeRound","interpolate","clamp")}function Gi(n,t){return Xi(n,$i(Ki(n,t)[2])),Xi(n,$i(Ki(n,t)[2])),n}function Ki(n,t){null==t&&(t=10);var e=Yi(n),r=e[1]-e[0],i=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),u=t/r*i;return.15>=u?i*=10:.35>=u?i*=5:.75>=u&&(i*=2),e[0]=Math.ceil(e[0]/i)*i,e[1]=Math.floor(e[1]/i)*i+.5*i,e[2]=i,e}function Qi(n,t){return ao.range.apply(ao,Ki(n,t))}function nu(n,t,e){var r=Ki(n,t);if(e){var i=ha.exec(e);if(i.shift(),"s"===i[8]){var u=ao.formatPrefix(Math.max(xo(r[0]),xo(r[1])));return i[7]||(i[7]="."+tu(u.scale(r[2]))),i[8]="f",e=ao.format(i.join("")),function(n){return e(u.scale(n))+u.symbol}}i[7]||(i[7]="."+eu(i[8],r)),e=i.join("")}else e=",."+tu(r[2])+"f";return ao.format(e)}function tu(n){return-Math.floor(Math.log(n)/Math.LN10+.01)}function eu(n,t){var e=tu(t[2]);return n in kl?Math.abs(e-tu(Math.max(xo(t[0]),xo(t[1]))))+ +("e"!==n):e-2*("%"===n)}function ru(n,t,e,r){function i(n){return(e?Math.log(0>n?0:n):-Math.log(n>0?0:-n))/Math.log(t)}function u(n){return e?Math.pow(t,n):-Math.pow(t,-n)}function o(t){return n(i(t))}return o.invert=function(t){return u(n.invert(t))},o.domain=function(t){return arguments.length?(e=t[0]>=0,n.domain((r=t.map(Number)).map(i)),o):r},o.base=function(e){return arguments.length?(t=+e,n.domain(r.map(i)),o):t},o.nice=function(){var t=Xi(r.map(i),e?Math:El);return n.domain(t),r=t.map(u),o},o.ticks=function(){var n=Yi(r),o=[],a=n[0],l=n[1],c=Math.floor(i(a)),f=Math.ceil(i(l)),s=t%1?2:t;if(isFinite(f-c)){if(e){for(;f>c;c++)for(var h=1;s>h;h++)o.push(u(c)*h);o.push(u(c))}else for(o.push(u(c));c++0;h--)o.push(u(c)*h);for(c=0;o[c]l;f--);o=o.slice(c,f)}return o},o.tickFormat=function(n,e){if(!arguments.length)return Nl;arguments.length<2?e=Nl:"function"!=typeof e&&(e=ao.format(e));var r=Math.max(1,t*n/o.ticks().length);return function(n){var o=n/u(Math.round(i(n)));return t-.5>o*t&&(o*=t),r>=o?e(n):""}},o.copy=function(){return ru(n.copy(),t,e,r)},Ji(o,n)}function iu(n,t,e){function r(t){return n(i(t))}var i=uu(t),u=uu(1/t);return r.invert=function(t){return u(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain((e=t.map(Number)).map(i)),r):e},r.ticks=function(n){return Qi(e,n)},r.tickFormat=function(n,t){return nu(e,n,t)},r.nice=function(n){return r.domain(Gi(e,n))},r.exponent=function(o){return arguments.length?(i=uu(t=o),u=uu(1/t),n.domain(e.map(i)),r):t},r.copy=function(){return iu(n.copy(),t,e)},Ji(r,n)}function uu(n){return function(t){return 0>t?-Math.pow(-t,n):Math.pow(t,n)}}function ou(n,t){function e(e){return u[((i.get(e)||("range"===t.t?i.set(e,n.push(e)):NaN))-1)%u.length]}function r(t,e){return ao.range(n.length).map(function(n){return t+e*n})}var i,u,o;return e.domain=function(r){if(!arguments.length)return n;n=[],i=new c;for(var u,o=-1,a=r.length;++oe?[NaN,NaN]:[e>0?a[e-1]:n[0],et?NaN:t/u+n,[t,t+1/u]},r.copy=function(){return lu(n,t,e)},i()}function cu(n,t){function e(e){return e>=e?t[ao.bisect(n,e)]:void 0}return e.domain=function(t){return arguments.length?(n=t,e):n},e.range=function(n){return arguments.length?(t=n,e):t},e.invertExtent=function(e){return e=t.indexOf(e),[n[e-1],n[e]]},e.copy=function(){return cu(n,t)},e}function fu(n){function t(n){return+n}return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=e.map(t),t):n},t.ticks=function(t){return Qi(n,t)},t.tickFormat=function(t,e){return nu(n,t,e)},t.copy=function(){return fu(n)},t}function su(){return 0}function hu(n){return n.innerRadius}function pu(n){return n.outerRadius}function gu(n){return n.startAngle}function vu(n){return n.endAngle}function du(n){return n&&n.padAngle}function yu(n,t,e,r){return(n-e)*t-(t-r)*n>0?0:1}function mu(n,t,e,r,i){var u=n[0]-t[0],o=n[1]-t[1],a=(i?r:-r)/Math.sqrt(u*u+o*o),l=a*o,c=-a*u,f=n[0]+l,s=n[1]+c,h=t[0]+l,p=t[1]+c,g=(f+h)/2,v=(s+p)/2,d=h-f,y=p-s,m=d*d+y*y,M=e-r,x=f*p-h*s,b=(0>y?-1:1)*Math.sqrt(Math.max(0,M*M*m-x*x)),_=(x*y-d*b)/m,w=(-x*d-y*b)/m,S=(x*y+d*b)/m,k=(-x*d+y*b)/m,N=_-g,E=w-v,A=S-g,C=k-v;return N*N+E*E>A*A+C*C&&(_=S,w=k),[[_-l,w-c],[_*e/M,w*e/M]]}function Mu(n){function t(t){function o(){c.push("M",u(n(f),a))}for(var l,c=[],f=[],s=-1,h=t.length,p=En(e),g=En(r);++s1?n.join("L"):n+"Z"}function bu(n){return n.join("L")+"Z"}function _u(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t1&&i.push("H",r[0]),i.join("")}function wu(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t1){a=t[1],u=n[l],l++,r+="C"+(i[0]+o[0])+","+(i[1]+o[1])+","+(u[0]-a[0])+","+(u[1]-a[1])+","+u[0]+","+u[1];for(var c=2;c9&&(i=3*t/Math.sqrt(i),o[a]=i*e,o[a+1]=i*r));for(a=-1;++a<=l;)i=(n[Math.min(l,a+1)][0]-n[Math.max(0,a-1)][0])/(6*(1+o[a]*o[a])),u.push([i||0,o[a]*i||0]);return u}function Fu(n){return n.length<3?xu(n):n[0]+Au(n,ju(n))}function Hu(n){for(var t,e,r,i=-1,u=n.length;++i=t?o(n-t):void(f.c=o)}function o(e){var i=g.active,u=g[i];u&&(u.timer.c=null,u.timer.t=NaN,--g.count,delete g[i],u.event&&u.event.interrupt.call(n,n.__data__,u.index));for(var o in g)if(r>+o){var c=g[o];c.timer.c=null,c.timer.t=NaN,--g.count,delete g[o]}f.c=a,qn(function(){return f.c&&a(e||1)&&(f.c=null,f.t=NaN),1},0,l),g.active=r,v.event&&v.event.start.call(n,n.__data__,t),p=[],v.tween.forEach(function(e,r){(r=r.call(n,n.__data__,t))&&p.push(r)}),h=v.ease,s=v.duration}function a(i){for(var u=i/s,o=h(u),a=p.length;a>0;)p[--a].call(n,o);return u>=1?(v.event&&v.event.end.call(n,n.__data__,t),--g.count?delete g[r]:delete n[e],1):void 0}var l,f,s,h,p,g=n[e]||(n[e]={active:0,count:0}),v=g[r];v||(l=i.time,f=qn(u,0,l),v=g[r]={tween:new c,time:l,timer:f,delay:i.delay,duration:i.duration,ease:i.ease,index:t},i=null,++g.count)}function no(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate("+(isFinite(r)?r:e(n))+",0)"})}function to(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate(0,"+(isFinite(r)?r:e(n))+")"})}function eo(n){return n.toISOString()}function ro(n,t,e){function r(t){return n(t)}function i(n,e){var r=n[1]-n[0],i=r/e,u=ao.bisect(Kl,i);return u==Kl.length?[t.year,Ki(n.map(function(n){return n/31536e6}),e)[2]]:u?t[i/Kl[u-1]1?{floor:function(t){for(;e(t=n.floor(t));)t=io(t-1);return t},ceil:function(t){for(;e(t=n.ceil(t));)t=io(+t+1);return t}}:n))},r.ticks=function(n,t){var e=Yi(r.domain()),u=null==n?i(e,10):"number"==typeof n?i(e,n):!n.range&&[{range:n},t];return u&&(n=u[0],t=u[1]),n.range(e[0],io(+e[1]+1),1>t?1:t)},r.tickFormat=function(){return e},r.copy=function(){return ro(n.copy(),t,e)},Ji(r,n)}function io(n){return new Date(n)}function uo(n){return JSON.parse(n.responseText)}function oo(n){var t=fo.createRange();return t.selectNode(fo.body),t.createContextualFragment(n.responseText)}var ao={version:"3.5.17"},lo=[].slice,co=function(n){return lo.call(n)},fo=this.document;if(fo)try{co(fo.documentElement.childNodes)[0].nodeType}catch(so){co=function(n){for(var t=n.length,e=new Array(t);t--;)e[t]=n[t];return e}}if(Date.now||(Date.now=function(){return+new Date}),fo)try{fo.createElement("DIV").style.setProperty("opacity",0,"")}catch(ho){var po=this.Element.prototype,go=po.setAttribute,vo=po.setAttributeNS,yo=this.CSSStyleDeclaration.prototype,mo=yo.setProperty;po.setAttribute=function(n,t){go.call(this,n,t+"")},po.setAttributeNS=function(n,t,e){vo.call(this,n,t,e+"")},yo.setProperty=function(n,t,e){mo.call(this,n,t+"",e)}}ao.ascending=e,ao.descending=function(n,t){return n>t?-1:t>n?1:t>=n?0:NaN},ao.min=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i=r){e=r;break}for(;++ir&&(e=r)}else{for(;++i=r){e=r;break}for(;++ir&&(e=r)}return e},ao.max=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i=r){e=r;break}for(;++ie&&(e=r)}else{for(;++i=r){e=r;break}for(;++ie&&(e=r)}return e},ao.extent=function(n,t){var e,r,i,u=-1,o=n.length;if(1===arguments.length){for(;++u=r){e=i=r;break}for(;++ur&&(e=r),r>i&&(i=r))}else{for(;++u=r){e=i=r;break}for(;++ur&&(e=r),r>i&&(i=r))}return[e,i]},ao.sum=function(n,t){var e,r=0,u=n.length,o=-1;if(1===arguments.length)for(;++o1?l/(f-1):void 0},ao.deviation=function(){var n=ao.variance.apply(this,arguments);return n?Math.sqrt(n):n};var Mo=u(e);ao.bisectLeft=Mo.left,ao.bisect=ao.bisectRight=Mo.right,ao.bisector=function(n){return u(1===n.length?function(t,r){return e(n(t),r)}:n)},ao.shuffle=function(n,t,e){(u=arguments.length)<3&&(e=n.length,2>u&&(t=0));for(var r,i,u=e-t;u;)i=Math.random()*u--|0,r=n[u+t],n[u+t]=n[i+t],n[i+t]=r;return n},ao.permute=function(n,t){for(var e=t.length,r=new Array(e);e--;)r[e]=n[t[e]];return r},ao.pairs=function(n){for(var t,e=0,r=n.length-1,i=n[0],u=new Array(0>r?0:r);r>e;)u[e]=[t=i,i=n[++e]];return u},ao.transpose=function(n){if(!(i=n.length))return[];for(var t=-1,e=ao.min(n,o),r=new Array(e);++t=0;)for(r=n[i],t=r.length;--t>=0;)e[--o]=r[t];return e};var xo=Math.abs;ao.range=function(n,t,e){if(arguments.length<3&&(e=1,arguments.length<2&&(t=n,n=0)),(t-n)/e===1/0)throw new Error("infinite range");var r,i=[],u=a(xo(e)),o=-1;if(n*=u,t*=u,e*=u,0>e)for(;(r=n+e*++o)>t;)i.push(r/u);else for(;(r=n+e*++o)=u.length)return r?r.call(i,o):e?o.sort(e):o;for(var l,f,s,h,p=-1,g=o.length,v=u[a++],d=new c;++p=u.length)return n;var r=[],i=o[e++];return n.forEach(function(n,i){r.push({key:n,values:t(i,e)})}),i?r.sort(function(n,t){return i(n.key,t.key)}):r}var e,r,i={},u=[],o=[];return i.map=function(t,e){return n(e,t,0)},i.entries=function(e){return t(n(ao.map,e,0),0)},i.key=function(n){return u.push(n),i},i.sortKeys=function(n){return o[u.length-1]=n,i},i.sortValues=function(n){return e=n,i},i.rollup=function(n){return r=n,i},i},ao.set=function(n){var t=new y;if(n)for(var e=0,r=n.length;r>e;++e)t.add(n[e]);return t},l(y,{has:h,add:function(n){return this._[f(n+="")]=!0,n},remove:p,values:g,size:v,empty:d,forEach:function(n){for(var t in this._)n.call(this,s(t))}}),ao.behavior={},ao.rebind=function(n,t){for(var e,r=1,i=arguments.length;++r=0&&(r=n.slice(e+1),n=n.slice(0,e)),n)return arguments.length<2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},ao.event=null,ao.requote=function(n){return n.replace(So,"\\$&")};var So=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,ko={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},No=function(n,t){return t.querySelector(n)},Eo=function(n,t){return t.querySelectorAll(n)},Ao=function(n,t){var e=n.matches||n[x(n,"matchesSelector")];return(Ao=function(n,t){return e.call(n,t)})(n,t)};"function"==typeof Sizzle&&(No=function(n,t){return Sizzle(n,t)[0]||null},Eo=Sizzle,Ao=Sizzle.matchesSelector),ao.selection=function(){return ao.select(fo.documentElement)};var Co=ao.selection.prototype=[];Co.select=function(n){var t,e,r,i,u=[];n=A(n);for(var o=-1,a=this.length;++o=0&&"xmlns"!==(e=n.slice(0,t))&&(n=n.slice(t+1)),Lo.hasOwnProperty(e)?{space:Lo[e],local:n}:n}},Co.attr=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node();return n=ao.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(z(t,n[t]));return this}return this.each(z(n,t))},Co.classed=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node(),r=(n=T(n)).length,i=-1;if(t=e.classList){for(;++ii){if("string"!=typeof n){2>i&&(e="");for(r in n)this.each(P(r,n[r],e));return this}if(2>i){var u=this.node();return t(u).getComputedStyle(u,null).getPropertyValue(n)}r=""}return this.each(P(n,e,r))},Co.property=function(n,t){if(arguments.length<2){if("string"==typeof n)return this.node()[n];for(t in n)this.each(U(t,n[t]));return this}return this.each(U(n,t))},Co.text=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.textContent=null==t?"":t}:null==n?function(){this.textContent=""}:function(){this.textContent=n}):this.node().textContent},Co.html=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.innerHTML=null==t?"":t}:null==n?function(){this.innerHTML=""}:function(){this.innerHTML=n}):this.node().innerHTML},Co.append=function(n){return n=j(n),this.select(function(){return this.appendChild(n.apply(this,arguments))})},Co.insert=function(n,t){return n=j(n),t=A(t),this.select(function(){return this.insertBefore(n.apply(this,arguments),t.apply(this,arguments)||null)})},Co.remove=function(){return this.each(F)},Co.data=function(n,t){function e(n,e){var r,i,u,o=n.length,s=e.length,h=Math.min(o,s),p=new Array(s),g=new Array(s),v=new Array(o);if(t){var d,y=new c,m=new Array(o);for(r=-1;++rr;++r)g[r]=H(e[r]);for(;o>r;++r)v[r]=n[r]}g.update=p,g.parentNode=p.parentNode=v.parentNode=n.parentNode,a.push(g),l.push(p),f.push(v)}var r,i,u=-1,o=this.length;if(!arguments.length){for(n=new Array(o=(r=this[0]).length);++uu;u++){i.push(t=[]),t.parentNode=(e=this[u]).parentNode;for(var a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return E(i)},Co.order=function(){for(var n=-1,t=this.length;++n=0;)(e=r[i])&&(u&&u!==e.nextSibling&&u.parentNode.insertBefore(e,u),u=e);return this},Co.sort=function(n){n=I.apply(this,arguments);for(var t=-1,e=this.length;++tn;n++)for(var e=this[n],r=0,i=e.length;i>r;r++){var u=e[r];if(u)return u}return null},Co.size=function(){var n=0;return Y(this,function(){++n}),n};var qo=[];ao.selection.enter=Z,ao.selection.enter.prototype=qo,qo.append=Co.append,qo.empty=Co.empty,qo.node=Co.node,qo.call=Co.call,qo.size=Co.size,qo.select=function(n){for(var t,e,r,i,u,o=[],a=-1,l=this.length;++ar){if("string"!=typeof n){2>r&&(t=!1);for(e in n)this.each(X(e,n[e],t));return this}if(2>r)return(r=this.node()["__on"+n])&&r._;e=!1}return this.each(X(n,t,e))};var To=ao.map({mouseenter:"mouseover",mouseleave:"mouseout"});fo&&To.forEach(function(n){"on"+n in fo&&To.remove(n)});var Ro,Do=0;ao.mouse=function(n){return J(n,k())};var Po=this.navigator&&/WebKit/.test(this.navigator.userAgent)?-1:0;ao.touch=function(n,t,e){if(arguments.length<3&&(e=t,t=k().changedTouches),t)for(var r,i=0,u=t.length;u>i;++i)if((r=t[i]).identifier===e)return J(n,r)},ao.behavior.drag=function(){function n(){this.on("mousedown.drag",u).on("touchstart.drag",o)}function e(n,t,e,u,o){return function(){function a(){var n,e,r=t(h,v);r&&(n=r[0]-M[0],e=r[1]-M[1],g|=n|e,M=r,p({type:"drag",x:r[0]+c[0],y:r[1]+c[1],dx:n,dy:e}))}function l(){t(h,v)&&(y.on(u+d,null).on(o+d,null),m(g),p({type:"dragend"}))}var c,f=this,s=ao.event.target.correspondingElement||ao.event.target,h=f.parentNode,p=r.of(f,arguments),g=0,v=n(),d=".drag"+(null==v?"":"-"+v),y=ao.select(e(s)).on(u+d,a).on(o+d,l),m=W(s),M=t(h,v);i?(c=i.apply(f,arguments),c=[c.x-M[0],c.y-M[1]]):c=[0,0],p({type:"dragstart"})}}var r=N(n,"drag","dragstart","dragend"),i=null,u=e(b,ao.mouse,t,"mousemove","mouseup"),o=e(G,ao.touch,m,"touchmove","touchend");return n.origin=function(t){return arguments.length?(i=t,n):i},ao.rebind(n,r,"on")},ao.touches=function(n,t){return arguments.length<2&&(t=k().touches),t?co(t).map(function(t){var e=J(n,t);return e.identifier=t.identifier,e}):[]};var Uo=1e-6,jo=Uo*Uo,Fo=Math.PI,Ho=2*Fo,Oo=Ho-Uo,Io=Fo/2,Yo=Fo/180,Zo=180/Fo,Vo=Math.SQRT2,Xo=2,$o=4;ao.interpolateZoom=function(n,t){var e,r,i=n[0],u=n[1],o=n[2],a=t[0],l=t[1],c=t[2],f=a-i,s=l-u,h=f*f+s*s;if(jo>h)r=Math.log(c/o)/Vo,e=function(n){return[i+n*f,u+n*s,o*Math.exp(Vo*n*r)]};else{var p=Math.sqrt(h),g=(c*c-o*o+$o*h)/(2*o*Xo*p),v=(c*c-o*o-$o*h)/(2*c*Xo*p),d=Math.log(Math.sqrt(g*g+1)-g),y=Math.log(Math.sqrt(v*v+1)-v);r=(y-d)/Vo,e=function(n){var t=n*r,e=rn(d),a=o/(Xo*p)*(e*un(Vo*t+d)-en(d));return[i+a*f,u+a*s,o*e/rn(Vo*t+d)]}}return e.duration=1e3*r,e},ao.behavior.zoom=function(){function n(n){n.on(L,s).on(Wo+".zoom",p).on("dblclick.zoom",g).on(R,h)}function e(n){return[(n[0]-k.x)/k.k,(n[1]-k.y)/k.k]}function r(n){return[n[0]*k.k+k.x,n[1]*k.k+k.y]}function i(n){k.k=Math.max(A[0],Math.min(A[1],n))}function u(n,t){t=r(t),k.x+=n[0]-t[0],k.y+=n[1]-t[1]}function o(t,e,r,o){t.__chart__={x:k.x,y:k.y,k:k.k},i(Math.pow(2,o)),u(d=e,r),t=ao.select(t),C>0&&(t=t.transition().duration(C)),t.call(n.event)}function a(){b&&b.domain(x.range().map(function(n){return(n-k.x)/k.k}).map(x.invert)),w&&w.domain(_.range().map(function(n){return(n-k.y)/k.k}).map(_.invert))}function l(n){z++||n({type:"zoomstart"})}function c(n){a(),n({type:"zoom",scale:k.k,translate:[k.x,k.y]})}function f(n){--z||(n({type:"zoomend"}),d=null)}function s(){function n(){a=1,u(ao.mouse(i),h),c(o)}function r(){s.on(q,null).on(T,null),p(a),f(o)}var i=this,o=D.of(i,arguments),a=0,s=ao.select(t(i)).on(q,n).on(T,r),h=e(ao.mouse(i)),p=W(i);Il.call(i),l(o)}function h(){function n(){var n=ao.touches(g);return p=k.k,n.forEach(function(n){n.identifier in d&&(d[n.identifier]=e(n))}),n}function t(){var t=ao.event.target;ao.select(t).on(x,r).on(b,a),_.push(t);for(var e=ao.event.changedTouches,i=0,u=e.length;u>i;++i)d[e[i].identifier]=null;var l=n(),c=Date.now();if(1===l.length){if(500>c-M){var f=l[0];o(g,f,d[f.identifier],Math.floor(Math.log(k.k)/Math.LN2)+1),S()}M=c}else if(l.length>1){var f=l[0],s=l[1],h=f[0]-s[0],p=f[1]-s[1];y=h*h+p*p}}function r(){var n,t,e,r,o=ao.touches(g);Il.call(g);for(var a=0,l=o.length;l>a;++a,r=null)if(e=o[a],r=d[e.identifier]){if(t)break;n=e,t=r}if(r){var f=(f=e[0]-n[0])*f+(f=e[1]-n[1])*f,s=y&&Math.sqrt(f/y);n=[(n[0]+e[0])/2,(n[1]+e[1])/2],t=[(t[0]+r[0])/2,(t[1]+r[1])/2],i(s*p)}M=null,u(n,t),c(v)}function a(){if(ao.event.touches.length){for(var t=ao.event.changedTouches,e=0,r=t.length;r>e;++e)delete d[t[e].identifier];for(var i in d)return void n()}ao.selectAll(_).on(m,null),w.on(L,s).on(R,h),N(),f(v)}var p,g=this,v=D.of(g,arguments),d={},y=0,m=".zoom-"+ao.event.changedTouches[0].identifier,x="touchmove"+m,b="touchend"+m,_=[],w=ao.select(g),N=W(g);t(),l(v),w.on(L,null).on(R,t)}function p(){var n=D.of(this,arguments);m?clearTimeout(m):(Il.call(this),v=e(d=y||ao.mouse(this)),l(n)),m=setTimeout(function(){m=null,f(n)},50),S(),i(Math.pow(2,.002*Bo())*k.k),u(d,v),c(n)}function g(){var n=ao.mouse(this),t=Math.log(k.k)/Math.LN2;o(this,n,e(n),ao.event.shiftKey?Math.ceil(t)-1:Math.floor(t)+1)}var v,d,y,m,M,x,b,_,w,k={x:0,y:0,k:1},E=[960,500],A=Jo,C=250,z=0,L="mousedown.zoom",q="mousemove.zoom",T="mouseup.zoom",R="touchstart.zoom",D=N(n,"zoomstart","zoom","zoomend");return Wo||(Wo="onwheel"in fo?(Bo=function(){return-ao.event.deltaY*(ao.event.deltaMode?120:1)},"wheel"):"onmousewheel"in fo?(Bo=function(){return ao.event.wheelDelta},"mousewheel"):(Bo=function(){return-ao.event.detail},"MozMousePixelScroll")),n.event=function(n){n.each(function(){var n=D.of(this,arguments),t=k;Hl?ao.select(this).transition().each("start.zoom",function(){k=this.__chart__||{x:0,y:0,k:1},l(n)}).tween("zoom:zoom",function(){var e=E[0],r=E[1],i=d?d[0]:e/2,u=d?d[1]:r/2,o=ao.interpolateZoom([(i-k.x)/k.k,(u-k.y)/k.k,e/k.k],[(i-t.x)/t.k,(u-t.y)/t.k,e/t.k]);return function(t){var r=o(t),a=e/r[2];this.__chart__=k={x:i-r[0]*a,y:u-r[1]*a,k:a},c(n)}}).each("interrupt.zoom",function(){f(n)}).each("end.zoom",function(){f(n)}):(this.__chart__=k,l(n),c(n),f(n))})},n.translate=function(t){return arguments.length?(k={x:+t[0],y:+t[1],k:k.k},a(),n):[k.x,k.y]},n.scale=function(t){return arguments.length?(k={x:k.x,y:k.y,k:null},i(+t),a(),n):k.k},n.scaleExtent=function(t){return arguments.length?(A=null==t?Jo:[+t[0],+t[1]],n):A},n.center=function(t){return arguments.length?(y=t&&[+t[0],+t[1]],n):y},n.size=function(t){return arguments.length?(E=t&&[+t[0],+t[1]],n):E},n.duration=function(t){return arguments.length?(C=+t,n):C},n.x=function(t){return arguments.length?(b=t,x=t.copy(),k={x:0,y:0,k:1},n):b},n.y=function(t){return arguments.length?(w=t,_=t.copy(),k={x:0,y:0,k:1},n):w},ao.rebind(n,D,"on")};var Bo,Wo,Jo=[0,1/0];ao.color=an,an.prototype.toString=function(){return this.rgb()+""},ao.hsl=ln;var Go=ln.prototype=new an;Go.brighter=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,this.l/n)},Go.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,n*this.l)},Go.rgb=function(){return cn(this.h,this.s,this.l)},ao.hcl=fn;var Ko=fn.prototype=new an;Ko.brighter=function(n){return new fn(this.h,this.c,Math.min(100,this.l+Qo*(arguments.length?n:1)))},Ko.darker=function(n){return new fn(this.h,this.c,Math.max(0,this.l-Qo*(arguments.length?n:1)))},Ko.rgb=function(){return sn(this.h,this.c,this.l).rgb()},ao.lab=hn;var Qo=18,na=.95047,ta=1,ea=1.08883,ra=hn.prototype=new an;ra.brighter=function(n){return new hn(Math.min(100,this.l+Qo*(arguments.length?n:1)),this.a,this.b)},ra.darker=function(n){return new hn(Math.max(0,this.l-Qo*(arguments.length?n:1)),this.a,this.b)},ra.rgb=function(){return pn(this.l,this.a,this.b)},ao.rgb=mn;var ia=mn.prototype=new an;ia.brighter=function(n){n=Math.pow(.7,arguments.length?n:1);var t=this.r,e=this.g,r=this.b,i=30;return t||e||r?(t&&i>t&&(t=i),e&&i>e&&(e=i),r&&i>r&&(r=i),new mn(Math.min(255,t/n),Math.min(255,e/n),Math.min(255,r/n))):new mn(i,i,i)},ia.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new mn(n*this.r,n*this.g,n*this.b)},ia.hsl=function(){return wn(this.r,this.g,this.b)},ia.toString=function(){return"#"+bn(this.r)+bn(this.g)+bn(this.b)};var ua=ao.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});ua.forEach(function(n,t){ua.set(n,Mn(t))}),ao.functor=En,ao.xhr=An(m),ao.dsv=function(n,t){function e(n,e,u){arguments.length<3&&(u=e,e=null);var o=Cn(n,t,null==e?r:i(e),u);return o.row=function(n){return arguments.length?o.response(null==(e=n)?r:i(n)):e},o}function r(n){return e.parse(n.responseText)}function i(n){return function(t){return e.parse(t.responseText,n)}}function u(t){return t.map(o).join(n)}function o(n){return a.test(n)?'"'+n.replace(/\"/g,'""')+'"':n}var a=new RegExp('["'+n+"\n]"),l=n.charCodeAt(0);return e.parse=function(n,t){var r;return e.parseRows(n,function(n,e){if(r)return r(n,e-1);var i=new Function("d","return {"+n.map(function(n,t){return JSON.stringify(n)+": d["+t+"]"}).join(",")+"}");r=t?function(n,e){return t(i(n),e)}:i})},e.parseRows=function(n,t){function e(){if(f>=c)return o;if(i)return i=!1,u;var t=f;if(34===n.charCodeAt(t)){for(var e=t;e++f;){var r=n.charCodeAt(f++),a=1;if(10===r)i=!0;else if(13===r)i=!0,10===n.charCodeAt(f)&&(++f,++a);else if(r!==l)continue;return n.slice(t,f-a)}return n.slice(t)}for(var r,i,u={},o={},a=[],c=n.length,f=0,s=0;(r=e())!==o;){for(var h=[];r!==u&&r!==o;)h.push(r),r=e();t&&null==(h=t(h,s++))||a.push(h)}return a},e.format=function(t){if(Array.isArray(t[0]))return e.formatRows(t);var r=new y,i=[];return t.forEach(function(n){for(var t in n)r.has(t)||i.push(r.add(t))}),[i.map(o).join(n)].concat(t.map(function(t){return i.map(function(n){return o(t[n])}).join(n)})).join("\n")},e.formatRows=function(n){return n.map(u).join("\n")},e},ao.csv=ao.dsv(",","text/csv"),ao.tsv=ao.dsv(" ","text/tab-separated-values");var oa,aa,la,ca,fa=this[x(this,"requestAnimationFrame")]||function(n){setTimeout(n,17)};ao.timer=function(){qn.apply(this,arguments)},ao.timer.flush=function(){Rn(),Dn()},ao.round=function(n,t){return t?Math.round(n*(t=Math.pow(10,t)))/t:Math.round(n)};var sa=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"].map(Un);ao.formatPrefix=function(n,t){var e=0;return(n=+n)&&(0>n&&(n*=-1),t&&(n=ao.round(n,Pn(n,t))),e=1+Math.floor(1e-12+Math.log(n)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((e-1)/3)))),sa[8+e/3]};var ha=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,pa=ao.map({b:function(n){return n.toString(2)},c:function(n){return String.fromCharCode(n)},o:function(n){return n.toString(8)},x:function(n){return n.toString(16)},X:function(n){return n.toString(16).toUpperCase()},g:function(n,t){return n.toPrecision(t)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},r:function(n,t){return(n=ao.round(n,Pn(n,t))).toFixed(Math.max(0,Math.min(20,Pn(n*(1+1e-15),t))))}}),ga=ao.time={},va=Date;Hn.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){da.setUTCDate.apply(this._,arguments)},setDay:function(){da.setUTCDay.apply(this._,arguments)},setFullYear:function(){da.setUTCFullYear.apply(this._,arguments)},setHours:function(){da.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){da.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){da.setUTCMinutes.apply(this._,arguments)},setMonth:function(){da.setUTCMonth.apply(this._,arguments)},setSeconds:function(){da.setUTCSeconds.apply(this._,arguments)},setTime:function(){da.setTime.apply(this._,arguments)}};var da=Date.prototype;ga.year=On(function(n){return n=ga.day(n),n.setMonth(0,1),n},function(n,t){n.setFullYear(n.getFullYear()+t)},function(n){return n.getFullYear()}),ga.years=ga.year.range,ga.years.utc=ga.year.utc.range,ga.day=On(function(n){var t=new va(2e3,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t},function(n,t){n.setDate(n.getDate()+t)},function(n){return n.getDate()-1}),ga.days=ga.day.range,ga.days.utc=ga.day.utc.range,ga.dayOfYear=function(n){var t=ga.year(n);return Math.floor((n-t-6e4*(n.getTimezoneOffset()-t.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(n,t){t=7-t;var e=ga[n]=On(function(n){return(n=ga.day(n)).setDate(n.getDate()-(n.getDay()+t)%7),n},function(n,t){n.setDate(n.getDate()+7*Math.floor(t))},function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)-(e!==t)});ga[n+"s"]=e.range,ga[n+"s"].utc=e.utc.range,ga[n+"OfYear"]=function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)}}),ga.week=ga.sunday,ga.weeks=ga.sunday.range,ga.weeks.utc=ga.sunday.utc.range,ga.weekOfYear=ga.sundayOfYear;var ya={"-":"",_:" ",0:"0"},ma=/^\s*\d+/,Ma=/^%/;ao.locale=function(n){return{numberFormat:jn(n),timeFormat:Yn(n)}};var xa=ao.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"], +shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});ao.format=xa.numberFormat,ao.geo={},ft.prototype={s:0,t:0,add:function(n){st(n,this.t,ba),st(ba.s,this.s,this),this.s?this.t+=ba.t:this.s=ba.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var ba=new ft;ao.geo.stream=function(n,t){n&&_a.hasOwnProperty(n.type)?_a[n.type](n,t):ht(n,t)};var _a={Feature:function(n,t){ht(n.geometry,t)},FeatureCollection:function(n,t){for(var e=n.features,r=-1,i=e.length;++rn?4*Fo+n:n,Na.lineStart=Na.lineEnd=Na.point=b}};ao.geo.bounds=function(){function n(n,t){M.push(x=[f=n,h=n]),s>t&&(s=t),t>p&&(p=t)}function t(t,e){var r=dt([t*Yo,e*Yo]);if(y){var i=mt(y,r),u=[i[1],-i[0],0],o=mt(u,i);bt(o),o=_t(o);var l=t-g,c=l>0?1:-1,v=o[0]*Zo*c,d=xo(l)>180;if(d^(v>c*g&&c*t>v)){var m=o[1]*Zo;m>p&&(p=m)}else if(v=(v+360)%360-180,d^(v>c*g&&c*t>v)){var m=-o[1]*Zo;s>m&&(s=m)}else s>e&&(s=e),e>p&&(p=e);d?g>t?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t):h>=f?(f>t&&(f=t),t>h&&(h=t)):t>g?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t)}else n(t,e);y=r,g=t}function e(){b.point=t}function r(){x[0]=f,x[1]=h,b.point=n,y=null}function i(n,e){if(y){var r=n-g;m+=xo(r)>180?r+(r>0?360:-360):r}else v=n,d=e;Na.point(n,e),t(n,e)}function u(){Na.lineStart()}function o(){i(v,d),Na.lineEnd(),xo(m)>Uo&&(f=-(h=180)),x[0]=f,x[1]=h,y=null}function a(n,t){return(t-=n)<0?t+360:t}function l(n,t){return n[0]-t[0]}function c(n,t){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:nka?(f=-(h=180),s=-(p=90)):m>Uo?p=90:-Uo>m&&(s=-90),x[0]=f,x[1]=h}};return function(n){p=h=-(f=s=1/0),M=[],ao.geo.stream(n,b);var t=M.length;if(t){M.sort(l);for(var e,r=1,i=M[0],u=[i];t>r;++r)e=M[r],c(e[0],i)||c(e[1],i)?(a(i[0],e[1])>a(i[0],i[1])&&(i[1]=e[1]),a(e[0],i[1])>a(i[0],i[1])&&(i[0]=e[0])):u.push(i=e);for(var o,e,g=-(1/0),t=u.length-1,r=0,i=u[t];t>=r;i=e,++r)e=u[r],(o=a(i[1],e[0]))>g&&(g=o,f=e[0],h=i[1])}return M=x=null,f===1/0||s===1/0?[[NaN,NaN],[NaN,NaN]]:[[f,s],[h,p]]}}(),ao.geo.centroid=function(n){Ea=Aa=Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,ja);var t=Da,e=Pa,r=Ua,i=t*t+e*e+r*r;return jo>i&&(t=qa,e=Ta,r=Ra,Uo>Aa&&(t=Ca,e=za,r=La),i=t*t+e*e+r*r,jo>i)?[NaN,NaN]:[Math.atan2(e,t)*Zo,tn(r/Math.sqrt(i))*Zo]};var Ea,Aa,Ca,za,La,qa,Ta,Ra,Da,Pa,Ua,ja={sphere:b,point:St,lineStart:Nt,lineEnd:Et,polygonStart:function(){ja.lineStart=At},polygonEnd:function(){ja.lineStart=Nt}},Fa=Rt(zt,jt,Ht,[-Fo,-Fo/2]),Ha=1e9;ao.geo.clipExtent=function(){var n,t,e,r,i,u,o={stream:function(n){return i&&(i.valid=!1),i=u(n),i.valid=!0,i},extent:function(a){return arguments.length?(u=Zt(n=+a[0][0],t=+a[0][1],e=+a[1][0],r=+a[1][1]),i&&(i.valid=!1,i=null),o):[[n,t],[e,r]]}};return o.extent([[0,0],[960,500]])},(ao.geo.conicEqualArea=function(){return Vt(Xt)}).raw=Xt,ao.geo.albers=function(){return ao.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},ao.geo.albersUsa=function(){function n(n){var u=n[0],o=n[1];return t=null,e(u,o),t||(r(u,o),t)||i(u,o),t}var t,e,r,i,u=ao.geo.albers(),o=ao.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),a=ao.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),l={point:function(n,e){t=[n,e]}};return n.invert=function(n){var t=u.scale(),e=u.translate(),r=(n[0]-e[0])/t,i=(n[1]-e[1])/t;return(i>=.12&&.234>i&&r>=-.425&&-.214>r?o:i>=.166&&.234>i&&r>=-.214&&-.115>r?a:u).invert(n)},n.stream=function(n){var t=u.stream(n),e=o.stream(n),r=a.stream(n);return{point:function(n,i){t.point(n,i),e.point(n,i),r.point(n,i)},sphere:function(){t.sphere(),e.sphere(),r.sphere()},lineStart:function(){t.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){t.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){t.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){t.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},n.precision=function(t){return arguments.length?(u.precision(t),o.precision(t),a.precision(t),n):u.precision()},n.scale=function(t){return arguments.length?(u.scale(t),o.scale(.35*t),a.scale(t),n.translate(u.translate())):u.scale()},n.translate=function(t){if(!arguments.length)return u.translate();var c=u.scale(),f=+t[0],s=+t[1];return e=u.translate(t).clipExtent([[f-.455*c,s-.238*c],[f+.455*c,s+.238*c]]).stream(l).point,r=o.translate([f-.307*c,s+.201*c]).clipExtent([[f-.425*c+Uo,s+.12*c+Uo],[f-.214*c-Uo,s+.234*c-Uo]]).stream(l).point,i=a.translate([f-.205*c,s+.212*c]).clipExtent([[f-.214*c+Uo,s+.166*c+Uo],[f-.115*c-Uo,s+.234*c-Uo]]).stream(l).point,n},n.scale(1070)};var Oa,Ia,Ya,Za,Va,Xa,$a={point:b,lineStart:b,lineEnd:b,polygonStart:function(){Ia=0,$a.lineStart=$t},polygonEnd:function(){$a.lineStart=$a.lineEnd=$a.point=b,Oa+=xo(Ia/2)}},Ba={point:Bt,lineStart:b,lineEnd:b,polygonStart:b,polygonEnd:b},Wa={point:Gt,lineStart:Kt,lineEnd:Qt,polygonStart:function(){Wa.lineStart=ne},polygonEnd:function(){Wa.point=Gt,Wa.lineStart=Kt,Wa.lineEnd=Qt}};ao.geo.path=function(){function n(n){return n&&("function"==typeof a&&u.pointRadius(+a.apply(this,arguments)),o&&o.valid||(o=i(u)),ao.geo.stream(n,o)),u.result()}function t(){return o=null,n}var e,r,i,u,o,a=4.5;return n.area=function(n){return Oa=0,ao.geo.stream(n,i($a)),Oa},n.centroid=function(n){return Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,i(Wa)),Ua?[Da/Ua,Pa/Ua]:Ra?[qa/Ra,Ta/Ra]:La?[Ca/La,za/La]:[NaN,NaN]},n.bounds=function(n){return Va=Xa=-(Ya=Za=1/0),ao.geo.stream(n,i(Ba)),[[Ya,Za],[Va,Xa]]},n.projection=function(n){return arguments.length?(i=(e=n)?n.stream||re(n):m,t()):e},n.context=function(n){return arguments.length?(u=null==(r=n)?new Wt:new te(n),"function"!=typeof a&&u.pointRadius(a),t()):r},n.pointRadius=function(t){return arguments.length?(a="function"==typeof t?t:(u.pointRadius(+t),+t),n):a},n.projection(ao.geo.albersUsa()).context(null)},ao.geo.transform=function(n){return{stream:function(t){var e=new ie(t);for(var r in n)e[r]=n[r];return e}}},ie.prototype={point:function(n,t){this.stream.point(n,t)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},ao.geo.projection=oe,ao.geo.projectionMutator=ae,(ao.geo.equirectangular=function(){return oe(ce)}).raw=ce.invert=ce,ao.geo.rotation=function(n){function t(t){return t=n(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t}return n=se(n[0]%360*Yo,n[1]*Yo,n.length>2?n[2]*Yo:0),t.invert=function(t){return t=n.invert(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t},t},fe.invert=ce,ao.geo.circle=function(){function n(){var n="function"==typeof r?r.apply(this,arguments):r,t=se(-n[0]*Yo,-n[1]*Yo,0).invert,i=[];return e(null,null,1,{point:function(n,e){i.push(n=t(n,e)),n[0]*=Zo,n[1]*=Zo}}),{type:"Polygon",coordinates:[i]}}var t,e,r=[0,0],i=6;return n.origin=function(t){return arguments.length?(r=t,n):r},n.angle=function(r){return arguments.length?(e=ve((t=+r)*Yo,i*Yo),n):t},n.precision=function(r){return arguments.length?(e=ve(t*Yo,(i=+r)*Yo),n):i},n.angle(90)},ao.geo.distance=function(n,t){var e,r=(t[0]-n[0])*Yo,i=n[1]*Yo,u=t[1]*Yo,o=Math.sin(r),a=Math.cos(r),l=Math.sin(i),c=Math.cos(i),f=Math.sin(u),s=Math.cos(u);return Math.atan2(Math.sqrt((e=s*o)*e+(e=c*f-l*s*a)*e),l*f+c*s*a)},ao.geo.graticule=function(){function n(){return{type:"MultiLineString",coordinates:t()}}function t(){return ao.range(Math.ceil(u/d)*d,i,d).map(h).concat(ao.range(Math.ceil(c/y)*y,l,y).map(p)).concat(ao.range(Math.ceil(r/g)*g,e,g).filter(function(n){return xo(n%d)>Uo}).map(f)).concat(ao.range(Math.ceil(a/v)*v,o,v).filter(function(n){return xo(n%y)>Uo}).map(s))}var e,r,i,u,o,a,l,c,f,s,h,p,g=10,v=g,d=90,y=360,m=2.5;return n.lines=function(){return t().map(function(n){return{type:"LineString",coordinates:n}})},n.outline=function(){return{type:"Polygon",coordinates:[h(u).concat(p(l).slice(1),h(i).reverse().slice(1),p(c).reverse().slice(1))]}},n.extent=function(t){return arguments.length?n.majorExtent(t).minorExtent(t):n.minorExtent()},n.majorExtent=function(t){return arguments.length?(u=+t[0][0],i=+t[1][0],c=+t[0][1],l=+t[1][1],u>i&&(t=u,u=i,i=t),c>l&&(t=c,c=l,l=t),n.precision(m)):[[u,c],[i,l]]},n.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],a=+t[0][1],o=+t[1][1],r>e&&(t=r,r=e,e=t),a>o&&(t=a,a=o,o=t),n.precision(m)):[[r,a],[e,o]]},n.step=function(t){return arguments.length?n.majorStep(t).minorStep(t):n.minorStep()},n.majorStep=function(t){return arguments.length?(d=+t[0],y=+t[1],n):[d,y]},n.minorStep=function(t){return arguments.length?(g=+t[0],v=+t[1],n):[g,v]},n.precision=function(t){return arguments.length?(m=+t,f=ye(a,o,90),s=me(r,e,m),h=ye(c,l,90),p=me(u,i,m),n):m},n.majorExtent([[-180,-90+Uo],[180,90-Uo]]).minorExtent([[-180,-80-Uo],[180,80+Uo]])},ao.geo.greatArc=function(){function n(){return{type:"LineString",coordinates:[t||r.apply(this,arguments),e||i.apply(this,arguments)]}}var t,e,r=Me,i=xe;return n.distance=function(){return ao.geo.distance(t||r.apply(this,arguments),e||i.apply(this,arguments))},n.source=function(e){return arguments.length?(r=e,t="function"==typeof e?null:e,n):r},n.target=function(t){return arguments.length?(i=t,e="function"==typeof t?null:t,n):i},n.precision=function(){return arguments.length?n:0},n},ao.geo.interpolate=function(n,t){return be(n[0]*Yo,n[1]*Yo,t[0]*Yo,t[1]*Yo)},ao.geo.length=function(n){return Ja=0,ao.geo.stream(n,Ga),Ja};var Ja,Ga={sphere:b,point:b,lineStart:_e,lineEnd:b,polygonStart:b,polygonEnd:b},Ka=we(function(n){return Math.sqrt(2/(1+n))},function(n){return 2*Math.asin(n/2)});(ao.geo.azimuthalEqualArea=function(){return oe(Ka)}).raw=Ka;var Qa=we(function(n){var t=Math.acos(n);return t&&t/Math.sin(t)},m);(ao.geo.azimuthalEquidistant=function(){return oe(Qa)}).raw=Qa,(ao.geo.conicConformal=function(){return Vt(Se)}).raw=Se,(ao.geo.conicEquidistant=function(){return Vt(ke)}).raw=ke;var nl=we(function(n){return 1/n},Math.atan);(ao.geo.gnomonic=function(){return oe(nl)}).raw=nl,Ne.invert=function(n,t){return[n,2*Math.atan(Math.exp(t))-Io]},(ao.geo.mercator=function(){return Ee(Ne)}).raw=Ne;var tl=we(function(){return 1},Math.asin);(ao.geo.orthographic=function(){return oe(tl)}).raw=tl;var el=we(function(n){return 1/(1+n)},function(n){return 2*Math.atan(n)});(ao.geo.stereographic=function(){return oe(el)}).raw=el,Ae.invert=function(n,t){return[-t,2*Math.atan(Math.exp(n))-Io]},(ao.geo.transverseMercator=function(){var n=Ee(Ae),t=n.center,e=n.rotate;return n.center=function(n){return n?t([-n[1],n[0]]):(n=t(),[n[1],-n[0]])},n.rotate=function(n){return n?e([n[0],n[1],n.length>2?n[2]+90:90]):(n=e(),[n[0],n[1],n[2]-90])},e([0,0,90])}).raw=Ae,ao.geom={},ao.geom.hull=function(n){function t(n){if(n.length<3)return[];var t,i=En(e),u=En(r),o=n.length,a=[],l=[];for(t=0;o>t;t++)a.push([+i.call(this,n[t],t),+u.call(this,n[t],t),t]);for(a.sort(qe),t=0;o>t;t++)l.push([a[t][0],-a[t][1]]);var c=Le(a),f=Le(l),s=f[0]===c[0],h=f[f.length-1]===c[c.length-1],p=[];for(t=c.length-1;t>=0;--t)p.push(n[a[c[t]][2]]);for(t=+s;t=r&&c.x<=u&&c.y>=i&&c.y<=o?[[r,o],[u,o],[u,i],[r,i]]:[];f.point=n[a]}),t}function e(n){return n.map(function(n,t){return{x:Math.round(u(n,t)/Uo)*Uo,y:Math.round(o(n,t)/Uo)*Uo,i:t}})}var r=Ce,i=ze,u=r,o=i,a=sl;return n?t(n):(t.links=function(n){return ar(e(n)).edges.filter(function(n){return n.l&&n.r}).map(function(t){return{source:n[t.l.i],target:n[t.r.i]}})},t.triangles=function(n){var t=[];return ar(e(n)).cells.forEach(function(e,r){for(var i,u,o=e.site,a=e.edges.sort(Ve),l=-1,c=a.length,f=a[c-1].edge,s=f.l===o?f.r:f.l;++l=c,h=r>=f,p=h<<1|s;n.leaf=!1,n=n.nodes[p]||(n.nodes[p]=hr()),s?i=c:a=c,h?o=f:l=f,u(n,t,e,r,i,o,a,l)}var f,s,h,p,g,v,d,y,m,M=En(a),x=En(l);if(null!=t)v=t,d=e,y=r,m=i;else if(y=m=-(v=d=1/0),s=[],h=[],g=n.length,o)for(p=0;g>p;++p)f=n[p],f.xy&&(y=f.x),f.y>m&&(m=f.y),s.push(f.x),h.push(f.y);else for(p=0;g>p;++p){var b=+M(f=n[p],p),_=+x(f,p);v>b&&(v=b),d>_&&(d=_),b>y&&(y=b),_>m&&(m=_),s.push(b),h.push(_)}var w=y-v,S=m-d;w>S?m=d+w:y=v+S;var k=hr();if(k.add=function(n){u(k,n,+M(n,++p),+x(n,p),v,d,y,m)},k.visit=function(n){pr(n,k,v,d,y,m)},k.find=function(n){return gr(k,n[0],n[1],v,d,y,m)},p=-1,null==t){for(;++p=0?n.slice(0,t):n,r=t>=0?n.slice(t+1):"in";return e=vl.get(e)||gl,r=dl.get(r)||m,br(r(e.apply(null,lo.call(arguments,1))))},ao.interpolateHcl=Rr,ao.interpolateHsl=Dr,ao.interpolateLab=Pr,ao.interpolateRound=Ur,ao.transform=function(n){var t=fo.createElementNS(ao.ns.prefix.svg,"g");return(ao.transform=function(n){if(null!=n){t.setAttribute("transform",n);var e=t.transform.baseVal.consolidate()}return new jr(e?e.matrix:yl)})(n)},jr.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var yl={a:1,b:0,c:0,d:1,e:0,f:0};ao.interpolateTransform=$r,ao.layout={},ao.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++ea*a/y){if(v>l){var c=t.charge/l;n.px-=u*c,n.py-=o*c}return!0}if(t.point&&l&&v>l){var c=t.pointCharge/l;n.px-=u*c,n.py-=o*c}}return!t.charge}}function t(n){n.px=ao.event.x,n.py=ao.event.y,l.resume()}var e,r,i,u,o,a,l={},c=ao.dispatch("start","tick","end"),f=[1,1],s=.9,h=ml,p=Ml,g=-30,v=xl,d=.1,y=.64,M=[],x=[];return l.tick=function(){if((i*=.99)<.005)return e=null,c.end({type:"end",alpha:i=0}),!0;var t,r,l,h,p,v,y,m,b,_=M.length,w=x.length;for(r=0;w>r;++r)l=x[r],h=l.source,p=l.target,m=p.x-h.x,b=p.y-h.y,(v=m*m+b*b)&&(v=i*o[r]*((v=Math.sqrt(v))-u[r])/v,m*=v,b*=v,p.x-=m*(y=h.weight+p.weight?h.weight/(h.weight+p.weight):.5),p.y-=b*y,h.x+=m*(y=1-y),h.y+=b*y);if((y=i*d)&&(m=f[0]/2,b=f[1]/2,r=-1,y))for(;++r<_;)l=M[r],l.x+=(m-l.x)*y,l.y+=(b-l.y)*y;if(g)for(ri(t=ao.geom.quadtree(M),i,a),r=-1;++r<_;)(l=M[r]).fixed||t.visit(n(l));for(r=-1;++r<_;)l=M[r],l.fixed?(l.x=l.px,l.y=l.py):(l.x-=(l.px-(l.px=l.x))*s,l.y-=(l.py-(l.py=l.y))*s);c.tick({type:"tick",alpha:i})},l.nodes=function(n){return arguments.length?(M=n,l):M},l.links=function(n){return arguments.length?(x=n,l):x},l.size=function(n){return arguments.length?(f=n,l):f},l.linkDistance=function(n){return arguments.length?(h="function"==typeof n?n:+n,l):h},l.distance=l.linkDistance,l.linkStrength=function(n){return arguments.length?(p="function"==typeof n?n:+n,l):p},l.friction=function(n){return arguments.length?(s=+n,l):s},l.charge=function(n){return arguments.length?(g="function"==typeof n?n:+n,l):g},l.chargeDistance=function(n){return arguments.length?(v=n*n,l):Math.sqrt(v)},l.gravity=function(n){return arguments.length?(d=+n,l):d},l.theta=function(n){return arguments.length?(y=n*n,l):Math.sqrt(y)},l.alpha=function(n){return arguments.length?(n=+n,i?n>0?i=n:(e.c=null,e.t=NaN,e=null,c.end({type:"end",alpha:i=0})):n>0&&(c.start({type:"start",alpha:i=n}),e=qn(l.tick)),l):i},l.start=function(){function n(n,r){if(!e){for(e=new Array(i),l=0;i>l;++l)e[l]=[];for(l=0;c>l;++l){var u=x[l];e[u.source.index].push(u.target),e[u.target.index].push(u.source)}}for(var o,a=e[t],l=-1,f=a.length;++lt;++t)(r=M[t]).index=t,r.weight=0;for(t=0;c>t;++t)r=x[t],"number"==typeof r.source&&(r.source=M[r.source]),"number"==typeof r.target&&(r.target=M[r.target]),++r.source.weight,++r.target.weight;for(t=0;i>t;++t)r=M[t],isNaN(r.x)&&(r.x=n("x",s)),isNaN(r.y)&&(r.y=n("y",v)),isNaN(r.px)&&(r.px=r.x),isNaN(r.py)&&(r.py=r.y);if(u=[],"function"==typeof h)for(t=0;c>t;++t)u[t]=+h.call(this,x[t],t);else for(t=0;c>t;++t)u[t]=h;if(o=[],"function"==typeof p)for(t=0;c>t;++t)o[t]=+p.call(this,x[t],t);else for(t=0;c>t;++t)o[t]=p;if(a=[],"function"==typeof g)for(t=0;i>t;++t)a[t]=+g.call(this,M[t],t);else for(t=0;i>t;++t)a[t]=g;return l.resume()},l.resume=function(){return l.alpha(.1)},l.stop=function(){return l.alpha(0)},l.drag=function(){return r||(r=ao.behavior.drag().origin(m).on("dragstart.force",Qr).on("drag.force",t).on("dragend.force",ni)),arguments.length?void this.on("mouseover.force",ti).on("mouseout.force",ei).call(r):r},ao.rebind(l,c,"on")};var ml=20,Ml=1,xl=1/0;ao.layout.hierarchy=function(){function n(i){var u,o=[i],a=[];for(i.depth=0;null!=(u=o.pop());)if(a.push(u),(c=e.call(n,u,u.depth))&&(l=c.length)){for(var l,c,f;--l>=0;)o.push(f=c[l]),f.parent=u,f.depth=u.depth+1;r&&(u.value=0),u.children=c}else r&&(u.value=+r.call(n,u,u.depth)||0),delete u.children;return oi(i,function(n){var e,i;t&&(e=n.children)&&e.sort(t),r&&(i=n.parent)&&(i.value+=n.value)}),a}var t=ci,e=ai,r=li;return n.sort=function(e){return arguments.length?(t=e,n):t},n.children=function(t){return arguments.length?(e=t,n):e},n.value=function(t){return arguments.length?(r=t,n):r},n.revalue=function(t){return r&&(ui(t,function(n){n.children&&(n.value=0)}),oi(t,function(t){var e;t.children||(t.value=+r.call(n,t,t.depth)||0),(e=t.parent)&&(e.value+=t.value)})),t},n},ao.layout.partition=function(){function n(t,e,r,i){var u=t.children;if(t.x=e,t.y=t.depth*i,t.dx=r,t.dy=i,u&&(o=u.length)){var o,a,l,c=-1;for(r=t.value?r/t.value:0;++cs?-1:1),g=ao.sum(c),v=g?(s-l*p)/g:0,d=ao.range(l),y=[];return null!=e&&d.sort(e===bl?function(n,t){return c[t]-c[n]}:function(n,t){return e(o[n],o[t])}),d.forEach(function(n){y[n]={data:o[n],value:a=c[n],startAngle:f,endAngle:f+=a*v+p,padAngle:h}}),y}var t=Number,e=bl,r=0,i=Ho,u=0;return n.value=function(e){return arguments.length?(t=e,n):t},n.sort=function(t){return arguments.length?(e=t,n):e},n.startAngle=function(t){return arguments.length?(r=t,n):r},n.endAngle=function(t){return arguments.length?(i=t,n):i},n.padAngle=function(t){return arguments.length?(u=t,n):u},n};var bl={};ao.layout.stack=function(){function n(a,l){if(!(h=a.length))return a;var c=a.map(function(e,r){return t.call(n,e,r)}),f=c.map(function(t){return t.map(function(t,e){return[u.call(n,t,e),o.call(n,t,e)]})}),s=e.call(n,f,l);c=ao.permute(c,s),f=ao.permute(f,s);var h,p,g,v,d=r.call(n,f,l),y=c[0].length;for(g=0;y>g;++g)for(i.call(n,c[0][g],v=d[g],f[0][g][1]),p=1;h>p;++p)i.call(n,c[p][g],v+=f[p-1][g][1],f[p][g][1]);return a}var t=m,e=gi,r=vi,i=pi,u=si,o=hi;return n.values=function(e){return arguments.length?(t=e,n):t},n.order=function(t){return arguments.length?(e="function"==typeof t?t:_l.get(t)||gi,n):e},n.offset=function(t){return arguments.length?(r="function"==typeof t?t:wl.get(t)||vi,n):r},n.x=function(t){return arguments.length?(u=t,n):u},n.y=function(t){return arguments.length?(o=t,n):o},n.out=function(t){return arguments.length?(i=t,n):i},n};var _l=ao.map({"inside-out":function(n){var t,e,r=n.length,i=n.map(di),u=n.map(yi),o=ao.range(r).sort(function(n,t){return i[n]-i[t]}),a=0,l=0,c=[],f=[];for(t=0;r>t;++t)e=o[t],l>a?(a+=u[e],c.push(e)):(l+=u[e],f.push(e));return f.reverse().concat(c)},reverse:function(n){return ao.range(n.length).reverse()},"default":gi}),wl=ao.map({silhouette:function(n){var t,e,r,i=n.length,u=n[0].length,o=[],a=0,l=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];r>a&&(a=r),o.push(r)}for(e=0;u>e;++e)l[e]=(a-o[e])/2;return l},wiggle:function(n){var t,e,r,i,u,o,a,l,c,f=n.length,s=n[0],h=s.length,p=[];for(p[0]=l=c=0,e=1;h>e;++e){for(t=0,i=0;f>t;++t)i+=n[t][e][1];for(t=0,u=0,a=s[e][0]-s[e-1][0];f>t;++t){for(r=0,o=(n[t][e][1]-n[t][e-1][1])/(2*a);t>r;++r)o+=(n[r][e][1]-n[r][e-1][1])/a;u+=o*n[t][e][1]}p[e]=l-=i?u/i*a:0,c>l&&(c=l)}for(e=0;h>e;++e)p[e]-=c;return p},expand:function(n){var t,e,r,i=n.length,u=n[0].length,o=1/i,a=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];if(r)for(t=0;i>t;t++)n[t][e][1]/=r;else for(t=0;i>t;t++)n[t][e][1]=o}for(e=0;u>e;++e)a[e]=0;return a},zero:vi});ao.layout.histogram=function(){function n(n,u){for(var o,a,l=[],c=n.map(e,this),f=r.call(this,c,u),s=i.call(this,f,c,u),u=-1,h=c.length,p=s.length-1,g=t?1:1/h;++u0)for(u=-1;++u=f[0]&&a<=f[1]&&(o=l[ao.bisect(s,a,1,p)-1],o.y+=g,o.push(n[u]));return l}var t=!0,e=Number,r=bi,i=Mi;return n.value=function(t){return arguments.length?(e=t,n):e},n.range=function(t){return arguments.length?(r=En(t),n):r},n.bins=function(t){return arguments.length?(i="number"==typeof t?function(n){return xi(n,t)}:En(t),n):i},n.frequency=function(e){return arguments.length?(t=!!e,n):t},n},ao.layout.pack=function(){function n(n,u){var o=e.call(this,n,u),a=o[0],l=i[0],c=i[1],f=null==t?Math.sqrt:"function"==typeof t?t:function(){return t};if(a.x=a.y=0,oi(a,function(n){n.r=+f(n.value)}),oi(a,Ni),r){var s=r*(t?1:Math.max(2*a.r/l,2*a.r/c))/2;oi(a,function(n){n.r+=s}),oi(a,Ni),oi(a,function(n){n.r-=s})}return Ci(a,l/2,c/2,t?1:1/Math.max(2*a.r/l,2*a.r/c)),o}var t,e=ao.layout.hierarchy().sort(_i),r=0,i=[1,1];return n.size=function(t){return arguments.length?(i=t,n):i},n.radius=function(e){return arguments.length?(t=null==e||"function"==typeof e?e:+e,n):t},n.padding=function(t){return arguments.length?(r=+t,n):r},ii(n,e)},ao.layout.tree=function(){function n(n,i){var f=o.call(this,n,i),s=f[0],h=t(s);if(oi(h,e),h.parent.m=-h.z,ui(h,r),c)ui(s,u);else{var p=s,g=s,v=s;ui(s,function(n){n.xg.x&&(g=n),n.depth>v.depth&&(v=n)});var d=a(p,g)/2-p.x,y=l[0]/(g.x+a(g,p)/2+d),m=l[1]/(v.depth||1);ui(s,function(n){n.x=(n.x+d)*y,n.y=n.depth*m})}return f}function t(n){for(var t,e={A:null,children:[n]},r=[e];null!=(t=r.pop());)for(var i,u=t.children,o=0,a=u.length;a>o;++o)r.push((u[o]=i={_:u[o],parent:t,children:(i=u[o].children)&&i.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:o}).a=i);return e.children[0]}function e(n){var t=n.children,e=n.parent.children,r=n.i?e[n.i-1]:null;if(t.length){Di(n);var u=(t[0].z+t[t.length-1].z)/2;r?(n.z=r.z+a(n._,r._),n.m=n.z-u):n.z=u}else r&&(n.z=r.z+a(n._,r._));n.parent.A=i(n,r,n.parent.A||e[0])}function r(n){n._.x=n.z+n.parent.m,n.m+=n.parent.m}function i(n,t,e){if(t){for(var r,i=n,u=n,o=t,l=i.parent.children[0],c=i.m,f=u.m,s=o.m,h=l.m;o=Ti(o),i=qi(i),o&&i;)l=qi(l),u=Ti(u),u.a=n,r=o.z+s-i.z-c+a(o._,i._),r>0&&(Ri(Pi(o,n,e),n,r),c+=r,f+=r),s+=o.m,c+=i.m,h+=l.m,f+=u.m;o&&!Ti(u)&&(u.t=o,u.m+=s-f),i&&!qi(l)&&(l.t=i,l.m+=c-h,e=n)}return e}function u(n){n.x*=l[0],n.y=n.depth*l[1]}var o=ao.layout.hierarchy().sort(null).value(null),a=Li,l=[1,1],c=null;return n.separation=function(t){return arguments.length?(a=t,n):a},n.size=function(t){return arguments.length?(c=null==(l=t)?u:null,n):c?null:l},n.nodeSize=function(t){return arguments.length?(c=null==(l=t)?null:u,n):c?l:null},ii(n,o)},ao.layout.cluster=function(){function n(n,u){var o,a=t.call(this,n,u),l=a[0],c=0;oi(l,function(n){var t=n.children;t&&t.length?(n.x=ji(t),n.y=Ui(t)):(n.x=o?c+=e(n,o):0,n.y=0,o=n)});var f=Fi(l),s=Hi(l),h=f.x-e(f,s)/2,p=s.x+e(s,f)/2;return oi(l,i?function(n){n.x=(n.x-l.x)*r[0],n.y=(l.y-n.y)*r[1]}:function(n){n.x=(n.x-h)/(p-h)*r[0],n.y=(1-(l.y?n.y/l.y:1))*r[1]}),a}var t=ao.layout.hierarchy().sort(null).value(null),e=Li,r=[1,1],i=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(i=null==(r=t),n):i?null:r},n.nodeSize=function(t){return arguments.length?(i=null!=(r=t),n):i?r:null},ii(n,t)},ao.layout.treemap=function(){function n(n,t){for(var e,r,i=-1,u=n.length;++it?0:t),e.area=isNaN(r)||0>=r?0:r}function t(e){var u=e.children;if(u&&u.length){var o,a,l,c=s(e),f=[],h=u.slice(),g=1/0,v="slice"===p?c.dx:"dice"===p?c.dy:"slice-dice"===p?1&e.depth?c.dy:c.dx:Math.min(c.dx,c.dy);for(n(h,c.dx*c.dy/e.value),f.area=0;(l=h.length)>0;)f.push(o=h[l-1]),f.area+=o.area,"squarify"!==p||(a=r(f,v))<=g?(h.pop(),g=a):(f.area-=f.pop().area,i(f,v,c,!1),v=Math.min(c.dx,c.dy),f.length=f.area=0,g=1/0);f.length&&(i(f,v,c,!0),f.length=f.area=0),u.forEach(t)}}function e(t){var r=t.children;if(r&&r.length){var u,o=s(t),a=r.slice(),l=[];for(n(a,o.dx*o.dy/t.value),l.area=0;u=a.pop();)l.push(u),l.area+=u.area,null!=u.z&&(i(l,u.z?o.dx:o.dy,o,!a.length),l.length=l.area=0);r.forEach(e)}}function r(n,t){for(var e,r=n.area,i=0,u=1/0,o=-1,a=n.length;++oe&&(u=e),e>i&&(i=e));return r*=r,t*=t,r?Math.max(t*i*g/r,r/(t*u*g)):1/0}function i(n,t,e,r){var i,u=-1,o=n.length,a=e.x,c=e.y,f=t?l(n.area/t):0; +if(t==e.dx){for((r||f>e.dy)&&(f=e.dy);++ue.dx)&&(f=e.dx);++ue&&(t=1),1>e&&(n=0),function(){var e,r,i;do e=2*Math.random()-1,r=2*Math.random()-1,i=e*e+r*r;while(!i||i>1);return n+t*e*Math.sqrt(-2*Math.log(i)/i)}},logNormal:function(){var n=ao.random.normal.apply(ao,arguments);return function(){return Math.exp(n())}},bates:function(n){var t=ao.random.irwinHall(n);return function(){return t()/n}},irwinHall:function(n){return function(){for(var t=0,e=0;n>e;e++)t+=Math.random();return t}}},ao.scale={};var Sl={floor:m,ceil:m};ao.scale.linear=function(){return Wi([0,1],[0,1],Mr,!1)};var kl={s:1,g:1,p:1,r:1,e:1};ao.scale.log=function(){return ru(ao.scale.linear().domain([0,1]),10,!0,[1,10])};var Nl=ao.format(".0e"),El={floor:function(n){return-Math.ceil(-n)},ceil:function(n){return-Math.floor(-n)}};ao.scale.pow=function(){return iu(ao.scale.linear(),1,[0,1])},ao.scale.sqrt=function(){return ao.scale.pow().exponent(.5)},ao.scale.ordinal=function(){return ou([],{t:"range",a:[[]]})},ao.scale.category10=function(){return ao.scale.ordinal().range(Al)},ao.scale.category20=function(){return ao.scale.ordinal().range(Cl)},ao.scale.category20b=function(){return ao.scale.ordinal().range(zl)},ao.scale.category20c=function(){return ao.scale.ordinal().range(Ll)};var Al=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(xn),Cl=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(xn),zl=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(xn),Ll=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(xn);ao.scale.quantile=function(){return au([],[])},ao.scale.quantize=function(){return lu(0,1,[0,1])},ao.scale.threshold=function(){return cu([.5],[0,1])},ao.scale.identity=function(){return fu([0,1])},ao.svg={},ao.svg.arc=function(){function n(){var n=Math.max(0,+e.apply(this,arguments)),c=Math.max(0,+r.apply(this,arguments)),f=o.apply(this,arguments)-Io,s=a.apply(this,arguments)-Io,h=Math.abs(s-f),p=f>s?0:1;if(n>c&&(g=c,c=n,n=g),h>=Oo)return t(c,p)+(n?t(n,1-p):"")+"Z";var g,v,d,y,m,M,x,b,_,w,S,k,N=0,E=0,A=[];if((y=(+l.apply(this,arguments)||0)/2)&&(d=u===ql?Math.sqrt(n*n+c*c):+u.apply(this,arguments),p||(E*=-1),c&&(E=tn(d/c*Math.sin(y))),n&&(N=tn(d/n*Math.sin(y)))),c){m=c*Math.cos(f+E),M=c*Math.sin(f+E),x=c*Math.cos(s-E),b=c*Math.sin(s-E);var C=Math.abs(s-f-2*E)<=Fo?0:1;if(E&&yu(m,M,x,b)===p^C){var z=(f+s)/2;m=c*Math.cos(z),M=c*Math.sin(z),x=b=null}}else m=M=0;if(n){_=n*Math.cos(s-N),w=n*Math.sin(s-N),S=n*Math.cos(f+N),k=n*Math.sin(f+N);var L=Math.abs(f-s+2*N)<=Fo?0:1;if(N&&yu(_,w,S,k)===1-p^L){var q=(f+s)/2;_=n*Math.cos(q),w=n*Math.sin(q),S=k=null}}else _=w=0;if(h>Uo&&(g=Math.min(Math.abs(c-n)/2,+i.apply(this,arguments)))>.001){v=c>n^p?0:1;var T=g,R=g;if(Fo>h){var D=null==S?[_,w]:null==x?[m,M]:Re([m,M],[S,k],[x,b],[_,w]),P=m-D[0],U=M-D[1],j=x-D[0],F=b-D[1],H=1/Math.sin(Math.acos((P*j+U*F)/(Math.sqrt(P*P+U*U)*Math.sqrt(j*j+F*F)))/2),O=Math.sqrt(D[0]*D[0]+D[1]*D[1]);R=Math.min(g,(n-O)/(H-1)),T=Math.min(g,(c-O)/(H+1))}if(null!=x){var I=mu(null==S?[_,w]:[S,k],[m,M],c,T,p),Y=mu([x,b],[_,w],c,T,p);g===T?A.push("M",I[0],"A",T,",",T," 0 0,",v," ",I[1],"A",c,",",c," 0 ",1-p^yu(I[1][0],I[1][1],Y[1][0],Y[1][1]),",",p," ",Y[1],"A",T,",",T," 0 0,",v," ",Y[0]):A.push("M",I[0],"A",T,",",T," 0 1,",v," ",Y[0])}else A.push("M",m,",",M);if(null!=S){var Z=mu([m,M],[S,k],n,-R,p),V=mu([_,w],null==x?[m,M]:[x,b],n,-R,p);g===R?A.push("L",V[0],"A",R,",",R," 0 0,",v," ",V[1],"A",n,",",n," 0 ",p^yu(V[1][0],V[1][1],Z[1][0],Z[1][1]),",",1-p," ",Z[1],"A",R,",",R," 0 0,",v," ",Z[0]):A.push("L",V[0],"A",R,",",R," 0 0,",v," ",Z[0])}else A.push("L",_,",",w)}else A.push("M",m,",",M),null!=x&&A.push("A",c,",",c," 0 ",C,",",p," ",x,",",b),A.push("L",_,",",w),null!=S&&A.push("A",n,",",n," 0 ",L,",",1-p," ",S,",",k);return A.push("Z"),A.join("")}function t(n,t){return"M0,"+n+"A"+n+","+n+" 0 1,"+t+" 0,"+-n+"A"+n+","+n+" 0 1,"+t+" 0,"+n}var e=hu,r=pu,i=su,u=ql,o=gu,a=vu,l=du;return n.innerRadius=function(t){return arguments.length?(e=En(t),n):e},n.outerRadius=function(t){return arguments.length?(r=En(t),n):r},n.cornerRadius=function(t){return arguments.length?(i=En(t),n):i},n.padRadius=function(t){return arguments.length?(u=t==ql?ql:En(t),n):u},n.startAngle=function(t){return arguments.length?(o=En(t),n):o},n.endAngle=function(t){return arguments.length?(a=En(t),n):a},n.padAngle=function(t){return arguments.length?(l=En(t),n):l},n.centroid=function(){var n=(+e.apply(this,arguments)+ +r.apply(this,arguments))/2,t=(+o.apply(this,arguments)+ +a.apply(this,arguments))/2-Io;return[Math.cos(t)*n,Math.sin(t)*n]},n};var ql="auto";ao.svg.line=function(){return Mu(m)};var Tl=ao.map({linear:xu,"linear-closed":bu,step:_u,"step-before":wu,"step-after":Su,basis:zu,"basis-open":Lu,"basis-closed":qu,bundle:Tu,cardinal:Eu,"cardinal-open":ku,"cardinal-closed":Nu,monotone:Fu});Tl.forEach(function(n,t){t.key=n,t.closed=/-closed$/.test(n)});var Rl=[0,2/3,1/3,0],Dl=[0,1/3,2/3,0],Pl=[0,1/6,2/3,1/6];ao.svg.line.radial=function(){var n=Mu(Hu);return n.radius=n.x,delete n.x,n.angle=n.y,delete n.y,n},wu.reverse=Su,Su.reverse=wu,ao.svg.area=function(){return Ou(m)},ao.svg.area.radial=function(){var n=Ou(Hu);return n.radius=n.x,delete n.x,n.innerRadius=n.x0,delete n.x0,n.outerRadius=n.x1,delete n.x1,n.angle=n.y,delete n.y,n.startAngle=n.y0,delete n.y0,n.endAngle=n.y1,delete n.y1,n},ao.svg.chord=function(){function n(n,a){var l=t(this,u,n,a),c=t(this,o,n,a);return"M"+l.p0+r(l.r,l.p1,l.a1-l.a0)+(e(l,c)?i(l.r,l.p1,l.r,l.p0):i(l.r,l.p1,c.r,c.p0)+r(c.r,c.p1,c.a1-c.a0)+i(c.r,c.p1,l.r,l.p0))+"Z"}function t(n,t,e,r){var i=t.call(n,e,r),u=a.call(n,i,r),o=l.call(n,i,r)-Io,f=c.call(n,i,r)-Io;return{r:u,a0:o,a1:f,p0:[u*Math.cos(o),u*Math.sin(o)],p1:[u*Math.cos(f),u*Math.sin(f)]}}function e(n,t){return n.a0==t.a0&&n.a1==t.a1}function r(n,t,e){return"A"+n+","+n+" 0 "+ +(e>Fo)+",1 "+t}function i(n,t,e,r){return"Q 0,0 "+r}var u=Me,o=xe,a=Iu,l=gu,c=vu;return n.radius=function(t){return arguments.length?(a=En(t),n):a},n.source=function(t){return arguments.length?(u=En(t),n):u},n.target=function(t){return arguments.length?(o=En(t),n):o},n.startAngle=function(t){return arguments.length?(l=En(t),n):l},n.endAngle=function(t){return arguments.length?(c=En(t),n):c},n},ao.svg.diagonal=function(){function n(n,i){var u=t.call(this,n,i),o=e.call(this,n,i),a=(u.y+o.y)/2,l=[u,{x:u.x,y:a},{x:o.x,y:a},o];return l=l.map(r),"M"+l[0]+"C"+l[1]+" "+l[2]+" "+l[3]}var t=Me,e=xe,r=Yu;return n.source=function(e){return arguments.length?(t=En(e),n):t},n.target=function(t){return arguments.length?(e=En(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},ao.svg.diagonal.radial=function(){var n=ao.svg.diagonal(),t=Yu,e=n.projection;return n.projection=function(n){return arguments.length?e(Zu(t=n)):t},n},ao.svg.symbol=function(){function n(n,r){return(Ul.get(t.call(this,n,r))||$u)(e.call(this,n,r))}var t=Xu,e=Vu;return n.type=function(e){return arguments.length?(t=En(e),n):t},n.size=function(t){return arguments.length?(e=En(t),n):e},n};var Ul=ao.map({circle:$u,cross:function(n){var t=Math.sqrt(n/5)/2;return"M"+-3*t+","+-t+"H"+-t+"V"+-3*t+"H"+t+"V"+-t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+-t+"V"+t+"H"+-3*t+"Z"},diamond:function(n){var t=Math.sqrt(n/(2*Fl)),e=t*Fl;return"M0,"+-t+"L"+e+",0 0,"+t+" "+-e+",0Z"},square:function(n){var t=Math.sqrt(n)/2;return"M"+-t+","+-t+"L"+t+","+-t+" "+t+","+t+" "+-t+","+t+"Z"},"triangle-down":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+e+"L"+t+","+-e+" "+-t+","+-e+"Z"},"triangle-up":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+-e+"L"+t+","+e+" "+-t+","+e+"Z"}});ao.svg.symbolTypes=Ul.keys();var jl=Math.sqrt(3),Fl=Math.tan(30*Yo);Co.transition=function(n){for(var t,e,r=Hl||++Zl,i=Ku(n),u=[],o=Ol||{time:Date.now(),ease:Nr,delay:0,duration:250},a=-1,l=this.length;++au;u++){i.push(t=[]);for(var e=this[u],a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return Wu(i,this.namespace,this.id)},Yl.tween=function(n,t){var e=this.id,r=this.namespace;return arguments.length<2?this.node()[r][e].tween.get(n):Y(this,null==t?function(t){t[r][e].tween.remove(n)}:function(i){i[r][e].tween.set(n,t)})},Yl.attr=function(n,t){function e(){this.removeAttribute(a)}function r(){this.removeAttributeNS(a.space,a.local)}function i(n){return null==n?e:(n+="",function(){var t,e=this.getAttribute(a);return e!==n&&(t=o(e,n),function(n){this.setAttribute(a,t(n))})})}function u(n){return null==n?r:(n+="",function(){var t,e=this.getAttributeNS(a.space,a.local);return e!==n&&(t=o(e,n),function(n){this.setAttributeNS(a.space,a.local,t(n))})})}if(arguments.length<2){for(t in n)this.attr(t,n[t]);return this}var o="transform"==n?$r:Mr,a=ao.ns.qualify(n);return Ju(this,"attr."+n,t,a.local?u:i)},Yl.attrTween=function(n,t){function e(n,e){var r=t.call(this,n,e,this.getAttribute(i));return r&&function(n){this.setAttribute(i,r(n))}}function r(n,e){var r=t.call(this,n,e,this.getAttributeNS(i.space,i.local));return r&&function(n){this.setAttributeNS(i.space,i.local,r(n))}}var i=ao.ns.qualify(n);return this.tween("attr."+n,i.local?r:e)},Yl.style=function(n,e,r){function i(){this.style.removeProperty(n)}function u(e){return null==e?i:(e+="",function(){var i,u=t(this).getComputedStyle(this,null).getPropertyValue(n);return u!==e&&(i=Mr(u,e),function(t){this.style.setProperty(n,i(t),r)})})}var o=arguments.length;if(3>o){if("string"!=typeof n){2>o&&(e="");for(r in n)this.style(r,n[r],e);return this}r=""}return Ju(this,"style."+n,e,u)},Yl.styleTween=function(n,e,r){function i(i,u){var o=e.call(this,i,u,t(this).getComputedStyle(this,null).getPropertyValue(n));return o&&function(t){this.style.setProperty(n,o(t),r)}}return arguments.length<3&&(r=""),this.tween("style."+n,i)},Yl.text=function(n){return Ju(this,"text",n,Gu)},Yl.remove=function(){var n=this.namespace;return this.each("end.transition",function(){var t;this[n].count<2&&(t=this.parentNode)&&t.removeChild(this)})},Yl.ease=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].ease:("function"!=typeof n&&(n=ao.ease.apply(ao,arguments)),Y(this,function(r){r[e][t].ease=n}))},Yl.delay=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].delay:Y(this,"function"==typeof n?function(r,i,u){r[e][t].delay=+n.call(r,r.__data__,i,u)}:(n=+n,function(r){r[e][t].delay=n}))},Yl.duration=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].duration:Y(this,"function"==typeof n?function(r,i,u){r[e][t].duration=Math.max(1,n.call(r,r.__data__,i,u))}:(n=Math.max(1,n),function(r){r[e][t].duration=n}))},Yl.each=function(n,t){var e=this.id,r=this.namespace;if(arguments.length<2){var i=Ol,u=Hl;try{Hl=e,Y(this,function(t,i,u){Ol=t[r][e],n.call(t,t.__data__,i,u)})}finally{Ol=i,Hl=u}}else Y(this,function(i){var u=i[r][e];(u.event||(u.event=ao.dispatch("start","end","interrupt"))).on(n,t)});return this},Yl.transition=function(){for(var n,t,e,r,i=this.id,u=++Zl,o=this.namespace,a=[],l=0,c=this.length;c>l;l++){a.push(n=[]);for(var t=this[l],f=0,s=t.length;s>f;f++)(e=t[f])&&(r=e[o][i],Qu(e,f,o,u,{time:r.time,ease:r.ease,delay:r.delay+r.duration,duration:r.duration})),n.push(e)}return Wu(a,o,u)},ao.svg.axis=function(){function n(n){n.each(function(){var n,c=ao.select(this),f=this.__chart__||e,s=this.__chart__=e.copy(),h=null==l?s.ticks?s.ticks.apply(s,a):s.domain():l,p=null==t?s.tickFormat?s.tickFormat.apply(s,a):m:t,g=c.selectAll(".tick").data(h,s),v=g.enter().insert("g",".domain").attr("class","tick").style("opacity",Uo),d=ao.transition(g.exit()).style("opacity",Uo).remove(),y=ao.transition(g.order()).style("opacity",1),M=Math.max(i,0)+o,x=Zi(s),b=c.selectAll(".domain").data([0]),_=(b.enter().append("path").attr("class","domain"),ao.transition(b));v.append("line"),v.append("text");var w,S,k,N,E=v.select("line"),A=y.select("line"),C=g.select("text").text(p),z=v.select("text"),L=y.select("text"),q="top"===r||"left"===r?-1:1;if("bottom"===r||"top"===r?(n=no,w="x",k="y",S="x2",N="y2",C.attr("dy",0>q?"0em":".71em").style("text-anchor","middle"),_.attr("d","M"+x[0]+","+q*u+"V0H"+x[1]+"V"+q*u)):(n=to,w="y",k="x",S="y2",N="x2",C.attr("dy",".32em").style("text-anchor",0>q?"end":"start"),_.attr("d","M"+q*u+","+x[0]+"H0V"+x[1]+"H"+q*u)),E.attr(N,q*i),z.attr(k,q*M),A.attr(S,0).attr(N,q*i),L.attr(w,0).attr(k,q*M),s.rangeBand){var T=s,R=T.rangeBand()/2;f=s=function(n){return T(n)+R}}else f.rangeBand?f=s:d.call(n,s,f);v.call(n,f,s),y.call(n,s,s)})}var t,e=ao.scale.linear(),r=Vl,i=6,u=6,o=3,a=[10],l=null;return n.scale=function(t){return arguments.length?(e=t,n):e},n.orient=function(t){return arguments.length?(r=t in Xl?t+"":Vl,n):r},n.ticks=function(){return arguments.length?(a=co(arguments),n):a},n.tickValues=function(t){return arguments.length?(l=t,n):l},n.tickFormat=function(e){return arguments.length?(t=e,n):t},n.tickSize=function(t){var e=arguments.length;return e?(i=+t,u=+arguments[e-1],n):i},n.innerTickSize=function(t){return arguments.length?(i=+t,n):i},n.outerTickSize=function(t){return arguments.length?(u=+t,n):u},n.tickPadding=function(t){return arguments.length?(o=+t,n):o},n.tickSubdivide=function(){return arguments.length&&n},n};var Vl="bottom",Xl={top:1,right:1,bottom:1,left:1};ao.svg.brush=function(){function n(t){t.each(function(){var t=ao.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",u).on("touchstart.brush",u),o=t.selectAll(".background").data([0]);o.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),t.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var a=t.selectAll(".resize").data(v,m);a.exit().remove(),a.enter().append("g").attr("class",function(n){return"resize "+n}).style("cursor",function(n){return $l[n]}).append("rect").attr("x",function(n){return/[ew]$/.test(n)?-3:null}).attr("y",function(n){return/^[ns]/.test(n)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),a.style("display",n.empty()?"none":null);var l,s=ao.transition(t),h=ao.transition(o);c&&(l=Zi(c),h.attr("x",l[0]).attr("width",l[1]-l[0]),r(s)),f&&(l=Zi(f),h.attr("y",l[0]).attr("height",l[1]-l[0]),i(s)),e(s)})}function e(n){n.selectAll(".resize").attr("transform",function(n){return"translate("+s[+/e$/.test(n)]+","+h[+/^s/.test(n)]+")"})}function r(n){n.select(".extent").attr("x",s[0]),n.selectAll(".extent,.n>rect,.s>rect").attr("width",s[1]-s[0])}function i(n){n.select(".extent").attr("y",h[0]),n.selectAll(".extent,.e>rect,.w>rect").attr("height",h[1]-h[0])}function u(){function u(){32==ao.event.keyCode&&(C||(M=null,L[0]-=s[1],L[1]-=h[1],C=2),S())}function v(){32==ao.event.keyCode&&2==C&&(L[0]+=s[1],L[1]+=h[1],C=0,S())}function d(){var n=ao.mouse(b),t=!1;x&&(n[0]+=x[0],n[1]+=x[1]),C||(ao.event.altKey?(M||(M=[(s[0]+s[1])/2,(h[0]+h[1])/2]),L[0]=s[+(n[0]f?(i=r,r=f):i=f),v[0]!=r||v[1]!=i?(e?a=null:o=null,v[0]=r,v[1]=i,!0):void 0}function m(){d(),k.style("pointer-events","all").selectAll(".resize").style("display",n.empty()?"none":null),ao.select("body").style("cursor",null),q.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),z(),w({type:"brushend"})}var M,x,b=this,_=ao.select(ao.event.target),w=l.of(b,arguments),k=ao.select(b),N=_.datum(),E=!/^(n|s)$/.test(N)&&c,A=!/^(e|w)$/.test(N)&&f,C=_.classed("extent"),z=W(b),L=ao.mouse(b),q=ao.select(t(b)).on("keydown.brush",u).on("keyup.brush",v);if(ao.event.changedTouches?q.on("touchmove.brush",d).on("touchend.brush",m):q.on("mousemove.brush",d).on("mouseup.brush",m),k.interrupt().selectAll("*").interrupt(),C)L[0]=s[0]-L[0],L[1]=h[0]-L[1];else if(N){var T=+/w$/.test(N),R=+/^n/.test(N);x=[s[1-T]-L[0],h[1-R]-L[1]],L[0]=s[T],L[1]=h[R]}else ao.event.altKey&&(M=L.slice());k.style("pointer-events","none").selectAll(".resize").style("display",null),ao.select("body").style("cursor",_.style("cursor")),w({type:"brushstart"}),d()}var o,a,l=N(n,"brushstart","brush","brushend"),c=null,f=null,s=[0,0],h=[0,0],p=!0,g=!0,v=Bl[0];return n.event=function(n){n.each(function(){var n=l.of(this,arguments),t={x:s,y:h,i:o,j:a},e=this.__chart__||t;this.__chart__=t,Hl?ao.select(this).transition().each("start.brush",function(){o=e.i,a=e.j,s=e.x,h=e.y,n({type:"brushstart"})}).tween("brush:brush",function(){var e=xr(s,t.x),r=xr(h,t.y);return o=a=null,function(i){s=t.x=e(i),h=t.y=r(i),n({type:"brush",mode:"resize"})}}).each("end.brush",function(){o=t.i,a=t.j,n({type:"brush",mode:"resize"}),n({type:"brushend"})}):(n({type:"brushstart"}),n({type:"brush",mode:"resize"}),n({type:"brushend"}))})},n.x=function(t){return arguments.length?(c=t,v=Bl[!c<<1|!f],n):c},n.y=function(t){return arguments.length?(f=t,v=Bl[!c<<1|!f],n):f},n.clamp=function(t){return arguments.length?(c&&f?(p=!!t[0],g=!!t[1]):c?p=!!t:f&&(g=!!t),n):c&&f?[p,g]:c?p:f?g:null},n.extent=function(t){var e,r,i,u,l;return arguments.length?(c&&(e=t[0],r=t[1],f&&(e=e[0],r=r[0]),o=[e,r],c.invert&&(e=c(e),r=c(r)),e>r&&(l=e,e=r,r=l),e==s[0]&&r==s[1]||(s=[e,r])),f&&(i=t[0],u=t[1],c&&(i=i[1],u=u[1]),a=[i,u],f.invert&&(i=f(i),u=f(u)),i>u&&(l=i,i=u,u=l),i==h[0]&&u==h[1]||(h=[i,u])),n):(c&&(o?(e=o[0],r=o[1]):(e=s[0],r=s[1],c.invert&&(e=c.invert(e),r=c.invert(r)),e>r&&(l=e,e=r,r=l))),f&&(a?(i=a[0],u=a[1]):(i=h[0],u=h[1],f.invert&&(i=f.invert(i),u=f.invert(u)),i>u&&(l=i,i=u,u=l))),c&&f?[[e,i],[r,u]]:c?[e,r]:f&&[i,u])},n.clear=function(){return n.empty()||(s=[0,0],h=[0,0],o=a=null),n},n.empty=function(){return!!c&&s[0]==s[1]||!!f&&h[0]==h[1]},ao.rebind(n,l,"on")};var $l={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},Bl=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]],Wl=ga.format=xa.timeFormat,Jl=Wl.utc,Gl=Jl("%Y-%m-%dT%H:%M:%S.%LZ");Wl.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?eo:Gl,eo.parse=function(n){var t=new Date(n);return isNaN(t)?null:t},eo.toString=Gl.toString,ga.second=On(function(n){return new va(1e3*Math.floor(n/1e3))},function(n,t){n.setTime(n.getTime()+1e3*Math.floor(t))},function(n){return n.getSeconds()}),ga.seconds=ga.second.range,ga.seconds.utc=ga.second.utc.range,ga.minute=On(function(n){return new va(6e4*Math.floor(n/6e4))},function(n,t){n.setTime(n.getTime()+6e4*Math.floor(t))},function(n){return n.getMinutes()}),ga.minutes=ga.minute.range,ga.minutes.utc=ga.minute.utc.range,ga.hour=On(function(n){var t=n.getTimezoneOffset()/60;return new va(36e5*(Math.floor(n/36e5-t)+t))},function(n,t){n.setTime(n.getTime()+36e5*Math.floor(t))},function(n){return n.getHours()}),ga.hours=ga.hour.range,ga.hours.utc=ga.hour.utc.range,ga.month=On(function(n){return n=ga.day(n),n.setDate(1),n},function(n,t){n.setMonth(n.getMonth()+t)},function(n){return n.getMonth()}),ga.months=ga.month.range,ga.months.utc=ga.month.utc.range;var Kl=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Ql=[[ga.second,1],[ga.second,5],[ga.second,15],[ga.second,30],[ga.minute,1],[ga.minute,5],[ga.minute,15],[ga.minute,30],[ga.hour,1],[ga.hour,3],[ga.hour,6],[ga.hour,12],[ga.day,1],[ga.day,2],[ga.week,1],[ga.month,1],[ga.month,3],[ga.year,1]],nc=Wl.multi([[".%L",function(n){return n.getMilliseconds()}],[":%S",function(n){return n.getSeconds()}],["%I:%M",function(n){return n.getMinutes()}],["%I %p",function(n){return n.getHours()}],["%a %d",function(n){return n.getDay()&&1!=n.getDate()}],["%b %d",function(n){return 1!=n.getDate()}],["%B",function(n){return n.getMonth()}],["%Y",zt]]),tc={range:function(n,t,e){return ao.range(Math.ceil(n/e)*e,+t,e).map(io)},floor:m,ceil:m};Ql.year=ga.year,ga.scale=function(){return ro(ao.scale.linear(),Ql,nc)};var ec=Ql.map(function(n){return[n[0].utc,n[1]]}),rc=Jl.multi([[".%L",function(n){return n.getUTCMilliseconds()}],[":%S",function(n){return n.getUTCSeconds()}],["%I:%M",function(n){return n.getUTCMinutes()}],["%I %p",function(n){return n.getUTCHours()}],["%a %d",function(n){return n.getUTCDay()&&1!=n.getUTCDate()}],["%b %d",function(n){return 1!=n.getUTCDate()}],["%B",function(n){return n.getUTCMonth()}],["%Y",zt]]);ec.year=ga.year.utc,ga.scale.utc=function(){return ro(ao.scale.linear(),ec,rc)},ao.text=An(function(n){return n.responseText}),ao.json=function(n,t){return Cn(n,"application/json",uo,t)},ao.html=function(n,t){return Cn(n,"text/html",oo,t)},ao.xml=An(function(n){return n.responseXML}),"function"==typeof define&&define.amd?(this.d3=ao,define(ao)):"object"==typeof module&&module.exports?module.exports=ao:this.d3=ao}(); \ No newline at end of file diff --git a/pgo/webvowl/js/webvowl.app.js b/pgo/webvowl/js/webvowl.app.js new file mode 100644 index 0000000..d82eddd --- /dev/null +++ b/pgo/webvowl/js/webvowl.app.js @@ -0,0 +1,9457 @@ +webvowl.app = +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; + +/******/ // The require function +/******/ function __webpack_require__(moduleId) { + +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; + +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; + +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); + +/******/ // Flag the module as loaded +/******/ module.loaded = true; + +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } + + +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; + +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; + +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; + +/******/ // Load entry module and return exports +/******/ return __webpack_require__(0); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ 0: +/***/ (function(module, exports, __webpack_require__) { + + __webpack_require__(319); + __webpack_require__(321); + + module.exports = __webpack_require__(322); + + +/***/ }), + +/***/ 6: +/***/ (function(module, exports) { + + module.exports = d3; + +/***/ }), + +/***/ 91: +/***/ (function(module, exports, __webpack_require__) { + + var Symbol = __webpack_require__(92), + getRawTag = __webpack_require__(95), + objectToString = __webpack_require__(96); + + /** `Object#toString` result references. */ + var nullTag = '[object Null]', + undefinedTag = '[object Undefined]'; + + /** Built-in value references. */ + var symToStringTag = Symbol ? Symbol.toStringTag : undefined; + + /** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag && symToStringTag in Object(value)) + ? getRawTag(value) + : objectToString(value); + } + + module.exports = baseGetTag; + + +/***/ }), + +/***/ 92: +/***/ (function(module, exports, __webpack_require__) { + + var root = __webpack_require__(93); + + /** Built-in value references. */ + var Symbol = root.Symbol; + + module.exports = Symbol; + + +/***/ }), + +/***/ 93: +/***/ (function(module, exports, __webpack_require__) { + + var freeGlobal = __webpack_require__(94); + + /** Detect free variable `self`. */ + var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + + /** Used as a reference to the global object. */ + var root = freeGlobal || freeSelf || Function('return this')(); + + module.exports = root; + + +/***/ }), + +/***/ 94: +/***/ (function(module, exports) { + + /* WEBPACK VAR INJECTION */(function(global) {/** Detect free variable `global` from Node.js. */ + var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + + module.exports = freeGlobal; + + /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()))) + +/***/ }), + +/***/ 95: +/***/ (function(module, exports, __webpack_require__) { + + var Symbol = __webpack_require__(92); + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString = objectProto.toString; + + /** Built-in value references. */ + var symToStringTag = Symbol ? Symbol.toStringTag : undefined; + + /** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ + function getRawTag(value) { + var isOwn = hasOwnProperty.call(value, symToStringTag), + tag = value[symToStringTag]; + + try { + value[symToStringTag] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; + } + } + return result; + } + + module.exports = getRawTag; + + +/***/ }), + +/***/ 96: +/***/ (function(module, exports) { + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString = objectProto.toString; + + /** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ + function objectToString(value) { + return nativeObjectToString.call(value); + } + + module.exports = objectToString; + + +/***/ }), + +/***/ 103: +/***/ (function(module, exports, __webpack_require__) { + + var baseGetTag = __webpack_require__(91), + isObjectLike = __webpack_require__(104); + + /** `Object#toString` result references. */ + var symbolTag = '[object Symbol]'; + + /** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ + function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && baseGetTag(value) == symbolTag); + } + + module.exports = isSymbol; + + +/***/ }), + +/***/ 104: +/***/ (function(module, exports) { + + /** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ + function isObjectLike(value) { + return value != null && typeof value == 'object'; + } + + module.exports = isObjectLike; + + +/***/ }), + +/***/ 112: +/***/ (function(module, exports) { + + /** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ + var isArray = Array.isArray; + + module.exports = isArray; + + +/***/ }), + +/***/ 154: +/***/ (function(module, exports) { + + /** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; + } + + module.exports = arrayMap; + + +/***/ }), + +/***/ 219: +/***/ (function(module, exports, __webpack_require__) { + + var baseToString = __webpack_require__(220); + + /** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ + function toString(value) { + return value == null ? '' : baseToString(value); + } + + module.exports = toString; + + +/***/ }), + +/***/ 220: +/***/ (function(module, exports, __webpack_require__) { + + var Symbol = __webpack_require__(92), + arrayMap = __webpack_require__(154), + isArray = __webpack_require__(112), + isSymbol = __webpack_require__(103); + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0; + + /** Used to convert symbols to primitives and strings. */ + var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + + /** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ + function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isArray(value)) { + // Recursively convert values (susceptible to call stack limits). + return arrayMap(value, baseToString) + ''; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + } + + module.exports = baseToString; + + +/***/ }), + +/***/ 319: +/***/ (function(module, exports) { + + // removed by extract-text-webpack-plugin + +/***/ }), + +/***/ 321: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/* Taken from here: http://stackoverflow.com/a/17907562 */ + function getInternetExplorerVersion(){ + var ua, + re, + rv = -1; + + // check for edge + var isEdge = /(?:\b(MS)?IE\s+|\bTrident\/7\.0;.*\s+rv:|\bEdge\/)(\d+)/.test(navigator.userAgent); + if ( isEdge ) { + rv = parseInt("12"); + return rv; + } + + var isIE11 = /Trident.*rv[ :]*11\./.test(navigator.userAgent); + if ( isIE11 ) { + rv = parseInt("11"); + return rv; + } + if ( navigator.appName === "Microsoft Internet Explorer" ) { + ua = navigator.userAgent; + re = new RegExp("MSIE ([0-9]{1,}[\\.0-9]{0,})"); + if ( re.exec(ua) !== null ) { + rv = parseFloat(RegExp.$1); + } + } else if ( navigator.appName === "Netscape" ) { + ua = navigator.userAgent; + re = new RegExp("Trident/.*rv:([0-9]{1,}[\\.0-9]{0,})"); + if ( re.exec(ua) !== null ) { + rv = parseFloat(RegExp.$1); + } + } + return rv; + } + + function showBrowserWarningIfRequired(){ + var version = getInternetExplorerVersion(); + console.log("Browser Version =" + version); + if ( version > 0 && version <= 11 ) { + d3.select("#browserCheck").classed("hidden", false); + d3.select("#killWarning").classed("hidden", true); + d3.select("#optionsArea").classed("hidden", true); + d3.select("#logo").classed("hidden", true); + } + if ( version == 12 ) { + d3.select("#logo").classed("hidden", false); + d3.select("#browserCheck").classed("hidden", false); + // connect the button; + var pb_kill = d3.select("#killWarning"); + pb_kill.on("click", function (){ + console.log("hide the warning please"); + d3.select("#browserCheck").classed("hidden", true); + d3.select("#logo").style("padding", "10px"); + }); + } + else { + d3.select("#logo").classed("hidden", false); + d3.select("#browserCheck").classed("hidden", true); + } + + } + + module.exports = showBrowserWarningIfRequired; + showBrowserWarningIfRequired(); + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 322: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {String.prototype.replaceAll = function ( search, replacement ){ + var target = this; + return target.split(search).join(replacement); + }; + module.exports = function (){ + var newOntologyCounter = 1; + var app = {}, + graph = webvowl.graph(), + options = graph.graphOptions(), + languageTools = webvowl.util.languageTools(), + GRAPH_SELECTOR = "#graph", + // Modules for the webvowl app + exportMenu = __webpack_require__(323)(graph), + filterMenu = __webpack_require__(325)(graph), + gravityMenu = __webpack_require__(326)(graph), + modeMenu = __webpack_require__(327)(graph), + debugMenu = __webpack_require__(328)(graph), + ontologyMenu = __webpack_require__(329)(graph), + pauseMenu = __webpack_require__(333)(graph), + resetMenu = __webpack_require__(334)(graph), + searchMenu = __webpack_require__(335)(graph), + navigationMenu = __webpack_require__(336)(graph), + zoomSlider = __webpack_require__(337)(graph), + sidebar = __webpack_require__(338)(graph), + leftSidebar = __webpack_require__(339)(graph), + editSidebar = __webpack_require__(340)(graph), + configMenu = __webpack_require__(341)(graph), + loadingModule = __webpack_require__(342)(graph), + warningModule = __webpack_require__(343)(graph), + directInputMod = __webpack_require__(344)(graph), + + + // Graph modules + colorExternalsSwitch = webvowl.modules.colorExternalsSwitch(graph), + compactNotationSwitch = webvowl.modules.compactNotationSwitch(graph), + datatypeFilter = webvowl.modules.datatypeFilter(), + disjointFilter = webvowl.modules.disjointFilter(), + focuser = webvowl.modules.focuser(graph), + emptyLiteralFilter = webvowl.modules.emptyLiteralFilter(), + nodeDegreeFilter = webvowl.modules.nodeDegreeFilter(filterMenu), + nodeScalingSwitch = webvowl.modules.nodeScalingSwitch(graph), + objectPropertyFilter = webvowl.modules.objectPropertyFilter(), + pickAndPin = webvowl.modules.pickAndPin(), + selectionDetailDisplayer = webvowl.modules.selectionDetailsDisplayer(sidebar.updateSelectionInformation), + statistics = webvowl.modules.statistics(), + subclassFilter = webvowl.modules.subclassFilter(), + setOperatorFilter = webvowl.modules.setOperatorFilter(); + + + app.getOptions = function (){ + return webvowl.opts; + }; + app.getGraph = function (){ + return webvowl.gr; + }; + // app.afterInitializationCallback=undefined; + + + var executeFileDrop = false; + var wasMessageToShow = false; + var firstTime = false; + + function addFileDropEvents( selector ){ + var node = d3.select(selector); + + node.node().ondragover = function ( e ){ + e.preventDefault(); + + d3.select("#dragDropContainer").classed("hidden", false); + // get svg size + var w = graph.options().width(); + var h = graph.options().height(); + + // get event position; (using clientX and clientY); + var cx = e.clientX; + var cy = e.clientY; + + if ( firstTime === false ) { + var state = d3.select("#loading-info").classed("hidden"); + wasMessageToShow = !state; + firstTime = true; + d3.select("#loading-info").classed("hidden", true); // hide it so it does not conflict with drop event + var bb=d3.select("#drag_msg").node().getBoundingClientRect(); + var hs = bb.height; + var ws = bb.width; + + var icon_scale=Math.min(hs,ws); + icon_scale/=100; + + d3.select("#drag_icon_group").attr("transform", "translate ( " + 0.25 * ws + " " + 0.25 * hs + ")"); + d3.select("#drag_icon").attr("transform","matrix ("+icon_scale+",0,0,"+icon_scale+",0,0)"); + d3.select("#drag_icon_drop").attr("transform","matrix ("+icon_scale+",0,0,"+icon_scale+",0,0)"); + } + + + if ( (cx > 0.25 * w && cx < 0.75 * w) && (cy > 0.25 * h && cy < 0.75 * h) ) { + + d3.select("#drag_msg_text").node().innerHTML = "Drop it here."; + d3.select("#drag_msg").style("background-color", "#67bc0f"); + d3.select("#drag_msg").style("color", "#000000"); + executeFileDrop = true; + // d3.select("#drag_svg").transition() + // .duration(100) + // // .attr("-webkit-transform", "rotate(90)") + // // .attr("-moz-transform", "rotate(90)") + // // .attr("-o-transform", "rotate(90)") + // .attr("transform", "rotate(90)"); + + d3.select("#drag_icon").classed("hidden",true); + d3.select("#drag_icon_drop").classed("hidden",false); + + + } else { + d3.select("#drag_msg_text").node().innerHTML = "Drag ontology file here."; + d3.select("#drag_msg").style("background-color", "#fefefe"); + d3.select("#drag_msg").style("color", "#000000"); + executeFileDrop = false; + + d3.select("#drag_icon").classed("hidden",false); + d3.select("#drag_icon_drop").classed("hidden",true); + + + // d3.select("#drag_svg").transition() + // .duration(100) + // // .attr("-webkit-transform", "rotate(0)") + // // .attr("-moz-transform", "rotate(0)") + // // .attr("-o-transform", "rotate(0)") + // .attr("transform", "rotate(0)"); + // + } + + }; + node.node().ondrop = function ( ev ){ + ev.preventDefault(); + firstTime = false; + if ( executeFileDrop ) { + if ( ev.dataTransfer.items ) { + if ( ev.dataTransfer.items.length === 1 ) { + if ( ev.dataTransfer.items[0].kind === 'file' ) { + var file = ev.dataTransfer.items[0].getAsFile(); + graph.options().loadingModule().fromFileDrop(file.name, file); + } + } + else { + // >> WARNING not multiple file uploaded; + graph.options().warningModule().showMultiFileUploadWarning(); + } + } + } + d3.select("#dragDropContainer").classed("hidden", true); + }; + + node.node().ondragleave = function ( e ){ + var w = graph.options().width(); + var h = graph.options().height(); + + // get event position; (using clientX and clientY); + var cx = e.clientX; + var cy = e.clientY; + + var hidden = false; + firstTime = false; + + if ( cx < 0.1 * w || cx > 0.9 * w ) hidden = true; + if ( cy < 0.1 * h || cy > 0.9 * h ) hidden = true; + d3.select("#dragDropContainer").classed("hidden", hidden); + + d3.select("#loading-info").classed("hidden", !wasMessageToShow); // show it again + // check if it should be visible + var should_show=graph.options().loadingModule().getMessageVisibilityStatus(); + if (should_show===false){ + d3.select("#loading-info").classed("hidden", true); // hide it + } + }; + + } + + + app.initialize = function (){ + addFileDropEvents(GRAPH_SELECTOR); + + window.requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame || function ( f ){ + return setTimeout(f, 1000 / 60); + }; // simulate calling code 60 + window.cancelAnimationFrame = window.cancelAnimationFrame || window.mozCancelAnimationFrame || function ( requestID ){ + clearTimeout(requestID); + }; //fall back + + options.graphContainerSelector(GRAPH_SELECTOR); + options.selectionModules().push(focuser); + options.selectionModules().push(selectionDetailDisplayer); + options.selectionModules().push(pickAndPin); + + options.filterModules().push(emptyLiteralFilter); + options.filterModules().push(statistics); + + options.filterModules().push(nodeDegreeFilter); + options.filterModules().push(datatypeFilter); + options.filterModules().push(objectPropertyFilter); + options.filterModules().push(subclassFilter); + options.filterModules().push(disjointFilter); + options.filterModules().push(setOperatorFilter); + options.filterModules().push(nodeScalingSwitch); + options.filterModules().push(compactNotationSwitch); + options.filterModules().push(colorExternalsSwitch); + + d3.select(window).on("resize", adjustSize); + + exportMenu.setup(); + gravityMenu.setup(); + filterMenu.setup(datatypeFilter, objectPropertyFilter, subclassFilter, disjointFilter, setOperatorFilter, nodeDegreeFilter); + modeMenu.setup(pickAndPin, nodeScalingSwitch, compactNotationSwitch, colorExternalsSwitch); + pauseMenu.setup(); + sidebar.setup(); + loadingModule.setup(); + leftSidebar.setup(); + editSidebar.setup(); + debugMenu.setup(); + var agentVersion = getInternetExplorerVersion(); + if ( agentVersion > 0 && agentVersion <= 11 ) { + console.log("Agent version " + agentVersion); + console.log("This agent is not supported"); + d3.select("#browserCheck").classed("hidden", false); + d3.select("#killWarning").classed("hidden", true); + d3.select("#optionsArea").classed("hidden", true); + d3.select("#logo").classed("hidden", true); + } else { + d3.select("#logo").classed("hidden", false); + if ( agentVersion === 12 ) { + // allow Mircosoft Edge Browser but with warning + d3.select("#browserCheck").classed("hidden", false); + d3.select("#killWarning").classed("hidden", false); + } else { + d3.select("#browserCheck").classed("hidden", true); + } + + resetMenu.setup([gravityMenu, filterMenu, modeMenu, focuser, selectionDetailDisplayer, pauseMenu]); + searchMenu.setup(); + navigationMenu.setup(); + zoomSlider.setup(); + + // give the options the pointer to the some menus for import and export + options.literalFilter(emptyLiteralFilter); + options.nodeDegreeFilter(nodeDegreeFilter); + options.loadingModule(loadingModule); + options.filterMenu(filterMenu); + options.modeMenu(modeMenu); + options.gravityMenu(gravityMenu); + options.pausedMenu(pauseMenu); + options.pickAndPinModule(pickAndPin); + options.resetMenu(resetMenu); + options.searchMenu(searchMenu); + options.ontologyMenu(ontologyMenu); + options.navigationMenu(navigationMenu); + options.sidebar(sidebar); + options.leftSidebar(leftSidebar); + options.editSidebar(editSidebar); + options.exportMenu(exportMenu); + options.graphObject(graph); + options.zoomSlider(zoomSlider); + options.warningModule(warningModule); + options.directInputModule(directInputMod); + options.datatypeFilter(datatypeFilter); + options.objectPropertyFilter(objectPropertyFilter); + options.subclassFilter(subclassFilter); + options.setOperatorFilter(setOperatorFilter); + options.disjointPropertyFilter(disjointFilter); + options.focuserModule(focuser); + options.colorExternalsModule(colorExternalsSwitch); + options.compactNotationModule(compactNotationSwitch); + + ontologyMenu.setup(loadOntologyFromText); + configMenu.setup(); + + leftSidebar.showSidebar(0); + leftSidebar.hideCollapseButton(true); + + + graph.start(); + + var modeOp = d3.select("#modeOfOperationString"); + modeOp.style("font-size", "0.6em"); + modeOp.style("font-style", "italic"); + + adjustSize(); + var defZoom; + var w = graph.options().width(); + var h = graph.options().height(); + defZoom = Math.min(w, h) / 1000; + + var hideDebugOptions = true; + if ( hideDebugOptions === false ) { + graph.setForceTickFunctionWithFPS(); + } + + graph.setDefaultZoom(defZoom); + d3.selectAll(".debugOption").classed("hidden", hideDebugOptions); + + // prevent backspace reloading event + var htmlBody = d3.select("body"); + d3.select(document).on("keydown", function ( e ){ + if ( d3.event.keyCode === 8 && d3.event.target === htmlBody.node() ) { + // we could add here an alert + d3.event.preventDefault(); + } + // using ctrl+Shift+d as debug option + if ( d3.event.ctrlKey && d3.event.shiftKey && d3.event.keyCode === 68 ) { + graph.options().executeHiddenDebugFeatuers(); + d3.event.preventDefault(); + } + }); + if ( d3.select("#maxLabelWidthSliderOption") ) { + var setValue = !graph.options().dynamicLabelWidth(); + d3.select("#maxLabelWidthSlider").node().disabled = setValue; + d3.select("#maxLabelWidthvalueLabel").classed("disabledLabelForSlider", setValue); + d3.select("#maxLabelWidthDescriptionLabel").classed("disabledLabelForSlider", setValue); + } + + d3.select("#blockGraphInteractions").style("position", "absolute") + .style("top", "0") + .style("background-color", "#bdbdbd") + .style("opacity", "0.5") + .style("pointer-events", "auto") + .style("width", graph.options().width() + "px") + .style("height", graph.options().height() + "px") + .on("click", function (){ + d3.event.preventDefault(); + d3.event.stopPropagation(); + }) + .on("dblclick", function (){ + d3.event.preventDefault(); + d3.event.stopPropagation(); + }); + + d3.select("#direct-text-input").on("click", function (){ + directInputMod.setDirectInputMode(); + }); + d3.select("#blockGraphInteractions").node().draggable = false; + options.prefixModule(webvowl.util.prefixTools(graph)); + adjustSize(); + sidebar.updateOntologyInformation(undefined, statistics); + loadingModule.parseUrlAndLoadOntology(); // loads automatically the ontology provided by the parameters + options.debugMenu(debugMenu); + debugMenu.updateSettings(); + + // connect the reloadCachedVersionButton + d3.select("#reloadSvgIcon").on("click", function (){ + if ( d3.select("#reloadSvgIcon").node().disabled === true ) { + graph.options().ontologyMenu().clearCachedVersion(); + return; + } + d3.select("#reloadCachedOntology").classed("hidden", true); + graph.options().ontologyMenu().reloadCachedOntology(); + + }); + // add the initialized objects + webvowl.opts = options; + webvowl.gr = graph; + + } + }; + + + function loadOntologyFromText( jsonText, filename, alternativeFilename ){ + d3.select("#reloadCachedOntology").classed("hidden", true); + pauseMenu.reset(); + graph.options().navigationMenu().hideAllMenus(); + + if ( (jsonText === undefined && filename === undefined) || (jsonText.length === 0) ) { + loadingModule.notValidJsonFile(); + return; + } + graph.editorMode(); // updates the checkbox + var data; + if ( jsonText ) { + // validate JSON FILE + var validJSON; + try { + data = JSON.parse(jsonText); + validJSON = true; + } catch ( e ) { + validJSON = false; + } + if ( validJSON === false ) { + // the server output is not a valid json file + loadingModule.notValidJsonFile(); + return; + } + + if ( !filename ) { + // First look if an ontology title exists, otherwise take the alternative filename + var ontologyNames = data.header ? data.header.title : undefined; + var ontologyName = languageTools.textInLanguage(ontologyNames); + + if ( ontologyName ) { + filename = ontologyName; + } else { + filename = alternativeFilename; + } + } + } + + + // check if we have graph data + var classCount = 0; + if ( data.class !== undefined ) { + classCount = data.class.length; + } + + var loadEmptyOntologyForEditing = false; + if ( location.hash.indexOf("#new_ontology") !== -1 ) { + loadEmptyOntologyForEditing = true; + newOntologyCounter++; + d3.select("#empty").node().href = "#opts=editorMode=true;#new_ontology" + newOntologyCounter; + } + if ( classCount === 0 && graph.editorMode() === false && loadEmptyOntologyForEditing === false ) { + // generate message for the user; + loadingModule.emptyGraphContentError(); + } else { + loadingModule.validJsonFile(); + ontologyMenu.setCachedOntology(filename, jsonText); + exportMenu.setJsonText(jsonText); + options.data(data); + graph.options().loadingModule().setPercentMode(); + if ( loadEmptyOntologyForEditing === true ) { + graph.editorMode(true); + + } + graph.load(); + sidebar.updateOntologyInformation(data, statistics); + exportMenu.setFilename(filename); + graph.updateZoomSliderValueFromOutside(); + adjustSize(); + + var flagOfCheckBox = d3.select("#editorModeModuleCheckbox").node().checked; + graph.editorMode(flagOfCheckBox);// update gui + + } + } + + function adjustSize(){ + var graphContainer = d3.select(GRAPH_SELECTOR), + svg = graphContainer.select("svg"), + height = window.innerHeight - 40, + width = window.innerWidth - (window.innerWidth * 0.22); + + if ( sidebar.getSidebarVisibility() === "0" ) { + height = window.innerHeight - 40; + width = window.innerWidth; + } + + directInputMod.updateLayout(); + d3.select("#blockGraphInteractions").style("width", window.innerWidth + "px"); + d3.select("#blockGraphInteractions").style("height", window.innerHeight + "px"); + + d3.select("#WarningErrorMessagesContainer").style("width", width + "px"); + d3.select("#WarningErrorMessagesContainer").style("height", height + "px"); + + d3.select("#WarningErrorMessages").style("max-height", (height - 12) + "px"); + + graphContainer.style("height", height + "px"); + svg.attr("width", width) + .attr("height", height); + + options.width(width) + .height(height); + + graph.updateStyle(); + + if ( isTouchDevice() === true ) { + if ( graph.isEditorMode() === true ) + d3.select("#modeOfOperationString").node().innerHTML = "touch able device detected"; + graph.setTouchDevice(true); + + } else { + if ( graph.isEditorMode() === true ) + d3.select("#modeOfOperationString").node().innerHTML = "point & click device detected"; + graph.setTouchDevice(false); + } + + d3.select("#loadingInfo-container").style("height", 0.5 * (height - 80) + "px"); + loadingModule.checkForScreenSize(); + + adjustSliderSize(); + // update also the padding options of loading and the logo positions; + var warningDiv = d3.select("#browserCheck"); + if ( warningDiv.classed("hidden") === false ) { + var offset = 10 + warningDiv.node().getBoundingClientRect().height; + d3.select("#logo").style("padding", offset + "px 10px"); + } else { + // remove the dynamic padding from the logo element; + d3.select("#logo").style("padding", "10px"); + } + + // scrollbar tests; + var element = d3.select("#menuElementContainer").node(); + var maxScrollLeft = element.scrollWidth - element.clientWidth; + var leftButton = d3.select("#scrollLeftButton"); + var rightButton = d3.select("#scrollRightButton"); + if ( maxScrollLeft > 0 ) { + // show both and then check how far is bar; + rightButton.classed("hidden", false); + leftButton.classed("hidden", false); + navigationMenu.updateScrollButtonVisibility(); + } else { + // hide both; + rightButton.classed("hidden", true); + leftButton.classed("hidden", true); + } + + // adjust height of the leftSidebar element; + editSidebar.updateElementWidth(); + + + var hs = d3.select("#drag_msg").node().getBoundingClientRect().height; + var ws = d3.select("#drag_msg").node().getBoundingClientRect().width; + d3.select("#drag_icon_group").attr("transform", "translate ( " + 0.25 * ws + " " + 0.25 * hs + ")"); + + } + + function adjustSliderSize(){ + // TODO: refactor and put this into the slider it self + var height = window.innerHeight - 40; + var fullHeight = height; + var zoomOutPos = height - 30; + var sliderHeight = 150; + + // assuming DOM elements are generated in the index.html + // todo: refactor for independent usage of graph and app + if ( fullHeight < 150 ) { + // hide the slider button; + d3.select("#zoomSliderParagraph").classed("hidden", true); + d3.select("#zoomOutButton").classed("hidden", true); + d3.select("#zoomInButton").classed("hidden", true); + d3.select("#centerGraphButton").classed("hidden", true); + return; + } + d3.select("#zoomSliderParagraph").classed("hidden", false); + d3.select("#zoomOutButton").classed("hidden", false); + d3.select("#zoomInButton").classed("hidden", false); + d3.select("#centerGraphButton").classed("hidden", false); + + var zoomInPos = zoomOutPos - 20; + var centerPos = zoomInPos - 20; + if ( fullHeight < 280 ) { + // hide the slider button; + d3.select("#zoomSliderParagraph").classed("hidden", true);//var sliderPos=zoomOutPos-sliderHeight; + d3.select("#zoomOutButton").style("top", zoomOutPos + "px"); + d3.select("#zoomInButton").style("top", zoomInPos + "px"); + d3.select("#centerGraphButton").style("top", centerPos + "px"); + return; + } + + var sliderPos = zoomOutPos - sliderHeight; + zoomInPos = sliderPos - 20; + centerPos = zoomInPos - 20; + d3.select("#zoomSliderParagraph").classed("hidden", false); + d3.select("#zoomOutButton").style("top", zoomOutPos + "px"); + d3.select("#zoomInButton").style("top", zoomInPos + "px"); + d3.select("#centerGraphButton").style("top", centerPos + "px"); + d3.select("#zoomSliderParagraph").style("top", sliderPos + "px"); + } + + function isTouchDevice(){ + try { + document.createEvent("TouchEvent"); + return true; + } catch ( e ) { + return false; + } + } + + + function getInternetExplorerVersion(){ + var ua, + re, + rv = -1; + + // check for edge + var isEdge = /(?:\b(MS)?IE\s+|\bTrident\/7\.0;.*\s+rv:|\bEdge\/)(\d+)/.test(navigator.userAgent); + if ( isEdge ) { + rv = parseInt("12"); + return rv; + } + + var isIE11 = /Trident.*rv[ :]*11\./.test(navigator.userAgent); + if ( isIE11 ) { + rv = parseInt("11"); + return rv; + } + if ( navigator.appName === "Microsoft Internet Explorer" ) { + ua = navigator.userAgent; + re = new RegExp("MSIE ([0-9]{1,}[\\.0-9]{0,})"); + if ( re.exec(ua) !== null ) { + rv = parseFloat(RegExp.$1); + } + } else if ( navigator.appName === "Netscape" ) { + ua = navigator.userAgent; + re = new RegExp("Trident/.*rv:([0-9]{1,}[\\.0-9]{0,})"); + if ( re.exec(ua) !== null ) { + rv = parseFloat(RegExp.$1); + } + } + return rv; + } + + return app; + } + ; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 323: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains the logic for the export button. + * @returns {{}} + */ + module.exports = function ( graph ){ + + var exportMenu = {}, + exportSvgButton, + exportFilename, + exportJsonButton, + exportTurtleButton, + exportTexButton, + copyButton, + exportableJsonText; + + var exportTTLModule = __webpack_require__(324)(graph); + + + String.prototype.replaceAll = function ( search, replacement ){ + var target = this; + return target.split(search).join(replacement); + }; + + + /** + * Adds the export button to the website. + */ + exportMenu.setup = function (){ + exportSvgButton = d3.select("#exportSvg") + .on("click", exportSvg); + exportJsonButton = d3.select("#exportJson") + .on("click", exportJson); + + copyButton = d3.select("#copyBt") + .on("click", copyUrl); + + exportTexButton = d3.select("#exportTex") + .on("click", exportTex); + + exportTurtleButton = d3.select("#exportTurtle") + .on("click", exportTurtle); + + var menuEntry = d3.select("#m_export"); + menuEntry.on("mouseover", function (){ + var searchMenu = graph.options().searchMenu(); + searchMenu.hideSearchEntries(); + exportMenu.exportAsUrl(); + }); + }; + function exportTurtle(){ + var success = exportTTLModule.requestExport(); + var result = exportTTLModule.resultingTTL_Content(); + var ontoTitle = "NewOntology"; + console.log("Exporter was successful: " + success); + if ( success ) { + // console.log("The result is : " + result); + // var ontoTitle=graph.options().getGeneralMetaObjectProperty('title'); + // if (ontoTitle===undefined || ontoTitle.length===0) + // ontoTitle="NewOntology"; + // else{ + // // language object -.- + // ontoTitle.replace(" ","_") + // } + + // TODO: show TEXT in warning module? + + + // // write the data + var dataURI = "data:text/json;charset=utf-8," + encodeURIComponent(result); + + exportTurtleButton.attr("href", dataURI) + .attr("download", ontoTitle + ".ttl"); + + // okay restore old href? + // exportTurtleButton.attr("href", oldHref); + } else { + console.log("ShowWarning!"); + graph.options().warningModule().showExporterWarning(); + console.log("Stay on the page! " + window.location.href); + exportTurtleButton.attr("href", window.location.href); + d3.event.preventDefault(); // prevent the href to be called ( reloads the page otherwise ) + } + } + + exportMenu.setFilename = function ( filename ){ + exportFilename = filename || "export"; + }; + + exportMenu.setJsonText = function ( jsonText ){ + exportableJsonText = jsonText; + }; + + function copyUrl(){ + d3.select("#exportedUrl").node().focus(); + d3.select("#exportedUrl").node().select(); + document.execCommand("copy"); + graph.options().navigationMenu().hideAllMenus(); + d3.event.preventDefault(); // prevent the href to be called ( reloads the page otherwise ) + } + + function prepareOptionString( defOpts, currOpts ){ + var setOptions = 0; + var optsString = "opts="; + + for ( var name in defOpts ) { + // define key and value ; + if ( defOpts.hasOwnProperty(name) ) {// for travis warning + var def_value = defOpts[name]; + var cur_value = currOpts[name]; + if ( def_value !== cur_value ) { + optsString += name + "=" + cur_value + ";"; + setOptions++; + } + } + } + optsString += ""; + if ( setOptions === 0 ) { + return ""; + } + return optsString; + } + + exportMenu.exportAsUrl = function (){ + var currObj = {}; + currObj.sidebar = graph.options().sidebar().getSidebarVisibility(); + + // identify default value given by ontology; + var defOntValue = graph.options().filterMenu().getDefaultDegreeValue(); + var currentValue = graph.options().filterMenu().getDegreeSliderValue(); + if ( parseInt(defOntValue) === parseInt(currentValue) ) { + currObj.doc = -1; + } else { + currObj.doc = currentValue; + } + + currObj.cd = graph.options().classDistance(); + currObj.dd = graph.options().datatypeDistance(); + if ( graph.editorMode() === true ) { + currObj.editorMode = "true"; + } else { + currObj.editorMode = "false"; + } + currObj.filter_datatypes = String(graph.options().filterMenu().getCheckBoxValue("datatypeFilterCheckbox")); + currObj.filter_sco = String(graph.options().filterMenu().getCheckBoxValue("subclassFilterCheckbox")); + currObj.filter_disjoint = String(graph.options().filterMenu().getCheckBoxValue("disjointFilterCheckbox")); + currObj.filter_setOperator = String(graph.options().filterMenu().getCheckBoxValue("setoperatorFilterCheckbox")); + currObj.filter_objectProperties = String(graph.options().filterMenu().getCheckBoxValue("objectPropertyFilterCheckbox")); + currObj.mode_dynamic = String(graph.options().dynamicLabelWidth()); + currObj.mode_scaling = String(graph.options().modeMenu().getCheckBoxValue("nodescalingModuleCheckbox")); + currObj.mode_compact = String(graph.options().modeMenu().getCheckBoxValue("compactnotationModuleCheckbox")); + currObj.mode_colorExt = String(graph.options().modeMenu().getCheckBoxValue("colorexternalsModuleCheckbox")); + currObj.mode_multiColor = String(graph.options().modeMenu().colorModeState()); + currObj.mode_pnp = String(graph.options().modeMenu().getCheckBoxValue("pickandpinModuleCheckbox")); + currObj.debugFeatures = String(!graph.options().getHideDebugFeatures()); + currObj.rect = 0; + + var defObj = graph.options().initialConfig(); + var optsString = prepareOptionString(defObj, currObj); + var urlString = String(location); + var htmlElement; + // when everything is default then there is nothing to write + if ( optsString.length === 0 ) { + // building up parameter list; + + // remove the all options form location + var hashCode = location.hash; + urlString = urlString.split(hashCode)[0]; + + var lPos = hashCode.lastIndexOf("#"); + if ( lPos === -1 ) { + htmlElement = d3.select("#exportedUrl").node(); + htmlElement.value = String(location); + htmlElement.title = String(location); + return; // nothing to change in the location String + } + var newURL = hashCode.slice(lPos, hashCode.length); + htmlElement = d3.select("#exportedUrl").node(); + htmlElement.value = urlString + newURL; + htmlElement.title = urlString + newURL; + return; + } + + // generate the options string; + var numParameters = (urlString.match(/#/g) || []).length; + var newUrlString; + if ( numParameters === undefined || numParameters === 0 ) { + newUrlString = urlString + "#" + optsString; + } + if ( numParameters > 0 ) { + var tokens = urlString.split("#"); + var i; + if ( tokens[1].indexOf("opts=") >= 0 ) { + tokens[1] = optsString; + newUrlString = tokens[0]; + } else { + newUrlString = tokens[0] + "#"; + newUrlString += optsString; + } + // append parameters + for ( i = 1; i < tokens.length; i++ ) { + if ( tokens[i].length > 0 ) { + newUrlString += "#" + tokens[i]; + } + } + } + // building up parameter list; + htmlElement = d3.select("#exportedUrl").node(); + htmlElement.value = newUrlString; + htmlElement.title = newUrlString; + + }; + + function exportSvg(){ + graph.options().navigationMenu().hideAllMenus(); + // Get the d3js SVG element + var graphSvg = d3.select(graph.options().graphContainerSelector()).select("svg"), + graphSvgCode, + escapedGraphSvgCode, + dataURI; + + // inline the styles, so that the exported svg code contains the css rules + inlineVowlStyles(); + hideNonExportableElements(); + + graphSvgCode = graphSvg.attr("version", 1.1) + .attr("xmlns", "http://www.w3.org/2000/svg") + .node().parentNode.innerHTML; + + // Insert the reference to VOWL + graphSvgCode = "\n" + graphSvgCode; + + escapedGraphSvgCode = escapeUnicodeCharacters(graphSvgCode); + //btoa(); Creates a base-64 encoded ASCII string from a "string" of binary data. + dataURI = "data:image/svg+xml;base64," + btoa(escapedGraphSvgCode); + + + exportSvgButton.attr("href", dataURI) + .attr("download", exportFilename + ".svg"); + + // remove graphic styles for interaction to go back to normal + removeVowlInlineStyles(); + showNonExportableElements(); + graph.lazyRefresh(); + } + + function escapeUnicodeCharacters( text ){ + var textSnippets = [], + i, textLength = text.length, + character, + charCode; + + for ( i = 0; i < textLength; i++ ) { + character = text.charAt(i); + charCode = character.charCodeAt(0); + + if ( charCode < 128 ) { + textSnippets.push(character); + } else { + textSnippets.push("&#" + charCode + ";"); + } + } + + return textSnippets.join(""); + } + + function inlineVowlStyles(){ + setStyleSensitively(".text", [{ name: "font-family", value: "Helvetica, Arial, sans-serif" }, { + name: "font-size", + value: "12px" + }]); + setStyleSensitively(".subtext", [{ name: "font-size", value: "9px" }]); + setStyleSensitively(".text.instance-count", [{ name: "fill", value: "#666" }]); + setStyleSensitively(".external + text .instance-count", [{ name: "fill", value: "#aaa" }]); + setStyleSensitively(".cardinality", [{ name: "font-size", value: "10px" }]); + setStyleSensitively(".text, .embedded", [{ name: "pointer-events", value: "none" }]); + setStyleSensitively(".class, .object, .disjoint, .objectproperty, .disjointwith, .equivalentproperty, .transitiveproperty, .functionalproperty, .inversefunctionalproperty, .symmetricproperty, .allvaluesfromproperty, .somevaluesfromproperty", [{ + name: "fill", + value: "#acf" + }]); + setStyleSensitively(".label .datatype, .datatypeproperty", [{ name: "fill", value: "#9c6" }]); + setStyleSensitively(".rdf, .rdfproperty", [{ name: "fill", value: "#c9c" }]); + setStyleSensitively(".literal, .node .datatype", [{ name: "fill", value: "#fc3" }]); + setStyleSensitively(".deprecated, .deprecatedproperty", [{ name: "fill", value: "#ccc" }]); + setStyleSensitively(".external, .externalproperty", [{ name: "fill", value: "#36c" }]); + setStyleSensitively("path, .nofill", [{ name: "fill", value: "none" }]); + setStyleSensitively("marker path", [{ name: "fill", value: "#000" }]); + setStyleSensitively(".class, path, line, .fineline", [{ name: "stroke", value: "#000" }]); + setStyleSensitively(".white, .subclass, .subclassproperty, .external + text", [{ name: "fill", value: "#fff" }]); + setStyleSensitively(".class.hovered, .property.hovered, .cardinality.hovered, .cardinality.focused, circle.pin, .filled.hovered, .filled.focused", [{ + name: "fill", + value: "#f00" + }, { name: "cursor", value: "pointer" }]); + setStyleSensitively(".focused, path.hovered", [{ name: "stroke", value: "#f00" }]); + setStyleSensitively(".indirect-highlighting, .feature:hover", [{ name: "fill", value: "#f90" }]); + setStyleSensitively(".values-from", [{ name: "stroke", value: "#69c" }]); + setStyleSensitively(".symbol, .values-from.filled", [{ name: "fill", value: "#69c" }]); + setStyleSensitively(".class, path, line", [{ name: "stroke-width", value: "2" }]); + setStyleSensitively(".fineline", [{ name: "stroke-width", value: "1" }]); + setStyleSensitively(".dashed, .anonymous", [{ name: "stroke-dasharray", value: "8" }]); + setStyleSensitively(".dotted", [{ name: "stroke-dasharray", value: "3" }]); + setStyleSensitively("rect.focused, circle.focused", [{ name: "stroke-width", value: "4px" }]); + setStyleSensitively(".nostroke", [{ name: "stroke", value: "none" }]); + setStyleSensitively("marker path", [{ name: "stroke-dasharray", value: "100" }]); + } + + function setStyleSensitively( selector, styles ){ + var elements = d3.selectAll(selector); + if ( elements.empty() ) { + return; + } + + styles.forEach(function ( style ){ + elements.each(function (){ + var element = d3.select(this); + if ( !shouldntChangeInlineCss(element, style.name) ) { + element.style(style.name, style.value); + } + }); + }); + } + + function shouldntChangeInlineCss( element, style ){ + return style === "fill" && hasBackgroundColorSet(element); + } + + function hasBackgroundColorSet( element ){ + var data = element.datum(); + if ( data === undefined ) { + return false; + } + return data.backgroundColor && !!data.backgroundColor(); + } + + /** + * For example the pin of the pick&pin module should be invisible in the exported graphic. + */ + function hideNonExportableElements(){ + d3.selectAll(".hidden-in-export").style("display", "none"); + } + + function removeVowlInlineStyles(){ + d3.selectAll(".text, .subtext, .text.instance-count, .external + text .instance-count, .cardinality, .text, .embedded, .class, .object, .disjoint, .objectproperty, .disjointwith, .equivalentproperty, .transitiveproperty, .functionalproperty, .inversefunctionalproperty, .symmetricproperty, .allvaluesfromproperty, .somevaluesfromproperty, .label .datatype, .datatypeproperty, .rdf, .rdfproperty, .literal, .node .datatype, .deprecated, .deprecatedproperty, .external, .externalproperty, path, .nofill, .symbol, .values-from.filled, marker path, .class, path, line, .fineline, .white, .subclass, .subclassproperty, .external + text, .class.hovered, .property.hovered, .cardinality.hovered, .cardinality.focused, circle.pin, .filled.hovered, .filled.focused, .focused, path.hovered, .indirect-highlighting, .feature:hover, .values-from, .class, path, line, .fineline, .dashed, .anonymous, .dotted, rect.focused, circle.focused, .nostroke, marker path") + .each(function (){ + var element = d3.select(this); + + var inlineStyles = element.node().style; + for ( var styleName in inlineStyles ) { + if ( inlineStyles.hasOwnProperty(styleName) ) { + if ( shouldntChangeInlineCss(element, styleName) ) { + continue; + } + element.style(styleName, null); + } + } + + if ( element.datum && element.datum() !== undefined && element.datum().type ) { + if ( element.datum().type() === "rdfs:subClassOf" ) { + element.style("fill", null); + } + } + }); + + // repair svg icons in the menu; + var scrollContainer = d3.select("#menuElementContainer").node(); + var controlElements = scrollContainer.children; + var numEntries = controlElements.length; + + for ( var i = 0; i < numEntries; i++ ) { + var currentMenu = controlElements[i].id; + d3.select("#" + currentMenu).select("path").style("stroke-width", "0"); + d3.select("#" + currentMenu).select("path").style("fill", "#fff"); + } + + d3.select("#magnifyingGlass").style("stroke-width", "0"); + d3.select("#magnifyingGlass").style("fill", "#666"); + + } + + function showNonExportableElements(){ + d3.selectAll(".hidden-in-export").style("display", null); + } + + exportMenu.createJSON_exportObject = function (){ + var i, j, k; // an index variable for the for-loops + + /** get data for exporter **/ + if (!graph.options().data()) {return {};} // return an empty json object + // extract onotology information; + var unfilteredData = graph.getUnfilteredData(); + var ontologyComment = graph.options().data()._comment; + var metaObj = graph.options().getGeneralMetaObject(); + var header = graph.options().data().header; + + if ( metaObj.iri && metaObj.iri !== header.iri ) { + header.iri = metaObj.iri; + } + if ( metaObj.title && metaObj.title !== header.title ) { + header.title = metaObj.title; + } + if ( metaObj.version && metaObj.version !== header.version ) { + header.version = metaObj.version; + } + if ( metaObj.author && metaObj.author !== header.author ) { + header.author = metaObj.author; + } + if ( metaObj.description && metaObj.description !== header.description ) { + header.description = metaObj.description; + } + + + var exportText = {}; + exportText._comment = ontologyComment; + exportText.header = header; + exportText.namespace = graph.options().data().namespace; + if ( exportText.namespace === undefined ) { + exportText.namespace = []; // just an empty namespace array + } + // we do have now the unfiltered data which needs to be transfered to class/classAttribute and property/propertyAttribute + + + // var classAttributeString='classAttribute:[ \n'; + var nodes = unfilteredData.nodes; + var nLen = nodes.length; // hope for compiler unroll + var classObjects = []; + var classAttributeObjects = []; + for ( i = 0; i < nLen; i++ ) { + var classObj = {}; + var classAttr = {}; + classObj.id = nodes[i].id(); + classObj.type = nodes[i].type(); + classObjects.push(classObj); + + // define the attributes object + classAttr.id = nodes[i].id(); + classAttr.iri = nodes[i].iri(); + classAttr.baseIri = nodes[i].baseIri(); + classAttr.label = nodes[i].label(); + + if ( nodes[i].attributes().length > 0 ) { + classAttr.attributes = nodes[i].attributes(); + } + if ( nodes[i].comment() ) { + classAttr.comment = nodes[i].comment(); + } + if ( nodes[i].annotations() ) { + classAttr.annotations = nodes[i].annotations(); + } + if ( nodes[i].description() ) { + classAttr.description = nodes[i].description(); + } + + + if ( nodes[i].individuals().length > 0 ) { + var classIndividualElements = []; + var nIndividuals = nodes[i].individuals(); + for ( j = 0; j < nIndividuals.length; j++ ) { + var indObj = {}; + indObj.iri = nIndividuals[j].iri(); + indObj.baseIri = nIndividuals[j].baseIri(); + indObj.labels = nIndividuals[j].label(); + if ( nIndividuals[j].annotations() ) { + indObj.annotations = nIndividuals[j].annotations(); + } + if ( nIndividuals[j].description() ) { + indObj.description = nIndividuals[j].description(); + } + if ( nIndividuals[j].comment() ) { + indObj.comment = nIndividuals[j].comment(); + } + classIndividualElements.push(indObj); + } + classAttr.individuals = classIndividualElements; + } + + var equalsForAttributes = undefined; + if ( nodes[i].equivalents().length > 0 ) { + equalsForAttributes = []; + var equals = nodes[i].equivalents(); + for ( j = 0; j < equals.length; j++ ) { + var eqObj = {}; + var eqAttr = {}; + eqObj.id = equals[j].id(); + equalsForAttributes.push(equals[j].id()); + eqObj.type = equals[j].type(); + classObjects.push(eqObj); + + eqAttr.id = equals[j].id(); + eqAttr.iri = equals[j].iri(); + eqAttr.baseIri = equals[j].baseIri(); + eqAttr.label = equals[j].label(); + + if ( equals[j].attributes().length > 0 ) { + eqAttr.attributes = equals[j].attributes(); + } + if ( equals[j].comment() ) { + eqAttr.comment = equals[j].comment(); + } + if ( equals[j].individuals().length > 0 ) { + eqAttr.individuals = equals[j].individuals(); + } + if ( equals[j].annotations() ) { + eqAttr.annotations = equals[j].annotations(); + } + if ( equals[j].description() ) { + eqAttr.description = equals[j].description(); + } + + if ( equals[j].individuals().length > 0 ) { + var e_classIndividualElements = []; + var e_nIndividuals = equals[i].individuals(); + for ( k = 0; k < e_nIndividuals.length; k++ ) { + var e_indObj = {}; + e_indObj.iri = e_nIndividuals[k].iri(); + e_indObj.baseIri = e_nIndividuals[k].baseIri(); + e_indObj.labels = e_nIndividuals[k].label(); + + if ( e_nIndividuals[k].annotations() ) { + e_indObj.annotations = e_nIndividuals[k].annotations(); + } + if ( e_nIndividuals[k].description() ) { + e_indObj.description = e_nIndividuals[k].description(); + } + if ( e_nIndividuals[k].comment() ) { + e_indObj.comment = e_nIndividuals[k].comment(); + } + e_classIndividualElements.push(e_indObj); + } + eqAttr.individuals = e_classIndividualElements; + } + + classAttributeObjects.push(eqAttr); + } + } + if ( equalsForAttributes && equalsForAttributes.length > 0 ) { + classAttr.equivalent = equalsForAttributes; + } + + // classAttr.subClasses=nodes[i].subClasses(); // not needed + // classAttr.instances=nodes[i].instances(); + + // + // .complement(element.complement) + // .disjointUnion(element.disjointUnion) + // .description(element.description) + // .equivalents(element.equivalent) + // .intersection(element.intersection) + // .type(element.type) Ignore, because we predefined it + // .union(element.union) + classAttributeObjects.push(classAttr); + } + + /** -- properties -- **/ + var properties = unfilteredData.properties; + var pLen = properties.length; // hope for compiler unroll + var propertyObjects = []; + var propertyAttributeObjects = []; + + for ( i = 0; i < pLen; i++ ) { + var pObj = {}; + var pAttr = {}; + pObj.id = properties[i].id(); + pObj.type = properties[i].type(); + propertyObjects.push(pObj); + + // // define the attributes object + pAttr.id = properties[i].id(); + pAttr.iri = properties[i].iri(); + pAttr.baseIri = properties[i].baseIri(); + pAttr.label = properties[i].label(); + + if ( properties[i].attributes().length > 0 ) { + pAttr.attributes = properties[i].attributes(); + } + if ( properties[i].comment() ) { + pAttr.comment = properties[i].comment(); + } + + if ( properties[i].annotations() ) { + pAttr.annotations = properties[i].annotations(); + } + if ( properties[i].maxCardinality() ) { + pAttr.maxCardinality = properties[i].maxCardinality(); + } + if ( properties[i].minCardinality() ) { + pAttr.minCardinality = properties[i].minCardinality(); + } + if ( properties[i].cardinality() ) { + pAttr.cardinality = properties[i].cardinality(); + } + if ( properties[i].description() ) { + pAttr.description = properties[i].description(); + } + + pAttr.domain = properties[i].domain().id(); + pAttr.range = properties[i].range().id(); + // sub properties; + if ( properties[i].subproperties() ) { + var subProps = properties[i].subproperties(); + var subPropsIdArray = []; + for ( j = 0; j < subProps.length; j++ ) { + if ( subProps[j].id ) + subPropsIdArray.push(subProps[j].id()); + } + pAttr.subproperty = subPropsIdArray; + } + + // super properties + if ( properties[i].superproperties() ) { + var superProps = properties[i].superproperties(); + var superPropsIdArray = []; + for ( j = 0; j < superProps.length; j++ ) { + if ( superProps[j].id ) + superPropsIdArray.push(superProps[j].id()); + } + pAttr.superproperty = superPropsIdArray; + } + + // check for inverse element + if ( properties[i].inverse() ) { + if ( properties[i].inverse().id ) + pAttr.inverse = properties[i].inverse().id(); + } + propertyAttributeObjects.push(pAttr); + } + + exportText.class = classObjects; + exportText.classAttribute = classAttributeObjects; + exportText.property = propertyObjects; + exportText.propertyAttribute = propertyAttributeObjects; + + + var nodeElements = graph.graphNodeElements(); // get visible nodes + var propElements = graph.graphLabelElements(); // get visible labels + // var jsonObj = JSON.parse(exportableJsonText); // reparse the original input json + + /** modify comment **/ + var comment = exportText._comment; + var additionalString = " [Additional Information added by WebVOWL Exporter Version: " + "1.1.7" + "]"; + // adding new string to comment only if it does not exist + if ( comment.indexOf(additionalString) === -1 ) { + exportText._comment = comment + " [Additional Information added by WebVOWL Exporter Version: " + "1.1.7" + "]"; + } + + var classAttribute = exportText.classAttribute; + var propAttribute = exportText.propertyAttribute; + /** remove previously stored variables **/ + for ( i = 0; i < classAttribute.length; i++ ) { + var classObj_del = classAttribute[i]; + delete classObj_del.pos; + delete classObj_del.pinned; + } + var propertyObj; + for ( i = 0; i < propAttribute.length; i++ ) { + propertyObj = propAttribute[i]; + delete propertyObj.pos; + delete propertyObj.pinned; + } + /** add new variables to jsonObj **/ + // class attribute variables + nodeElements.each(function ( node ){ + var nodeId = node.id(); + for ( i = 0; i < classAttribute.length; i++ ) { + var classObj = classAttribute[i]; + if ( classObj.id === nodeId ) { + // store relative positions + classObj.pos = [parseFloat(node.x.toFixed(2)), parseFloat(node.y.toFixed(2))]; + if ( node.pinned() ) + classObj.pinned = true; + break; + } + } + }); + // property attribute variables + for ( j = 0; j < propElements.length; j++ ) { + var correspondingProp = propElements[j].property(); + for ( i = 0; i < propAttribute.length; i++ ) { + propertyObj = propAttribute[i]; + if ( propertyObj.id === correspondingProp.id() ) { + propertyObj.pos = [parseFloat(propElements[j].x.toFixed(2)), parseFloat(propElements[j].y.toFixed(2))]; + if ( propElements[j].pinned() ) + propertyObj.pinned = true; + break; + } + } + } + /** create the variable for settings and set their values **/ + exportText.settings = {}; + + // Global Settings + var zoom = graph.scaleFactor(); + var paused = graph.paused(); + var translation = [parseFloat(graph.translation()[0].toFixed(2)), parseFloat(graph.translation()[1].toFixed(2))]; + exportText.settings.global = {}; + exportText.settings.global.zoom = zoom.toFixed(2); + exportText.settings.global.translation = translation; + exportText.settings.global.paused = paused; + + // shared variable declaration + var cb_text; + var isEnabled; + var cb_obj; + + // Gravity Settings + var classDistance = graph.options().classDistance(); + var datatypeDistance = graph.options().datatypeDistance(); + exportText.settings.gravity = {}; + exportText.settings.gravity.classDistance = classDistance; + exportText.settings.gravity.datatypeDistance = datatypeDistance; + + // Filter Settings + var fMenu = graph.options().filterMenu(); + var fContainer = fMenu.getCheckBoxContainer(); + var cbCont = []; + for ( i = 0; i < fContainer.length; i++ ) { + cb_text = fContainer[i].checkbox.attr("id"); + isEnabled = fContainer[i].checkbox.property("checked"); + cb_obj = {}; + cb_obj.id = cb_text; + cb_obj.checked = isEnabled; + cbCont.push(cb_obj); + } + var degreeSliderVal = fMenu.getDegreeSliderValue(); + exportText.settings.filter = {}; + exportText.settings.filter.checkBox = cbCont; + exportText.settings.filter.degreeSliderValue = degreeSliderVal; + + // Modes Settings + var mMenu = graph.options().modeMenu(); + var mContainer = mMenu.getCheckBoxContainer(); + var cb_modes = []; + for ( i = 0; i < mContainer.length; i++ ) { + cb_text = mContainer[i].attr("id"); + isEnabled = mContainer[i].property("checked"); + cb_obj = {}; + cb_obj.id = cb_text; + cb_obj.checked = isEnabled; + cb_modes.push(cb_obj); + } + var colorSwitchState = mMenu.colorModeState(); + exportText.settings.modes = {}; + exportText.settings.modes.checkBox = cb_modes; + exportText.settings.modes.colorSwitchState = colorSwitchState; + + var exportObj = {}; + // todo: [ ] find better way for ordering the objects + // hack for ordering of objects, so settings is after metrics + exportObj._comment = exportText._comment; + exportObj.header = exportText.header; + exportObj.namespace = exportText.namespace; + exportObj.metrics = exportText.metrics; + exportObj.settings = exportText.settings; + exportObj.class = exportText.class; + exportObj.classAttribute = exportText.classAttribute; + exportObj.property = exportText.property; + exportObj.propertyAttribute = exportText.propertyAttribute; + + return exportObj; + }; + + function exportJson(){ + graph.options().navigationMenu().hideAllMenus(); + /** check if there is data **/ + if ( !exportableJsonText ) { + alert("No graph data available."); + // Stop the redirection to the path of the href attribute + d3.event.preventDefault(); + return; + } + + var exportObj = exportMenu.createJSON_exportObject(); + + // make a string again; + var exportText = JSON.stringify(exportObj, null, ' '); + // write the data + var dataURI = "data:text/json;charset=utf-8," + encodeURIComponent(exportText); + var jsonExportFileName = exportFilename; + + if ( !jsonExportFileName.endsWith(".json") ) + jsonExportFileName += ".json"; + exportJsonButton.attr("href", dataURI) + .attr("download", jsonExportFileName); + } + + var curveFunction = d3.svg.line() + .x(function ( d ){ + return d.x; + }) + .y(function ( d ){ + return d.y; + }) + .interpolate("cardinal"); + var loopFunction = d3.svg.line() + .x(function ( d ){ + return d.x; + }) + .y(function ( d ){ + return d.y; + }) + .interpolate("cardinal") + .tension(-1); + + function exportTex(){ + var zoom = graph.scaleFactor(); + var grTranslate = graph.translation(); + var bbox = graph.getBoundingBoxForTex(); + var comment = " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n"; + comment += " % Generated with the experimental alpha version of the TeX exporter of WebVOWL (version 1.1.3) %%% \n"; + comment += " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\n"; + comment += " % The content can be used as import in other TeX documents. \n"; + comment += " % Parent document has to use the following packages \n"; + comment += " % \\usepackage{tikz} \n"; + comment += " % \\usepackage{helvet} \n"; + comment += " % \\usetikzlibrary{decorations.markings,decorations.shapes,decorations,arrows,automata,backgrounds,petri,shapes.geometric} \n"; + comment += " % \\usepackage{xcolor} \n\n"; + comment += " %%%%%%%%%%%%%%% Example Parent Document %%%%%%%%%%%%%%%%%%%%%%%\n"; + comment += " %\\documentclass{article} \n"; + comment += " %\\usepackage{tikz} \n"; + comment += " %\\usepackage{helvet} \n"; + comment += " %\\usetikzlibrary{decorations.markings,decorations.shapes,decorations,arrows,automata,backgrounds,petri,shapes.geometric} \n"; + comment += " %\\usepackage{xcolor} \n\n"; + comment += " %\\begin{document} \n"; + comment += " %\\section{Example} \n"; + comment += " % This is an example. \n"; + comment += " % \\begin{figure} \n"; + comment += " % \\input{} % << tex file name for the graph \n"; + comment += " % \\caption{A generated graph with TKIZ using alpha version of the TeX exporter of WebVOWL (version 1.1.3) } \n"; + comment += " % \\end{figure} \n"; + comment += " %\\end{document} \n"; + comment += " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\n"; + + + var texString = comment + "\\definecolor{imageBGCOLOR}{HTML}{FFFFFF} \n" + + "\\definecolor{owlClassColor}{HTML}{AACCFF}\n" + + "\\definecolor{owlObjectPropertyColor}{HTML}{AACCFF}\n" + + "\\definecolor{owlExternalClassColor}{HTML}{AACCFF}\n" + + "\\definecolor{owlDatatypePropertyColor}{HTML}{99CC66}\n" + + "\\definecolor{owlDatatypeColor}{HTML}{FFCC33}\n" + + "\\definecolor{owlThingColor}{HTML}{FFFFFF}\n" + + "\\definecolor{valuesFrom}{HTML}{6699CC}\n" + + "\\definecolor{rdfPropertyColor}{HTML}{CC99CC}\n" + + "\\definecolor{unionColor}{HTML}{6699cc}\n" + + "\\begin{center} \n" + + "\\resizebox{\\linewidth}{!}{\n" + + + "\\begin{tikzpicture}[framed]\n" + + "\\clip (" + bbox[0] + "pt , " + bbox[1] + "pt ) rectangle (" + bbox[2] + "pt , " + bbox[3] + "pt);\n" + + "\\tikzstyle{dashed}=[dash pattern=on 4pt off 4pt] \n" + + "\\tikzstyle{dotted}=[dash pattern=on 2pt off 2pt] \n" + + "\\fontfamily{sans-serif}{\\fontsize{12}{12}\\selectfont}\n \n"; + + + texString += "\\tikzset{triangleBlack/.style = {fill=black, draw=black, line width=1pt,scale=0.7,regular polygon, regular polygon sides=3} }\n"; + texString += "\\tikzset{triangleWhite/.style = {fill=white, draw=black, line width=1pt,scale=0.7,regular polygon, regular polygon sides=3} }\n"; + texString += "\\tikzset{triangleBlue/.style = {fill=valuesFrom, draw=valuesFrom, line width=1pt,scale=0.7,regular polygon, regular polygon sides=3} }\n"; + + texString += "\\tikzset{Diamond/.style = {fill=white, draw=black, line width=2pt,scale=1.2,regular polygon, regular polygon sides=4} }\n"; + + + texString += "\\tikzset{Literal/.style={rectangle,align=center,\n" + + "font={\\fontsize{12pt}{12}\\selectfont \\sffamily },\n" + + "black, draw=black, dashed, line width=1pt, fill=owlDatatypeColor, minimum width=80pt,\n" + + "minimum height = 20pt}}\n\n"; + + texString += "\\tikzset{Datatype/.style={rectangle,align=center,\n" + + "font={\\fontsize{12pt}{12}\\selectfont \\sffamily },\n" + + "black, draw=black, line width=1pt, fill=owlDatatypeColor, minimum width=80pt,\n" + + "minimum height = 20pt}}\n\n"; + + + texString += "\\tikzset{owlClass/.style={circle, inner sep=0mm,align=center, \n" + + "font={\\fontsize{12pt}{12}\\selectfont \\sffamily },\n" + + "black, draw=black, line width=1pt, fill=owlClassColor, minimum size=101pt}}\n\n"; + + texString += "\\tikzset{anonymousClass/.style={circle, inner sep=0mm,align=center, \n" + + "font={\\fontsize{12pt}{12}\\selectfont \\sffamily },\n" + + "black, dashed, draw=black, line width=1pt, fill=owlClassColor, minimum size=101pt}}\n\n"; + + + texString += "\\tikzset{owlThing/.style={circle, inner sep=0mm,align=center,\n" + + "font={\\fontsize{12pt}{12}\\selectfont \\sffamily },\n" + + "black, dashed, draw=black, line width=1pt, fill=owlThingColor, minimum size=62pt}}\n\n"; + + + texString += "\\tikzset{owlObjectProperty/.style={rectangle,align=center,\n" + + "inner sep=0mm,\n" + + "font={\\fontsize{12pt}{12}\\selectfont \\sffamily },\n" + + "fill=owlObjectPropertyColor, minimum width=80pt,\n" + + "minimum height = 25pt}}\n\n"; + + texString += "\\tikzset{rdfProperty/.style={rectangle,align=center,\n" + + "inner sep=0mm,\n" + + "font={\\fontsize{12pt}{12}\\selectfont \\sffamily },\n" + + "fill=rdfPropertyColor, minimum width=80pt,\n" + + "minimum height = 25pt}}\n\n"; + + + texString += "\\tikzset{owlDatatypeProperty/.style={rectangle,align=center,\n" + + "fill=owlDatatypePropertyColor, minimum width=80pt,\n" + + "inner sep=0mm,\n" + + "font={\\fontsize{12pt}{12}\\selectfont \\sffamily },\n" + + "minimum height = 25pt}}\n\n"; + + texString += "\\tikzset{rdfsSubClassOf/.style={rectangle,align=center,\n" + + "font={\\fontsize{12pt}{12}\\selectfont \\sffamily },\n" + + "inner sep=0mm,\n" + + "fill=imageBGCOLOR, minimum width=80pt,\n" + + "minimum height = 25pt}}\n\n"; + + texString += "\\tikzset{unionOf/.style={circle, inner sep=0mm,align=center,\n" + + "font={\\fontsize{12pt}{12}\\selectfont \\sffamily },\n" + + "black, draw=black, line width=1pt, fill=unionColor, minimum size=25pt}}\n\n"; + + texString += "\\tikzset{disjointWith/.style={circle, inner sep=0mm,align=center,\n" + + "font={\\fontsize{12pt}{12}\\selectfont \\sffamily },\n" + + "black, draw=black, line width=1pt, fill=unionColor, minimum size=20pt}}\n\n"; + + + texString += "\\tikzset{owlEquivalentClass/.style={circle,align=center,\n" + + "font={\\fontsize{12pt}{12}\\selectfont \\sffamily },\n" + + "inner sep=0mm,\n" + + "black, solid, draw=black, line width=3pt, fill=owlExternalClassColor, minimum size=101pt,\n" + + "postaction = {draw,line width=1pt, white}}}\n\n"; + + // draw a bounding box; + + // get bbox coordinates; + + + graph.options().navigationMenu().hideAllMenus(); + /** check if there is data **/ + if ( !exportableJsonText ) { + alert("No graph data available."); + // Stop the redirection to the path of the href attribute + d3.event.preventDefault(); + return; + } + + var i = 0, identifier; + + /** get data for exporter **/ + var nodeElements = graph.graphNodeElements(); // get visible nodes + var propElements = graph.graphLabelElements(); // get visible labels + var links = graph.graphLinkElements(); + + // export only nodes; + // draw Links; + for ( i = 0; i < links.length; i++ ) { + var link = links[i]; + // console.log("\n****************\nInverstigating Link for property "+link.property().labelForCurrentLanguage()); + + var prop = link.property(); + var dx, dy, px, py, rx, ry; + var colorStr = "black"; + var linkDomainIntersection; + var linkRangeIntersection; + var center; + var linkStyle = ""; + var isLoop = ""; + var curvePoint; + var pathStart; + var pathEnd; + var controlPoints; + var len; + var ahAngle; + var pathLen; + var markerOffset = 7; + + var arrowType = "triangleBlack"; + var linkWidth = ",line width=2pt"; + if ( prop.linkType ) { + if ( prop.linkType() === "dotted" ) { + //stroke-dasharray: 3; + linkStyle = ", dotted "; + arrowType = "triangleWhite"; + } + if ( prop.linkType() === "dashed" ) { + //stroke-dasharray: 3; + linkStyle = ", dashed "; + } + + if ( prop.linkType() === "values-from" ) { + colorStr = "valuesFrom"; + } + + } + + var startX, startY, endX, endY, normX, normY, lg; + + if ( link.layers().length === 1 && !link.loops() ) { + + linkDomainIntersection = graph.math().calculateIntersection(link.range(), link.domain(), 1); + linkRangeIntersection = graph.math().calculateIntersection(link.domain(), link.range(), 1); + center = graph.math().calculateCenter(linkDomainIntersection, linkRangeIntersection); + dx = linkDomainIntersection.x; + dy = -linkDomainIntersection.y; + px = center.x; + py = -center.y; + rx = linkRangeIntersection.x; + ry = -linkRangeIntersection.y; + + + pathStart = linkDomainIntersection; + curvePoint = center; + pathEnd = linkRangeIntersection; + + var nx = rx - px; + var ny = ry - py; + + // normalize ; + len = Math.sqrt(nx * nx + ny * ny); + + nx = nx / len; + ny = ny / len; + + ahAngle = Math.atan2(ny, nx) * (180 / Math.PI); + normX = nx; + normY = ny; + } + else { + if ( link.isLoop() ) { + isLoop = ", tension=3"; + controlPoints = graph.math().calculateLoopPoints(link); + pathStart = controlPoints[0]; + curvePoint = controlPoints[1]; + pathEnd = controlPoints[2]; + } else { + curvePoint = link.label(); + pathStart = graph.math().calculateIntersection(curvePoint, link.domain(), 1); + pathEnd = graph.math().calculateIntersection(curvePoint, link.range(), 1); + } + dx = pathStart.x; + dy = -pathStart.y; + px = curvePoint.x; + py = -curvePoint.y; + rx = pathEnd.x; + ry = -pathEnd.y; + } + + texString += "\\draw [" + colorStr + linkStyle + linkWidth + isLoop + "] plot [smooth] coordinates {(" + + dx + "pt, " + dy + "pt) (" + px + "pt, " + py + "pt) (" + rx + "pt, " + ry + "pt)};\n"; + + + if ( link.property().markerElement() === undefined ) continue; + + // add arrow head; + + + if ( link.property().type() === "owl:someValuesFrom" || link.property().type() === "owl:allValuesFrom" ) { + arrowType = "triangleBlue"; + } + + lg = link.pathObj(); + pathLen = Math.floor(lg.node().getTotalLength()); + var p1 = lg.node().getPointAtLength(pathLen - 4); + var p2 = lg.node().getPointAtLength(pathLen); + var markerCenter = lg.node().getPointAtLength(pathLen - 6); + + if ( link.property().type() === "setOperatorProperty" ) { + p1 = lg.node().getPointAtLength(4); + p2 = lg.node().getPointAtLength(0); + markerCenter = lg.node().getPointAtLength(8); + arrowType = "Diamond"; + } + + startX = p1.x; + startY = p1.y; + endX = p2.x; + endY = p2.y; + normX = endX - startX; + normY = endY - startY; + len = Math.sqrt(normX * normX + normY * normY); + normX = normX / len; + normY = normY / len; + + ahAngle = -1.0 * Math.atan2(normY, normX) * (180 / Math.PI); + ahAngle -= 90; + if ( link.property().type() === "setOperatorProperty" ) { + ahAngle -= 45; + } + // console.log(link.property().labelForCurrentLanguage()+ ": "+normX+ " "+normY +" "+ahAngle); + rx = markerCenter.x; + ry = markerCenter.y; + if ( link.layers().length === 1 && !link.loops() ) { + // markerOffset=-1*m + ry = -1 * ry; + texString += "\\node[" + arrowType + ", rotate=" + ahAngle + "] at (" + rx + "pt, " + ry + "pt) (single_marker" + i + ") {};\n "; + } else { + ry = -1 * ry; + texString += "\\node[" + arrowType + ", rotate=" + ahAngle + "] at (" + rx + "pt, " + ry + "pt) (marker" + i + ") {};\n "; + } + + // if (link.isLoop()){ + // rotAngle=-10+angle * (180 / Math.PI); + // } + + // add cardinality; + var cardinalityText = link.property().generateCardinalityText(); + if ( cardinalityText && cardinalityText.length > 0 ) { + var cardinalityCenter = lg.node().getPointAtLength(pathLen - 18); + var cx = cardinalityCenter.x - (10 * normY); + var cy = cardinalityCenter.y + (10 * normX); // using orthonormal y Coordinate + cy *= -1.0; + var textColor = "black"; + if ( cardinalityText.indexOf("A") > -1 ) { + cardinalityText = "$\\forall$"; + } + if ( cardinalityText.indexOf("E") > -1 ) { + cardinalityText = "$\\exists$"; + } + + + texString += "\\node[font={\\fontsize{12pt}{12}\\selectfont \\sffamily },text=" + textColor + "] at (" + cx + "pt, " + cy + "pt) (cardinalityText" + i + ") {" + cardinalityText + "};\n "; + } + + + if ( link.property().inverse() ) { + lg = link.pathObj(); + pathLen = Math.floor(lg.node().getTotalLength()); + var p1_inv = lg.node().getPointAtLength(4); + var p2_inv = lg.node().getPointAtLength(0); + var markerCenter_inv = lg.node().getPointAtLength(6); + startX = p1_inv.x; + startY = p1_inv.y; + endX = p2_inv.x; + endY = p2_inv.y; + normX = endX - startX; + normY = endY - startY; + len = Math.sqrt(normX * normX + normY * normY); + normX = normX / len; + normY = normY / len; + + ahAngle = -1.0 * Math.atan2(normY, normX) * (180 / Math.PI); + ahAngle -= 90; + // console.log("INV>>\n "+link.property().inverse().labelForCurrentLanguage()+ ": "+normX+ " "+normY +" "+ahAngle); + rx = markerCenter_inv.x; + ry = markerCenter_inv.y; + if ( link.layers().length === 1 && !link.loops() ) { + // markerOffset=-1*m + ry = -1 * ry; + texString += "\\node[" + arrowType + ", rotate=" + ahAngle + "] at (" + rx + "pt, " + ry + "pt) (INV_single_marker" + i + ") {};\n "; + } else { + ry = -1 * ry; + texString += "\\node[" + arrowType + ", rotate=" + ahAngle + "] at (" + rx + "pt, " + ry + "pt) (INV_marker" + i + ") {};\n "; + } + } + + + } + + + nodeElements.each(function ( node ){ + + px = node.x; + py = -node.y; + identifier = node.labelForCurrentLanguage(); + // console.log("Writing : "+ identifier); + if ( identifier === undefined ) identifier = ""; + var qType = "owlClass"; + if ( node.type() === "owl:Thing" || node.type() === "owl:Nothing" ) + qType = "owlThing"; + + if ( node.type() === "owl:equivalentClass" ) { + qType = "owlEquivalentClass"; + } + var textColorStr = ""; + if ( node.textBlock ) { + var txtColor = node.textBlock()._textBlock().style("fill"); + if ( txtColor === "rgb(0, 0, 0)" ) { + textColorStr = ", text=black"; + } + if ( txtColor === "rgb(255, 255, 255)" ) { + textColorStr = ", text=white"; + } + + + var tspans = node.textBlock()._textBlock().node().children; + if ( tspans[0] ) { + identifier = tspans[0].innerHTML; + if ( node.individuals() && node.individuals().length === parseInt(tspans[0].innerHTML) ) { + identifier = "{\\color{gray} " + tspans[0].innerHTML + " }"; + } + for ( var t = 1; t < tspans.length; t++ ) { + if ( node.individuals() && node.individuals().length === parseInt(tspans[t].innerHTML) ) { + identifier += "\\\\ {\\color{gray} " + tspans[t].innerHTML + " }"; + } else { + identifier += "\\\\ {\\small " + tspans[t].innerHTML + " }"; + } + } + } + } + if ( node.type() === "rdfs:Literal" ) { + qType = "Literal"; + } + if ( node.type() === "rdfs:Datatype" ) { + qType = "Datatype"; + } + if ( node.attributes().indexOf("anonymous") !== -1 ) { + qType = "anonymousClass"; + } + + + if ( node.type() === "owl:unionOf" || node.type() === "owl:complementOf" || node.type() === "owl:disjointUnionOf" || node.type() === "owl:intersectionOf" ) + qType = "owlClass"; + + var bgColorStr = ""; + var widthString = ""; + + if ( node.type() === "rdfs:Literal" || node.type() === "rdfs:Datatype" ) { + var width = node.width(); + widthString = ",minimum width=" + width + "pt"; + } + else { + widthString = ",minimum size=" + 2 * node.actualRadius() + "pt"; + + } + if ( node.backgroundColor() ) { + var bgColor = node.backgroundColor(); + bgColor.toUpperCase(); + bgColor = bgColor.slice(1, bgColor.length); + texString += "\\definecolor{Node" + i + "_COLOR}{HTML}{" + bgColor + "} \n "; + bgColorStr = ", fill=Node" + i + "_COLOR "; + } + if ( node.attributes().indexOf("deprecated") > -1 ) { + texString += "\\definecolor{Node" + i + "_COLOR}{HTML}{CCCCCC} \n "; + bgColorStr = ", fill=Node" + i + "_COLOR "; + } + + var leftPos = px - 7; + var rightPos = px + 7; + var txtOffset = py + 20; + if ( node.type() !== "owl:unionOf" || node.type() !== "owl:disjointUnionOf" ) { + texString += "\\node[" + qType + " " + widthString + " " + bgColorStr + " " + textColorStr + "] at (" + px + "pt, " + py + "pt) (Node" + i + ") {" + identifier.replaceAll("_", "\\_ ") + "};\n"; + } + if ( node.type() === "owl:unionOf" ) { + // add symbol to it; + texString += "\\node[" + qType + " " + widthString + " " + bgColorStr + " " + textColorStr + "] at (" + px + "pt, " + py + "pt) (Node" + i + ") {};\n"; + texString += "\\node[unionOf , text=black] at (" + leftPos + "pt, " + py + "pt) (SymbolNode" + i + ") {};\n"; + texString += "\\node[unionOf , text=black] at (" + rightPos + "pt, " + py + "pt) (SymbolNode" + i + ") {};\n"; + texString += "\\node[unionOf ,fill=none , text=black] at (" + leftPos + "pt, " + py + "pt) (SymbolNode" + i + ") {};\n"; + texString += "\\node[text=black] at (" + px + "pt, " + py + "pt) (unionText13) {$\\mathbf{\\cup}$};\n"; + texString += "\\node[font={\\fontsize{12pt}{12}\\selectfont \\sffamily }" + textColorStr + "] at (" + px + "pt, " + txtOffset + "pt) (Node_text" + i + ") {" + identifier.replaceAll("_", "\\_ ") + "};\n"; + } + // OWL DISJOINT UNION OF + if ( node.type() === "owl:disjointUnionOf" ) { + texString += "\\node[" + qType + " " + widthString + " " + bgColorStr + " " + textColorStr + "] at (" + px + "pt, " + py + "pt) (Node" + i + ") {};\n"; + texString += "\\node[unionOf , text=black] at (" + leftPos + "pt, " + py + "pt) (SymbolNode" + i + ") {};\n"; + texString += "\\node[unionOf , text=black] at (" + rightPos + "pt, " + py + "pt) (SymbolNode" + i + ") {};\n"; + texString += "\\node[unionOf ,fill=none , text=black] at (" + leftPos + "pt, " + py + "pt) (SymbolNode" + i + ") {};\n"; + texString += "\\node[font={\\fontsize{12pt}{12}\\selectfont \\sffamily }" + textColorStr + "] at (" + px + "pt, " + py + "pt) (disjointUnoinText" + i + ") {1};\n"; + texString += "\\node[font={\\fontsize{12pt}{12}\\selectfont \\sffamily }" + textColorStr + "] at (" + px + "pt, " + txtOffset + "pt) (Node_text" + i + ") {" + identifier.replaceAll("_", "\\_ ") + "};\n"; + } + // OWL COMPLEMENT OF + if ( node.type() === "owl:complementOf" ) { + // add symbol to it; + texString += "\\node[" + qType + " " + widthString + " " + bgColorStr + " " + textColorStr + "] at (" + px + "pt, " + py + "pt) (Node" + i + ") {};\n"; + texString += "\\node[unionOf , text=black] at (" + px + "pt, " + py + "pt) (SymbolNode" + i + ") {};\n"; + texString += "\\node[font={\\fontsize{18pt}{18}\\selectfont \\sffamily }" + textColorStr + "] at (" + px + "pt, " + py + "pt) (unionText13) {$\\neg$};\n"; + texString += "\\node[font={\\fontsize{12pt}{12}\\selectfont \\sffamily }" + textColorStr + "] at (" + px + "pt, " + txtOffset + "pt) (Node_text" + i + ") {" + identifier.replaceAll("_", "\\_ ") + "};\n"; + } + // OWL INTERSECTION OF + if ( node.type() === "owl:intersectionOf" ) { + texString += "\\node[" + qType + " " + widthString + " " + bgColorStr + " " + textColorStr + "] at (" + px + "pt, " + py + "pt) (Node" + i + ") {};\n"; + texString += "\\node[unionOf , text=black] at (" + leftPos + "pt, " + py + "pt) (SymbolNode" + i + ") {};\n"; + texString += "\\node[unionOf , text=black] at (" + rightPos + "pt, " + py + "pt) (SymbolNode" + i + ") {};\n"; + texString += "\\node[unionOf ,fill=none , text=black] at (" + leftPos + "pt, " + py + "pt) (SymbolNode" + i + ") {};\n"; + + // add now the outer colors; + texString += "\\filldraw[even odd rule,fill=owlClassColor,line width=1pt] (" + leftPos + "pt, " + py + "pt) circle (12.5pt) (" + rightPos + "pt, " + py + "pt) circle (12.5pt);\n "; + + // add texts + texString += "\\node[font={\\fontsize{12pt}{12}\\selectfont \\sffamily }" + textColorStr + "] at (" + px + "pt, " + py + "pt) (intersectionText" + i + ") {$\\cap$};\n"; + texString += "\\node[font={\\fontsize{12pt}{12}\\selectfont \\sffamily }" + textColorStr + "] at (" + px + "pt, " + txtOffset + "pt) (Node_text" + i + ") {" + identifier.replaceAll("_", "\\_ ") + "};\n"; + + } + + + i++; + + }); + for ( i = 0; i < propElements.length; i++ ) { + var correspondingProp = propElements[i].property(); + var p_px = propElements[i].x; + var p_py = -propElements[i].y; + identifier = correspondingProp.labelForCurrentLanguage(); + if ( identifier === undefined ) identifier = ""; + var textColorStr = ""; + if ( correspondingProp.textBlock && correspondingProp.textBlock() ) { + var txtColor = correspondingProp.textBlock()._textBlock().style("fill"); + // console.log("PropertyTextColor="+txtColor); + if ( txtColor === "rgb(0, 0, 0)" ) { + textColorStr = ", text=black"; + } + if ( txtColor === "rgb(255, 255, 255)" ) { + textColorStr = ", text=white"; + } + var tspans = correspondingProp.textBlock()._textBlock().node().children; + + // identifier=node.textBlock()._textBlock().text(); + // console.log(tspans); + if ( tspans[0] ) { + identifier = tspans[0].innerHTML; + + for ( var t = 1; t < tspans.length; t++ ) { + var spanText = tspans[t].innerHTML; + if ( spanText.indexOf("(") > -1 ) { + identifier += "\\\\ {\\small " + tspans[t].innerHTML + " }"; + } + else { + identifier += "\\\\ " + tspans[t].innerHTML; + } + } + } + else { + } + } + if ( correspondingProp.type() === "setOperatorProperty" ) { + continue; // this property does not have a label + } + var qType = "owlObjectProperty"; + if ( correspondingProp.type() === "owl:DatatypeProperty" ) { + qType = "owlDatatypeProperty"; + } + if ( correspondingProp.type() === "rdfs:subClassOf" ) { + qType = "rdfsSubClassOf"; + } + if ( correspondingProp.type() === "rdf:Property" ) { + qType = "rdfProperty"; + } + + + var bgColorStr = ""; + if ( correspondingProp.backgroundColor() ) { + // console.log("Found backGround color"); + var bgColor = correspondingProp.backgroundColor(); + //console.log(bgColor); + bgColor.toUpperCase(); + bgColor = bgColor.slice(1, bgColor.length); + texString += "\\definecolor{property" + i + "_COLOR}{HTML}{" + bgColor + "} \n "; + bgColorStr = ", fill=property" + i + "_COLOR "; + } + if ( correspondingProp.attributes().indexOf("deprecated") > -1 ) { + texString += "\\definecolor{property" + i + "_COLOR}{HTML}{CCCCCC} \n "; + bgColorStr = ", fill=property" + i + "_COLOR "; + } + + var widthString = ""; + var width = correspondingProp.textWidth(); + widthString = ",minimum width=" + width + "pt"; + + + // OWL INTERSECTION OF + if ( correspondingProp.type() === "owl:disjointWith" ) { + var leftPos = p_px - 12; + var rightPos = p_px + 12; + var txtOffset = p_py - 20; + texString += "\\node[" + qType + " " + widthString + " " + bgColorStr + " " + textColorStr + "] at (" + p_px + "pt, " + p_py + "pt) (Node" + i + ") {};\n"; + texString += "\\node[disjointWith , text=black] at (" + leftPos + "pt, " + p_py + "pt) (SymbolNode" + i + ") {};\n"; + texString += "\\node[disjointWith , text=black] at (" + rightPos + "pt, " + p_py + "pt) (SymbolNode" + i + ") {};\n"; + texString += "\\node[font={\\fontsize{12pt}{12}\\selectfont \\sffamily }" + textColorStr + "] at (" + p_px + "pt, " + txtOffset + "pt) (Node_text" + i + ") {"; + if ( graph.options().compactNotation() === false ) { + texString += "(disjoint)"; + } + texString += "};\n"; + continue; + } + + + if ( correspondingProp.inverse() ) { + var inv_correspondingProp = correspondingProp.inverse(); + // create the rendering element for the inverse property; + var inv_identifier = inv_correspondingProp.labelForCurrentLanguage(); + if ( inv_identifier === undefined ) inv_identifier = ""; + var inv_textColorStr = ""; + //console.log(inv_correspondingProp); + //console.log(inv_correspondingProp.textBlock()); + + if ( inv_correspondingProp.textBlock && inv_correspondingProp.textBlock() ) { + + var inv_txtColor = inv_correspondingProp.textBlock()._textBlock().style("fill"); + // console.log("PropertyTextColor="+inv_txtColor); + if ( inv_txtColor === "rgb(0, 0, 0)" ) { + inv_textColorStr = ", text=black"; + } + if ( inv_txtColor === "rgb(255, 255, 255)" ) { + inv_textColorStr = ", text=white"; + } + var inv_tspans = inv_correspondingProp.textBlock()._textBlock().node().children; + + // identifier=node.textBlock()._textBlock().text(); + // console.log(inv_tspans); + if ( inv_tspans[0] ) { + inv_identifier = inv_tspans[0].innerHTML; + + for ( var inv_t = 1; inv_t < inv_tspans.length; inv_t++ ) { + var ispanText = inv_tspans[inv_t].innerHTML; + if ( ispanText.indexOf("(") > -1 ) { + inv_identifier += "\\\\ {\\small " + inv_tspans[inv_t].innerHTML + " }"; + } else { + inv_identifier += "\\\\ " + inv_tspans[inv_t].innerHTML; + } + } + } + } + var inv_qType = "owlObjectProperty"; + var inv_bgColorStr = ""; + + if ( inv_correspondingProp.backgroundColor() ) { + // console.log("Found backGround color"); + var inv_bgColor = inv_correspondingProp.backgroundColor(); + // console.log(inv_bgColor); + inv_bgColor.toUpperCase(); + inv_bgColor = inv_bgColor.slice(1, inv_bgColor.length); + texString += "\\definecolor{inv_property" + i + "_COLOR}{HTML}{" + inv_bgColor + "} \n "; + inv_bgColorStr = ", fill=inv_property" + i + "_COLOR "; + } + if ( inv_correspondingProp.attributes().indexOf("deprecated") > -1 ) { + texString += "\\definecolor{inv_property" + i + "_COLOR}{HTML}{CCCCCC} \n "; + inv_bgColorStr = ", fill=inv_property" + i + "_COLOR "; + } + + var inv_widthString = ""; + var inv_width = inv_correspondingProp.textWidth(); + + var pOY1 = p_py - 14; + var pOY2 = p_py + 14; + inv_widthString = ",minimum width=" + inv_width + "pt"; + texString += "% Createing Inverse Property \n"; + texString += "\\node[" + inv_qType + " " + inv_widthString + " " + inv_bgColorStr + " " + inv_textColorStr + "] at (" + p_px + "pt, " + pOY1 + "pt) (property" + i + ") {" + inv_identifier.replaceAll("_", "\\_ ") + "};\n"; + texString += "% " + inv_qType + " vs " + qType + "\n"; + texString += "% " + inv_widthString + " vs " + widthString + "\n"; + texString += "% " + inv_bgColorStr + " vs " + bgColorStr + "\n"; + texString += "% " + inv_textColorStr + " vs " + textColorStr + "\n"; + + texString += "\\node[" + qType + " " + widthString + " " + bgColorStr + " " + textColorStr + "] at (" + p_px + "pt, " + pOY2 + "pt) (property" + i + ") {" + identifier.replaceAll("_", "\\_ ") + "};\n"; + + } else { + texString += "\\node[" + qType + " " + widthString + " " + bgColorStr + " " + textColorStr + "] at (" + p_px + "pt, " + p_py + "pt) (property" + i + ") {" + identifier.replaceAll("_", "\\_ ") + "};\n"; + } + } + + texString += "\\end{tikzpicture}\n}\n \\end{center}\n"; + + // console.log("Tex Output\n"+ texString); + var dataURI = "data:text/json;charset=utf-8," + encodeURIComponent(texString); + exportTexButton.attr("href", dataURI) + .attr("download", exportFilename + ".tex"); + + + } + + function calculateRadian( angle ){ + angle = angle % 360; + if ( angle < 0 ) { + angle = angle + 360; + } + return (Math.PI * angle) / 180; + } + + function calculateAngle( radian ){ + return radian * (180 / Math.PI); + } + + return exportMenu; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 324: +/***/ (function(module, exports) { + + /** + * Contains the logic for the export button. + * @returns {{}} + */ + module.exports = function ( graph ){ + var exportTTLModule = {}; + var resultingTTLContent = ""; + var currentNodes; + var currentProperties; + var currentAxioms; + var Map_ID2Node = {}; + var Map_ID2Prop = {}; + var prefixModule = webvowl.util.prefixTools(graph); + + exportTTLModule.requestExport = function (){ + prefixModule.updatePrefixModel(); + resultingTTLContent = ""; + currentNodes = graph.getClassDataForTtlExport(); + var i; + for ( i = 0; i < currentNodes.length; i++ ) { + Map_ID2Node[currentNodes[i].id()] = currentNodes[i]; + } + currentProperties = graph.getPropertyDataForTtlExport(); + + for ( i = 0; i < currentProperties.length; i++ ) { + Map_ID2Prop[currentProperties[i].id()] = currentProperties[i]; + } + + + prepareHeader(); + preparePrefixList(); + prepareOntologyDef(); + resultingTTLContent += "#################################################################\r\n\r\n"; + preparePrefixRepresentation(); + var property_success = exportProperties(); + var class_success = exportClasses(); + currentNodes = null; + currentProperties = null; + Map_ID2Node = {}; + Map_ID2Prop = {}; + if ( property_success === false || class_success === false ) + return false; + return true; + + }; + + function preparePrefixRepresentation(){ + var i; + var allNodes = graph.getUnfilteredData().nodes; + var allProps = graph.getUnfilteredData().properties; + for ( i = 0; i < allNodes.length; i++ ) { + var nodeIRI = prefixModule.getPrefixRepresentationForFullURI(allNodes[i].iri()); + if ( prefixModule.validURL(nodeIRI) === true ) + allNodes[i].prefixRepresentation = "<" + nodeIRI + ">"; + else + allNodes[i].prefixRepresentation = nodeIRI; + } + for ( i = 0; i < allProps.length; i++ ) { + var propIRI = prefixModule.getPrefixRepresentationForFullURI(allProps[i].iri()); + if ( prefixModule.validURL(propIRI) === true ) + allProps[i].prefixRepresentation = "<" + propIRI + ">"; + else + allProps[i].prefixRepresentation = propIRI; + } + } + + function exportProperties(){ + if ( currentProperties.length === 0 ) return; // we dont need to write that + resultingTTLContent += "### Property Definitions (Number of Property) " + currentProperties.length + " ###\r\n"; + for ( var i = 0; i < currentProperties.length; i++ ) { + + resultingTTLContent += "# --------------------------- Property " + i + "------------------------- \r\n"; + var addedElement = extractPropertyDescription(currentProperties[i]); + resultingTTLContent += addedElement; + //@ workaround for not supported elements + if ( addedElement.indexOf("WHYEMPTYNAME") !== -1 ) { + return false; + } + } + return true; + } + + + function exportClasses(){ + if ( currentNodes.length === 0 ) return; // we dont need to write that + resultingTTLContent += "### Class Definitions (Number of Classes) " + currentNodes.length + " ###\r\n"; + for ( var i = 0; i < currentNodes.length; i++ ) { + // check for node type here and return false + resultingTTLContent += "# --------------------------- Class " + i + "------------------------- \r\n"; + var addedElement = extractClassDescription(currentNodes[i]); + resultingTTLContent += addedElement; + + if ( addedElement.indexOf("WHYEMPTYNAME") !== -1 ) { + return false; + } + } + return true; + } + + function getPresentAttribute( selectedElement, element ){ + var attr = selectedElement.attributes(); + return (attr.indexOf(element) >= 0); + } + + function extractClassDescription( node ){ + var subject = node.prefixRepresentation; + var predicate = "rdf:type"; + var object = node.type(); + if ( node.type() === "owl:equivalentClass" ) + object = "owl:Class"; + if ( node.type() === "owl:disjointUnionOf" ) + object = "owl:Class"; + if ( node.type() === "owl:unionOf" ) + object = "owl:Class"; + var arrayOfNodes = []; + var arrayOfUnionNodes = []; + + if ( node.union() ) { + var union = node.union(); + for ( var u = 0; u < union.length; u++ ) { + var u_node = Map_ID2Node[union[u]]; + arrayOfUnionNodes.push(u_node); + } + } + + if ( node.disjointUnion() ) { + var distUnion = node.disjointUnion(); + for ( var du = 0; du < distUnion.length; du++ ) { + var du_node = Map_ID2Node[distUnion[du]]; + arrayOfNodes.push(du_node); + } + } + + var objectDef = subject + " " + predicate + " " + object; + if ( getPresentAttribute(node, "deprecated") === true ) { + objectDef += ", owl:DeprecatedProperty"; + } + // equivalent class handeled using type itself! + + // check for equivalent classes; + var indent = getIndent(subject); + objectDef += "; \r\n"; + for ( var e = 0; e < node.equivalents().length; e++ ) { + var eqIRI = prefixModule.getPrefixRepresentationForFullURI(node.equivalents()[e].iri()); + var eqNode_prefRepresentation = ""; + if ( prefixModule.validURL(eqIRI) === true ) + eqNode_prefRepresentation = "<" + eqIRI + ">"; + else + eqNode_prefRepresentation = eqIRI; + objectDef += indent + " owl:equivalentClass " + eqNode_prefRepresentation + " ;\r\n"; + } + + // if (getPresentAttribute(node,"equivalent")===true){ + // objectDef+=", owl:EquivalentClass"; + // } + + // add Comments + + if ( node.commentForCurrentLanguage() ) { + + objectDef += indent + " rdfs:comment \"" + node.commentForCurrentLanguage() + "\" ;\r\n"; + } + + if ( node.annotations() ) { + var annotations = node.annotations(); + for ( var an in annotations ) { + if ( annotations.hasOwnProperty(an) ) { + var anArrayObj = annotations[an]; + var anObj = anArrayObj[0]; + var an_ident = anObj.identifier; + var an_val = anObj.value; + + if ( an_ident === "isDefinedBy" ) { + objectDef += indent + " rdfs:isDefinedBy <" + an_val + "> ;\r\n"; + } + if ( an_ident === "term_status" ) { + objectDef += indent + " vs:term_status \"" + an_val + "\" ;\r\n"; + } + } + } + } + + + if ( arrayOfNodes.length > 0 ) { + // add disjoint unionOf + objectDef += indent + " owl:disjointUnionOf ("; + for ( var duE = 0; duE < arrayOfNodes.length; duE++ ) { + var duIri = prefixModule.getPrefixRepresentationForFullURI(arrayOfNodes[duE].iri()); + var duNode_prefRepresentation = ""; + if ( prefixModule.validURL(duIri) === true ) + duNode_prefRepresentation = "<" + duIri + ">"; + else + duNode_prefRepresentation = duIri; + objectDef += indent + indent + duNode_prefRepresentation + " \n"; + } + objectDef += ") ;\r\n"; + } + + if ( arrayOfUnionNodes.length > 0 ) { + // add disjoint unionOf + objectDef += indent + " rdfs:subClassOf [ rdf:type owl:Class ; \r\n"; + objectDef += indent + indent + " owl:unionOf ( "; + + for ( var uE = 0; uE < arrayOfUnionNodes.length; uE++ ) { + + if ( arrayOfUnionNodes[uE] && arrayOfUnionNodes[uE].iri() ) { + var uIri = prefixModule.getPrefixRepresentationForFullURI(arrayOfUnionNodes[uE].iri()); + var uNode_prefRepresentation = ""; + if ( prefixModule.validURL(uIri) === true ) + uNode_prefRepresentation = "<" + uIri + ">"; + else + uNode_prefRepresentation = uIri; + objectDef += indent + indent + indent + uNode_prefRepresentation + " \n"; + } + } + objectDef += ") ;\r\n"; + + + } + + + var allProps = graph.getUnfilteredData().properties; + var myProperties = []; + var i; + for ( i = 0; i < allProps.length; i++ ) { + if ( allProps[i].domain() === node && + ( allProps[i].type() === "rdfs:subClassOf" || + allProps[i].type() === "owl:allValuesFrom" || + allProps[i].type() === "owl:someValuesFrom") + ) { + myProperties.push(allProps[i]); + } + // special case disjoint with>> both domain and range get that property + if ( (allProps[i].domain() === node) && + allProps[i].type() === "owl:disjointWith" ) { + myProperties.push(allProps[i]); + } + + } + for ( i = 0; i < myProperties.length; i++ ) { + // depending on the property we have to do some things; + + // special case + if ( myProperties[i].type() === "owl:someValuesFrom" ) { + objectDef += indent + " rdfs:subClassOf [ rdf:type owl:Restriction ; \r\n"; + objectDef += indent + " owl:onProperty " + myProperties[i].prefixRepresentation + ";\r\n"; + if ( myProperties[i].range().type() !== "owl:Thing" ) { + objectDef += indent + " owl:someValuesFrom " + myProperties[i].range().prefixRepresentation + "\r\n"; + } + objectDef += indent + " ];\r\n"; + continue; + } + + if ( myProperties[i].type() === "owl:allValuesFrom" ) { + objectDef += indent + " rdfs:subClassOf [ rdf:type owl:Restriction ; \r\n"; + objectDef += indent + " owl:onProperty " + myProperties[i].prefixRepresentation + ";\r\n"; + if ( myProperties[i].range().type() !== "owl:Thing" ) { + objectDef += indent + " owl:allValuesFrom " + myProperties[i].range().prefixRepresentation + "\r\n"; + } + objectDef += indent + " ];\r\n"; + continue; + } + + if ( myProperties[i].range().type() !== "owl:Thing" ) { + objectDef += indent + " " + myProperties[i].prefixRepresentation + + " " + myProperties[i].range().prefixRepresentation + " ;\r\n"; + + + } + } + + + objectDef += general_Label_languageExtractor(indent, node.label(), "rdfs:label", true); + return objectDef; + + } + + function extractPropertyDescription( property ){ + var subject = property.prefixRepresentation; + if ( subject.length === 0 ) { + console.log("THIS SHOULD NOT HAPPEN"); + var propIRI = prefixModule.getPrefixRepresentationForFullURI(property.iri()); + console.log("FOUND " + propIRI); + + + } + var predicate = "rdf:type"; + var object = property.type(); + + var objectDef = subject + " " + predicate + " " + object; + if ( getPresentAttribute(property, "deprecated") === true ) { + objectDef += ", owl:DeprecatedProperty"; + } + if ( getPresentAttribute(property, "functional") === true ) { + objectDef += ", owl:FunctionalProperty"; + } + if ( getPresentAttribute(property, "inverse functional") === true ) { + objectDef += ", owl:InverseFunctionalProperty"; + } + if ( getPresentAttribute(property, "symmetric") === true ) { + objectDef += ", owl:SymmetricProperty"; + } + if ( getPresentAttribute(property, "transitive") === true ) { + objectDef += ", owl:TransitiveProperty"; + } + var indent = getIndent(subject); + + if ( property.inverse() ) { + objectDef += "; \r\n"; + objectDef += indent + " owl:inverseOf " + property.inverse().prefixRepresentation; + } + + // check for domain and range; + + + var closeStatement = false; + var domain = property.domain(); + var range = property.range(); + + + objectDef += " ;\r\n"; + + + if ( property.commentForCurrentLanguage() ) { + + objectDef += indent + " rdfs:comment \"" + property.commentForCurrentLanguage() + "\" ;\r\n"; + } + + if ( property.superproperties() ) { + var superProps = property.superproperties(); + for ( var sP = 0; sP < superProps.length; sP++ ) { + var sPelement = superProps[sP]; + objectDef += indent + "rdfs:subPropertyOf " + sPelement.prefixRepresentation + ";\r\n"; + } + // for (var an in annotations){ + // if (annotations.hasOwnProperty(an)){ + // var anArrayObj=annotations[an]; + // var anObj=anArrayObj[0]; + // var an_ident=anObj.identifier; + // var an_val=anObj.value; + // console.log(an_ident + " "+ an_val); + // + // if (an_ident==="isDefinedBy"){ + // objectDef+=indent+" rdfs:isDefinedBy <"+an_val+"> ;\r\n"; + // } + // if (an_ident==="term_status"){ + // objectDef+=indent+" vs:term_status \""+an_val+"\" ;\r\n"; + // } + // } + // } + + } + + if ( property.annotations() ) { + var annotations = property.annotations(); + for ( var an in annotations ) { + if ( annotations.hasOwnProperty(an) ) { + var anArrayObj = annotations[an]; + var anObj = anArrayObj[0]; + var an_ident = anObj.identifier; + var an_val = anObj.value; + + if ( an_ident === "isDefinedBy" ) { + objectDef += indent + " rdfs:isDefinedBy <" + an_val + "> ;\r\n"; + } + if ( an_ident === "term_status" ) { + objectDef += indent + " vs:term_status \"" + an_val + "\" ;\r\n"; + } + } + } + } + + + if ( domain.type() === "owl:Thing" && range.type() === "owl:Thing" ) { + // we do not write domain and range + if ( typeof property.label() !== "object" && property.label().length === 0 ) { + closeStatement = true; + } + } + + + if ( closeStatement === true ) { + var uobjectDef = objectDef.substring(0, objectDef.length - 2); + objectDef = uobjectDef + " . \r\n"; + return objectDef; + } + // objectDef+="; \r\n"; + var labelDescription; + + + if ( domain.type() === "owl:Thing" && range.type() === "owl:Thing" ) { + labelDescription = general_Label_languageExtractor(indent, property.label(), "rdfs:label", true); + objectDef += labelDescription; + } + else { + // do not close the statement; + labelDescription = general_Label_languageExtractor(indent, property.label(), "rdfs:label"); + objectDef += labelDescription; + if ( domain.type() !== "owl:Thing" ) { + objectDef += indent + " rdfs:domain " + domain.prefixRepresentation + ";\r\n"; + } + if ( range.type() !== "owl:Thing" ) { + objectDef += indent + " rdfs:range " + range.prefixRepresentation + ";\r\n"; + } + + // close statement now; + + var s_needUpdate = objectDef; + var s_lastPtr = s_needUpdate.lastIndexOf(";"); + objectDef = s_needUpdate.substring(0, s_lastPtr) + " . \r\n"; + } + + return objectDef; + + } + + + exportTTLModule.resultingTTL_Content = function (){ + return resultingTTLContent; + }; + + function getIndent( name ){ + if ( name === undefined ) { + return "WHYEMPTYNAME?"; + } + return new Array(name.length + 1).join(" "); + } + + function prepareHeader(){ + resultingTTLContent += "#################################################################\r\n"; + resultingTTLContent += "### Generated with the experimental alpha version of the TTL exporter of WebVOWL (version 1.1.7) " + + " http://visualdataweb.de/webvowl/ ###\r\n"; + resultingTTLContent += "#################################################################\r\n\r\n"; + + } + + function preparePrefixList(){ + var ontoIri = graph.options().getGeneralMetaObjectProperty('iri'); + var prefixList = graph.options().prefixList(); + var prefixDef = []; + prefixDef.push('@prefix : \t\t<' + ontoIri + '> .'); + for ( var name in prefixList ) { + if ( prefixList.hasOwnProperty(name) ) { + prefixDef.push('@prefix ' + name + ': \t\t<' + prefixList[name] + '> .'); + } + } + prefixDef.push('@base \t\t\t<' + ontoIri + '> .\r\n'); + + for ( var i = 0; i < prefixDef.length; i++ ) { + resultingTTLContent += prefixDef[i] + '\r\n'; + } + } + + function prepareOntologyDef(){ + var ontoIri = graph.options().getGeneralMetaObjectProperty('iri'); + var indent = getIndent('<' + ontoIri + '>'); + resultingTTLContent += '<' + ontoIri + '> rdf:type owl:Ontology ;\r\n' + + getOntologyTitle(indent) + + getOntologyDescription(indent) + + getOntologyVersion(indent) + + getOntologyAuthor(indent); + + // close the statement; + var s_needUpdate = resultingTTLContent; + var s_lastPtr = s_needUpdate.lastIndexOf(";"); + resultingTTLContent = s_needUpdate.substring(0, s_lastPtr) + " . \r\n"; + } + + function getOntologyTitle( indent ){ + return general_languageExtractor(indent, "title", "dc:title"); + } + + function getOntologyDescription( indent ){ + return general_languageExtractor(indent, "description", "dc:description"); + } + + function getOntologyAuthor( indent ){ + var languageElement = graph.options().getGeneralMetaObjectProperty('author'); + if ( languageElement ) { + if ( typeof languageElement !== "object" ) { + if ( languageElement.length === 0 ) + return ""; // an empty string + var aString = indent + " dc:creator " + '"' + languageElement + '";\r\n'; + return aString; + } + // we assume this thing is an array; + var authorString = indent + " dc:creator " + '"'; + for ( var i = 0; i < languageElement.length - 1; i++ ) { + authorString += languageElement[i] + ", "; + } + authorString += languageElement[languageElement.length - 1] + '";\r\n'; + return authorString; + } else { + return ""; // an empty string + } + } + + function getOntologyVersion( indent ){ + var languageElement = graph.options().getGeneralMetaObjectProperty('version'); + if ( languageElement ) { + if ( typeof languageElement !== "object" ) { + if ( languageElement.length === 0 ) + return ""; // an empty string + } + return general_languageExtractor(indent, "version", "owl:versionInfo"); + } else return ""; // an empty string + } + + function general_languageExtractor( indent, metaObjectDescription, annotationDescription, endStatement ){ + var languageElement = graph.options().getGeneralMetaObjectProperty(metaObjectDescription); + + if ( typeof languageElement === 'object' ) { + + var resultingLanguages = []; + for ( var name in languageElement ) { + if ( languageElement.hasOwnProperty(name) ) { + var content = languageElement[name]; + if ( name === "undefined" ) { + resultingLanguages.push(indent + " " + annotationDescription + ' "' + content + '"@en; \r\n'); + } + else { + resultingLanguages.push(indent + " " + annotationDescription + ' "' + content + '"@' + name + '; \r\n'); + } + } + } + // create resulting titles; + + var resultingString = ""; + for ( var i = 0; i < resultingLanguages.length; i++ ) { + resultingString += resultingLanguages[i]; + } + if ( endStatement && endStatement === true ) { + var needUpdate = resultingString; + var lastPtr = needUpdate.lastIndexOf(";"); + return needUpdate.substring(0, lastPtr) + ". \r\n"; + } else { + return resultingString; + } + + } else { + if ( endStatement && endStatement === true ) { + var s_needUpdate = indent + " " + annotationDescription + ' "' + languageElement + '"@en; \r\n'; + var s_lastPtr = s_needUpdate.lastIndexOf(";"); + return s_needUpdate.substring(0, s_lastPtr) + " . \r\n"; + } + return indent + " " + annotationDescription + ' "' + languageElement + '"@en;\r\n'; + } + } + + function general_Label_languageExtractor( indent, label, annotationDescription, endStatement ){ + var languageElement = label; + + if ( typeof languageElement === 'object' ) { + var resultingLanguages = []; + for ( var name in languageElement ) { + if ( languageElement.hasOwnProperty(name) ) { + var content = languageElement[name]; + if ( name === "undefined" ) { + resultingLanguages.push(indent + " " + annotationDescription + ' "' + content + '"@en; \r\n'); + } + else { + resultingLanguages.push(indent + " " + annotationDescription + ' "' + content + '"@' + name + '; \r\n'); + } + } + } + // create resulting titles; + var resultingString = ""; + for ( var i = 0; i < resultingLanguages.length; i++ ) { + resultingString += resultingLanguages[i]; + } + if ( endStatement && endStatement === true ) { + var needUpdate = resultingString; + var lastPtr = needUpdate.lastIndexOf(";"); + return needUpdate.substring(0, lastPtr) + " . \r\n"; + } else { + return resultingString; + } + + } else { + if ( endStatement && endStatement === true ) { + var s_needUpdate = indent + " " + annotationDescription + ' "' + languageElement + '"@en; \r\n'; + var s_lastPtr = s_needUpdate.lastIndexOf(";"); + return s_needUpdate.substring(0, s_lastPtr) + " . \r\n"; + } + return indent + " " + annotationDescription + ' "' + languageElement + '"@en; \r\n'; + } + } + + return exportTTLModule; + }; + + +/***/ }), + +/***/ 325: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains the logic for connecting the filters with the website. + * + * @param graph required for calling a refresh after a filter change + * @returns {{}} + */ + module.exports = function ( graph ){ + + var filterMenu = {}, + checkboxData = [], + menuElement = d3.select("#m_filter"), + menuControl = d3.select("#c_filter a"), + nodeDegreeContainer = d3.select("#nodeDegreeFilteringOption"), + graphDegreeLevel, + defaultDegreeValue = 0, + degreeSlider; + + filterMenu.setDefaultDegreeValue = function ( val ){ + defaultDegreeValue = val; + }; + filterMenu.getDefaultDegreeValue = function (){ + return defaultDegreeValue; + }; + + filterMenu.getGraphObject = function (){ + return graph; + }; + /** some getter function **/ + filterMenu.getCheckBoxContainer = function (){ + return checkboxData; + }; + + filterMenu.getDegreeSliderValue = function (){ + return degreeSlider.property("value"); + }; + /** + * Connects the website with graph filters. + * @param datatypeFilter filter for all datatypes + * @param objectPropertyFilter filter for all object properties + * @param subclassFilter filter for all subclasses + * @param disjointFilter filter for all disjoint with properties + * @param setOperatorFilter filter for all set operators with properties + * @param nodeDegreeFilter filters nodes by their degree + */ + filterMenu.setup = function ( datatypeFilter, objectPropertyFilter, subclassFilter, disjointFilter, setOperatorFilter, nodeDegreeFilter ){ + // TODO: is this here really necessarry? << new menu visualization style? + menuControl.on("mouseover", function (){ + var searchMenu = graph.options().searchMenu(); + searchMenu.hideSearchEntries(); + }); + menuControl.on("mouseleave", function (){ + filterMenu.highlightForDegreeSlider(false); + }); + + addFilterItem(datatypeFilter, "datatype", "Datatype properties", "#datatypeFilteringOption"); + addFilterItem(objectPropertyFilter, "objectProperty", "Object properties", "#objectPropertyFilteringOption"); + addFilterItem(subclassFilter, "subclass", "Solitary subclasses", "#subclassFilteringOption"); + addFilterItem(disjointFilter, "disjoint", "Class disjointness", "#disjointFilteringOption"); + addFilterItem(setOperatorFilter, "setoperator", "Set operators", "#setOperatorFilteringOption"); + + addNodeDegreeFilter(nodeDegreeFilter, nodeDegreeContainer); + addAnimationFinishedListener(); + }; + + + function addFilterItem( filter, identifier, pluralNameOfFilteredItems, selector ){ + var filterContainer, + filterCheckbox; + + filterContainer = d3.select(selector) + .append("div") + .classed("checkboxContainer", true); + + filterCheckbox = filterContainer.append("input") + .classed("filterCheckbox", true) + .attr("id", identifier + "FilterCheckbox") + .attr("type", "checkbox") + .property("checked", filter.enabled()); + + // Store for easier resetting + checkboxData.push({ checkbox: filterCheckbox, defaultState: filter.enabled() }); + + filterCheckbox.on("click", function ( silent ){ + // There might be no parameters passed because of a manual + // invocation when resetting the filters + var isEnabled = filterCheckbox.property("checked"); + filter.enabled(isEnabled); + if ( silent !== true ) { + // updating graph when silent is false or the parameter is not given. + graph.update(); + } + }); + + filterContainer.append("label") + .attr("for", identifier + "FilterCheckbox") + .text(pluralNameOfFilteredItems); + } + + function addNodeDegreeFilter( nodeDegreeFilter, container ){ + nodeDegreeFilter.setMaxDegreeSetter(function ( maxDegree ){ + degreeSlider.attr("max", maxDegree); + setSliderValue(degreeSlider, Math.min(maxDegree, degreeSlider.property("value"))); + }); + + nodeDegreeFilter.setDegreeGetter(function (){ + return degreeSlider.property("value"); + }); + + nodeDegreeFilter.setDegreeSetter(function ( value ){ + setSliderValue(degreeSlider, value); + }); + + var sliderContainer, + sliderValueLabel; + + sliderContainer = container.append("div") + .classed("distanceSliderContainer", true); + + degreeSlider = sliderContainer.append("input") + .attr("id", "nodeDegreeDistanceSlider") + .attr("type", "range") + .attr("min", 0) + .attr("step", 1); + + sliderContainer.append("label") + .classed("description", true) + .attr("for", "nodeDegreeDistanceSlider") + .text("Degree of collapsing"); + + sliderValueLabel = sliderContainer.append("label") + .classed("value", true) + .attr("for", "nodeDegreeDistanceSlider") + .text(0); + + + degreeSlider.on("change", function ( silent ){ + if ( silent !== true ) { + graph.update(); + graphDegreeLevel = degreeSlider.property("value"); + } + }); + + + degreeSlider.on("input", function (){ + var degree = degreeSlider.property("value"); + sliderValueLabel.text(degree); + }); + + + // adding wheel events + degreeSlider.on("wheel", handleWheelEvent); + degreeSlider.on("focusout", function (){ + if ( degreeSlider.property("value") !== graphDegreeLevel ) { + graph.update(); + } + }); + } + + function handleWheelEvent(){ + var wheelEvent = d3.event; + + var offset; + if ( wheelEvent.deltaY < 0 ) offset = 1; + if ( wheelEvent.deltaY > 0 ) offset = -1; + var maxDeg = parseInt(degreeSlider.attr("max")); + var oldVal = parseInt(degreeSlider.property("value")); + var newSliderValue = oldVal + offset; + if ( oldVal !== newSliderValue && (newSliderValue >= 0 && newSliderValue <= maxDeg) ) { + // only update when they are different [reducing redundant updates] + // set the new value and emit an update signal + degreeSlider.property("value", newSliderValue); + degreeSlider.on("input")();// <<-- sets the text value + graph.update(); + } + d3.event.preventDefault(); + } + + function setSliderValue( slider, value ){ + slider.property("value", value).on("input")(); + } + + /** + * Resets the filters (and also filtered elements) to their default. + */ + filterMenu.reset = function (){ + checkboxData.forEach(function ( checkboxData ){ + var checkbox = checkboxData.checkbox, + enabledByDefault = checkboxData.defaultState, + isChecked = checkbox.property("checked"); + + if ( isChecked !== enabledByDefault ) { + checkbox.property("checked", enabledByDefault); + // Call onclick event handlers programmatically + checkbox.on("click")(); + } + }); + + setSliderValue(degreeSlider, 0); + degreeSlider.on("change")(); + }; + + function addAnimationFinishedListener(){ + menuControl.node().addEventListener("animationend", function (){ + menuControl.classed("buttonPulse", false); + menuControl.classed("filterMenuButtonHighlight", true); + + }); + } + + filterMenu.killButtonAnimation = function (){ + menuControl.classed("buttonPulse", false); + menuControl.classed("filterMenuButtonHighlight", false); + }; + + + filterMenu.highlightForDegreeSlider = function ( enable ){ + if ( !arguments.length ) { + enable = true; + } + menuControl.classed("highlighted", enable); + nodeDegreeContainer.classed("highlighted", enable); + // pulse button handling + if ( menuControl.classed("buttonPulse") === true && enable === true ) { + menuControl.classed("buttonPulse", false); + var timer = setTimeout(function (){ + menuControl.classed("buttonPulse", enable); + clearTimeout(timer); + // after the time is done, remove the pulse but stay highlighted + }, 100); + } else { + menuControl.classed("buttonPulse", enable); + menuControl.classed("filterMenuButtonHighlight", enable); + } + }; + + + /** importer functions **/ + // setting manually the values of the filter + // no update of the gui settings, these are updated in updateSettings + filterMenu.setCheckBoxValue = function ( id, checked ){ + for ( var i = 0; i < checkboxData.length; i++ ) { + var cbdId = checkboxData[i].checkbox.attr("id"); + if ( cbdId === id ) { + checkboxData[i].checkbox.property("checked", checked); + break; + } + } + }; + + filterMenu.getCheckBoxValue = function ( id ){ + for ( var i = 0; i < checkboxData.length; i++ ) { + var cbdId = checkboxData[i].checkbox.attr("id"); + if ( cbdId === id ) { + return checkboxData[i].checkbox.property("checked"); + + } + } + }; + // set the value of the slider + filterMenu.setDegreeSliderValue = function ( val ){ + degreeSlider.property("value", val); + }; + + filterMenu.getDegreeSliderValue = function (){ + return degreeSlider.property("value"); + }; + + // update the gui without invoking graph update (calling silent onclick function) + filterMenu.updateSettings = function (){ + var silent = true; + var sliderValue = degreeSlider.property("value"); + if ( sliderValue > 0 ) { + filterMenu.highlightForDegreeSlider(true); + } else { + filterMenu.highlightForDegreeSlider(false); + } + checkboxData.forEach(function ( checkboxData ){ + var checkbox = checkboxData.checkbox; + checkbox.on("click")(silent); + }); + + degreeSlider.on("input")(); + degreeSlider.on("change")(); + + }; + + return filterMenu; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 326: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains the logic for setting up the gravity sliders. + * + * @param graph the associated webvowl graph + * @returns {{}} + */ + module.exports = function ( graph ){ + + var gravityMenu = {}, + sliders = [], + options = graph.graphOptions(), + defaultCharge = options.charge(); + + + /** + * Adds the gravity sliders to the website. + */ + gravityMenu.setup = function (){ + var menuEntry = d3.select("#m_gravity"); + menuEntry.on("mouseover", function (){ + var searchMenu = graph.options().searchMenu(); + searchMenu.hideSearchEntries(); + }); + addDistanceSlider("#classSliderOption", "class", "Class distance", options.classDistance); + addDistanceSlider("#datatypeSliderOption", "datatype", "Datatype distance", options.datatypeDistance); + }; + + function addDistanceSlider( selector, identifier, label, distanceFunction ){ + var defaultLinkDistance = distanceFunction(); + + var sliderContainer, + sliderValueLabel; + + sliderContainer = d3.select(selector) + .append("div") + .datum({ distanceFunction: distanceFunction }) // connect the options-function with the slider + .classed("distanceSliderContainer", true); + + var slider = sliderContainer.append("input") + .attr("id", identifier + "DistanceSlider") + .attr("type", "range") + .attr("min", 10) + .attr("max", 600) + .attr("value", distanceFunction()) + .attr("step", 10); + + sliderContainer.append("label") + .classed("description", true) + .attr("for", identifier + "DistanceSlider") + .text(label); + + sliderValueLabel = sliderContainer.append("label") + .classed("value", true) + .attr("for", identifier + "DistanceSlider") + .text(distanceFunction()); + + // Store slider for easier resetting + sliders.push(slider); + + slider.on("focusout", function (){ + graph.updateStyle(); + }); + + slider.on("input", function (){ + var distance = slider.property("value"); + distanceFunction(distance); + adjustCharge(defaultLinkDistance); + sliderValueLabel.text(distance); + graph.updateStyle(); + }); + + // add wheel event to the slider + slider.on("wheel", function (){ + var wheelEvent = d3.event; + var offset; + if ( wheelEvent.deltaY < 0 ) offset = 10; + if ( wheelEvent.deltaY > 0 ) offset = -10; + var oldVal = parseInt(slider.property("value")); + var newSliderValue = oldVal + offset; + if ( newSliderValue !== oldVal ) { + slider.property("value", newSliderValue); + distanceFunction(newSliderValue); + slider.on("input")(); // << set text and update the graphStyles + } + d3.event.preventDefault(); + }); + } + + function adjustCharge( defaultLinkDistance ){ + var greaterDistance = Math.max(options.classDistance(), options.datatypeDistance()), + ratio = greaterDistance / defaultLinkDistance, + newCharge = defaultCharge * ratio; + + options.charge(newCharge); + } + + /** + * Resets the gravity sliders to their default. + */ + gravityMenu.reset = function (){ + sliders.forEach(function ( slider ){ + slider.property("value", function ( d ){ + // Simply reload the distance from the options + return d.distanceFunction(); + }); + slider.on("input")(); + }); + }; + + + return gravityMenu; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 327: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains the logic for connecting the modes with the website. + * + * @param graph the graph that belongs to these controls + * @returns {{}} + */ + module.exports = function ( graph ){ + + var SAME_COLOR_MODE = { text: "Multicolor", type: "same" }; + var GRADIENT_COLOR_MODE = { text: "Multicolor", type: "gradient" }; + + var modeMenu = {}, + checkboxes = [], + colorModeSwitch; + + var dynamicLabelWidthCheckBox; + // getter and setter for the state of color modes + modeMenu.colorModeState = function ( s ){ + if ( !arguments.length ) return colorModeSwitch.datum().active; + colorModeSwitch.datum().active = s; + return modeMenu; + }; + + + modeMenu.setDynamicLabelWidth = function ( val ){ + dynamicLabelWidthCheckBox.property("checked", val); + }; + // getter for checkboxes + modeMenu.getCheckBoxContainer = function (){ + return checkboxes; + }; + // getter for the color switch [needed? ] + modeMenu.colorModeSwitch = function (){ + return colorModeSwitch; + }; + + /** + * Connects the website with the available graph modes. + */ + modeMenu.setup = function ( pickAndPin, nodeScaling, compactNotation, colorExternals ){ + var menuEntry = d3.select("#m_modes"); + menuEntry.on("mouseover", function (){ + var searchMenu = graph.options().searchMenu(); + searchMenu.hideSearchEntries(); + }); + addCheckBoxD("labelWidth", "Dynamic label width", "#dynamicLabelWidth", graph.options().dynamicLabelWidth, 1); + addCheckBox("editorMode", "Editing ", "#editMode", graph.editorMode); + addModeItem(pickAndPin, "pickandpin", "Pick & pin", "#pickAndPinOption", false); + addModeItem(nodeScaling, "nodescaling", "Node scaling", "#nodeScalingOption", true); + addModeItem(compactNotation, "compactnotation", "Compact notation", "#compactNotationOption", true); + var container = addModeItem(colorExternals, "colorexternals", "Color externals", "#colorExternalsOption", true); + colorModeSwitch = addExternalModeSelection(container, colorExternals); + }; + function addCheckBoxD( identifier, modeName, selector, onChangeFunc, updateLvl ){ + var moduleOptionContainer = d3.select(selector) + .append("div") + .classed("checkboxContainer", true); + + var moduleCheckbox = moduleOptionContainer.append("input") + .classed("moduleCheckbox", true) + .attr("id", identifier + "ModuleCheckbox") + .attr("type", "checkbox") + .property("checked", onChangeFunc()); + + moduleCheckbox.on("click", function ( d ){ + var isEnabled = moduleCheckbox.property("checked"); + onChangeFunc(isEnabled); + d3.select("#maxLabelWidthSlider").node().disabled = !isEnabled; + d3.select("#maxLabelWidthvalueLabel").classed("disabledLabelForSlider", !isEnabled); + d3.select("#maxLabelWidthDescriptionLabel").classed("disabledLabelForSlider", !isEnabled); + + if ( updateLvl > 0 ) { + graph.animateDynamicLabelWidth(); + // graph.lazyRefresh(); + } + }); + moduleOptionContainer.append("label") + .attr("for", identifier + "ModuleCheckbox") + .text(modeName); + if ( identifier === "editorMode" ) { + moduleOptionContainer.append("label") + .attr("style", "font-size:10px;padding-top:3px") + .text("(experimental)"); + } + + dynamicLabelWidthCheckBox = moduleCheckbox; + } + + function addCheckBox( identifier, modeName, selector, onChangeFunc ){ + var moduleOptionContainer = d3.select(selector) + .append("div") + .classed("checkboxContainer", true); + + var moduleCheckbox = moduleOptionContainer.append("input") + .classed("moduleCheckbox", true) + .attr("id", identifier + "ModuleCheckbox") + .attr("type", "checkbox") + .property("checked", onChangeFunc()); + + moduleCheckbox.on("click", function ( d ){ + var isEnabled = moduleCheckbox.property("checked"); + onChangeFunc(isEnabled); + if ( isEnabled === true ) + graph.showEditorHintIfNeeded(); + }); + moduleOptionContainer.append("label") + .attr("for", identifier + "ModuleCheckbox") + .text(modeName); + if ( identifier === "editorMode" ) { + moduleOptionContainer.append("label") + .attr("style", "font-size:10px;padding-top:3px") + .text(" (experimental)"); + } + } + + function addModeItem( module, identifier, modeName, selector, updateGraphOnClick ){ + var moduleOptionContainer, + moduleCheckbox; + + moduleOptionContainer = d3.select(selector) + .append("div") + .classed("checkboxContainer", true) + .datum({ module: module, defaultState: module.enabled() }); + + moduleCheckbox = moduleOptionContainer.append("input") + .classed("moduleCheckbox", true) + .attr("id", identifier + "ModuleCheckbox") + .attr("type", "checkbox") + .property("checked", module.enabled()); + + // Store for easier resetting all modes + checkboxes.push(moduleCheckbox); + + moduleCheckbox.on("click", function ( d, silent ){ + var isEnabled = moduleCheckbox.property("checked"); + d.module.enabled(isEnabled); + if ( updateGraphOnClick && silent !== true ) { + graph.executeColorExternalsModule(); + graph.executeCompactNotationModule(); + graph.lazyRefresh(); + } + }); + + moduleOptionContainer.append("label") + .attr("for", identifier + "ModuleCheckbox") + .text(modeName); + + return moduleOptionContainer; + } + + function addExternalModeSelection( container, colorExternalsMode ){ + var button = container.append("button").datum({ active: false }).classed("color-mode-switch", true); + applyColorModeSwitchState(button, colorExternalsMode); + + button.on("click", function ( silent ){ + var data = button.datum(); + data.active = !data.active; + applyColorModeSwitchState(button, colorExternalsMode); + if ( colorExternalsMode.enabled() && silent !== true ) { + graph.executeColorExternalsModule(); + graph.lazyRefresh(); + } + }); + + return button; + } + + function applyColorModeSwitchState( element, colorExternalsMode ){ + var isActive = element.datum().active; + var activeColorMode = getColorModeByState(isActive); + + element.classed("active", isActive) + .text(activeColorMode.text); + + if ( colorExternalsMode ) { + colorExternalsMode.colorModeType(activeColorMode.type); + } + } + + function getColorModeByState( isActive ){ + return isActive ? GRADIENT_COLOR_MODE : SAME_COLOR_MODE; + } + + /** + * Resets the modes to their default. + */ + modeMenu.reset = function (){ + checkboxes.forEach(function ( checkbox ){ + var defaultState = checkbox.datum().defaultState, + isChecked = checkbox.property("checked"); + + if ( isChecked !== defaultState ) { + checkbox.property("checked", defaultState); + // Call onclick event handlers programmatically + checkbox.on("click")(checkbox.datum()); + } + + // Reset the module that is connected with the checkbox + checkbox.datum().module.reset(); + }); + + // set the switch to active and simulate disabling + colorModeSwitch.datum().active = true; + colorModeSwitch.on("click")(); + }; + + /** importer functions **/ + // setting manually the values of the filter + // no update of the gui settings, these are updated in updateSettings + modeMenu.setCheckBoxValue = function ( id, checked ){ + for ( var i = 0; i < checkboxes.length; i++ ) { + var cbdId = checkboxes[i].attr("id"); + + if ( cbdId === id ) { + checkboxes[i].property("checked", checked); + break; + } + } + }; + modeMenu.getCheckBoxValue = function ( id ){ + for ( var i = 0; i < checkboxes.length; i++ ) { + var cbdId = checkboxes[i].attr("id"); + if ( cbdId === id ) { + return checkboxes[i].property("checked"); + } + } + }; + + modeMenu.setColorSwitchState = function ( state ){ + // need the !state because we simulate later a click + modeMenu.colorModeState(!state); + }; + modeMenu.setColorSwitchStateUsingURL = function ( state ){ + // need the !state because we simulate later a click + modeMenu.colorModeState(!state); + colorModeSwitch.on("click")(true); + }; + + + modeMenu.updateSettingsUsingURL = function (){ + var silent = true; + checkboxes.forEach(function ( checkbox ){ + checkbox.on("click")(checkbox.datum(), silent); + }); + }; + + modeMenu.updateSettings = function (){ + var silent = true; + checkboxes.forEach(function ( checkbox ){ + checkbox.on("click")(checkbox.datum(), silent); + }); + // this simulates onclick and inverts its state + colorModeSwitch.on("click")(silent); + }; + return modeMenu; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 328: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {module.exports = function ( graph ){ + var debugMenu = {}, + checkboxes = []; + + + var hoverFlag = false; + var specialCbx; + debugMenu.setup = function (){ + var menuEntry = d3.select("#debugMenuHref"); + + menuEntry.on("mouseover", function (){ + if ( hoverFlag === false ) { + var searchMenu = graph.options().searchMenu(); + searchMenu.hideSearchEntries(); + specialCbx.on("click")(true); + if ( graph.editorMode() === false ) { + d3.select("#useAccuracyHelper").style("color", "#979797"); + d3.select("#useAccuracyHelper").style("pointer-events", "none"); + + // regardless the state on which useAccuracyHelper is , we are not in editing mode -> disable it + d3.select("#showDraggerObject").style("color", "#979797"); + d3.select("#showDraggerObject").style("pointer-events", "none"); + } else { + d3.select("#useAccuracyHelper").style("color", "#2980b9"); + d3.select("#useAccuracyHelper").style("pointer-events", "auto"); + } + hoverFlag = true; + } + }); + menuEntry.on("mouseout", function (){ + hoverFlag = false; + }); + + + specialCbx = addCheckBox("useAccuracyHelper", "Use accuracy helper", "#useAccuracyHelper", graph.options().useAccuracyHelper, + function ( enabled, silent ){ + if ( !enabled ) { + d3.select("#showDraggerObject").style("color", "#979797"); + d3.select("#showDraggerObject").style("pointer-events", "none"); + d3.select("#showDraggerObjectConfigCheckbox").node().checked = false; + } else { + d3.select("#showDraggerObject").style("color", "#2980b9"); + d3.select("#showDraggerObject").style("pointer-events", "auto"); + } + + if ( silent === true ) return; + graph.lazyRefresh(); + graph.updateDraggerElements(); + } + ); + addCheckBox("showDraggerObject", "Show accuracy helper", "#showDraggerObject", graph.options().showDraggerObject, + function ( enabled, silent ){ + if ( silent === true ) return; + graph.lazyRefresh(); + graph.updateDraggerElements(); + }); + addCheckBox("showFPS_Statistics", "Show rendering statistics", "#showFPS_Statistics", graph.options().showRenderingStatistic, + function ( enabled, silent ){ + + if ( graph.options().getHideDebugFeatures() === false ) { + d3.select("#FPS_Statistics").classed("hidden", !enabled); + } else { + d3.select("#FPS_Statistics").classed("hidden", true); + } + + + }); + addCheckBox("showModeOfOperation", "Show input modality", "#showModeOfOperation", graph.options().showInputModality, + function ( enabled ){ + if ( graph.options().getHideDebugFeatures() === false ) { + d3.select("#modeOfOperationString").classed("hidden", !enabled); + } else { + d3.select("#modeOfOperationString").classed("hidden", true); + } + }); + + + }; + + + function addCheckBox( identifier, modeName, selector, onChangeFunc, _callbackFunction ){ + var configOptionContainer = d3.select(selector) + .append("div") + .classed("checkboxContainer", true); + var configCheckbox = configOptionContainer.append("input") + .classed("moduleCheckbox", true) + .attr("id", identifier + "ConfigCheckbox") + .attr("type", "checkbox") + .property("checked", onChangeFunc()); + + + configCheckbox.on("click", function ( silent ){ + var isEnabled = configCheckbox.property("checked"); + onChangeFunc(isEnabled); + _callbackFunction(isEnabled, silent); + + }); + checkboxes.push(configCheckbox); + configOptionContainer.append("label") + .attr("for", identifier + "ConfigCheckbox") + .text(modeName); + + return configCheckbox; + } + + debugMenu.setCheckBoxValue = function ( identifier, value ){ + for ( var i = 0; i < checkboxes.length; i++ ) { + var cbdId = checkboxes[i].attr("id"); + if ( cbdId === identifier ) { + checkboxes[i].property("checked", value); + break; + } + } + }; + + debugMenu.getCheckBoxValue = function ( id ){ + for ( var i = 0; i < checkboxes.length; i++ ) { + var cbdId = checkboxes[i].attr("id"); + if ( cbdId === id ) { + return checkboxes[i].property("checked"); + } + } + }; + + debugMenu.updateSettings = function (){ + d3.selectAll(".debugOption").classed("hidden", graph.options().getHideDebugFeatures()); + + var silent = true; + checkboxes.forEach(function ( checkbox ){ + checkbox.on("click")(silent); + }); + if ( graph.editorMode() === false ) { + + d3.select("#useAccuracyHelper").style("color", "#979797"); + d3.select("#useAccuracyHelper").style("pointer-events", "none"); + + // regardless the state on which useAccuracyHelper is , we are not in editing mode -> disable it + d3.select("#showDraggerObject").style("color", "#979797"); + d3.select("#showDraggerObject").style("pointer-events", "none"); + } else { + + d3.select("#useAccuracyHelper").style("color", "#2980b9"); + d3.select("#useAccuracyHelper").style("pointer-events", "auto"); + } + + }; + + return debugMenu; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 329: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var unescape = __webpack_require__(330); + + module.exports = function ( graph ){ + + var ontologyMenu = {}, + loadingInfo = d3.select("#loading-info"), + loadingProgress = d3.select("#loading-progress"), + + ontologyMenuTimeout, + fileToLoad, + stopTimer = false, + loadingError = false, + loadingStatusTimer, + conversion_sessionId, + cachedConversions = {}, + loadingModule, + loadOntologyFromText; + var currentLoadedOntologyName = ""; + + String.prototype.beginsWith = function ( string ){ + return (this.indexOf(string) === 0); + }; + + ontologyMenu.getLoadingFunction = function (){ + return loadOntologyFromText; + }; + + ontologyMenu.clearCachedVersion = function (){ + if ( cachedConversions[currentLoadedOntologyName] ) { + cachedConversions[currentLoadedOntologyName] = undefined; + } + }; + + + ontologyMenu.reloadCachedOntology = function (){ + ontologyMenu.clearCachedVersion(); + graph.clearGraphData(); + loadingModule.parseUrlAndLoadOntology(false); + }; + + ontologyMenu.cachedOntology = function ( ontoName ){ + currentLoadedOntologyName = ontoName; + if ( cachedConversions[ontoName] ) { + var locStr = String(location.hash); + d3.select("#reloadSvgIcon").node().disabled = false; + graph.showReloadButtonAfterLayoutOptimization(true); + if ( locStr.indexOf("#file") > -1 ) { + d3.select("#reloadSvgIcon").node().disabled = true; + d3.select("#reloadCachedOntology").node().title = "reloading original version not possible, please reload the file"; + d3.select("#reloadSvgIcon").classed("disabledReloadElement", true); + d3.select("#svgStringText").style("fill", "gray"); + d3.select("#svgStringText").classed("noselect", true); + } + else { + d3.select("#reloadCachedOntology").node().title = "generate new visualization and overwrite cached ontology"; + d3.select("#reloadSvgIcon").classed("disabledReloadElement", false); + d3.select("#svgStringText").style("fill", "black"); + d3.select("#svgStringText").classed("noselect", true); + } + } else { + graph.showReloadButtonAfterLayoutOptimization(false); + + } + return cachedConversions[ontoName]; + }; + ontologyMenu.setCachedOntology = function ( ontoName, ontoContent ){ + cachedConversions[ontoName] = ontoContent; + currentLoadedOntologyName = ontoName; + }; + + ontologyMenu.getErrorStatus = function (){ + return loadingError; + }; + + ontologyMenu.setup = function ( _loadOntologyFromText ){ + loadOntologyFromText = _loadOntologyFromText; + loadingModule = graph.options().loadingModule(); + var menuEntry = d3.select("#m_select"); + menuEntry.on("mouseover", function (){ + var searchMenu = graph.options().searchMenu(); + searchMenu.hideSearchEntries(); + }); + + setupConverterButtons(); + setupUploadButton(); + + var descriptionButton = d3.select("#error-description-button").datum({ open: false }); + descriptionButton.on("click", function ( data ){ + var errorContainer = d3.select("#error-description-container"); + var errorDetailsButton = d3.select(this); + + // toggle the state + data.open = !data.open; + var descriptionVisible = data.open; + if ( descriptionVisible ) { + errorDetailsButton.text("Hide error details"); + } else { + errorDetailsButton.text("Show error details"); + } + errorContainer.classed("hidden", !descriptionVisible); + }); + + setupUriListener(); + loadingModule.setOntologyMenu(ontologyMenu); + }; + + + function setupUriListener(){ + // reload ontology when hash parameter gets changed manually + d3.select(window).on("hashchange", function (){ + var oldURL = d3.event.oldURL, newURL = d3.event.newURL; + if ( oldURL !== newURL ) { + // don't reload when just the hash parameter gets appended + if ( newURL === oldURL + "#" ) { + return; + } + updateNavigationHrefs(); + loadingModule.parseUrlAndLoadOntology(); + } + }); + updateNavigationHrefs(); + } + + ontologyMenu.stopLoadingTimer = function (){ + stopTimer = true; + clearTimeout(loadingStatusTimer); + }; + + /** + * Quick fix: update all anchor tags that are used as buttons because a click on them + * changes the url and this will load an other ontology. + */ + function updateNavigationHrefs(){ + d3.selectAll("#menuElementContainer > li > a").attr("href", location.hash || "#"); + } + + ontologyMenu.setIriText = function ( text ){ + d3.select("#iri-converter-input").node().value = text; + d3.select("#iri-converter-button").attr("disabled", false); + d3.select("#iri-converter-form").on("submit")(); + }; + + ontologyMenu.clearDetailInformation = function (){ + var bpContainer = d3.select("#bulletPoint_container"); + var htmlCollection = bpContainer.node().children; + var numEntries = htmlCollection.length; + + for ( var i = 0; i < numEntries; i++ ) { + htmlCollection[0].remove(); + } + }; + ontologyMenu.append_message = function ( msg ){ + // forward call + append_message(msg); + }; + function append_message( msg ){ + var bpContainer = d3.select("#bulletPoint_container"); + var div = bpContainer.append("div"); + div.node().innerHTML = msg; + loadingModule.scrollDownDetails(); + } + + ontologyMenu.append_message_toLastBulletPoint = function ( msg ){ + // forward call + append_message_toLastBulletPoint(msg); + }; + + ontologyMenu.append_bulletPoint = function ( msg ){ + // forward call + append_bulletPoint(msg); + }; + function append_message_toLastBulletPoint( msg ){ + var bpContainer = d3.select("#bulletPoint_container"); + var htmlCollection = bpContainer.node().getElementsByTagName("LI"); + var lastItem = htmlCollection.length - 1; + if ( lastItem >= 0 ) { + var oldText = htmlCollection[lastItem].innerHTML; + htmlCollection[lastItem].innerHTML = oldText + msg; + } + loadingModule.scrollDownDetails(); + } + + function append_bulletPoint( msg ){ + var bp_container = d3.select("#bulletPoint_container"); + var bp = bp_container.append("li"); + bp.node().innerHTML = msg; + d3.select("#currentLoadingStep").node().innerHTML = msg; + loadingModule.scrollDownDetails(); + } + + + function setupConverterButtons(){ + var iriConverterButton = d3.select("#iri-converter-button"); + var iriConverterInput = d3.select("#iri-converter-input"); + + iriConverterInput.on("input", function (){ + keepOntologySelectionOpenShortly(); + + var inputIsEmpty = iriConverterInput.property("value") === ""; + iriConverterButton.attr("disabled", inputIsEmpty || undefined); + }).on("click", function (){ + keepOntologySelectionOpenShortly(); + }); + + d3.select("#iri-converter-form").on("submit", function (){ + var inputName = iriConverterInput.property("value"); + + // remove first spaces + var clearedName = inputName.replace(/%20/g, " "); + while ( clearedName.beginsWith(" ") ) { + clearedName = clearedName.substr(1, clearedName.length); + } + // remove ending spaces + while ( clearedName.endsWith(" ") ) { + clearedName = clearedName.substr(0, clearedName.length - 1); + } + // check if iri is actually an url for a json file (ends with .json) + // create lowercase filenames; + inputName = clearedName; + var lc_iri = inputName.toLowerCase(); + if ( lc_iri.endsWith(".json") ) { + location.hash = "url=" + inputName; + iriConverterInput.property("value", ""); + iriConverterInput.on("input")(); + } else { + location.hash = "iri=" + inputName; + iriConverterInput.property("value", ""); + iriConverterInput.on("input")(); + } + d3.event.preventDefault(); + return false; + }); + } + + function setupUploadButton(){ + var input = d3.select("#file-converter-input"), + inputLabel = d3.select("#file-converter-label"), + uploadButton = d3.select("#file-converter-button"); + + input.on("change", function (){ + var selectedFiles = input.property("files"); + if ( selectedFiles.length <= 0 ) { + inputLabel.text("Select ontology file"); + uploadButton.property("disabled", true); + } else { + inputLabel.text(selectedFiles[0].name); + fileToLoad = selectedFiles[0].name; + uploadButton.property("disabled", false); + uploadButton.node().click(); + // close menu; + graph.options().navigationMenu().hideAllMenus(); + } + }); + + uploadButton.on("click", function (){ + var selectedFile = input.property("files")[0]; + if ( !selectedFile ) { + return false; + } + var newHashParameter = "file=" + selectedFile.name; + // Trigger the reupload manually, because the iri is not changing + if ( location.hash === "#" + newHashParameter ) { + loadingModule.parseUrlAndLoadOntology(); + } else { + location.hash = newHashParameter; + } + }); + } + + function setLoadingStatusInfo( message ){ + // check if there is a owl2vowl li item; + var o2vConverterContainer = d3.select("#o2vConverterContainer"); + if ( !o2vConverterContainer.node() ) { + var bp_container = d3.select("#bulletPoint_container"); + var div = bp_container.append("div"); + o2vConverterContainer = div.append("ul"); + o2vConverterContainer.attr("id", "o2vConverterContainer"); + o2vConverterContainer.style("margin-left", "-25px"); + } + // clear o2vConverterContainer; + var htmlCollection = o2vConverterContainer.node().children; + var numEntries = htmlCollection.length; + for ( var i = 0; i < numEntries; i++ ) { + htmlCollection[0].remove(); + } + // split tokens provided by o2v messages + var tokens = message.split("* "); + var liForToken; + for ( var t = 0; t < tokens.length; t++ ) { + var tokenMessage = tokens[t]; + // create li for tokens; + if ( tokenMessage.length > 0 ) { + liForToken = o2vConverterContainer.append("li"); + liForToken.attr("type", "disc"); + liForToken.node().innerHTML = tokenMessage.replace(/\n/g, "
    "); + } + } + if ( liForToken ) + liForToken.node().innerHTML += "
    "; + + loadingModule.scrollDownDetails(); + } + + ontologyMenu.setLoadingStatusInfo = function ( message ){ + // forward call + setLoadingStatusInfo(message); + }; + + function getLoadingStatusOnceCallBacked( callback, parameter ){ + d3.xhr("loadingStatus?sessionId=" + conversion_sessionId, "application/text", function ( error, request ){ + if ( error ) { + console.log("ontologyMenu getLoadingStatusOnceCallBacked throws error"); + console.log("---------Error -----------"); + console.log(error); + console.log("---------Request -----------"); + console.log(request); + } + setLoadingStatusInfo(request.responseText); + callback(parameter); + }); + } + + function getLoadingStatusTimeLooped(){ + d3.xhr("loadingStatus?sessionId=" + conversion_sessionId, "application/text", function ( error, request ){ + if ( error ) { + console.log("ontologyMenu getLoadingStatusTimeLooped throws error"); + console.log("---------Error -----------"); + console.log(error); + console.log("---------Request -----------"); + console.log(request); + } + if ( stopTimer === false ) { + setLoadingStatusInfo(request.responseText); + timedLoadingStatusLogger(); + } + }); + } + + function timedLoadingStatusLogger(){ + clearTimeout(loadingStatusTimer); + if ( stopTimer === false ) { + loadingStatusTimer = setTimeout(function (){ + getLoadingStatusTimeLooped(); + }, 1000); + } + } + + function callbackUpdateLoadingMessage( msg ){ + d3.xhr("loadingStatus", "application/text", function ( error, request ){ + if ( request !== undefined ) { + setLoadingStatusInfo(request.responseText + "
    " + msg); + } else { + append_message(msg); + } + }); + } + + ontologyMenu.setConversionID = function ( id ){ + conversion_sessionId = id; + }; + + ontologyMenu.callbackLoad_Ontology_FromIRI = function ( parameter ){ + var relativePath = parameter[0]; + var ontoName = parameter[1]; + var localThreadId = parameter[2]; + stopTimer = false; + timedLoadingStatusLogger(); + d3.xhr(relativePath, "application/json", function ( error, request ){ + var loadingSuccessful = !error; + // check if error occurred or responseText is empty + if ( (error !== null && error.status === 500) || (request && request.responseText.length === 0) ) { + clearTimeout(loadingStatusTimer); + stopTimer = true; + getLoadingStatusOnceCallBacked(callbackFromIRI_URL_ERROR, [error, request, localThreadId]); + } + var jsonText; + if ( loadingSuccessful ) { + clearTimeout(loadingStatusTimer); + stopTimer = true; + jsonText = request.responseText; + getLoadingStatusOnceCallBacked(callbackFromIRI_Success, [jsonText, ontoName, localThreadId]); + } + }); + }; + + + ontologyMenu.callbackLoad_Ontology_From_DirectInput = function ( text, parameter ){ + var input = text; + var sessionId = parameter[1]; + stopTimer = false; + timedLoadingStatusLogger(); + + var formData = new FormData(); + formData.append("input", input); + formData.append("sessionId", sessionId); + var xhr = new XMLHttpRequest(); + + xhr.open("POST", "directInput", true); + xhr.onload = function (){ + clearTimeout(loadingStatusTimer); + stopTimer = true; + getLoadingStatusOnceCallBacked(callbackForConvert, [xhr, input, sessionId]); + }; + timedLoadingStatusLogger(); + xhr.send(formData); + + }; + function callbackFromIRI_Success( parameter ){ + var local_conversionId = parameter[2]; + if ( local_conversionId !== conversion_sessionId ) { + console.log("The conversion process for file:" + parameter[1] + " has been canceled!"); + ontologyMenu.conversionFinished(local_conversionId); + return; + } + loadingModule.loadFromOWL2VOWL(parameter[0], parameter[1]); + ontologyMenu.conversionFinished(); + + } + + function callbackFromDirectInput_Success( parameter ){ + var local_conversionId = parameter[1]; + if ( local_conversionId !== conversion_sessionId ) { + console.log("The conversion process for file:" + parameter[1] + " has been canceled!"); + ontologyMenu.conversionFinished(local_conversionId); + return; + } + loadingModule.loadFromOWL2VOWL(parameter[0], "DirectInputConversionID" + local_conversionId); + ontologyMenu.conversionFinished(); + + } + + ontologyMenu.getConversionId = function (){ + return conversion_sessionId; + }; + + ontologyMenu.callbackLoad_JSON_FromURL = function ( parameter ){ + var relativePath = parameter[0]; + var ontoName = parameter[1]; + var local_conversionId = parameter[2]; + stopTimer = false; + timedLoadingStatusLogger(); + d3.xhr(relativePath, "application/json", function ( error, request ){ + var loadingSuccessful = !error; + // check if error occurred or responseText is empty + if ( (error !== null && error.status === 500) || (request && request.responseText.length === 0) ) { + clearTimeout(loadingStatusTimer); + stopTimer = true; + loadingSuccessful = false; + console.log(request); + console.log(request.responseText.length); + getLoadingStatusOnceCallBacked(callbackFromJSON_URL_ERROR, [error, request, local_conversionId]); + } + if ( loadingSuccessful ) { + clearTimeout(loadingStatusTimer); + stopTimer = true; + var jsonText = request.responseText; + getLoadingStatusOnceCallBacked(callbackFromJSON_Success, [jsonText, ontoName, local_conversionId]); + } + }); + }; + + function callbackFromJSON_Success( parameter ){ + var local_conversionId = parameter[2]; + if ( local_conversionId !== conversion_sessionId ) { + console.log("The conversion process for file:" + parameter[1] + " has been canceled!"); + return; + } + loadingModule.loadFromOWL2VOWL(parameter[0], parameter[1]); + } + + function callbackFromJSON_URL_ERROR( parameter ){ + var error = parameter[0]; + var request = parameter[1]; + var local_conversionId = parameter[2]; + if ( local_conversionId !== conversion_sessionId ) { + console.log("This thread has been canceled!!"); + ontologyMenu.conversionFinished(local_conversionId); + return; + } + callbackUpdateLoadingMessage("
    Failed to convert the file. " + + " Ontology could not be loaded.
    Is it a valid OWL ontology? Please check with OWL Validator"); + + if ( error !== null && error.status === 500 ) { + append_message("Could not find ontology at the URL"); + } + if ( request && request.responseText.length === 0 ) { + append_message("Received empty graph"); + } + graph.handleOnLoadingError(); + ontologyMenu.conversionFinished(); + } + + + function callbackFromIRI_URL_ERROR( parameter ){ + var error = parameter[0]; + var request = parameter[1]; + var local_conversionId = parameter[2]; + if ( local_conversionId !== conversion_sessionId ) { + console.log("This thread has been canceled!!"); + ontologyMenu.conversionFinished(local_conversionId); + return; + } + callbackUpdateLoadingMessage("
    Failed to convert the file. " + + " Ontology could not be loaded.
    Is it a valid OWL ontology? Please check with OWL Validator"); + + if ( error !== null && error.status === 500 ) { + append_message("Could not find ontology at the URL"); + } + if ( request && request.responseText.length === 0 ) { + append_message("Received empty graph"); + } + graph.handleOnLoadingError(); + ontologyMenu.conversionFinished(); + } + + function callbackFromDirectInput_ERROR( parameter ){ + + var error = parameter[0]; + var request = parameter[1]; + var local_conversionId = parameter[2]; + if ( local_conversionId !== conversion_sessionId ) { + console.log("The loading process for direct input has been canceled!"); + return; + } + // callbackUpdateLoadingMessage("
    Failed to convert the file. "+ + // "Ontology could not be loaded.
    Is it a valid OWL ontology? Please check with OWL Validator"); + if ( error !== null && error.status === 500 ) { + append_message("Could not convert direct input"); + } + if ( request && request.responseText.length === 0 ) { + append_message("Received empty graph"); + } + + graph.handleOnLoadingError(); + ontologyMenu.conversionFinished(); + } + + ontologyMenu.callbackLoadFromOntology = function ( selectedFile, filename, local_threadId ){ + callbackLoadFromOntology(selectedFile, filename, local_threadId); + }; + + function callbackLoadFromOntology( selectedFile, filename, local_threadId ){ + stopTimer = false; + timedLoadingStatusLogger(); + + var formData = new FormData(); + formData.append("ontology", selectedFile); + formData.append("sessionId", local_threadId); + var xhr = new XMLHttpRequest(); + + xhr.open("POST", "convert", true); + xhr.onload = function (){ + clearTimeout(loadingStatusTimer); + stopTimer = true; + console.log(xhr); + getLoadingStatusOnceCallBacked(callbackForConvert, [xhr, filename, local_threadId]); + }; + timedLoadingStatusLogger(); + xhr.send(formData); + } + + function callbackForConvert( parameter ){ + var xhr = parameter[0]; + var filename = parameter[1]; + var local_threadId = parameter[2]; + if ( local_threadId !== conversion_sessionId ) { + console.log("The conversion process for file:" + filename + " has been canceled!"); + ontologyMenu.conversionFinished(local_threadId); + return; + } + if ( xhr.status === 200 ) { + loadingModule.loadFromOWL2VOWL(xhr.responseText, filename); + ontologyMenu.conversionFinished(); + } else { + var uglyJson=xhr.responseText; + var jsonResut=JSON.parse(uglyJson); + var niceJSON=JSON.stringify(jsonResut, 'null', ' '); + niceJSON= niceJSON.replace(new RegExp('\r?\n','g'), '
    '); + callbackUpdateLoadingMessage("Failed to convert the file. " + + "
    Server answer:
    "+ + "
    "+niceJSON+ "
    "+ + "Ontology could not be loaded.
    Is it a valid OWL ontology? Please check with OWL Validator"); + + graph.handleOnLoadingError(); + ontologyMenu.conversionFinished(); + } + } + + ontologyMenu.conversionFinished = function ( id ){ + var local_id = conversion_sessionId; + if ( id ) { + local_id = id; + } + d3.xhr("conversionDone?sessionId=" + local_id, "application/text", function ( error, request ){ + if ( error ) { + console.log("ontologyMenu conversionFinished throws error"); + console.log("---------Error -----------"); + console.log(error); + console.log("---------Request -----------"); + console.log(request); + } + }); + }; + + function keepOntologySelectionOpenShortly(){ + // Events in the menu should not be considered + var ontologySelection = d3.select("#select .toolTipMenu"); + ontologySelection.on("click", function (){ + d3.event.stopPropagation(); + }).on("keydown", function (){ + d3.event.stopPropagation(); + }); + + ontologySelection.style("display", "block"); + + function disableKeepingOpen(){ + ontologySelection.style("display", undefined); + + clearTimeout(ontologyMenuTimeout); + d3.select(window).on("click", undefined).on("keydown", undefined); + ontologySelection.on("mouseover", undefined); + } + + // Clear the timeout to handle fast calls of this function + clearTimeout(ontologyMenuTimeout); + ontologyMenuTimeout = setTimeout(function (){ + disableKeepingOpen(); + }, 3000); + + // Disable forced open selection on interaction + d3.select(window).on("click", function (){ + disableKeepingOpen(); + }).on("keydown", function (){ + disableKeepingOpen(); + }); + + ontologySelection.on("mouseover", function (){ + disableKeepingOpen(); + }); + } + + ontologyMenu.showLoadingStatus = function ( visible ){ + if ( visible === true ) { + displayLoadingIndicators(); + } + else { + hideLoadingInformations(); + } + }; + + function displayLoadingIndicators(){ + d3.select("#layoutLoadingProgressBarContainer").classed("hidden", false); + loadingInfo.classed("hidden", false); + loadingProgress.classed("hidden", false); + } + + function hideLoadingInformations(){ + loadingInfo.classed("hidden", true); + } + + return ontologyMenu; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 330: +/***/ (function(module, exports, __webpack_require__) { + + var toString = __webpack_require__(219), + unescapeHtmlChar = __webpack_require__(331); + + /** Used to match HTML entities and HTML characters. */ + var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g, + reHasEscapedHtml = RegExp(reEscapedHtml.source); + + /** + * The inverse of `_.escape`; this method converts the HTML entities + * `&`, `<`, `>`, `"`, and `'` in `string` to + * their corresponding characters. + * + * **Note:** No other HTML entities are unescaped. To unescape additional + * HTML entities use a third-party library like [_he_](https://mths.be/he). + * + * @static + * @memberOf _ + * @since 0.6.0 + * @category String + * @param {string} [string=''] The string to unescape. + * @returns {string} Returns the unescaped string. + * @example + * + * _.unescape('fred, barney, & pebbles'); + * // => 'fred, barney, & pebbles' + */ + function unescape(string) { + string = toString(string); + return (string && reHasEscapedHtml.test(string)) + ? string.replace(reEscapedHtml, unescapeHtmlChar) + : string; + } + + module.exports = unescape; + + +/***/ }), + +/***/ 331: +/***/ (function(module, exports, __webpack_require__) { + + var basePropertyOf = __webpack_require__(332); + + /** Used to map HTML entities to characters. */ + var htmlUnescapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + ''': "'" + }; + + /** + * Used by `_.unescape` to convert HTML entities to characters. + * + * @private + * @param {string} chr The matched character to unescape. + * @returns {string} Returns the unescaped character. + */ + var unescapeHtmlChar = basePropertyOf(htmlUnescapes); + + module.exports = unescapeHtmlChar; + + +/***/ }), + +/***/ 332: +/***/ (function(module, exports) { + + /** + * The base implementation of `_.propertyOf` without support for deep paths. + * + * @private + * @param {Object} object The object to query. + * @returns {Function} Returns the new accessor function. + */ + function basePropertyOf(object) { + return function(key) { + return object == null ? undefined : object[key]; + }; + } + + module.exports = basePropertyOf; + + +/***/ }), + +/***/ 333: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains the logic for the pause and resume button. + * + * @param graph the associated webvowl graph + * @returns {{}} + */ + module.exports = function ( graph ){ + + var pauseMenu = {}, + pauseButton; + + + /** + * Adds the pause button to the website. + */ + pauseMenu.setup = function (){ + var menuEntry = d3.select("#pauseOption"); + menuEntry.on("mouseover", function (){ + var searchMenu = graph.options().searchMenu(); + searchMenu.hideSearchEntries(); + }); + pauseButton = d3.select("#pause-button") + .datum({ paused: false }) + .on("click", function ( d ){ + graph.paused(!d.paused); + d.paused = !d.paused; + updatePauseButton(); + pauseButton.classed("highlighted", d.paused); + }); + // Set these properties the first time manually + updatePauseButton(); + }; + + pauseMenu.setPauseValue = function ( value ){ + pauseButton.datum().paused = value; + graph.paused(value); + pauseButton.classed("highlighted", value); + updatePauseButton(); + }; + + function updatePauseButton(){ + updatePauseButtonClass(); + updatePauseButtonText(); + } + + function updatePauseButtonClass(){ + pauseButton.classed("paused", function ( d ){ + return d.paused; + }); + } + + function updatePauseButtonText(){ + if ( pauseButton.datum().paused ) { + pauseButton.text("Resume"); + } else { + pauseButton.text("Pause"); + } + } + + pauseMenu.reset = function (){ + // resuming + pauseMenu.setPauseValue(false); + }; + + + return pauseMenu; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 334: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains the logic for the reset button. + * + * @param graph the associated webvowl graph + * @returns {{}} + */ + module.exports = function ( graph ){ + + var resetMenu = {}, + options = graph.graphOptions(), + resettableModules, + untouchedOptions = webvowl.options(); + + + /** + * Adds the reset button to the website. + * @param _resettableModules modules that can be resetted + */ + resetMenu.setup = function ( _resettableModules ){ + resettableModules = _resettableModules; + d3.select("#reset-button").on("click", resetGraph); + var menuEntry = d3.select("#resetOption"); + menuEntry.on("mouseover", function (){ + var searchMenu = graph.options().searchMenu(); + searchMenu.hideSearchEntries(); + }); + }; + + function resetGraph(){ + graph.resetSearchHighlight(); + graph.options().searchMenu().clearText(); + options.classDistance(untouchedOptions.classDistance()); + options.datatypeDistance(untouchedOptions.datatypeDistance()); + options.charge(untouchedOptions.charge()); + options.gravity(untouchedOptions.gravity()); + options.linkStrength(untouchedOptions.linkStrength()); + graph.reset(); + + resettableModules.forEach(function ( module ){ + module.reset(); + }); + + graph.updateStyle(); + } + + + return resetMenu; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 335: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains the search "engine" + * + * @param graph the associated webvowl graph + * @returns {{}} + */ + module.exports = function ( graph ){ + var searchMenu = {}, + dictionary = [], + entryNames = [], + searchLineEdit, + mergedStringsList, + mergedIdList, + maxEntries = 6, + dictionaryUpdateRequired = true, + labelDictionary, + inputText, + viewStatusOfSearchEntries = false; + + var results = []; + var resultID = []; + var c_locate = d3.select("#locateSearchResult"); + var c_search = d3.select("#c_search"); + var m_search = d3.select("#m_search"); // << dropdown container; + + + String.prototype.beginsWith = function ( string ){ + return (this.indexOf(string) === 0); + }; + + searchMenu.requestDictionaryUpdate = function (){ + dictionaryUpdateRequired = true; + // clear possible pre searched entries + var htmlCollection = m_search.node().children; + var numEntries = htmlCollection.length; + + for ( var i = 0; i < numEntries; i++ ) + htmlCollection[0].remove(); + searchLineEdit.node().value = ""; + }; + + + function updateSearchDictionary(){ + labelDictionary = graph.getUpdateDictionary(); + dictionaryUpdateRequired = false; + dictionary = []; + entryNames = []; + var idList = []; + var stringList = []; + + var i; + for ( i = 0; i < labelDictionary.length; i++ ) { + var lEntry = labelDictionary[i].labelForCurrentLanguage(); + idList.push(labelDictionary[i].id()); + stringList.push(lEntry); + // add all equivalents to the search space; + if ( labelDictionary[i].equivalents && labelDictionary[i].equivalents().length > 0 ) { + var eqs = labelDictionary[i].equivalentsString(); + var eqsLabels = eqs.split(", "); + for ( var e = 0; e < eqsLabels.length; e++ ) { + idList.push(labelDictionary[i].id()); + stringList.push(eqsLabels[e]); + } + } + } + + mergedStringsList = []; + mergedIdList = []; + var indexInStringList = -1; + var currentString; + var currentObjectId; + + for ( i = 0; i < stringList.length; i++ ) { + if ( i === 0 ) { + // just add the elements + mergedStringsList.push(stringList[i]); + mergedIdList.push([]); + mergedIdList[0].push(idList[i]); + continue; + } + else { + currentString = stringList[i]; + currentObjectId = idList[i]; + indexInStringList = mergedStringsList.indexOf(currentString); + } + if ( indexInStringList === -1 ) { + mergedStringsList.push(stringList[i]); + mergedIdList.push([]); + var lastEntry = mergedIdList.length; + mergedIdList[lastEntry - 1].push(currentObjectId); + } else { + mergedIdList[indexInStringList].push(currentObjectId); + } + } + + for ( i = 0; i < mergedStringsList.length; i++ ) { + var aString = mergedStringsList[i]; + var correspondingIdList = mergedIdList[i]; + var idListResult = "[ "; + for ( var j = 0; j < correspondingIdList.length; j++ ) { + idListResult = idListResult + correspondingIdList[j].toString(); + idListResult = idListResult + ", "; + } + idListResult = idListResult.substring(0, idListResult.length - 2); + idListResult = idListResult + " ]"; + + dictionary.push(aString); + entryNames.push(aString); + } + } + + searchMenu.setup = function (){ + // clear dictionary; + dictionary = []; + searchLineEdit = d3.select("#search-input-text"); + searchLineEdit.on("input", userInput); + searchLineEdit.on("keydown", userNavigation); + searchLineEdit.on("click", toggleSearchEntryView); + searchLineEdit.on("mouseover", hoverSearchEntryView); + + c_locate.on("click", function (){ + graph.locateSearchResult(); + }); + + c_locate.on("mouseover", function (){ + searchMenu.hideSearchEntries(); + }); + + }; + + function hoverSearchEntryView(){ + updateSelectionStatusFlags(); + searchMenu.showSearchEntries(); + } + + function toggleSearchEntryView(){ + if ( viewStatusOfSearchEntries ) { + searchMenu.hideSearchEntries(); + } else { + searchMenu.showSearchEntries(); + } + } + + searchMenu.hideSearchEntries = function (){ + m_search.style("display", "none"); + viewStatusOfSearchEntries = false; + }; + + searchMenu.showSearchEntries = function (){ + m_search.style("display", "block"); + viewStatusOfSearchEntries = true; + }; + + function ValidURL( str ){ + var urlregex = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/; + return urlregex.test(str); + + } + + + function updateSelectionStatusFlags(){ + if ( searchLineEdit.node().value.length === 0 ) { + createSearchEntries(); + return; + } + handleAutoCompletion(); + } + + function userNavigation(){ + if ( dictionaryUpdateRequired ) { + updateSearchDictionary(); + } + + var htmlCollection = m_search.node().children; + var numEntries = htmlCollection.length; + + + var move = 0; + var i; + var selectedEntry = -1; + for ( i = 0; i < numEntries; i++ ) { + var atr = htmlCollection[i].getAttribute('class'); + if ( atr === "dbEntrySelected" ) { + selectedEntry = i; + } + } + if ( d3.event.keyCode === 13 ) { + if ( selectedEntry >= 0 && selectedEntry < numEntries ) { + // simulate onClick event + htmlCollection[selectedEntry].onclick(); + searchMenu.hideSearchEntries(); + } + else if ( numEntries === 0 ) { + inputText = searchLineEdit.node().value; + // check if input text ends or begins with with space + // remove first spaces + var clearedText = inputText.replace(/%20/g, " "); + while ( clearedText.beginsWith(" ") ) { + clearedText = clearedText.substr(1, clearedText.length); + } + // remove ending spaces + while ( clearedText.endsWith(" ") ) { + clearedText = clearedText.substr(0, clearedText.length - 1); + } + var iri = clearedText.replace(/ /g, "%20"); + + var valid = ValidURL(iri); + // validate url: + if ( valid ) { + var ontM = graph.options().ontologyMenu(); + ontM.setIriText(iri); + searchLineEdit.node().value = ""; + } + else { + console.log(iri + " is not a valid URL!"); + } + } + } + if ( d3.event.keyCode === 38 ) { + move = -1; + searchMenu.showSearchEntries(); + } + if ( d3.event.keyCode === 40 ) { + move = +1; + searchMenu.showSearchEntries(); + } + + var newSelection = selectedEntry + move; + if ( newSelection !== selectedEntry ) { + + if ( newSelection < 0 && selectedEntry <= 0 ) { + htmlCollection[0].setAttribute('class', "dbEntrySelected"); + } + + if ( newSelection >= numEntries ) { + htmlCollection[selectedEntry].setAttribute('class', "dbEntrySelected"); + } + if ( newSelection >= 0 && newSelection < numEntries ) { + htmlCollection[newSelection].setAttribute('class', "dbEntrySelected"); + if ( selectedEntry >= 0 ) + htmlCollection[selectedEntry].setAttribute('class', "dbEntry"); + } + } + } + + searchMenu.getSearchString = function (){ + return searchLineEdit.node().value; + }; + + + function clearSearchEntries(){ + var htmlCollection = m_search.node().children; + var numEntries = htmlCollection.length; + for ( var i = 0; i < numEntries; i++ ) { + htmlCollection[0].remove(); + } + results = []; + resultID = []; + + } + + function createSearchEntries(){ + inputText = searchLineEdit.node().value; + var i; + var lc_text = inputText.toLowerCase(); + var token; + + for ( i = 0; i < dictionary.length; i++ ) { + var tokenElement = dictionary[i]; + if ( tokenElement === undefined ) { + //@WORKAROUND : nodes with undefined labels are skipped + //@FIX: these nodes are now not added to the dictionary + continue; + } + token = dictionary[i].toLowerCase(); + if ( token.indexOf(lc_text) > -1 ) { + results.push(dictionary[i]); + resultID.push(i); + } + } + } + + function measureTextWidth( text, textStyle ){ + // Set a default value + if ( !textStyle ) { + textStyle = "text"; + } + var d = d3.select("body") + .append("div") + .attr("class", textStyle) + .attr("id", "width-test") // tag this element to identify it + .attr("style", "position:absolute; float:left; white-space:nowrap; visibility:hidden;") + .text(text), + w = document.getElementById("width-test").offsetWidth; + d.remove(); + return w; + } + + function cropText( input ){ + var maxWidth = 250; + var textStyle = "dbEntry"; + var truncatedText = input; + var textWidth; + var ratio; + var newTruncatedTextLength; + while ( true ) { + textWidth = measureTextWidth(truncatedText, textStyle); + if ( textWidth <= maxWidth ) { + break; + } + + ratio = textWidth / maxWidth; + newTruncatedTextLength = Math.floor(truncatedText.length / ratio); + + // detect if nothing changes + if ( truncatedText.length === newTruncatedTextLength ) { + break; + } + + truncatedText = truncatedText.substring(0, newTruncatedTextLength); + } + + if ( input.length > truncatedText.length ) { + return input.substring(0, truncatedText.length - 6); + } + return input; + } + + function createDropDownElements(){ + var numEntries; + var copyRes = results; + var i; + var token; + var newResults = []; + var newResultsIds = []; + + var lc_text = searchLineEdit.node().value.toLowerCase(); + // set the number of shown results to be maxEntries or less; + numEntries = results.length; + if ( numEntries > maxEntries ) + numEntries = maxEntries; + + + for ( i = 0; i < numEntries; i++ ) { + // search for the best entry + var indexElement = 1000000; + var lengthElement = 1000000; + var bestElement = -1; + for ( var j = 0; j < copyRes.length; j++ ) { + token = copyRes[j].toLowerCase(); + var tIe = token.indexOf(lc_text); + var tLe = token.length; + if ( tIe > -1 && tIe <= indexElement && tLe <= lengthElement ) { + bestElement = j; + indexElement = tIe; + lengthElement = tLe; + } + } + newResults.push(copyRes[bestElement]); + newResultsIds.push(resultID[bestElement]); + copyRes[bestElement] = ""; + } + + // add the results to the entry menu + //****************************************** + numEntries = results.length; + if ( numEntries > maxEntries ) + numEntries = maxEntries; + + var filteredOutElements = 0; + for ( i = 0; i < numEntries; i++ ) { + //add results to the dropdown menu + var testEntry = document.createElement('li'); + testEntry.setAttribute('elementID', newResultsIds[i]); + testEntry.onclick = handleClick(newResultsIds[i]); + testEntry.setAttribute('class', "dbEntry"); + + var entries = mergedIdList[newResultsIds[i]]; + var eLen = entries.length; + + var croppedText = cropText(newResults[i]); + + var el0 = entries[0]; + var allSame = true; + var nodeMap = graph.getNodeMapForSearch(); + var visible = eLen; + if ( eLen > 1 ) { + for ( var q = 0; q < eLen; q++ ) { + if ( nodeMap[entries[q]] === undefined ) { + visible--; + } + } + } + + for ( var a = 0; a < eLen; a++ ) { + if ( el0 !== entries[a] ) { + allSame = false; + } + } + if ( croppedText !== newResults[i] ) { + // append ...(#numElements) if needed + if ( eLen > 1 && allSame === false ) { + if ( eLen !== visible ) + croppedText += "... (" + visible + "/" + eLen + ")"; + } + else { + croppedText += "..."; + } + testEntry.title = newResults[i]; + } + else { + if ( eLen > 1 && allSame === false ) { + if ( eLen !== visible ) + croppedText += " (" + visible + "/" + eLen + ")"; + else + croppedText += " (" + eLen + ")"; + } + } + + var searchEntryNode = d3.select(testEntry); + if ( eLen === 1 || allSame === true ) { + if ( nodeMap[entries[0]] === undefined ) { + searchEntryNode.style("color", "#979797"); + testEntry.title = newResults[i] + "\nElement is filtered out."; + testEntry.onclick = function (){ + }; + d3.select(testEntry).style("cursor", "default"); + filteredOutElements++; + } + } else { + if ( visible < 1 ) { + searchEntryNode.style("color", "#979797"); + testEntry.onclick = function (){ + }; + testEntry.title = newResults[i] + "\nAll elements are filtered out."; + d3.select(testEntry).style("cursor", "default"); + filteredOutElements++; + } else { + searchEntryNode.style("color", ""); + } + if ( visible < eLen && visible > 1 ) { + testEntry.title = newResults[i] + "\n" + visible + "/" + eLen + " elements are visible."; + } + } + searchEntryNode.node().innerHTML = croppedText; + m_search.node().appendChild(testEntry); + } + } + + + function handleAutoCompletion(){ + /** pre condition: autoCompletion has already a valid text**/ + clearSearchEntries(); + createSearchEntries(); + createDropDownElements(); + } + + function userInput(){ + c_locate.classed("highlighted", false); + c_locate.node().title = "Nothing to locate"; + + if ( dictionaryUpdateRequired ) { + updateSearchDictionary(); + } + graph.resetSearchHighlight(); + + if ( dictionary.length === 0 ) { + console.log("dictionary is empty"); + return; + } + inputText = searchLineEdit.node().value; + + clearSearchEntries(); + if ( inputText.length !== 0 ) { + createSearchEntries(); + createDropDownElements(); + } + + searchMenu.showSearchEntries(); + } + + function handleClick( elementId ){ + + return function (){ + var id = elementId; + var correspondingIds = mergedIdList[id]; + + // autoComplete the text for the user + var autoComStr = entryNames[id]; + searchLineEdit.node().value = autoComStr; + + graph.resetSearchHighlight(); + graph.highLightNodes(correspondingIds); + c_locate.node().title = "Locate search term"; + if ( autoComStr !== inputText ) { + handleAutoCompletion(); + } + searchMenu.hideSearchEntries(); + }; + } + + searchMenu.clearText = function (){ + searchLineEdit.node().value = ""; + c_locate.classed("highlighted", false); + c_locate.node().title = "Nothing to locate"; + var htmlCollection = m_search.node().children; + var numEntries = htmlCollection.length; + for ( var i = 0; i < numEntries; i++ ) { + htmlCollection[0].remove(); + } + }; + + return searchMenu; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 336: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains the navigation "engine" + * + * @param graph the associated webvowl graph + * @returns {{}} + */ + module.exports = function ( graph ){ + var navigationMenu = {}, + scrollContainer = d3.select("#menuElementContainer").node(), + menuContainer = d3.select("#menuContainer").node(), + leftButton = d3.select("#scrollLeftButton"), + rightButton = d3.select("#scrollRightButton"), + scrolLeftValue, + scrollMax, + currentlyVisibleMenu, + currentlyHoveredEntry, + touchedElement = false, + t_scrollLeft, + t_scrollRight, + c_select = [], + m_select = []; + + + function clearAllTimers(){ + cancelAnimationFrame(t_scrollLeft); + cancelAnimationFrame(t_scrollRight); + } + + function timed_scrollRight(){ + scrolLeftValue += 5; + scrollContainer.scrollLeft = scrolLeftValue; + navigationMenu.updateScrollButtonVisibility(); + if ( scrolLeftValue >= scrollMax ) { + clearAllTimers(); + return; + } + t_scrollRight = requestAnimationFrame(timed_scrollRight); + + } + + function timed_scrollLeft(){ + scrolLeftValue -= 5; + scrollContainer.scrollLeft = scrolLeftValue; + navigationMenu.updateScrollButtonVisibility(); + if ( scrolLeftValue <= 0 ) { + clearAllTimers(); + return; + } + t_scrollRight = requestAnimationFrame(timed_scrollLeft); + } + + // collect all menu entries and stuff; + function setupControlsAndMenus(){ + // HEURISTIC : to match the menus and their controllers we remove the first 2 letters and match + c_select = []; + m_select = []; + + var c_temp = []; + var m_temp = []; + var i; + var controlElements = scrollContainer.children; + var numEntries = controlElements.length; + + for ( i = 0; i < numEntries; i++ ) { + c_temp.push(controlElements[i].id.slice(2)); + } + + var menuElements = menuContainer.children; + numEntries = menuElements.length; + for ( i = 0; i < numEntries; i++ ) { + m_temp.push(menuElements[i].id.slice(2)); + } + + numEntries = controlElements.length; + for ( i = 0; i < numEntries; i++ ) { + c_select[i] = "c_" + c_temp[i]; + if ( m_temp.indexOf(c_temp[i]) > -1 ) { + m_select[i] = "m_" + c_temp[i]; + } else { + m_select[i] = undefined; + } + // create custom behavior for click, touch, and hover + d3.select("#" + c_select[i]).on("mouseover", menuElementOnHovered); + d3.select("#" + c_select[i]).on("mouseout", menuElementOutHovered); + + d3.select("#" + c_select[i]).on("click", menuElementClicked); + d3.select("#" + c_select[i]).on("touchstart", menuElementTouched); + + } + + // connect to mouseWheel + d3.select("#menuElementContainer").on("wheel", function (){ + var wheelEvent = d3.event; + var offset; + if ( wheelEvent.deltaY < 0 ) offset = 20; + if ( wheelEvent.deltaY > 0 ) offset = -20; + scrollContainer.scrollLeft += offset; + navigationMenu.hideAllMenus(); + navigationMenu.updateScrollButtonVisibility(); + }); + + // connect scrollIndicator Buttons; + d3.select("#scrollRightButton").on("mousedown", function (){ + scrolLeftValue = scrollContainer.scrollLeft; + navigationMenu.hideAllMenus(); + t_scrollRight = requestAnimationFrame(timed_scrollRight); + + }).on("touchstart", function (){ + scrolLeftValue = scrollContainer.scrollLeft; + navigationMenu.hideAllMenus(); + t_scrollRight = requestAnimationFrame(timed_scrollRight); + }).on("mouseup", clearAllTimers) + .on("touchend", clearAllTimers) + .on("touchcancel", clearAllTimers); + + d3.select("#scrollLeftButton").on("mousedown", function (){ + scrolLeftValue = scrollContainer.scrollLeft; + navigationMenu.hideAllMenus(); + t_scrollLeft = requestAnimationFrame(timed_scrollLeft); + }).on("touchstart", function (){ + scrolLeftValue = scrollContainer.scrollLeft; + navigationMenu.hideAllMenus(); + t_scrollLeft = requestAnimationFrame(timed_scrollLeft); + }).on("mouseup", clearAllTimers) + .on("touchend", clearAllTimers) + .on("touchcancel", clearAllTimers); + + // connect the scroll functionality; + d3.select("#menuElementContainer").on("scroll", function (){ + navigationMenu.updateScrollButtonVisibility(); + navigationMenu.hideAllMenus(); + }); + } + + function menuElementOnHovered(){ + navigationMenu.hideAllMenus(); + if ( touchedElement ) { + return; + } + showSingleMenu(this.id); + } + + function menuElementOutHovered(){ + hoveroutedControMenu(this.id); + } + + function menuElementClicked(){ + var m_element = m_select[c_select.indexOf(this.id)]; + if ( m_element ) { + var menuElement = d3.select("#" + m_element); + if ( menuElement ) { + if ( menuElement.style("display") === "block" ) { + menuElement.style("display", "none");// hide it + } else { + showSingleMenu(this.id); + } + } + } + } + + function menuElementTouched(){ + // it sets a flag that we have touched it, + // since d3. propagates the event for touch as hover and then click, we block the hover event + touchedElement = true; + } + + + function hoveroutedControMenu( controllerID ){ + currentlyHoveredEntry = d3.select("#" + controllerID); + if ( controllerID !== "c_search" ) { + d3.select("#" + controllerID).select("path").style("stroke-width", "0"); + d3.select("#" + controllerID).select("path").style("fill", "#fff"); + } + + } + + function showSingleMenu( controllerID ){ + currentlyHoveredEntry = d3.select("#" + controllerID).node(); + // get the corresponding menu element for this controller + var m_element = m_select[c_select.indexOf(controllerID)]; + if ( m_element ) { + if ( controllerID !== "c_search" ) { + + d3.select("#" + controllerID).select("path").style("stroke-width", "0"); + d3.select("#" + controllerID).select("path").style("fill", "#bdc3c7"); + } + // show it if we have a menu + currentlyVisibleMenu = d3.select("#" + m_element); + currentlyVisibleMenu.style("display", "block"); + if ( m_element === "m_export" ) + graph.options().exportMenu().exportAsUrl(); + updateMenuPosition(); + } + } + + function updateMenuPosition(){ + if ( currentlyHoveredEntry ) { + var leftOffset = currentlyHoveredEntry.offsetLeft; + var scrollOffset = scrollContainer.scrollLeft; + var totalOffset = leftOffset - scrollOffset; + var finalOffset = Math.max(0, totalOffset); + var fullContainer_width = scrollContainer.getBoundingClientRect().width; + var elementWidth = currentlyVisibleMenu.node().getBoundingClientRect().width; + // make priority > first check if we are right + if ( finalOffset + elementWidth > fullContainer_width ) { + finalOffset = fullContainer_width - elementWidth; + } + // fix priority; + finalOffset = Math.max(0, finalOffset); + currentlyVisibleMenu.style("left", finalOffset + "px"); + + // // check if outside the viewport + // var menuWidth=currentlyHoveredEntry.getBoundingClientRect().width; + // var bt_width=36; + // if (totalOffset+menuWidthfullContainer_width){ + // navigationMenu.hideAllMenus(); + // currentlyHoveredEntry=undefined; + // } + } + } + + navigationMenu.hideAllMenus = function (){ + d3.selectAll(".toolTipMenu").style("display", "none"); // hiding all menus + }; + + navigationMenu.updateScrollButtonVisibility = function (){ + scrollMax = scrollContainer.scrollWidth - scrollContainer.clientWidth - 2; + if ( scrollContainer.scrollLeft === 0 ) { + leftButton.classed("hidden", true); + } else { + leftButton.classed("hidden", false); + } + + if ( scrollContainer.scrollLeft > scrollMax ) { + rightButton.classed("hidden", true); + } else { + rightButton.classed("hidden", false); + } + + }; + + navigationMenu.setup = function (){ + setupControlsAndMenus(); + // make sure that the menu elements follow their controller and also their restrictions + // some hovering behavior -- lets the menu disappear when hovered in graph or sidebar; + d3.select("#graph").on("mouseover", function (){ + navigationMenu.hideAllMenus(); + }); + d3.select("#generalDetails").on("mouseover", function (){ + navigationMenu.hideAllMenus(); + }); + }; + + return navigationMenu; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 337: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** The zoom Slider **/ + module.exports = function ( graph ){ + var zoomSlider = {}; + var minMag = graph.options().minMagnification(), + maxMag = graph.options().maxMagnification(), + defZoom, + t_zoomOut, + t_zoomIn, + zoomValue, + showSlider = true, + w = graph.options().width(), + h = graph.options().height(), + slider; + + defZoom = Math.min(w, h) / 1000; + + function clearAllTimers(){ + cancelAnimationFrame(t_zoomOut); + cancelAnimationFrame(t_zoomIn); + } + + function timed_zoomOut(){ + zoomValue = 0.98 * zoomValue; + // fail saves + if ( zoomValue < minMag ) { + zoomValue = minMag; + } + graph.setSliderZoom(zoomValue); + t_zoomOut = requestAnimationFrame(timed_zoomOut); + } + + function timed_zoomIn(){ + zoomValue = 1.02 * zoomValue; + // fail saves + if ( zoomValue > maxMag ) { + zoomValue = maxMag; + } + graph.setSliderZoom(zoomValue); + t_zoomIn = requestAnimationFrame(timed_zoomIn); + } + + zoomSlider.setup = function (){ + slider = d3.select("#zoomSliderParagraph").append("input") + .datum({}) + .attr("id", "zoomSliderElement") + .attr("type", "range") + .attr("value", defZoom) + .attr("min", minMag) + .attr("max", maxMag) + .attr("step", (maxMag - minMag) / 40) + .attr("title", "zoom factor") + .on("input", function (){ + zoomSlider.zooming(); + }); + + d3.select("#zoomOutButton").on("mousedown", function (){ + graph.options().navigationMenu().hideAllMenus(); + zoomValue = graph.scaleFactor(); + t_zoomOut = requestAnimationFrame(timed_zoomOut); + }) + .on("touchstart", function (){ + graph.options().navigationMenu().hideAllMenus(); + zoomValue = graph.scaleFactor(); + t_zoomOut = requestAnimationFrame(timed_zoomOut); + }) + .on("mouseup", clearAllTimers) + .on("touchend", clearAllTimers) + .on("touchcancel", clearAllTimers) + .attr("title", "zoom out"); + + d3.select("#zoomInButton").on("mousedown", function (){ + graph.options().navigationMenu().hideAllMenus(); + zoomValue = graph.scaleFactor(); + t_zoomIn = requestAnimationFrame(timed_zoomIn); + }) + .on("touchstart", function (){ + graph.options().navigationMenu().hideAllMenus(); + zoomValue = graph.scaleFactor(); + t_zoomIn = requestAnimationFrame(timed_zoomIn); + }) + .on("mouseup", clearAllTimers) + .on("touchend", clearAllTimers) + .on("touchcancel", clearAllTimers) + .attr("title", "zoom in"); + + d3.select("#centerGraphButton").on("click", function (){ + graph.options().navigationMenu().hideAllMenus(); + graph.forceRelocationEvent(); + }).attr("title", "center graph"); + + }; + + zoomSlider.showSlider = function ( val ){ + if ( !arguments.length ) return showSlider; + d3.select("#zoomSlider").classed("hidden", !val); + showSlider = val; + }; + + zoomSlider.zooming = function (){ + graph.options().navigationMenu().hideAllMenus(); + var zoomValue = slider.property("value"); + slider.attr("value", zoomValue); + graph.setSliderZoom(zoomValue); + }; + + zoomSlider.updateZoomSliderValue = function ( val ){ + if ( slider ) { + slider.attr("value", val); + slider.property("value", val); + } + }; + + return zoomSlider; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 338: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains the logic for the sidebar. + * @param graph the graph that belongs to these controls + * @returns {{}} + */ + module.exports = function ( graph ){ + + var sidebar = {}, + languageTools = webvowl.util.languageTools(), + elementTools = webvowl.util.elementTools(), + // Required for reloading when the language changes + ontologyInfo, + visibleSidebar = 1, + lastSelectedElement, + + detailArea = d3.select("#detailsArea"), + graphArea = d3.select("#canvasArea"), + menuArea = d3.select("#swipeBarContainer"), + collapseButton = d3.select("#sidebarExpandButton"); + + /** + * Setup the menu bar. + */ + + + function setupCollapsing(){ + // adapted version of this example: http://www.normansblog.de/simple-jquery-accordion/ + function collapseContainers( containers ){ + containers.classed("hidden", true); + } + + function expandContainers( containers ){ + containers.classed("hidden", false); + } + + var triggers = d3.selectAll(".accordion-trigger"); + + // Collapse all inactive triggers on startup + collapseContainers(d3.selectAll(".accordion-trigger:not(.accordion-trigger-active) + div")); + + triggers.on("click", function (){ + var selectedTrigger = d3.select(this), + activeTriggers = d3.selectAll(".accordion-trigger-active"); + + if ( selectedTrigger.classed("accordion-trigger-active") ) { + // Collapse the active (which is also the selected) trigger + collapseContainers(d3.select(selectedTrigger.node().nextElementSibling)); + selectedTrigger.classed("accordion-trigger-active", false); + } else { + // Collapse the other trigger ... + collapseContainers(d3.selectAll(".accordion-trigger-active + div")); + activeTriggers.classed("accordion-trigger-active", false); + // ... and expand the selected one + expandContainers(d3.select(selectedTrigger.node().nextElementSibling)); + selectedTrigger.classed("accordion-trigger-active", true); + } + }); + } + + sidebar.clearOntologyInformation = function (){ + + d3.select("#title").text("No title available"); + d3.select("#about").attr("href", "#").attr("target", "_blank").text("not given"); + d3.select("#version").text("--"); + d3.select("#authors").text("--"); + d3.select("#description").text("No description available."); + var container = d3.select("#ontology-metadata"); + container.selectAll("*").remove(); + d3.select("#classCount") + .text("0"); + d3.select("#objectPropertyCount") + .text("0"); + d3.select("#datatypePropertyCount") + .text("0"); + d3.select("#individualCount") + .text("0"); + d3.select("#nodeCount") + .text("0"); + d3.select("#edgeCount") + .text("0"); + + // clear selectedNode info + var isTriggerActive = d3.select("#selection-details-trigger").classed("accordion-trigger-active"); + if ( isTriggerActive ) { + // close accordion + d3.select("#selection-details-trigger").node().click(); + } + showSelectionAdvice(); + + }; + + /** + * Updates the information of the passed ontology. + * @param data the graph data + * @param statistics the statistics module + */ + sidebar.updateOntologyInformation = function ( data, statistics ){ + data = data || {}; + ontologyInfo = data.header || {}; + + updateGraphInformation(); + displayGraphStatistics(undefined, statistics); + displayMetadata(ontologyInfo.other); + + // Reset the sidebar selection + sidebar.updateSelectionInformation(undefined); + + setLanguages(ontologyInfo.languages); + }; + + function setLanguages( languages ){ + languages = languages || []; + + // Put the default and unset label on top of the selection labels + languages.sort(function ( a, b ){ + if ( a === webvowl.util.constants().LANG_IRIBASED ) { + return -1; + } else if ( b === webvowl.util.constants().LANG_IRIBASED ) { + return 1; + } + if ( a === webvowl.util.constants().LANG_UNDEFINED ) { + return -1; + } else if ( b === webvowl.util.constants().LANG_UNDEFINED ) { + return 1; + } + return a.localeCompare(b); + }); + + var languageSelection = d3.select("#language") + .on("change", function (){ + graph.language(d3.event.target.value); + updateGraphInformation(); + sidebar.updateSelectionInformation(lastSelectedElement); + }); + + languageSelection.selectAll("option").remove(); + languageSelection.selectAll("option") + .data(languages) + .enter().append("option") + .attr("value", function ( d ){ + return d; + }) + .text(function ( d ){ + return d; + }); + + if ( !trySelectDefaultLanguage(languageSelection, languages, "en") ) { + if ( !trySelectDefaultLanguage(languageSelection, languages, webvowl.util.constants().LANG_UNDEFINED) ) { + trySelectDefaultLanguage(languageSelection, languages, webvowl.util.constants().LANG_IRIBASED); + } + } + } + + function trySelectDefaultLanguage( selection, languages, language ){ + var langIndex = languages.indexOf(language); + if ( langIndex >= 0 ) { + selection.property("selectedIndex", langIndex); + graph.language(language); + return true; + } + + return false; + } + + function updateGraphInformation(){ + var title = languageTools.textInLanguage(ontologyInfo.title, graph.language()); + d3.select("#title").text(title || "No title available"); + d3.select("#about").attr("href", ontologyInfo.iri).attr("target", "_blank").text(ontologyInfo.iri); + d3.select("#version").text(ontologyInfo.version || "--"); + var authors = ontologyInfo.author; + if ( typeof authors === "string" ) { + // Stay compatible with author info as strings after change in january 2015 + d3.select("#authors").text(authors); + } else if ( authors instanceof Array ) { + d3.select("#authors").text(authors.join(", ")); + } else { + d3.select("#authors").text("--"); + } + + var description = languageTools.textInLanguage(ontologyInfo.description, graph.language()); + d3.select("#description").text(description || "No description available."); + } + + function displayGraphStatistics( deliveredMetrics, statistics ){ + // Metrics are optional and may be undefined + deliveredMetrics = deliveredMetrics || {}; + + d3.select("#classCount") + .text(deliveredMetrics.classCount || statistics.classCount()); + d3.select("#objectPropertyCount") + .text(deliveredMetrics.objectPropertyCount || statistics.objectPropertyCount()); + d3.select("#datatypePropertyCount") + .text(deliveredMetrics.datatypePropertyCount || statistics.datatypePropertyCount()); + d3.select("#individualCount") + .text(deliveredMetrics.totalIndividualCount || statistics.totalIndividualCount()); + d3.select("#nodeCount") + .text(statistics.nodeCount()); + d3.select("#edgeCount") + .text(statistics.edgeCount()); + } + + function displayMetadata( metadata ){ + var container = d3.select("#ontology-metadata"); + container.selectAll("*").remove(); + + listAnnotations(container, metadata); + + if ( container.selectAll(".annotation").size() <= 0 ) { + container.append("p").text("No annotations available."); + } + } + + function listAnnotations( container, annotationObject ){ + annotationObject = annotationObject || {}; //todo + + // Collect the annotations in an array for simpler processing + var annotations = []; + for ( var annotation in annotationObject ) { + if ( annotationObject.hasOwnProperty(annotation) ) { + annotations.push(annotationObject[annotation][0]); + } + } + + container.selectAll(".annotation").remove(); + container.selectAll(".annotation").data(annotations).enter().append("p") + .classed("annotation", true) + .classed("statisticDetails", true) + .text(function ( d ){ + return d.identifier + ":"; + }) + .append("span") + .each(function ( d ){ + appendIriLabel(d3.select(this), d.value, d.type === "iri" ? d.value : undefined); + }); + } + + /** + * Update the information of the selected node. + * @param selectedElement the selection or null if nothing is selected + */ + sidebar.updateSelectionInformation = function ( selectedElement ){ + lastSelectedElement = selectedElement; + + // Click event was prevented when dragging + if ( d3.event && d3.event.defaultPrevented ) { + return; + } + + var isTriggerActive = d3.select("#selection-details-trigger").classed("accordion-trigger-active"); + if ( selectedElement && !isTriggerActive ) { + d3.select("#selection-details-trigger").node().click(); + } else if ( !selectedElement && isTriggerActive ) { + showSelectionAdvice(); + return; + } + + if ( elementTools.isProperty(selectedElement) ) { + displayPropertyInformation(selectedElement); + } else if ( elementTools.isNode(selectedElement) ) { + displayNodeInformation(selectedElement); + } + }; + + function showSelectionAdvice(){ + setSelectionInformationVisibility(false, false, true); + } + + function setSelectionInformationVisibility( showClasses, showProperties, showAdvice ){ + d3.select("#classSelectionInformation").classed("hidden", !showClasses); + d3.select("#propertySelectionInformation").classed("hidden", !showProperties); + d3.select("#noSelectionInformation").classed("hidden", !showAdvice); + } + + function displayPropertyInformation( property ){ + showPropertyInformations(); + + setIriLabel(d3.select("#propname"), property.labelForCurrentLanguage(), property.iri()); + d3.select("#typeProp").text(property.type()); + + if ( property.inverse() !== undefined ) { + d3.select("#inverse").classed("hidden", false); + setIriLabel(d3.select("#inverse span"), property.inverse().labelForCurrentLanguage(), property.inverse().iri()); + } else { + d3.select("#inverse").classed("hidden", true); + } + + var equivalentIriSpan = d3.select("#propEquivUri"); + listNodeArray(equivalentIriSpan, property.equivalents()); + + listNodeArray(d3.select("#subproperties"), property.subproperties()); + listNodeArray(d3.select("#superproperties"), property.superproperties()); + + if ( property.minCardinality() !== undefined ) { + d3.select("#infoCardinality").classed("hidden", true); + d3.select("#minCardinality").classed("hidden", false); + d3.select("#minCardinality span").text(property.minCardinality()); + d3.select("#maxCardinality").classed("hidden", false); + + if ( property.maxCardinality() !== undefined ) { + d3.select("#maxCardinality span").text(property.maxCardinality()); + } else { + d3.select("#maxCardinality span").text("*"); + } + + } else if ( property.cardinality() !== undefined ) { + d3.select("#minCardinality").classed("hidden", true); + d3.select("#maxCardinality").classed("hidden", true); + d3.select("#infoCardinality").classed("hidden", false); + d3.select("#infoCardinality span").text(property.cardinality()); + } else { + d3.select("#infoCardinality").classed("hidden", true); + d3.select("#minCardinality").classed("hidden", true); + d3.select("#maxCardinality").classed("hidden", true); + } + + setIriLabel(d3.select("#domain"), property.domain().labelForCurrentLanguage(), property.domain().iri()); + setIriLabel(d3.select("#range"), property.range().labelForCurrentLanguage(), property.range().iri()); + + displayAttributes(property.attributes(), d3.select("#propAttributes")); + + setTextAndVisibility(d3.select("#propDescription"), property.descriptionForCurrentLanguage()); + setTextAndVisibility(d3.select("#propComment"), property.commentForCurrentLanguage()); + + listAnnotations(d3.select("#propertySelectionInformation"), property.annotations()); + } + + function showPropertyInformations(){ + setSelectionInformationVisibility(false, true, false); + } + + function setIriLabel( element, name, iri ){ + var parent = d3.select(element.node().parentNode); + + if ( name ) { + element.selectAll("*").remove(); + appendIriLabel(element, name, iri); + parent.classed("hidden", false); + } else { + parent.classed("hidden", true); + } + } + + function appendIriLabel( element, name, iri ){ + var tag; + + if ( iri ) { + tag = element.append("a") + .attr("href", iri) + .attr("title", iri) + .attr("target", "_blank"); + } else { + tag = element.append("span"); + } + tag.text(name); + } + + function displayAttributes( attributes, textSpan ){ + var spanParent = d3.select(textSpan.node().parentNode); + + if ( attributes && attributes.length > 0 ) { + // Remove redundant redundant attributes for sidebar + removeElementFromArray("object", attributes); + removeElementFromArray("datatype", attributes); + removeElementFromArray("rdf", attributes); + } + + if ( attributes && attributes.length > 0 ) { + textSpan.text(attributes.join(", ")); + + spanParent.classed("hidden", false); + } else { + spanParent.classed("hidden", true); + } + } + + function removeElementFromArray( element, array ){ + var index = array.indexOf(element); + if ( index > -1 ) { + array.splice(index, 1); + } + } + + function displayNodeInformation( node ){ + showClassInformations(); + + setIriLabel(d3.select("#name"), node.labelForCurrentLanguage(), node.iri()); + + /* Equivalent stuff. */ + var equivalentIriSpan = d3.select("#classEquivUri"); + listNodeArray(equivalentIriSpan, node.equivalents()); + + d3.select("#typeNode").text(node.type()); + listNodeArray(d3.select("#individuals"), node.individuals()); + + /* Disjoint stuff. */ + var disjointNodes = d3.select("#disjointNodes"); + var disjointNodesParent = d3.select(disjointNodes.node().parentNode); + + if ( node.disjointWith() !== undefined ) { + disjointNodes.selectAll("*").remove(); + + node.disjointWith().forEach(function ( element, index ){ + if ( index > 0 ) { + disjointNodes.append("span").text(", "); + } + appendIriLabel(disjointNodes, element.labelForCurrentLanguage(), element.iri()); + }); + + disjointNodesParent.classed("hidden", false); + } else { + disjointNodesParent.classed("hidden", true); + } + + displayAttributes(node.attributes(), d3.select("#classAttributes")); + + setTextAndVisibility(d3.select("#nodeDescription"), node.descriptionForCurrentLanguage()); + setTextAndVisibility(d3.select("#nodeComment"), node.commentForCurrentLanguage()); + + listAnnotations(d3.select("#classSelectionInformation"), node.annotations()); + } + + function showClassInformations(){ + setSelectionInformationVisibility(true, false, false); + } + + function listNodeArray( textSpan, nodes ){ + var spanParent = d3.select(textSpan.node().parentNode); + + if ( nodes && nodes.length ) { + textSpan.selectAll("*").remove(); + nodes.forEach(function ( element, index ){ + if ( index > 0 ) { + textSpan.append("span").text(", "); + } + appendIriLabel(textSpan, element.labelForCurrentLanguage(), element.iri()); + }); + + spanParent.classed("hidden", false); + } else { + spanParent.classed("hidden", true); + } + } + + function setTextAndVisibility( label, value ){ + var parentNode = d3.select(label.node().parentNode); + var hasValue = !!value; + if ( value ) { + label.text(value); + } + parentNode.classed("hidden", !hasValue); + } + + /** Collapsible Sidebar functions; **/ + + sidebar.showSidebar = function ( val, init ){ + // make val to bool + if ( val === 1 ) { + visibleSidebar = true; + collapseButton.node().innerHTML = ">"; + detailArea.classed("hidden", true); + if ( init === true ) { + detailArea.classed("hidden", !visibleSidebar); + graphArea.style("width", "78%"); + graphArea.style("-webkit-animation-name", "none"); + + menuArea.style("width", "78%"); + menuArea.style("-webkit-animation-name", "none"); + + d3.select("#WarningErrorMessagesContainer").style("width", "78%"); + d3.select("#WarningErrorMessagesContainer").style("-webkit-animation-name", "none"); + } else { + graphArea.style("width", "78%"); + graphArea.style("-webkit-animation-name", "sbCollapseAnimation"); + graphArea.style("-webkit-animation-duration", "0.5s"); + + menuArea.style("width", "78%"); + menuArea.style("-webkit-animation-name", "sbCollapseAnimation"); + menuArea.style("-webkit-animation-duration", "0.5s"); + + d3.select("#WarningErrorMessagesContainer").style("width", "78%"); + d3.select("#WarningErrorMessagesContainer").style("-webkit-animation-name", "warn_ExpandRightBarAnimation"); + d3.select("#WarningErrorMessagesContainer").style("-webkit-animation-duration", "0.5s"); + } + graph.options().width(window.innerWidth - (window.innerWidth * 0.22)); + graph.options().navigationMenu().updateScrollButtonVisibility(); + } + if ( val === 0 ) { + visibleSidebar = false; + detailArea.classed("hidden", true); + + collapseButton.node().innerHTML = "<"; + // adjust the layout + if ( init === true ) { + graphArea.style("width", "100%"); + graphArea.style("-webkit-animation-name", "none"); + + menuArea.style("width", "100%"); + menuArea.style("-webkit-animation-name", "none"); + + d3.select("#WarningErrorMessagesContainer").style("width", "100%"); + d3.select("#WarningErrorMessagesContainer").style("-webkit-animation-name", "none"); + } else { + graphArea.style("width", "100%"); + graphArea.style("-webkit-animation-name", "sbExpandAnimation"); + graphArea.style("-webkit-animation-duration", "0.5s"); + + menuArea.style("width", "100%"); + menuArea.style("-webkit-animation-name", "sbExpandAnimation"); + menuArea.style("-webkit-animation-duration", "0.5s"); + + d3.select("#WarningErrorMessagesContainer").style("width", "100%"); + d3.select("#WarningErrorMessagesContainer").style("-webkit-animation-name", "warn_CollapseRightBarAnimation"); + d3.select("#WarningErrorMessagesContainer").style("-webkit-animation-duration", "0.5s"); + + } + graph.options().width(window.innerWidth); + graph.updateCanvasContainerSize(); + graph.options().navigationMenu().updateScrollButtonVisibility(); + } + }; + + sidebar.isSidebarVisible = function (){ + return visibleSidebar; + }; + + sidebar.updateSideBarVis = function ( init ){ + var vis = sidebar.getSidebarVisibility(); + sidebar.showSidebar(parseInt(vis), init); + }; + + sidebar.getSidebarVisibility = function (){ + var isHidden = detailArea.classed("hidden"); + if ( isHidden === false ) return String(1); + if ( isHidden === true ) return String(0); + }; + + sidebar.initSideBarAnimation = function (){ + graphArea.node().addEventListener("animationend", function (){ + detailArea.classed("hidden", !visibleSidebar); + graph.updateCanvasContainerSize(); + graph.options().navigationMenu().updateScrollButtonVisibility(); + }); + }; + + sidebar.setup = function (){ + setupCollapsing(); + sidebar.initSideBarAnimation(); + + collapseButton.on("click", function (){ + graph.options().navigationMenu().hideAllMenus(); + var settingValue = parseInt(sidebar.getSidebarVisibility()); + if ( settingValue === 1 ) sidebar.showSidebar(0); + else sidebar.showSidebar(1); + }); + }; + + + sidebar.updateShowedInformation = function (){ + var editMode = graph.editorMode(); + d3.select("#generalDetails").classed("hidden", editMode); + d3.select("#generalDetailsEdit").classed("hidden", !editMode); + + // store the meta information in graph.options() + + // todo: update edit meta info + graph.options().editSidebar().updateGeneralOntologyInfo(); + + // todo: update showed meta info; + graph.options().sidebar().updateGeneralOntologyInfo(); + + }; + + sidebar.updateGeneralOntologyInfo = function (){ + // get it from graph.options + var generalMetaObj = graph.options().getGeneralMetaObject(); + var preferredLanguage = graph && graph.language ? graph.language() : null; + if ( generalMetaObj.hasOwnProperty("title") ) { + // title has language to it -.- + if ( typeof generalMetaObj.title === "object" ) { + d3.select("#title").node().value = languageTools.textInLanguage(generalMetaObj.title, preferredLanguage); + } else { + d3.select("#title").node().innerHTML = generalMetaObj.title; + } + + } + if ( generalMetaObj.hasOwnProperty("iri") ) d3.select("#about").node().innerHTML = generalMetaObj.iri; + if ( generalMetaObj.hasOwnProperty("iri") ) d3.select("#about").node().href = generalMetaObj.iri; + if ( generalMetaObj.hasOwnProperty("version") ) d3.select("#version").node().innerHTML = generalMetaObj.version; + if ( generalMetaObj.hasOwnProperty("author") ) d3.select("#authors").node().innerHTML = generalMetaObj.author; + // this could also be an object >> + if ( generalMetaObj.hasOwnProperty("description") ) { + if ( typeof generalMetaObj.description === "object" ) { + d3.select("#description").node().innerHTML = languageTools.textInLanguage(generalMetaObj.description, preferredLanguage); + } + else { + d3.select("#description").node().innerHTML = generalMetaObj.description; + } + } + }; + + + return sidebar; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 339: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains the logic for the sidebar. + * @param graph the graph that belongs to these controls + * @returns {{}} + */ + module.exports = function ( graph ){ + + var leftSidebar = {}, + languageTools = webvowl.util.languageTools(), + elementTools = webvowl.util.elementTools(); + var collapseButton = d3.select("#leftSideBarCollapseButton"); + var visibleSidebar = 0; + var backupVisibility = 0; + var sideBarContent = d3.select("#leftSideBarContent"); + var sideBarContainer = d3.select("#containerForLeftSideBar"); + var defaultClassSelectionContainers = []; + var defaultDatatypeSelectionContainers = []; + var defaultPropertySelectionContainers = []; + + leftSidebar.setup = function (){ + setupCollapsing(); + leftSidebar.initSideBarAnimation(); + + collapseButton.on("click", function (){ + graph.options().navigationMenu().hideAllMenus(); + var settingValue = parseInt(leftSidebar.getSidebarVisibility()); + if ( settingValue === 0 ) leftSidebar.showSidebar(1); + else leftSidebar.showSidebar(0); + backupVisibility = settingValue; + }); + + setupSelectionContainers(); + d3.select("#WarningErrorMessages").node().addEventListener("animationend", function (){ + d3.select("#WarningErrorMessages").style("-webkit-animation-name", "none"); + }); + + }; + + leftSidebar.hideCollapseButton = function ( val ){ + sideBarContainer.classed("hidden", val); + }; + + + function unselectAllElements( container ){ + for ( var i = 0; i < container.length; i++ ) + container[i].classed("defaultSelected", false); + } + + function selectThisDefaultElement( element ){ + d3.select(element).classed("defaultSelected", true); + } + + function updateDefaultNameInAccordion( element, identifier ){ + var elementDescription = ""; + if ( identifier === "defaultClass" ) elementDescription = "Class: "; + if ( identifier === "defaultDatatype" ) elementDescription = "Datatype: "; + if ( identifier === "defaultProperty" ) elementDescription = "Property: "; + + d3.select("#" + identifier).node().innerHTML = elementDescription + element.innerHTML; + d3.select("#" + identifier).node().title = element.innerHTML; + } + + function classSelectorFunction(){ + unselectAllElements(defaultClassSelectionContainers); + selectThisDefaultElement(this); + updateDefaultNameInAccordion(this, "defaultClass"); + } + + function datatypeSelectorFunction(){ + unselectAllElements(defaultDatatypeSelectionContainers); + selectThisDefaultElement(this); + updateDefaultNameInAccordion(this, "defaultDatatype"); + } + + function propertySelectorFunction(){ + unselectAllElements(defaultPropertySelectionContainers); + selectThisDefaultElement(this); + updateDefaultNameInAccordion(this, "defaultProperty"); + } + + + function setupSelectionContainers(){ + var classContainer = d3.select("#classContainer"); + var datatypeContainer = d3.select("#datatypeContainer"); + var propertyContainer = d3.select("#propertyContainer"); + // create the supported elements + + var defaultClass = "owl:Class"; + var defaultDatatype = "rdfs:Literal"; + var defaultProperty = "owl:objectProperty"; + + var supportedClasses = graph.options().supportedClasses(); + var supportedDatatypes = graph.options().supportedDatatypes(); + var supportedProperties = graph.options().supportedProperties(); + var i; + + for ( i = 0; i < supportedClasses.length; i++ ) { + var aClassSelectionContainer; + aClassSelectionContainer = classContainer.append("div"); + aClassSelectionContainer.classed("containerForDefaultSelection", true); + aClassSelectionContainer.classed("noselect", true); + aClassSelectionContainer.node().id = "selectedClass" + supportedClasses[i]; + aClassSelectionContainer.node().innerHTML = supportedClasses[i]; + + if ( supportedClasses[i] === defaultClass ) { + selectThisDefaultElement(aClassSelectionContainer.node()); + } + aClassSelectionContainer.on("click", classSelectorFunction); + defaultClassSelectionContainers.push(aClassSelectionContainer); + } + + for ( i = 0; i < supportedDatatypes.length; i++ ) { + var aDTSelectionContainer = datatypeContainer.append("div"); + aDTSelectionContainer.classed("containerForDefaultSelection", true); + aDTSelectionContainer.classed("noselect", true); + aDTSelectionContainer.node().id = "selectedDatatype" + supportedDatatypes[i]; + aDTSelectionContainer.node().innerHTML = supportedDatatypes[i]; + + if ( supportedDatatypes[i] === defaultDatatype ) { + selectThisDefaultElement(aDTSelectionContainer.node()); + } + aDTSelectionContainer.on("click", datatypeSelectorFunction); + defaultDatatypeSelectionContainers.push(aDTSelectionContainer); + } + for ( i = 0; i < supportedProperties.length; i++ ) { + var aPropSelectionContainer = propertyContainer.append("div"); + aPropSelectionContainer.classed("containerForDefaultSelection", true); + aPropSelectionContainer.classed("noselect", true); + aPropSelectionContainer.node().id = "selectedClass" + supportedProperties[i]; + aPropSelectionContainer.node().innerHTML = supportedProperties[i]; + aPropSelectionContainer.on("click", propertySelectorFunction); + if ( supportedProperties[i] === defaultProperty ) { + selectThisDefaultElement(aPropSelectionContainer.node()); + } + defaultPropertySelectionContainers.push(aPropSelectionContainer); + } + } + + function setupCollapsing(){ + // adapted version of this example: http://www.normansblog.de/simple-jquery-accordion/ + function collapseContainers( containers ){ + containers.classed("hidden", true); + } + + function expandContainers( containers ){ + containers.classed("hidden", false); + } + + var triggers = d3.selectAll(".accordion-trigger"); + + // Collapse all inactive triggers on startup + // collapseContainers(d3.selectAll(".accordion-trigger:not(.accordion-trigger-active) + div")); + + triggers.on("click", function (){ + var selectedTrigger = d3.select(this); + if ( selectedTrigger.classed("accordion-trigger-active") ) { + // Collapse the active (which is also the selected) trigger + collapseContainers(d3.select(selectedTrigger.node().nextElementSibling)); + selectedTrigger.classed("accordion-trigger-active", false); + } else { + // Collapse the other trigger ... + // collapseContainers(d3.selectAll(".accordion-trigger-active + div")); + // activeTriggers.classed("accordion-trigger-active", false); + // ... and expand the selected one + expandContainers(d3.select(selectedTrigger.node().nextElementSibling)); + selectedTrigger.classed("accordion-trigger-active", true); + } + }); + } + + + leftSidebar.isSidebarVisible = function (){ + return visibleSidebar; + }; + + leftSidebar.updateSideBarVis = function ( init ){ + var vis = leftSidebar.getSidebarVisibility(); + leftSidebar.showSidebar(parseInt(vis), init); + }; + + leftSidebar.initSideBarAnimation = function (){ + sideBarContainer.node().addEventListener("animationend", function (){ + sideBarContent.classed("hidden", !visibleSidebar); + if ( visibleSidebar === true ) { + sideBarContainer.style("width", "200px"); + sideBarContent.classed("hidden", false); + d3.select("#leftSideBarCollapseButton").style("left", "200px"); + d3.select("#leftSideBarCollapseButton").classed("hidden", false); + d3.select("#WarningErrorMessages").style("left", "100px"); + } + else { + sideBarContainer.style("width", "0px"); + d3.select("#leftSideBarCollapseButton").style("left", "0px"); + d3.select("#WarningErrorMessages").style("left", "0px"); + d3.select("#leftSideBarCollapseButton").classed("hidden", false); + + } + graph.updateCanvasContainerSize(); + graph.options().navigationMenu().updateScrollButtonVisibility(); + }); + }; + + leftSidebar.showSidebar = function ( val, init ){ + // make val to bool + var collapseButton = d3.select("#leftSideBarCollapseButton"); + if ( init === true ) { + visibleSidebar = (backupVisibility === 0); + sideBarContent.classed("hidden", !visibleSidebar); + sideBarContainer.style("-webkit-animation-name", "none"); + d3.select("#WarningErrorMessages").style("-webkit-animation-name", "none"); + if ( visibleSidebar === true ) { + sideBarContainer.style("width", "200px"); + sideBarContent.classed("hidden", false); + d3.select("#leftSideBarCollapseButton").style("left", "200px"); + d3.select("#leftSideBarCollapseButton").classed("hidden", false); + d3.select("#WarningErrorMessages").style("left", "100px"); + collapseButton.node().innerHTML = "<"; + } + + else { + sideBarContainer.style("width", "0px"); + d3.select("#WarningErrorMessages").style("left", "0px"); + d3.select("#leftSideBarCollapseButton").style("left", "0px"); + d3.select("#leftSideBarCollapseButton").classed("hidden", false); + collapseButton.node().innerHTML = ">"; + } + + graph.updateCanvasContainerSize(); + graph.options().navigationMenu().updateScrollButtonVisibility(); + return; + } + + d3.select("#leftSideBarCollapseButton").classed("hidden", true); + + if ( val === 1 ) { + visibleSidebar = true; + collapseButton.node().innerHTML = "<"; + // call expand animation; + sideBarContainer.style("-webkit-animation-name", "l_sbExpandAnimation"); + sideBarContainer.style("-webkit-animation-duration", "0.5s"); + // prepare the animation; + + d3.select("#WarningErrorMessages").style("-webkit-animation-name", "warn_ExpandLeftBarAnimation"); + d3.select("#WarningErrorMessages").style("-webkit-animation-duration", "0.5s"); + + } + if ( val === 0 ) { + visibleSidebar = false; + sideBarContent.classed("hidden", true); + collapseButton.node().innerHTML = ">"; + // call collapse animation + sideBarContainer.style("-webkit-animation-name", "l_sbCollapseAnimation"); + sideBarContainer.style("-webkit-animation-duration", "0.5s"); + d3.select("#WarningErrorMessages").style("-webkit-animation-name", "warn_CollapseLeftBarAnimation"); + d3.select("#WarningErrorMessages").style("-webkit-animation-duration", "0.5s"); + d3.select("#WarningErrorMessages").style("left", "0"); + } + + }; + + leftSidebar.getSidebarVisibility = function (){ + var isHidden = sideBarContent.classed("hidden"); + if ( isHidden === false ) return String(1); + if ( isHidden === true ) return String(0); + }; + + return leftSidebar; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 340: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains the logic for the sidebar. + * @param graph the graph that belongs to these controls + * @returns {{}} + */ + module.exports = function ( graph ){ + + var editSidebar = {}, + languageTools = webvowl.util.languageTools(), + elementTools = webvowl.util.elementTools(); + + var prefixModule = webvowl.util.prefixTools(graph); + var selectedElementForCharacteristics; + var oldPrefix, oldPrefixURL; + var prefix_editMode = false; + + + editSidebar.clearMetaObjectValue = function (){ + d3.select("#titleEditor").node().value = ""; + d3.select("#iriEditor").node().value = ""; + d3.select("#versionEditor").node().value = ""; + d3.select("#authorsEditor").node().value = ""; + d3.select("#descriptionEditor").node().value = ""; + // todo add clear description; + }; + + + editSidebar.updatePrefixUi = function (){ + editSidebar.updateElementWidth(); + var prefixListContainer = d3.select("#prefixURL_Container"); + while ( prefixListContainer.node().firstChild ) { + prefixListContainer.node().removeChild(prefixListContainer.node().firstChild); + } + setupPrefixList(); + }; + + editSidebar.setup = function (){ + setupCollapsing(); + setupPrefixList(); + setupAddPrefixButton(); + setupSupportedDatatypes(); + + + d3.select("#titleEditor") + .on("change", function (){ + graph.options().addOrUpdateGeneralObjectEntry("title", d3.select("#titleEditor").node().value); + }) + .on("keydown", function (){ + d3.event.stopPropagation(); + if ( d3.event.keyCode === 13 ) { + d3.event.preventDefault(); + graph.options().addOrUpdateGeneralObjectEntry("title", d3.select("#titleEditor").node().value); + } + }); + d3.select("#iriEditor") + .on("change", function (){ + if ( graph.options().addOrUpdateGeneralObjectEntry("iri", d3.select("#iriEditor").node().value) === false ) { + // restore value + d3.select("#iriEditor").node().value = graph.options().getGeneralMetaObjectProperty('iri'); + } + }) + .on("keydown", function (){ + d3.event.stopPropagation(); + if ( d3.event.keyCode === 13 ) { + d3.event.preventDefault(); + if ( graph.options().addOrUpdateGeneralObjectEntry("iri", d3.select("#iriEditor").node().value) === false ) { + // restore value + d3.select("#iriEditor").node().value = graph.options().getGeneralMetaObjectProperty('iri'); + } + } + }); + d3.select("#versionEditor") + .on("change", function (){ + graph.options().addOrUpdateGeneralObjectEntry("version", d3.select("#versionEditor").node().value); + }) + .on("keydown", function (){ + d3.event.stopPropagation(); + if ( d3.event.keyCode === 13 ) { + d3.event.preventDefault(); + graph.options().addOrUpdateGeneralObjectEntry("version", d3.select("#versionEditor").node().value); + } + }); + d3.select("#authorsEditor") + .on("change", function (){ + graph.options().addOrUpdateGeneralObjectEntry("author", d3.select("#authorsEditor").node().value); + }) + .on("keydown", function (){ + d3.event.stopPropagation(); + if ( d3.event.keyCode === 13 ) { + d3.event.preventDefault(); + graph.options().addOrUpdateGeneralObjectEntry("author", d3.select("#authorsEditor").node().value); + } + }); + d3.select("#descriptionEditor") + .on("change", function (){ + graph.options().addOrUpdateGeneralObjectEntry("description", d3.select("#descriptionEditor").node().value); + }); + + editSidebar.updateElementWidth(); + + }; + + function setupSupportedDatatypes(){ + var datatypeEditorSelection = d3.select("#typeEditor_datatype").node(); + var supportedDatatypes = ["undefined", "xsd:boolean", "xsd:double", "xsd:integer", "xsd:string"]; + for ( var i = 0; i < supportedDatatypes.length; i++ ) { + var optB = document.createElement('option'); + optB.innerHTML = supportedDatatypes[i]; + datatypeEditorSelection.appendChild(optB); + } + } + + function highlightDeleteButton( enable, name ){ + var deletePath = d3.select("#del_pathFor_" + name); + var deleteRect = d3.select("#del_rectFor_" + name); + + if ( enable === false ) { + deletePath.node().style = "stroke: #f00;"; + deleteRect.style("cursor", "auto"); + } else { + deletePath.node().style = "stroke: #ff972d;"; + deleteRect.style("cursor", "pointer"); + } + } + + + function highlightEditButton( enable, name, fill ){ + var editPath = d3.select("#pathFor_" + name); + var editRect = d3.select("#rectFor_" + name); + + if ( enable === false ) { + if ( fill ) + editPath.node().style = "fill: #fff; stroke : #fff; stroke-width : 1px"; + else + editPath.node().style = " stroke : #fff; stroke-width : 1px"; + + editRect.style("cursor", "auto"); + } else { + if ( fill ) + editPath.node().style = "fill: #ff972d; stroke : #ff972d; stroke-width : 1px"; + else + editPath.node().style = "stroke : #ff972d; stroke-width : 1px"; + editRect.style("cursor", "pointer"); + } + + } + + function setupAddPrefixButton(){ + var btn = d3.select("#addPrefixButton"); + btn.on("click", function (){ + + // check if we are still in editMode? + if ( prefix_editMode === false ) { + // create new line entry; + var name = "emptyPrefixEntry"; + var prefixListContainer = d3.select("#prefixURL_Container"); + var prefixEditContainer = prefixListContainer.append("div"); + prefixEditContainer.classed("prefixIRIElements", true); + prefixEditContainer.node().id = "prefixContainerFor_" + name; + + var IconContainer = prefixEditContainer.append("div"); + IconContainer.style("position", "absolute"); + IconContainer.node().id = "containerFor_" + name; + var editButton = IconContainer.append("svg"); + editButton.style("width", "14px"); + editButton.style("height", "20px"); + // editButton.classed("editPrefixButton", true); + editButton.classed("noselect", true); + //editButton.node().innerHTML = "\u2714"; + editButton.node().id = "editButtonFor_" + name; + + editButton.node().elementStyle = "save"; + editButton.node().selectorName = name; + var editIcon = editButton.append("g"); + var editRect = editIcon.append("rect"); + var editPath = editIcon.append("path"); + editIcon.node().id = "iconFor_" + name; + editPath.node().id = "pathFor_" + name; + editRect.node().id = "rectFor_" + name; + + editIcon.node().selectorName = name; + editPath.node().selectorName = name; + editRect.node().selectorName = name; + IconContainer.node().title = "Save new prefix and IRI"; + + editPath.classed("editPrefixIcon"); + editPath.style("stroke", "#fff"); + editPath.style("stroke-width", "1px"); + editPath.style("fill", "#fff"); + editRect.attr("width", "14px"); + editRect.attr("height", "14px"); + editRect.style("fill", "#18202A"); + editRect.attr("transform", "matrix(1,0,0,1,-3,4)"); + + editButton.selectAll("g").on("mouseover", function (){ + highlightEditButton(true, this.selectorName, true); + }); + editButton.selectAll("g").on("mouseout", function (){ + highlightEditButton(false, this.selectorName, true); + }); + // Check mark + // M9 16.2L4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4L9 16.2z + // pencil + // M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z + editPath.attr("d", "M9 16.2L4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4L9 16.2z"); + editPath.attr("transform", "matrix(0.45,0,0,0.45,0,5)"); + + var prefInput = prefixEditContainer.append("input"); + prefInput.classed("prefixInput", true); + prefInput.node().type = "text"; + prefInput.node().id = "prefixInputFor_" + name; + prefInput.node().autocomplete = "off"; + prefInput.node().value = ""; + prefInput.style("margin-left", "14px"); + + var prefURL = prefixEditContainer.append("input"); + prefURL.classed("prefixURL", true); + prefURL.node().type = "text"; + prefURL.node().id = "prefixURLFor_" + name; + prefURL.node().autocomplete = "off"; + prefURL.node().value = ""; + + prefInput.node().disabled = false; + prefURL.node().disabled = false; + prefix_editMode = true; + var deleteContainer = prefixEditContainer.append("div"); + deleteContainer.style("float", "right"); + var deleteButton = deleteContainer.append("svg"); + deleteButton.node().id = "deleteButtonFor_" + name; + deleteContainer.node().title = "Delete prefix and IRI"; + deleteButton.style("width", "10px"); + deleteButton.style("height", "20px"); + var deleteIcon = deleteButton.append("g"); + var deleteRect = deleteIcon.append("rect"); + var deletePath = deleteIcon.append("path"); + deleteIcon.node().id = "del_iconFor_" + name; + deletePath.node().id = "del_pathFor_" + name; + deleteRect.node().id = "del_rectFor_" + name; + + deleteIcon.node().selectorName = name; + deletePath.node().selectorName = name; + deleteRect.node().selectorName = name; + + + deletePath.style("stroke", "#f00"); + deleteRect.attr("width", "10px"); + deleteRect.attr("height", "14px"); + deleteRect.style("fill", "#18202A"); + deleteRect.attr("transform", "matrix(1,0,0,1,-3,4)"); + + + deletePath.attr("d", "M19 6.41L17.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 12z"); + deletePath.attr("transform", "matrix(0.45,0,0,0.45,0,5)"); + + deleteButton.selectAll("g").on("mouseover", function (){ + highlightDeleteButton(true, this.selectorName); + }); + deleteButton.selectAll("g").on("mouseout", function (){ + highlightDeleteButton(false, this.selectorName); + }); + + + // connect the buttons; + editButton.on("click", enablePrefixEdit); + deleteButton.on("click", deletePrefixLine); + + editSidebar.updateElementWidth(); + // swap focus to prefixInput + prefInput.node().focus(); + oldPrefix = name; + oldPrefixURL = ""; + d3.select("#addPrefixButton").node().innerHTML = "Save Prefix"; + } else { + d3.select("#editButtonFor_emptyPrefixEntry").on("click")(d3.select("#editButtonFor_emptyPrefixEntry").node()); + } + + }); + + } + + function setupPrefixList(){ + if ( graph.isEditorMode() === false ) return; + var prefixListContainer = d3.select("#prefixURL_Container"); + var prefixElements = graph.options().prefixList(); + for ( var name in prefixElements ) { + if ( prefixElements.hasOwnProperty(name) ) { + var prefixEditContainer = prefixListContainer.append("div"); + prefixEditContainer.classed("prefixIRIElements", true); + prefixEditContainer.node().id = "prefixContainerFor_" + name; + + // create edit button which enables the input fields + var IconContainer = prefixEditContainer.append("div"); + IconContainer.style("position", "absolute"); + IconContainer.node().id = "containerFor_" + name; + var editButton = IconContainer.append("svg"); + editButton.style("width", "14px"); + editButton.style("height", "20px"); + editButton.classed("noselect", true); + editButton.node().id = "editButtonFor_" + name; + IconContainer.node().title = "Edit prefix and IRI"; + editButton.node().elementStyle = "save"; + editButton.node().selectorName = name; + + editButton.node().id = "editButtonFor_" + name; + editButton.node().elementStyle = "edit"; + var editIcon = editButton.append("g"); + var editRect = editIcon.append("rect"); + var editPath = editIcon.append("path"); + editIcon.node().id = "iconFor_" + name; + editPath.node().id = "pathFor_" + name; + editRect.node().id = "rectFor_" + name; + + editIcon.node().selectorName = name; + editPath.node().selectorName = name; + editRect.node().selectorName = name; + + + editPath.classed("editPrefixIcon"); + editPath.style("stroke", "#fff"); + editPath.style("stroke-width", "1px"); + editRect.attr("width", "14px"); + editRect.attr("height", "14px"); + editRect.style("fill", "#18202A"); + editRect.attr("transform", "matrix(1,0,0,1,-3,4)"); + + editButton.selectAll("g").on("mouseover", function (){ + var sender = this; + var fill = false; + var enable = true; + var f_editPath = d3.select("#pathFor_" + sender.selectorName); + var f_editRect = d3.select("#rectFor_" + sender.selectorName); + + if ( enable === false ) { + if ( fill ) + f_editPath.node().style = "fill: #fff; stroke : #fff; stroke-width : 1px"; + else + f_editPath.node().style = " stroke : #fff; stroke-width : 1px"; + + f_editRect.style("cursor", "auto"); + } else { + if ( fill ) + f_editPath.node().style = "fill: #ff972d; stroke : #ff972d; stroke-width : 1px"; + else + f_editPath.node().style = "stroke : #ff972d; stroke-width : 1px"; + f_editRect.style("cursor", "pointer"); + } + }); + editButton.selectAll("g").on("mouseout", function (){ + var sender = this; + var fill = false; + var enable = false; + var f_editPath = d3.select("#pathFor_" + sender.selectorName); + var f_editRect = d3.select("#rectFor_" + sender.selectorName); + + if ( enable === false ) { + if ( fill ) + f_editPath.node().style = "fill: #fff; stroke : #fff; stroke-width : 1px"; + else + f_editPath.node().style = " stroke : #fff; stroke-width : 1px"; + + f_editRect.style("cursor", "auto"); + } else { + if ( fill ) + f_editPath.node().style = "fill: #ff972d; stroke : #ff972d; stroke-width : 1px"; + else + f_editPath.node().style = "stroke : #ff972d; stroke-width : 1px"; + f_editRect.style("cursor", "pointer"); + } + }); + + editPath.attr("d", "M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z"); + editPath.attr("transform", "matrix(-0.45,0,0,0.45,10,5)"); + + // create input field for prefix + var prefInput = prefixEditContainer.append("input"); + prefInput.classed("prefixInput", true); + prefInput.node().type = "text"; + prefInput.node().id = "prefixInputFor_" + name; + prefInput.node().autocomplete = "off"; + prefInput.node().value = name; + prefInput.style("margin-left", "14px"); + + // create input field for prefix url + var prefURL = prefixEditContainer.append("input"); + prefURL.classed("prefixURL", true); + prefURL.node().type = "text"; + prefURL.node().id = "prefixURLFor_" + name; + prefURL.node().autocomplete = "off"; + prefURL.node().value = prefixElements[name]; + prefURL.node().title = prefixElements[name]; + // disable the input fields (already defined elements can be edited later) + prefInput.node().disabled = true; + prefURL.node().disabled = true; + + // create the delete button + var deleteContainer = prefixEditContainer.append("div"); + deleteContainer.style("float", "right"); + var deleteButton = deleteContainer.append("svg"); + deleteButton.node().id = "deleteButtonFor_" + name; + deleteContainer.node().title = "Delete prefix and IRI"; + deleteButton.style("width", "10px"); + deleteButton.style("height", "20px"); + var deleteIcon = deleteButton.append("g"); + var deleteRect = deleteIcon.append("rect"); + var deletePath = deleteIcon.append("path"); + deleteIcon.node().id = "del_iconFor_" + name; + deletePath.node().id = "del_pathFor_" + name; + deleteRect.node().id = "del_rectFor_" + name; + + deleteIcon.node().selectorName = name; + deletePath.node().selectorName = name; + deleteRect.node().selectorName = name; + + + deletePath.style("stroke", "#f00"); + deleteRect.attr("width", "10px"); + deleteRect.attr("height", "14px"); + deleteRect.style("fill", "#18202A"); + deleteRect.attr("transform", "matrix(1,0,0,1,-3,4)"); + + + deletePath.attr("d", "M19 6.41L17.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 12z"); + deletePath.attr("transform", "matrix(0.45,0,0,0.45,0,5)"); + + deleteButton.selectAll("g").on("mouseover", function (){ + var selector = this; + var enable = true; + var f_deletePath = d3.select("#del_pathFor_" + selector.selectorName); + var f_deleteRect = d3.select("#del_rectFor_" + selector.selectorName); + + if ( enable === false ) { + f_deletePath.node().style = "stroke: #f00;"; + f_deleteRect.style("cursor", "auto"); + } else { + f_deletePath.node().style = "stroke: #ff972d;"; + f_deleteRect.style("cursor", "pointer"); + } + }); + deleteButton.selectAll("g").on("mouseout", function (){ + var selector = this; + var enable = false; + var f_deletePath = d3.select("#del_pathFor_" + selector.selectorName); + var f_deleteRect = d3.select("#del_rectFor_" + selector.selectorName); + + if ( enable === false ) { + f_deletePath.node().style = "stroke: #f00;"; + f_deleteRect.style("cursor", "auto"); + } else { + f_deletePath.node().style = "stroke: #ff972d;"; + f_deleteRect.style("cursor", "pointer"); + } + }); + + + editButton.on("click", enablePrefixEdit); + deleteButton.on("click", deletePrefixLine); + + // EXPERIMENTAL + + if ( name === "rdf" || + name === "rdfs" || + name === "xsd" || name === "dc" || + name === "owl" + ) { + // make them invis so the spacing does not change + IconContainer.classed("hidden", true); + deleteContainer.classed("hidden", true); + } + } + } + prefixModule.updatePrefixModel(); + } + + function deletePrefixLine(){ + if ( this.disabled === true ) return; + d3.select("#addPrefixButton").node().innerHTML = "Add Prefix"; + var selector = this.id.split("_")[1]; + d3.select("#prefixContainerFor_" + selector).remove(); + graph.options().removePrefix(selector); + prefix_editMode = false; // < 0 ) { + var basePref = graph.options().prefixList()[pr]; + if ( basePref === undefined ) { + console.log("ERROR __________________"); + graph.options().warningModule().showWarning("Invalid Element IRI", + "Could not resolve prefix '" + basePref + "'", + "Restoring previous IRI for Element" + element.iri(), 1, false); + d3.select("#element_iriEditor").node().value = element.iri(); + return; + + } + // check if url is not empty + + if ( name.length === 0 ) { + graph.options().warningModule().showWarning("Invalid Element IRI", + "Input IRI is EMPTY", + "Restoring previous IRI for Element" + element.iri(), 1, false); + console.log("NO INPUT PROVIDED"); + d3.select("#element_iriEditor").node().value = element.iri(); + return; + + } + url = basePref + name; + } + else { + url = base + name; + } + } else { + if ( url.length === 0 ) { + // + console.log("NO INPUT PROVIDED"); + d3.select("#element_iriEditor").node().value = element.iri(); + return; + } + // failed to identify anything useful + console.log("Tryig to use the input!"); + url = base + url; + } + } + return url; + } + + function changeIriForElement( element ){ + var url = getURLFROMPrefixedVersion(element); + var base = graph.options().getGeneralMetaObjectProperty("iri"); + var sanityCheckResult; + if ( elementTools.isNode(element) ) { + + sanityCheckResult = graph.checkIfIriClassAlreadyExist(url); + if ( sanityCheckResult === false ) { + element.iri(url); + } else { + // throw warnign + graph.options().warningModule().showWarning("Already seen this class", + "Input IRI: " + url + " for element: " + element.labelForCurrentLanguage() + " already been set", + "Restoring previous IRI for Element : " + element.iri(), 2, false, sanityCheckResult); + + editSidebar.updateSelectionInformation(element); + return; + + } + } + if ( elementTools.isProperty(element) === true ) { + sanityCheckResult = editSidebar.checkProperIriChange(element, url); + if ( sanityCheckResult !== false ) { + graph.options().warningModule().showWarning("Already seen this property", + "Input IRI: " + url + " for element: " + element.labelForCurrentLanguage() + " already been set", + "Restoring previous IRI for Element : " + element.iri(), 1, false, sanityCheckResult); + + editSidebar.updateSelectionInformation(element); + return; + } + } + + // if (element.existingPropertyIRI(url)===true){ + // console.log("I Have seen this Particular URL already "+url); + // graph.options().warningModule().showWarning("Already Seen This one ", + // "Input IRI For Element"+ element.labelForCurrentLanguage()+" already been set ", + // "Restoring previous IRI for Element"+element.iri(),1,false); + // d3.select("#element_iriEditor").node().value=graph.options().prefixModule().getPrefixRepresentationForFullURI(element.iri()); + // editSidebar.updateSelectionInformation(element); + // return; + // } + + element.iri(url); + if ( identifyExternalCharacteristicForElement(base, url) === true ) { + addAttribute(element, "external"); + // background color for external element; + element.backgroundColor("#36C"); + element.redrawElement(); + element.redrawLabelText(); + // handle visual selection + + } else { + removeAttribute(element, "external"); + // background color for external element; + element.backgroundColor(undefined); + element.redrawElement(); + element.redrawLabelText(); + + } + + if ( element.focused() ) { + graph.options().focuserModule().handle(element, true); // unfocus + graph.options().focuserModule().handle(element, true); // focus + } + // graph.options().focuserModule().handle(undefined); + + + d3.select("#element_iriEditor").node().value = prefixModule.getPrefixRepresentationForFullURI(url); + editSidebar.updateSelectionInformation(element); + } + + function validURL( str ){ + var urlregex = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/; + return urlregex.test(str); + } + + + function changeLabelForElement( element ){ + element.label(d3.select("#element_labelEditor").node().value); + element.redrawLabelText(); + } + + editSidebar.updateEditDeleteButtonIds = function ( oldPrefix, newPrefix ){ + d3.select("#prefixInputFor_" + oldPrefix).node().id = "prefixInputFor_" + newPrefix; + d3.select("#prefixURLFor_" + oldPrefix).node().id = "prefixURLFor_" + newPrefix; + d3.select("#deleteButtonFor_" + oldPrefix).node().id = "deleteButtonFor_" + newPrefix; + d3.select("#editButtonFor_" + oldPrefix).node().id = "editButtonFor_" + newPrefix; + + d3.select("#prefixContainerFor_" + oldPrefix).node().id = "prefixContainerFor_" + newPrefix; + }; + + editSidebar.checkForExistingURL = function ( url ){ + var i; + var allProps = graph.getUnfilteredData().properties; + for ( i = 0; i < allProps.length; i++ ) { + if ( allProps[i].iri() === url ) return true; + } + return false; + + }; + editSidebar.checkProperIriChange = function ( element, url ){ + console.log("Element changed Label"); + console.log("Testing URL " + url); + if ( element.type() === "rdfs:subClassOf" || element.type() === "owl:disjointWith" ) { + console.log("ignore this for now, already handled in the type and domain range changer"); + } else { + var i; + var allProps = graph.getUnfilteredData().properties; + for ( i = 0; i < allProps.length; i++ ) { + if ( allProps[i] === element ) continue; + if ( allProps[i].iri() === url ) return allProps[i]; + } + } + return false; + }; + + editSidebar.updateSelectionInformation = function ( element ){ + + if ( element === undefined ) { + // show hint; + d3.select("#selectedElementProperties").classed("hidden", true); + d3.select("#selectedElementPropertiesEmptyHint").classed("hidden", false); + selectedElementForCharacteristics = null; + editSidebar.updateElementWidth(); + } + else { + d3.select("#selectedElementProperties").classed("hidden", false); + d3.select("#selectedElementPropertiesEmptyHint").classed("hidden", true); + d3.select("#typeEditForm_datatype").classed("hidden", true); + + // set the element IRI, and labels + d3.select("#element_iriEditor").node().value = element.iri(); + d3.select("#element_labelEditor").node().value = element.labelForCurrentLanguage(); + d3.select("#element_iriEditor").node().title = element.iri(); + + d3.select("#element_iriEditor") + .on("change", function (){ + var elementIRI = element.iri(); + var prefixed = graph.options().prefixModule().getPrefixRepresentationForFullURI(elementIRI); + if ( prefixed === d3.select("#element_iriEditor").node().value ) { + console.log("Iri is identical, nothing has changed!"); + return; + } + + changeIriForElement(element); + }) + .on("keydown", function (){ + d3.event.stopPropagation(); + if ( d3.event.keyCode === 13 ) { + d3.event.preventDefault(); + console.log("IRI CHANGED Via ENTER pressed"); + changeIriForElement(element); + d3.select("#element_iriEditor").node().title = element.iri(); + } + }); + + var forceIRISync = defaultIriValue(element); + d3.select("#element_labelEditor") + .on("change", function (){ + var sanityCheckResult; + console.log("Element changed Label"); + var url = getURLFROMPrefixedVersion(element); + if ( element.iri() !== url ) { + if ( elementTools.isProperty(element) === true ) { + sanityCheckResult = editSidebar.checkProperIriChange(element, url); + if ( sanityCheckResult !== false ) { + graph.options().warningModule().showWarning("Already seen this property", + "Input IRI: " + url + " for element: " + element.labelForCurrentLanguage() + " already been set", + "Continuing with duplicate property!", 1, false, sanityCheckResult); + editSidebar.updateSelectionInformation(element); + return; + } + } + + if ( elementTools.isNode(element) === true ) { + sanityCheckResult = graph.checkIfIriClassAlreadyExist(url); + if ( sanityCheckResult !== false ) { + graph.options().warningModule().showWarning("Already seen this Class", + "Input IRI: " + url + " for element: " + element.labelForCurrentLanguage() + " already been set", + "Restoring previous IRI for Element : " + element.iri(), 2, false, sanityCheckResult); + + editSidebar.updateSelectionInformation(element); + return; + } + } + element.iri(url); + } + changeLabelForElement(element); + editSidebar.updateSelectionInformation(element); // prevents that it will be changed if node is still active + }) + .on("keydown", function (){ + d3.event.stopPropagation(); + if ( d3.event.keyCode === 13 ) { + d3.event.preventDefault(); + var sanityCheckResult; + console.log("Element changed Label"); + var url = getURLFROMPrefixedVersion(element); + if ( element.iri() !== url ) { + if ( elementTools.isProperty(element) === true ) { + sanityCheckResult = editSidebar.checkProperIriChange(element, url); + if ( sanityCheckResult !== false ) { + graph.options().warningModule().showWarning("Already seen this property", + "Input IRI: " + url + " for element: " + element.labelForCurrentLanguage() + " already been set", + "Continuing with duplicate property!", 1, false, sanityCheckResult); + + editSidebar.updateSelectionInformation(element); + return; + } + } + + if ( elementTools.isNode(element) === true ) { + sanityCheckResult = graph.checkIfIriClassAlreadyExist(url); + if ( sanityCheckResult !== false ) { + graph.options().warningModule().showWarning("Already seen this Class", + "Input IRI: " + url + " for element: " + element.labelForCurrentLanguage() + " already been set", + "Restoring previous IRI for Element : " + element.iri(), 2, false, sanityCheckResult); + + editSidebar.updateSelectionInformation(element); + return; + } + } + element.iri(url); + } + changeLabelForElement(element); + } + }) + .on("keyup", function (){ + if ( forceIRISync ) { + var labelName = d3.select("#element_labelEditor").node().value; + var resourceName = labelName.replaceAll(" ", "_"); + var syncedIRI = element.baseIri() + resourceName; + + //element.iri(syncedIRI); + d3.select("#element_iriEditor").node().title = element.iri(); + d3.select("#element_iriEditor").node().value = prefixModule.getPrefixRepresentationForFullURI(syncedIRI); + } + }); + // check if we are allowed to change IRI OR LABEL + d3.select("#element_iriEditor").node().disabled = false; + d3.select("#element_labelEditor").node().disabled = false; + + if ( element.type() === "rdfs:subClassOf" ) { + d3.select("#element_iriEditor").node().value = "http://www.w3.org/2000/01/rdf-schema#subClassOf"; + d3.select("#element_iriEditor").node().title = "http://www.w3.org/2000/01/rdf-schema#subClassOf"; + d3.select("#element_labelEditor").node().value = "Subclass of"; + d3.select("#element_iriEditor").node().disabled = true; + d3.select("#element_labelEditor").node().disabled = true; + } + if ( element.type() === "owl:Thing" ) { + d3.select("#element_iriEditor").node().value = "http://www.w3.org/2002/07/owl#Thing"; + d3.select("#element_iriEditor").node().title = "http://www.w3.org/2002/07/owl#Thing"; + d3.select("#element_labelEditor").node().value = "Thing"; + d3.select("#element_iriEditor").node().disabled = true; + d3.select("#element_labelEditor").node().disabled = true; + } + + if ( element.type() === "owl:disjointWith" ) { + d3.select("#element_iriEditor").node().value = "http://www.w3.org/2002/07/owl#disjointWith"; + d3.select("#element_iriEditor").node().title = "http://www.w3.org/2002/07/owl#disjointWith"; + d3.select("#element_iriEditor").node().disabled = true; + d3.select("#element_labelEditor").node().disabled = true; + } + + if ( element.type() === "rdfs:Literal" ) { + d3.select("#element_iriEditor").node().value = "http://www.w3.org/2000/01/rdf-schema#Literal"; + d3.select("#element_iriEditor").node().title = "http://www.w3.org/2000/01/rdf-schema#Literal"; + d3.select("#element_iriEditor").node().disabled = true; + d3.select("#element_labelEditor").node().disabled = true; + element.iri("http://www.w3.org/2000/01/rdf-schema#Literal"); + } + if ( element.type() === "rdfs:Datatype" ) { + var datatypeEditorSelection = d3.select("#typeEditor_datatype"); + d3.select("#typeEditForm_datatype").classed("hidden", false); + element.iri("http://www.w3.org/2000/01/rdf-schema#Datatype"); + d3.select("#element_iriEditor").node().value = "http://www.w3.org/2000/01/rdf-schema#Datatype"; + d3.select("#element_iriEditor").node().title = "http://www.w3.org/2000/01/rdf-schema#Datatype"; + d3.select("#element_iriEditor").node().disabled = true; + d3.select("#element_labelEditor").node().disabled = true; + + datatypeEditorSelection.node().value = element.dType(); + if ( datatypeEditorSelection.node().value === "undefined" ) { + d3.select("#element_iriEditor").node().disabled = true; // always prevent IRI modifications + d3.select("#element_labelEditor").node().disabled = false; + } + // reconnect the element + datatypeEditorSelection.on("change", function (){ + changeDatatypeType(element); + }); + } + + // add type selector + var typeEditorSelection = d3.select("#typeEditor").node(); + var htmlCollection = typeEditorSelection.children; + var numEntries = htmlCollection.length; + var i; + var elementPrototypes = getElementPrototypes(element); + for ( i = 0; i < numEntries; i++ ) + typeEditorSelection.removeChild(htmlCollection[0]); + + for ( i = 0; i < elementPrototypes.length; i++ ) { + var optA = document.createElement('option'); + optA.innerHTML = elementPrototypes[i]; + typeEditorSelection.appendChild(optA); + } + // set the proper value in the selection + typeEditorSelection.value = element.type(); + d3.select("#typeEditor").on("change", function (){ + elementTypeSelectionChanged(element); + }); + + + // add characteristics selection + var needChar = elementNeedsCharacteristics(element); + d3.select("#property_characteristics_Container").classed("hidden", !needChar); + if ( needChar === true ) { + addElementsCharacteristics(element); + } + var fullURI = d3.select("#element_iriEditor").node().value; + d3.select("#element_iriEditor").node().value = prefixModule.getPrefixRepresentationForFullURI(fullURI); + d3.select("#element_iriEditor").node().title = fullURI; + editSidebar.updateElementWidth(); + } + + }; + + editSidebar.updateGeneralOntologyInfo = function (){ + var preferredLanguage = graph && graph.language ? graph.language() : null; + + // get it from graph.options + var generalMetaObj = graph.options().getGeneralMetaObject(); + if ( generalMetaObj.hasOwnProperty("title") ) { + // title has language to it -.- + if ( typeof generalMetaObj.title === "object" ) { + d3.select("#titleEditor").node().value = languageTools.textInLanguage(generalMetaObj.title, preferredLanguage); + } else + d3.select("#titleEditor").node().value = generalMetaObj.title; + } + if ( generalMetaObj.hasOwnProperty("iri") ) d3.select("#iriEditor").node().value = generalMetaObj.iri; + if ( generalMetaObj.hasOwnProperty("version") ) d3.select("#versionEditor").node().value = generalMetaObj.version; + if ( generalMetaObj.hasOwnProperty("author") ) d3.select("#authorsEditor").node().value = generalMetaObj.author; + + + if ( generalMetaObj.hasOwnProperty("description") ) { + + if ( typeof generalMetaObj.description === "object" ) + d3.select("#descriptionEditor").node().value = + languageTools.textInLanguage(generalMetaObj.description, preferredLanguage); + else + d3.select("#descriptionEditor").node().value = generalMetaObj.description; + } + else + d3.select("#descriptionEditor").node().value = "No Description"; + }; + + editSidebar.updateElementWidth = function (){ + var height = window.innerHeight - 40; + var lsb_offset = d3.select("#logo").node().getBoundingClientRect().height + 5; + var lsb_height = height - lsb_offset; + d3.select("#containerForLeftSideBar").style("top", lsb_offset + "px"); + d3.select("#leftSideBarCollapseButton").style("top", lsb_offset + "px"); + d3.select("#containerForLeftSideBar").style("height", lsb_height + "px"); + + var div_width = d3.select("#generalDetailsEdit").node().getBoundingClientRect().width; + div_width += 10; + + var title_labelWidth = d3.select("#titleEditor-label").node().getBoundingClientRect().width + 20; + var iri_labelWidth = d3.select("#iriEditor-label").node().getBoundingClientRect().width + 20; + var version_labelWidth = d3.select("#versionEditor-label").node().getBoundingClientRect().width + 20; + var author_labelWidth = d3.select("#authorsEditor-label").node().getBoundingClientRect().width + 20; + //find max width; + var maxW = 0; + maxW = Math.max(maxW, title_labelWidth); + maxW = Math.max(maxW, iri_labelWidth); + maxW = Math.max(maxW, version_labelWidth); + maxW = Math.max(maxW, author_labelWidth); + + var meta_inputWidth = div_width - maxW - 10; + + d3.select("#titleEditor").style("width", meta_inputWidth + "px"); + d3.select("#iriEditor").style("width", meta_inputWidth + "px"); + d3.select("#versionEditor").style("width", meta_inputWidth + "px"); + d3.select("#authorsEditor").style("width", meta_inputWidth + "px"); + + + var elementIri_width = d3.select("#element_iriEditor-label").node().getBoundingClientRect().width + 20; + var elementLabel_width = d3.select("#element_labelEditor-label").node().getBoundingClientRect().width + 20; + var elementType_width = d3.select("#typeEditor-label").node().getBoundingClientRect().width + 20; + var elementDType_width = d3.select("#typeEditor_datatype-label").node().getBoundingClientRect().width + 20; + + maxW = 0; + maxW = Math.max(maxW, elementIri_width); + maxW = Math.max(maxW, elementLabel_width); + maxW = Math.max(maxW, elementType_width); + maxW = Math.max(maxW, elementDType_width); + var selectedElement_inputWidth = div_width - maxW - 10; + + d3.select("#element_iriEditor").style("width", selectedElement_inputWidth + "px"); + d3.select("#element_labelEditor").style("width", selectedElement_inputWidth + "px"); + d3.select("#typeEditor").style("width", selectedElement_inputWidth + 4 + "px"); + d3.select("#typeEditor_datatype").style("width", selectedElement_inputWidth + 4 + "px"); + + // update prefix Element width; + var containerWidth = d3.select("#containerForPrefixURL").node().getBoundingClientRect().width; + if ( containerWidth !== 0 ) { + var inputs = d3.selectAll(".prefixInput"); + if ( inputs.node() ) { + var prefixWidth = d3.selectAll(".prefixInput").node().getBoundingClientRect().width; + d3.selectAll(".prefixURL").style("width", containerWidth - prefixWidth - 45 + "px"); + } + } + }; + + function addElementsCharacteristics( element ){ + // save selected element for checkbox handler + selectedElementForCharacteristics = element; + var i; + // KILL old elements + var charSelectionNode = d3.select("#property_characteristics_Selection"); + var htmlCollection = charSelectionNode.node().children; + if ( htmlCollection ) { + var numEntries = htmlCollection.length; + for ( var q = 0; q < numEntries; q++ ) { + charSelectionNode.node().removeChild(htmlCollection[0]); + } + } + // datatypes kind of ignored by the elementsNeedCharacteristics function + // so we need to check if we are a node or not + if ( element.attributes().indexOf("external") > -1 ) { + // add external span to the div; + var externalCharSpan = charSelectionNode.append("span"); + externalCharSpan.classed("spanForCharSelection", true); + externalCharSpan.node().innerHTML = "external"; + } + var filterContainer, + filterCheckbox; + if ( elementTools.isNode(element) === true ) { + // add the deprecated characteristic; + var arrayOfNodeChars = ["deprecated"]; + for ( i = 0; i < arrayOfNodeChars.length; i++ ) { + filterContainer = charSelectionNode + .append("div") + .classed("checkboxContainer", true) + .style("padding-top", "2px"); + + filterCheckbox = filterContainer.append("input") + .classed("filterCheckbox", true) + .attr("id", "CharacteristicsCheckbox" + i) + .attr("type", "checkbox") + .attr("characteristics", arrayOfNodeChars[i]) + .property("checked", getPresentAttribute(element, arrayOfNodeChars[i])); + // + filterContainer.append("label") + .attr("for", "CharacteristicsCheckbox" + i) + .text(arrayOfNodeChars[i]); + + filterCheckbox.on("click", handleCheckBoxClick); + + } + } + + else { + // add the deprecated characteristic; + var arrayOfPropertyChars = ["deprecated", "inverse functional", "functional", "transitive"]; + if ( elementTools.isDatatypeProperty(element) === true ) { + arrayOfPropertyChars = ["deprecated", "functional"]; + } + for ( i = 0; i < arrayOfPropertyChars.length; i++ ) { + filterContainer = charSelectionNode + .append("div") + .classed("checkboxContainer", true) + .style("padding-top", "2px"); + + filterCheckbox = filterContainer.append("input") + .classed("filterCheckbox", true) + .attr("id", "CharacteristicsCheckbox" + i) + .attr("type", "checkbox") + .attr("characteristics", arrayOfPropertyChars[i]) + .property("checked", getPresentAttribute(element, arrayOfPropertyChars[i])); + // + filterContainer.append("label") + .attr("for", "CharacteristicsCheckbox" + i) + .text(arrayOfPropertyChars[i]); + + filterCheckbox.on("click", handleCheckBoxClick); + + } + } + + + } + + function getPresentAttribute( selectedElement, element ){ + return (selectedElement.attributes().indexOf(element) >= 0); + } + + function handleCheckBoxClick(){ + var checked = this.checked; + var char = this.getAttribute("characteristics"); + if ( checked === true ) { + addAttribute(selectedElementForCharacteristics, char); + } else { + removeAttribute(selectedElementForCharacteristics, char); + } + // graph.executeColorExternalsModule(); + selectedElementForCharacteristics.redrawElement(); + // workaround to have the node still be focused as rendering element + selectedElementForCharacteristics.focused(false); + selectedElementForCharacteristics.toggleFocus(); + + } + + + function addAttribute( selectedElement, char ){ + if ( selectedElement.attributes().indexOf(char) === -1 ) { + // not found add it + var attr = selectedElement.attributes(); + attr.push(char); + selectedElement.attributes(attr); + }// indications string update; + if ( selectedElement.indications().indexOf(char) === -1 ) { + var indications = selectedElement.indications(); + indications.push(char); + selectedElement.indications(indications); + } + // add visual attributes + var visAttr; + if ( selectedElement.visualAttributes().indexOf(char) === -1 ) { + visAttr = selectedElement.visualAttributes(); + visAttr.push(char); + selectedElement.visualAttributes(visAttr); + } + if ( getPresentAttribute(selectedElement, "external") && getPresentAttribute(selectedElement, "deprecated") ) { + visAttr = selectedElement.visualAttributes(); + var visInd = visAttr.indexOf("external"); + if ( visInd > -1 ) { + visAttr.splice(visInd, 1); + } + selectedElement.visualAttributes(visAttr); + } + + } + + function removeAttribute( selectedElement, element ){ + var attr = selectedElement.attributes(); + var indications = selectedElement.indications(); + var visAttr = selectedElement.visualAttributes(); + var attrInd = attr.indexOf(element); + if ( attrInd >= 0 ) { + attr.splice(attrInd, 1); + } + var indInd = indications.indexOf(element); + if ( indInd > -1 ) { + indications.splice(indInd, 1); + } + var visInd = visAttr.indexOf(element); + if ( visInd > -1 ) { + visAttr.splice(visInd, 1); + } + selectedElement.attributes(attr); + selectedElement.indications(indications); + selectedElement.visualAttributes(visAttr); + if ( element === "deprecated" ) { + // set its to its original Style + //typeBaseThign + // todo : fix all different types + if ( selectedElement.type() === "owl:Class" ) selectedElement.styleClass("class"); + if ( selectedElement.type() === "owl:DatatypeProperty" ) selectedElement.styleClass("datatypeproperty"); + if ( selectedElement.type() === "owl:ObjectProperty" ) selectedElement.styleClass("objectproperty"); + if ( selectedElement.type() === "owl:disjointWith" ) selectedElement.styleClass("disjointwith"); + } + } + + + function elementNeedsCharacteristics( element ){ + //TODO: Add more types + if ( element.type() === "owl:Thing" || + element.type() === "rdfs:subClassOf" || + element.type() === "rdfs:Literal" || + element.type() === "rdfs:Datatype" || + element.type() === "rdfs:disjointWith" ) + return false; + + // if (element.attributes().indexOf("external")|| + // element.attributes().indexOf("deprecated")) + // return true; + return true; + + } + + function elementTypeSelectionChanged( element ){ + if ( elementTools.isNode(element) ) { + if ( graph.changeNodeType(element) === false ) { + //restore old value + + if ( elementTools.isDatatype(element) === true ) { + + } + editSidebar.updateSelectionInformation(element); + } + } + + if ( elementTools.isProperty(element) ) { + if ( graph.changePropertyType(element) === false ) { + //restore old value + editSidebar.updateSelectionInformation(element); + + } + } + + } + + function getElementPrototypes( selectedElement ){ + var availiblePrototypes = []; + // TODO the text should be also complied with the prefixes loaded into the ontology + if ( elementTools.isProperty(selectedElement) ) { + if ( selectedElement.type() === "owl:DatatypeProperty" ) + availiblePrototypes.push("owl:DatatypeProperty"); + else { + availiblePrototypes.push("owl:ObjectProperty"); + // handling loops ! + if ( selectedElement.domain() !== selectedElement.range() ) { + availiblePrototypes.push("rdfs:subClassOf"); + } + availiblePrototypes.push("owl:disjointWith"); + availiblePrototypes.push("owl:allValuesFrom"); + availiblePrototypes.push("owl:someValuesFrom"); + } + return availiblePrototypes; + } + if ( selectedElement.renderType() === "rect" ) { + availiblePrototypes.push("rdfs:Literal"); + availiblePrototypes.push("rdfs:Datatype"); + } else { + availiblePrototypes.push("owl:Class"); + availiblePrototypes.push("owl:Thing"); + // TODO: ADD MORE TYPES + // availiblePrototypes.push("owl:complementOf"); + // availiblePrototypes.push("owl:disjointUnionOf"); + } + return availiblePrototypes; + } + + + function setupCollapsing(){ + // TODO : Decision , for now I want to have the control over the collapse expand operation of the + // TODO : elements, otherwise the old approach will also randomly collapse other containers + + // adapted version of this example: http://www.normansblog.de/simple-jquery-accordion/ + function collapseContainers( containers ){ + containers.classed("hidden", true); + } + + function expandContainers( containers ){ + containers.classed("hidden", false); + } + + var triggers = d3.selectAll(".accordion-trigger"); + + // Collapse all inactive triggers on startup + // collapseContainers(d3.selectAll(".accordion-trigger:not(.accordion-trigger-active) + div")); + + triggers.on("click", function (){ + var selectedTrigger = d3.select(this); + if ( selectedTrigger.classed("accordion-trigger-active") ) { + // Collapse the active (which is also the selected) trigger + collapseContainers(d3.select(selectedTrigger.node().nextElementSibling)); + selectedTrigger.classed("accordion-trigger-active", false); + } else { + // Collapse the other trigger ... + // collapseContainers(d3.selectAll(".accordion-trigger-active + div")); + + // ... and expand the selected one + expandContainers(d3.select(selectedTrigger.node().nextElementSibling)); + selectedTrigger.classed("accordion-trigger-active", true); + } + editSidebar.updateElementWidth(); + }); + } + + return editSidebar; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 341: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {module.exports = function ( graph ){ + var configMenu = {}, + checkboxes = []; + + + configMenu.setup = function (){ + var menuEntry = d3.select("#m_modes"); + menuEntry.on("mouseover", function (){ + var searchMenu = graph.options().searchMenu(); + searchMenu.hideSearchEntries(); + }); + + addCheckBox("showZoomSlider", "Zoom controls", "#zoomSliderOption", graph.options().zoomSlider().showSlider, 0); + addLabelWidthSlider("#maxLabelWidthSliderOption", "maxLabelWidth", "Max label width", graph.options().maxLabelWidth); + }; + + + function addLabelWidthSlider( selector, identifier, label, onChangeFunction ){ + var sliderContainer, + sliderValueLabel; + + sliderContainer = d3.select(selector) + .append("div") + .classed("distanceSliderContainer", true); + + var slider = sliderContainer.append("input") + .attr("id", identifier + "Slider") + .attr("type", "range") + .attr("min", 20) + .attr("max", 600) + .attr("value", onChangeFunction()) + .attr("step", 10); + sliderContainer.append("label") + .classed("description", true) + .attr("for", identifier + "Slider") + .attr("id", identifier + "DescriptionLabel") + .text(label); + sliderValueLabel = sliderContainer.append("label") + .classed("value", true) + .attr("for", identifier + "Slider") + .attr("id", identifier + "valueLabel") + .text(onChangeFunction()); + + slider.on("input", function (){ + var value = slider.property("value"); + onChangeFunction(value); + sliderValueLabel.text(value); + if ( graph.options().dynamicLabelWidth() === true ) + graph.animateDynamicLabelWidth(); + }); + + // add wheel event to the slider + slider.on("wheel", function (){ + if ( slider.node().disabled === true ) return; + var wheelEvent = d3.event; + var offset; + if ( wheelEvent.deltaY < 0 ) offset = 10; + if ( wheelEvent.deltaY > 0 ) offset = -10; + var oldVal = parseInt(slider.property("value")); + var newSliderValue = oldVal + offset; + if ( newSliderValue !== oldVal ) { + slider.property("value", newSliderValue); + onChangeFunction(newSliderValue); + slider.on("input")(); // << set text and update the graphStyles + } + d3.event.preventDefault(); + }); + } + + function addCheckBox( identifier, modeName, selector, onChangeFunc, updateLvl ){ + var configOptionContainer = d3.select(selector) + .append("div") + .classed("checkboxContainer", true); + var configCheckbox = configOptionContainer.append("input") + .classed("moduleCheckbox", true) + .attr("id", identifier + "ConfigCheckbox") + .attr("type", "checkbox") + .property("checked", onChangeFunc()); + + + configCheckbox.on("click", function ( silent ){ + var isEnabled = configCheckbox.property("checked"); + onChangeFunc(isEnabled); + if ( silent !== true ) { + // updating graph when silent is false or the parameter is not given. + if ( updateLvl === 1 ) { + graph.lazyRefresh(); + //graph.redrawWithoutForce + } + if ( updateLvl === 2 ) { + graph.update(); + } + + if ( updateLvl === 3 ) { + graph.updateDraggerElements(); + } + } + + }); + checkboxes.push(configCheckbox); + configOptionContainer.append("label") + .attr("for", identifier + "ConfigCheckbox") + .text(modeName); + } + + configMenu.setCheckBoxValue = function ( identifier, value ){ + for ( var i = 0; i < checkboxes.length; i++ ) { + var cbdId = checkboxes[i].attr("id"); + if ( cbdId === identifier ) { + checkboxes[i].property("checked", value); + break; + } + } + }; + + configMenu.getCheckBoxValue = function ( id ){ + for ( var i = 0; i < checkboxes.length; i++ ) { + var cbdId = checkboxes[i].attr("id"); + if ( cbdId === id ) { + return checkboxes[i].property("checked"); + } + } + }; + + configMenu.updateSettings = function (){ + var silent = true; + checkboxes.forEach(function ( checkbox ){ + checkbox.on("click")(silent); + }); + }; + + return configMenu; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 342: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {module.exports = function ( graph ){ + /** some constants **/ + var PREDEFINED = 0, + FILE_UPLOAD = 1, + JSON_URL = 2, + IRI_URL = 3; + + var PROGRESS_BAR_ERROR = 0, + PROGRESS_BAR_BUSY = 1, + PROGRESS_BAR_PERCENT = 2, + progressBarMode = 1; + + var loadingWasSuccessFul = false; + var missingImportsWarning = false; + var showLoadingDetails = false; + var visibilityStatus = true; + + var DEFAULT_JSON_NAME = "ontology"; // This file is loaded by default + var conversion_sessionId; + + /** variable defs **/ + var loadingModule = {}, + menuContainer = d3.select("#loading-info"), + loadingInfoContainer = d3.select("#loadingInfo-container"), + detailsButton = d3.select("#show-loadingInfo-button"), + closeButton = d3.select("#loadingIndicator_closeButton"), + ontologyMenu, + ontologyIdentifierFromURL; + + /** functon defs **/ + loadingModule.checkForScreenSize = function (){ + // checks for window size and adjusts the loading indicator + var w = graph.options().width(), + h = graph.options().height(); + + if ( w < 270 ) { + d3.select("#loading-info").classed("hidden", true); + } else { + // check if it should be visible + if ( visibilityStatus === true ) { + d3.select("#loading-info").classed("hidden", false); + } else { + d3.select("#loading-info").classed("hidden", true); + } + } + if ( h < 150 ) { + d3.select("#loadingInfo_msgBox").classed("hidden", true); + } else { + d3.select("#loadingInfo_msgBox").classed("hidden", false); + } + if ( h < 80 ) { + d3.select("#progressBarContext").classed("hidden", true); + d3.select("#layoutLoadingProgressBarContainer").style("height", "20px"); + } else { + d3.select("#progressBarContext").classed("hidden", false); + d3.select("#layoutLoadingProgressBarContainer").style("height", "50px"); + } + }; + + loadingModule.getMessageVisibilityStatus = function (){ + return visibilityStatus; + }; + + loadingModule.getProgressBarMode = function (){ + return progressBarMode; + }; + + loadingModule.successfullyLoadedOntology = function (){ + return loadingWasSuccessFul; + }; + + loadingModule.missingImportsWarning = function (){ + return missingImportsWarning; + }; + + loadingModule.setOntologyMenu = function ( m ){ + ontologyMenu = m; + }; + + loadingModule.showErrorDetailsMessage = function (){ + loadingModule.showLoadingIndicator(); + loadingModule.expandDetails(); + d3.select("#loadingIndicator_closeButton").classed("hidden", true); + loadingModule.scrollDownDetails(); + }; + + loadingModule.showWarningDetailsMessage = function (){ + d3.select("#currentLoadingStep").style("color", "#ff0"); + loadingModule.showLoadingIndicator(); + loadingModule.expandDetails(); + d3.select("#loadingIndicator_closeButton").classed("hidden", false); + loadingModule.scrollDownDetails(); + }; + + loadingModule.scrollDownDetails = function (){ + var scrollingElement = d3.select("#loadingInfo-container").node(); + scrollingElement.scrollTop = scrollingElement.scrollHeight; + }; + + loadingModule.hideLoadingIndicator = function (){ + d3.select("#loading-info").classed("hidden", true); + visibilityStatus = false; + }; + + loadingModule.showLoadingIndicator = function (){ + d3.select("#loading-info").classed("hidden", false); + visibilityStatus = true; + + }; + + /** -- SETUP -- **/ + loadingModule.setup = function (){ + // create connections for close and details button; + loadingInfoContainer.classed("hidden", !showLoadingDetails); + detailsButton.on("click", function (){ + showLoadingDetails = !showLoadingDetails; + loadingInfoContainer.classed("hidden", !showLoadingDetails); + detailsButton.classed("accordion-trigger-active", showLoadingDetails); + }); + + closeButton.on("click", function (){ + menuContainer.classed("hidden", true); + }); + loadingModule.setBusyMode(); + }; + + loadingModule.updateSize = function (){ + showLoadingDetails = !(loadingInfoContainer.classed("hidden")); + loadingInfoContainer.classed("hidden", !showLoadingDetails); + detailsButton.classed("accordion-trigger-active", showLoadingDetails); + }; + + loadingModule.getDetailsState = function (){ + return showLoadingDetails; + }; + + loadingModule.expandDetails = function (){ + showLoadingDetails = true; + loadingInfoContainer.classed("hidden", !showLoadingDetails); + detailsButton.classed("accordion-trigger-active", showLoadingDetails); + }; + + loadingModule.collapseDetails = function (){ + showLoadingDetails = false; + loadingInfoContainer.classed("hidden", !showLoadingDetails); + detailsButton.classed("accordion-trigger-active", showLoadingDetails); + }; + + loadingModule.setBusyMode = function (){ + d3.select("#currentLoadingStep").style("color", "#fff"); + d3.select("#progressBarValue").node().innherHTML = ""; + d3.select("#progressBarValue").style("width", "20%"); + d3.select("#progressBarValue").classed("busyProgressBar", true); + progressBarMode = PROGRESS_BAR_BUSY; + }; + + loadingModule.setSuccessful = function (){ + d3.select("#currentLoadingStep").style("color", "#0f0"); + }; + + loadingModule.setErrorMode = function (){ + d3.select("#currentLoadingStep").style("color", "#f00"); + d3.select("#progressBarValue").style("width", "0%"); + d3.select("#progressBarValue").classed("busyProgressBar", false); + d3.select("#progressBarValue").node().innherHTML = ""; + progressBarMode = PROGRESS_BAR_ERROR; + }; + + loadingModule.setPercentMode = function (){ + d3.select("#currentLoadingStep").style("color", "#fff"); + d3.select("#progressBarValue").classed("busyProgressBar", false); + d3.select("#progressBarValue").node().innherHTML = "0%"; + d3.select("#progressBarValue").style("width", "0%"); + progressBarMode = PROGRESS_BAR_PERCENT; + }; + + loadingModule.setPercentValue = function ( val ){ + d3.select("#progressBarValue").node().innherHTML = val; + }; + + loadingModule.emptyGraphContentError = function (){ + graph.clearGraphData(); + ontologyMenu.append_message_toLastBulletPoint("failed"); + ontologyMenu.append_message_toLastBulletPoint("
    Error: Received empty graph"); + loadingWasSuccessFul = false; + graph.handleOnLoadingError(); + loadingModule.setErrorMode(); + }; + + loadingModule.isThreadCanceled = function (){ + + }; + + loadingModule.initializeLoader = function ( storeCache ){ + if ( storeCache === true && graph.getCachedJsonObj() !== null ) { + // save cached ontology; + var cachedContent = JSON.stringify(graph.getCachedJsonObj()); + var cachedName = ontologyIdentifierFromURL; + ontologyMenu.setCachedOntology(cachedName, cachedContent); + } + conversion_sessionId = -10000; + ontologyMenu.setConversionID(conversion_sessionId); + ontologyMenu.stopLoadingTimer(); + graph.clearGraphData(); + loadingModule.setBusyMode(); + loadingModule.showLoadingIndicator(); + loadingModule.collapseDetails(); + missingImportsWarning = false; + d3.select("#loadingIndicator_closeButton").classed("hidden", true); + ontologyMenu.clearDetailInformation(); + }; + + /** ------------------ URL Interpreter -------------- **/ + loadingModule.parseUrlAndLoadOntology = function ( storeCache ){ + var autoStore = true; + if ( storeCache === false ) { + autoStore = false; + } + + graph.clearAllGraphData(); + loadingModule.initializeLoader(autoStore); + var urlString = String(location); + var parameterArray = identifyParameter(urlString); + ontologyIdentifierFromURL = DEFAULT_JSON_NAME; + loadGraphOptions(parameterArray); // identifies and loads configuration values + var loadingMethod = identifyOntologyLoadingMethod(ontologyIdentifierFromURL); + d3.select("#progressBarValue").node().innerHTML = " "; + switch ( loadingMethod ) { + case 0: + loadingModule.from_presetOntology(ontologyIdentifierFromURL); + break; + case 1: + loadingModule.from_FileUpload(ontologyIdentifierFromURL); + break; + case 2: + loadingModule.from_JSON_URL(ontologyIdentifierFromURL); + break; + case 3: + loadingModule.from_IRI_URL(ontologyIdentifierFromURL); + break; + default: + console.log("Could not identify loading method , or not IMPLEMENTED YET"); + } + }; + + /** ------------------- LOADING --------------------- **/ + // the loading module splits into 3 branches + // 1] PresetOntology Loading + // 2] File Upload + // 3] Load From URL / IRI + + loadingModule.from_JSON_URL = function ( fileName ){ + var filename = decodeURIComponent(fileName.slice("url=".length)); + ontologyIdentifierFromURL = filename; + + var ontologyContent = ""; + if ( ontologyMenu.cachedOntology(filename) ) { + ontologyMenu.append_bulletPoint("Loading already cached ontology: " + filename); + ontologyContent = ontologyMenu.cachedOntology(filename); + loadingWasSuccessFul = true; // cached Ontology should be true; + parseOntologyContent(ontologyContent); + + } else { + // involve the o2v conveter; + ontologyMenu.append_message("Retrieving ontology from JSON URL " + filename); + requestServerTimeStampForJSON_URL(ontologyMenu.callbackLoad_JSON_FromURL, ["read?json=" + filename, filename]); + } + }; + + function requestServerTimeStampForJSON_URL( callback, parameter ){ + d3.xhr("serverTimeStamp", "application/text", function ( error, request ){ + if ( error ) { + // could not get server timestamp -> no connection to owl2vowl + ontologyMenu.append_bulletPoint("Could not establish connection to OWL2VOWL service"); + fallbackForJSON_URL(callback, parameter); + } else { + conversion_sessionId = request.responseText; + ontologyMenu.setConversionID(conversion_sessionId); + parameter.push(conversion_sessionId); + callback(parameter); + } + }); + + } + + loadingModule.requestServerTimeStampForDirectInput = function ( callback, text ){ + d3.xhr("serverTimeStamp", "application/text", function ( error, request ){ + if ( error ) { + // could not get server timestamp -> no connection to owl2vowl + ontologyMenu.append_bulletPoint("Could not establish connection to OWL2VOWL service"); + loadingModule.setErrorMode(); + ontologyMenu.append_message_toLastBulletPoint("
    Could not connect to OWL2VOWL service "); + loadingModule.showErrorDetailsMessage(); + d3.select("#progressBarValue").style("width", "0%"); + d3.select("#progressBarValue").classed("busyProgressBar", false); + d3.select("#progressBarValue").text("0%"); + + } else { + conversion_sessionId = request.responseText; + ontologyMenu.setConversionID(conversion_sessionId); + callback(text, ["conversionID" + conversion_sessionId, conversion_sessionId]); + } + }); + }; + + loadingModule.from_IRI_URL = function ( fileName ){ + // owl2vowl converters the given ontology url and returns json file; + var filename = decodeURIComponent(fileName.slice("iri=".length)); + ontologyIdentifierFromURL = filename; + + var ontologyContent = ""; + if ( ontologyMenu.cachedOntology(filename) ) { + ontologyMenu.append_bulletPoint("Loading already cached ontology: " + filename); + ontologyContent = ontologyMenu.cachedOntology(filename); + loadingWasSuccessFul = true; // cached Ontology should be true; + parseOntologyContent(ontologyContent); + } else { + // involve the o2v conveter; + var encoded = encodeURIComponent(filename); + ontologyMenu.append_bulletPoint("Retrieving ontology from IRI: " + filename); + requestServerTimeStampForIRI_Converte(ontologyMenu.callbackLoad_Ontology_FromIRI, ["convert?iri=" + encoded, filename]); + } + }; + + loadingModule.fromFileDrop = function ( fileName, file ){ + d3.select("#progressBarValue").node().innerHTML = " "; + loadingModule.initializeLoader(false); + + ontologyMenu.append_bulletPoint("Retrieving ontology from dropped file: " + fileName); + var ontologyContent = ""; + + // two options here + //1] Direct Json Upload + if ( fileName.match(/\.json$/) ) { + ontologyMenu.setConversionID(-10000); + var reader = new FileReader(); + reader.readAsText(file); + reader.onload = function (){ + ontologyContent = reader.result; + ontologyIdentifierFromURL = fileName; + parseOntologyContent(ontologyContent); + }; + } else { + //2] File Upload to OWL2VOWL Converter + // 1) check if we can get a timeStamp; + var parameterArray = [file, fileName]; + requestServerTimeStamp(ontologyMenu.callbackLoadFromOntology, parameterArray); + } + }; + + + loadingModule.from_FileUpload = function ( fileName ){ + loadingModule.setBusyMode(); + var filename = decodeURIComponent(fileName.slice("file=".length)); + ontologyIdentifierFromURL = filename; + var ontologyContent = ""; + if ( ontologyMenu.cachedOntology(filename) ) { + ontologyMenu.append_bulletPoint("Loading already cached ontology: " + filename); + ontologyContent = ontologyMenu.cachedOntology(filename); + loadingWasSuccessFul = true; // cached Ontology should be true; + parseOntologyContent(ontologyContent); + + } else { + // d3.select("#currentLoadingStep").node().innerHTML="Loading ontology from file "+ filename; + ontologyMenu.append_bulletPoint("Retrieving ontology from file: " + filename); + // get the file + var selectedFile = d3.select("#file-converter-input").property("files")[0]; + // No selection -> this was triggered by the iri. Unequal names -> reuploading another file + if ( !selectedFile || (filename && (filename !== selectedFile.name)) ) { + ontologyMenu.append_message_toLastBulletPoint("
    No cached version of \"" + filename + "\" was found.
    Please reupload the file."); + loadingModule.setErrorMode(); + d3.select("#progressBarValue").classed("busyProgressBar", false); + graph.handleOnLoadingError(); + return; + } else { + filename = selectedFile.name; + } + + + // two options here + //1] Direct Json Upload + if ( filename.match(/\.json$/) ) { + ontologyMenu.setConversionID(-10000); + var reader = new FileReader(); + reader.readAsText(selectedFile); + reader.onload = function (){ + ontologyContent = reader.result; + ontologyIdentifierFromURL = filename; + parseOntologyContent(ontologyContent); + }; + } else { + //2] File Upload to OWL2VOWL Converter + // 1) check if we can get a timeStamp; + var parameterArray = [selectedFile, filename]; + requestServerTimeStamp(ontologyMenu.callbackLoadFromOntology, parameterArray); + } + } + }; + + function fallbackForJSON_URL( callback, parameter ){ + ontologyMenu.append_message_toLastBulletPoint("
    Trying to convert with other communication protocol."); + callback(parameter); + + } + + function fallbackConversion( parameter ){ + ontologyMenu.append_message_toLastBulletPoint("
    Trying to convert with other communication protocol."); + var file = parameter[0]; + var name = parameter[1]; + var formData = new FormData(); + formData.append("ontology", file); + + var xhr = new XMLHttpRequest(); + xhr.open("POST", "convert", true); + var ontologyContent = ""; + xhr.onload = function (){ + if ( xhr.status === 200 ) { + ontologyContent = xhr.responseText; + ontologyMenu.setCachedOntology(name, ontologyContent); + ontologyIdentifierFromURL = name; + missingImportsWarning = true; // using this variable for warnings + ontologyMenu.append_message_toLastBulletPoint("
    Success, but you are using a deprecated OWL2VOWL service!"); + parseOntologyContent(ontologyContent); + } + }; + + // check what this thing is doing; + xhr.onreadystatechange = function (){ + if ( xhr.readyState === 4 && xhr.status === 0 ) { + ontologyMenu.append_message_toLastBulletPoint("
    Old protocol also failed to establish connection to OWL2VOWL service!"); + loadingModule.setErrorMode(); + ontologyMenu.append_bulletPoint("Failed to load ontology"); + ontologyMenu.append_message_toLastBulletPoint("
    Could not connect to OWL2VOWL service "); + loadingModule.showErrorDetailsMessage(); + } + }; + xhr.send(formData); + } + + function requestServerTimeStampForIRI_Converte( callback, parameterArray ){ + d3.xhr("serverTimeStamp", "application/text", function ( error, request ){ + loadingModule.setBusyMode(); + if ( error ) { + // could not get server timestamp -> no connection to owl2vowl + ontologyMenu.append_bulletPoint("Could not establish connection to OWL2VOWL service"); + loadingModule.setErrorMode(); + ontologyMenu.append_bulletPoint("Failed to load ontology"); + ontologyMenu.append_message_toLastBulletPoint("
    Could not connect to OWL2VOWL service "); + loadingModule.showErrorDetailsMessage(); + } else { + conversion_sessionId = request.responseText; + ontologyMenu.setConversionID(conversion_sessionId); + // update paramater for new communication paradigm + parameterArray[0] = parameterArray[0] + "&sessionId=" + conversion_sessionId; + parameterArray.push(conversion_sessionId); + callback(parameterArray); + } + }); + } + + function requestServerTimeStamp( callback, parameterArray ){ + d3.xhr("serverTimeStamp", "application/text", function ( error, request ){ + if ( error ) { + // could not get server timestamp -> no connection to owl2vowl + ontologyMenu.append_bulletPoint("Could not establish connection to OWL2VOWL service"); + fallbackConversion(parameterArray); // tries o2v version0.3.4 communication + } else { + conversion_sessionId = request.responseText; + ontologyMenu.setConversionID(conversion_sessionId); + console.log("Request Session ID:" + conversion_sessionId); + callback(parameterArray[0], parameterArray[1], conversion_sessionId); + } + }); + } + + loadingModule.directInput = function ( text ){ + ontologyMenu.clearDetailInformation(); + parseOntologyContent(text); + }; + + loadingModule.loadFromOWL2VOWL = function ( ontoContent, filename ){ + loadingWasSuccessFul = false; + + var old = d3.select("#bulletPoint_container").node().innerHTML; + if ( old.indexOf("(with warnings)") !== -1 ) { + missingImportsWarning = true; + } + + if ( ontologyMenu.cachedOntology(ontoContent) ) { + ontologyMenu.append_bulletPoint("Loading already cached ontology: " + filename); + parseOntologyContent(ontoContent); + } else { // set parse the ontology content; + parseOntologyContent(ontoContent); + } + }; + + loadingModule.from_presetOntology = function ( selectedOntology ){ + ontologyMenu.append_bulletPoint("Retrieving ontology: " + selectedOntology); + loadPresetOntology(selectedOntology); + }; + + function loadPresetOntology( ontology ){ + // check if already cached in ontology menu? + var f2r; + var loadingNewOntologyForEditor=false; + if ( ontology.indexOf("new_ontology") !== -1 ) { + loadingModule.hideLoadingIndicator(); + graph.showEditorHintIfNeeded(); + f2r = "./data/new_ontology.json"; + loadingNewOntologyForEditor=true; + } + + loadingWasSuccessFul = false; + var ontologyContent = ""; + if ( ontologyMenu.cachedOntology(ontology) ) { + ontologyMenu.append_bulletPoint("Loading already cached ontology: " + ontology); + ontologyContent = ontologyMenu.cachedOntology(ontology); + loadingWasSuccessFul = true; // cached Ontology should be true; + loadingModule.showLoadingIndicator(); + parseOntologyContent(ontologyContent); + + } else { + // read the file name + + var fileToRead = "./data/" + ontology + ".json"; + if ( f2r ) { + fileToRead = f2r; + } // overwrite the newOntology Index + // read file + d3.xhr(fileToRead, "application/json", function ( error, request ){ + var loadingSuccessful = !error; + if ( loadingSuccessful ) { + ontologyContent = request.responseText; + parseOntologyContent(ontologyContent); + } else { + + if (loadingNewOntologyForEditor){ + ontologyContent = '{\n' + + ' "_comment": "Empty ontology for WebVOWL Editor",\n' + + ' "header": {\n' + + ' "languages": [\n' + + ' "en"\n' + + ' ],\n' + + ' "baseIris": [\n' + + ' "http://www.w3.org/2000/01/rdf-schema"\n' + + ' ],\n' + + ' "iri": "http://visualdataweb.org/newOntology/",\n' + + ' "title": {\n' + + ' "en": "New ontology"\n' + + ' },\n' + + ' "description": {\n' + + ' "en": "New ontology description"\n' + + ' }\n' + + ' },\n' + + ' "namespace": [],\n' + + ' "metrics": {\n' + + ' "classCount": 0,\n' + + ' "datatypeCount": 0,\n' + + ' "objectPropertyCount": 0,\n' + + ' "datatypePropertyCount": 0,\n' + + ' "propertyCount": 0,\n' + + ' "nodeCount": 0,\n' + + ' "individualCount": 0\n' + + ' }\n' + + '}\n'; + parseOntologyContent(ontologyContent); + }else{ + // some error occurred + ontologyMenu.append_bulletPoint("Failed to load: " + ontology); + if (error.status===0){ // assumption this is CORS error when running locally (error status == 0) + ontologyMenu.append_message_toLastBulletPoint(" ERROR STATUS: " + error.status); + if (window.location.toString().startsWith("file:/")){ + ontologyMenu.append_message_toLastBulletPoint("

    WebVOWL runs in a local instance.

    "); + ontologyMenu.append_message_toLastBulletPoint("

    CORS prevents to automatically load files on host system.

    "); + ontologyMenu.append_message_toLastBulletPoint("

    You can load preprocessed ontologies (i.e. VOWL-JSON files) using the upload feature in the ontology menu or by dragging the files and dropping them on the canvas.

    "); + ontologyMenu.append_message_toLastBulletPoint("

    Hint: Note that the conversion of ontologies into the VOWL-JSON format is not part of WebVOWL but requires an additional converter such as OWL2VOWL.

    "); + ontologyMenu.append_message_toLastBulletPoint("

    Ontologies can be created using the editor mode (i.e. activate editing mode in Modes menu and create a new ontology using the Ontology menu.

    "); + } + }else { + ontologyMenu.append_message_toLastBulletPoint(" ERROR STATUS: " + error.status); + } + + + + graph.handleOnLoadingError(); + loadingModule.setErrorMode(); + } + } + }); + } + } + + + /** -- PARSE JSON CONTENT -- **/ + function parseOntologyContent( content ){ + + ontologyMenu.append_bulletPoint("Reading ontology graph ... "); + var _loader = ontologyMenu.getLoadingFunction(); + _loader(content, ontologyIdentifierFromURL, "noAlternativeNameYet"); + } + + loadingModule.notValidJsonFile = function (){ + graph.clearGraphData(); + ontologyMenu.append_message_toLastBulletPoint(" failed"); + ontologyMenu.append_message_toLastBulletPoint("
    Error: Received empty graph"); + loadingWasSuccessFul = false; + graph.handleOnLoadingError(); + + }; + + loadingModule.validJsonFile = function (){ + ontologyMenu.append_message_toLastBulletPoint("done"); + loadingWasSuccessFul = true; + }; + + + /** --- HELPER FUNCTIONS **/ + + function identifyParameter( url ){ + var numParameters = (url.match(/#/g) || []).length; + // create parameters array + var paramArray = []; + if ( numParameters > 0 ) { + var tokens = url.split("#"); + // skip the first token since it is the address of the server + for ( var i = 1; i < tokens.length; i++ ) { + if ( tokens[i].length === 0 ) { + // this token belongs actually to the last paramArray + paramArray[paramArray.length - 1] = paramArray[paramArray.length - 1] + "#"; + } else { + paramArray.push(tokens[i]); + } + } + } + return paramArray; + } + + + function loadGraphOptions( parameterArray ){ + var optString = "opts="; + + function loadDefaultConfig(){ + graph.options().setOptionsFromURL(graph.options().defaultConfig(), false); + } + + function loadCustomConfig( opts ){ + var changeEditingFlag = false; + var defObj = graph.options().defaultConfig(); + for ( var i = 0; i < opts.length; i++ ) { + var keyVal = opts[i].split('='); + if ( keyVal[0] === "editorMode" ) { + changeEditingFlag = true; + } + defObj[keyVal[0]] = keyVal[1]; + } + graph.options().setOptionsFromURL(defObj, changeEditingFlag); + } + + function identifyOptions( paramArray ){ + if ( paramArray[0].indexOf(optString) >= 0 ) { + // parse the parameters; + var parameterLength = paramArray[0].length; + var givenOptionsStr = paramArray[0].substr(5, parameterLength - 6); + var optionsArray = givenOptionsStr.split(';'); + loadCustomConfig(optionsArray); + } else { + ontologyIdentifierFromURL = paramArray[0]; + loadDefaultConfig(); + } + } + + function identifyOptionsAndOntology( paramArray ){ + + if ( paramArray[0].indexOf(optString) >= 0 ) { + // parse the parameters; + var parameterLength = paramArray[0].length; + var givenOptionsStr = paramArray[0].substr(5, parameterLength - 6); + var optionsArray = givenOptionsStr.split(';'); + loadCustomConfig(optionsArray); + } else { + loadDefaultConfig(); + } + ontologyIdentifierFromURL = paramArray[1]; + } + + switch ( parameterArray.length ) { + case 0: + loadDefaultConfig(); + break; + case 1: + identifyOptions(parameterArray); + break; + case 2: + identifyOptionsAndOntology(parameterArray); + break; + default : + console.log("To many input parameters , loading default config"); + loadDefaultConfig(); + ontologyIdentifierFromURL = "ERROR_TO_MANY_INPUT_PARAMETERS"; + } + } + + + function identifyOntologyLoadingMethod( url ){ + var iriKey = "iri="; + var urlKey = "url="; + var fileKey = "file="; + + var method = -1; + if ( url.substr(0, fileKey.length) === fileKey ) { + method = FILE_UPLOAD; + } else if ( url.substr(0, urlKey.length) === urlKey ) { + method = JSON_URL; + } else if ( url.substr(0, iriKey.length) === iriKey ) { + method = IRI_URL; + } else { + method = PREDEFINED; + } + return method; + } + + return loadingModule; + } + ; + + + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 343: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {module.exports = function ( graph ){ + /** variable defs **/ + var warningModule = {}; + var superContainer = d3.select("#WarningErrorMessages"); + var _messageContainers = []; + var _messageContext = []; + var _visibleStatus = []; + + var _filterHintId; + var _editorHintId; + var _messageId = -1; + superContainer.style("display", "inline-block"); + var cssStyleIndex = 0; + var styleSelectorIndex = 2; + + + // helper for standalone webvowl in chrome + function createCSSSelector( name, rules ){ + var style = document.createElement('style'); + style.type = 'text/css'; + document.getElementsByTagName('head')[0].appendChild(style); + if ( !(style.sheet || {}).insertRule ) + (style.styleSheet || style.sheet).addRule(name, rules); + else + style.sheet.insertRule(name + "{" + rules + "}", 0); + } + + + function findCSS_Index(){ + createCSSSelector("@keyframes msg_CollapseAnimation", " 0% { top: 0; } 100% { top: -400px;}"); + console.log(document.styleSheets ); + } + + findCSS_Index(); + + warningModule.addMessageBox = function (){ + + // add a container; + _messageId++; + var messageContainer = d3.select("#WarningErrorMessages").append("div"); + messageContainer.node().id = "messageContainerId_" + _messageId; + + var messageContext = messageContainer.append("div"); + messageContext.node().id = "messageContextId_" + _messageId; + messageContext.style("top", "0"); + messageContainer.style("position", "relative"); + messageContainer.style("width", "100%"); + //save in array + _messageContainers.push(messageContainer); + _messageContext.push(messageContext); + + // add animation to the container + messageContainer.node().addEventListener("animationend", _msgContainer_animationEnd); + + // set visible flag that is used in end of animation + _visibleStatus[_messageId] = true; + return _messageId; + }; + + function _msgContainer_animationEnd(){ + var containerId = this.id; + var tokens = containerId.split("_")[1]; + var mContainer = d3.select("#" + containerId); + // get number of children + mContainer.classed("hidden", !_visibleStatus[tokens]); + // clean up DOM + if ( !_visibleStatus[tokens] ) { + mContainer.remove(); + _messageContext[tokens] = null; + _messageContainers[tokens] = null; + } + // remove event listener + var c = d3.select(this); + // c.node().removeEventListener("animationend",_msgContainer_animationEnd); + } + + warningModule.createMessageContext = function ( id ){ + var warningContainer = _messageContext[id]; + var moduleContainer = _messageContainers[id]; + var generalHint = warningContainer.append('div'); + generalHint.node().innerHTML = ""; + _editorHintId = id; + /** Editing mode activated. You can now modify an existing ontology or create a new one via the ontology menu. You can save any ontology using the export menu (and exporting it as TTL file).**/ + generalHint.node().innerHTML += "Editing mode activated.
    " + + "You can now modify an existing ontology or create a new one via the ontology menu.
    " + + "You can save any ontology using the export menu (and exporting it as TTL file)."; + + generalHint.style("padding", "5px"); + generalHint.style("line-height", "1.2em"); + generalHint.style("font-size", "1.2em"); + + + var ul = warningContainer.append('ul'); + ul.append('li').node().innerHTML = "Create a class with double click / tap on empty canvas area."; + ul.append('li').node().innerHTML = "Edit names with double click / tap on element."; + ul.append('li').node().innerHTML = "Selection of default constructors is provided in the left sidebar."; + ul.append('li').node().innerHTML = "Additional editing functionality is provided in the right sidebar."; + + + var gotItButton = warningContainer.append("label"); + gotItButton.node().id = "killWarningErrorMessages_" + id; + gotItButton.node().innerHTML = "Got It"; + gotItButton.on("click", warningModule.closeMessage); + + moduleContainer.classed("hidden", false); + moduleContainer.style("-webkit-animation-name", "warn_ExpandAnimation"); + moduleContainer.style("-webkit-animation-duration", "0.5s"); + }; + + warningModule.showMessage = function ( id ){ + var moduleContainer = _messageContainers[id]; + moduleContainer.classed("hidden", false); + moduleContainer.style("-webkit-animation-name", "warn_ExpandAnimation"); + moduleContainer.style("-webkit-animation-duration", "0.5s"); + }; + + warningModule.closeMessage = function ( id ){ + var nId; + if ( id === undefined ) { + var givenId = this.id; + nId = givenId.split("_")[1]; + } else { + nId = id; + } + if ( id && id.indexOf("_") !== -1 ) { + nId = id.split("_")[1]; + } + _visibleStatus[nId] = false; + // get module; + var moduleContainer = _messageContainers[nId]; + moduleContainer.style("-webkit-animation-name", "warn_CollapseAnimation"); + moduleContainer.style("-webkit-animation-duration", "0.5s"); + + var m_height = moduleContainer.node().getBoundingClientRect().height; + + // find my id in the children + var pNode = moduleContainer.node().parentNode; + + var followingChildren = []; + var pChild = pNode.children; + var pChild_len = pChild.length; + var containerId = moduleContainer.node().id; + var found_me = false; + for ( var i = 0; i < pChild_len; i++ ) { + if ( found_me === true ) { + followingChildren.push(pChild[i].id); + } + + if ( containerId === pChild[i].id ) { + found_me = true; + } + } + + for ( var fc = 0; fc < followingChildren.length; fc++ ) { + var child = d3.select("#" + followingChildren[fc]); + // get the document style and overwrite it; + var superCss = document.styleSheets[styleSelectorIndex].cssRules[cssStyleIndex]; + // remove the existing 0% and 100% rules + superCss.deleteRule("0%"); + superCss.deleteRule("100%"); + + superCss.appendRule("0% {top: 0;}"); + superCss.appendRule("100% {top: -" + m_height + "px;"); + + child.style("-webkit-animation-name", "msg_CollapseAnimation"); + child.style("-webkit-animation-duration", "0.5s"); + child.node().addEventListener("animationend", _child_animationEnd); + } + }; + + function _child_animationEnd(){ + var c = d3.select(this); + c.style("-webkit-animation-name", ""); + c.style("-webkit-animation-duration", ""); + c.node().removeEventListener("animationend", _child_animationEnd); + } + + warningModule.closeFilterHint = function (){ + if ( _messageContainers[_filterHintId] ) { + _messageContainers[_filterHintId].classed("hidden", true); + _messageContainers[_filterHintId].remove(); + _messageContainers[_filterHintId] = null; + _messageContext[_filterHintId] = null; + _visibleStatus[_filterHintId] = false; + } + }; + + warningModule.showEditorHint = function (){ + var id = warningModule.addMessageBox(); + warningModule.createMessageContext(id); + }; + + warningModule.showExporterWarning=function (){ + warningModule.showWarning("Can not export ontology", "Detected unsupported ontology axioms, (e.g. owl:Union)", "Ontology is not exported", 1, false); + }; + + + + warningModule.responseWarning = function ( header, reason, action, callback, parameterArray, forcedWarning ){ + var id = warningModule.addMessageBox(); + var warningContainer = _messageContext[id]; + var moduleContainer = _messageContainers[id]; + _visibleStatus[id] = true; + d3.select("#blockGraphInteractions").classed("hidden", false); + var graphWidth = 0.5 * graph.options().width(); + + if ( header.length > 0 ) { + var head = warningContainer.append("div"); + head.style("padding", "5px"); + var titleHeader = head.append("div"); + // some classes + titleHeader.style("display", "inline-flex"); + titleHeader.node().innerHTML = "Warning:"; + titleHeader.style("padding-right", "3px"); + var msgHeader = head.append("div"); + // some classes + msgHeader.style("display", "inline-flex"); + msgHeader.style("max-width", graphWidth + "px"); + + msgHeader.node().innerHTML = header; + } + if ( reason.length > 0 ) { + var reasonContainer = warningContainer.append("div"); + reasonContainer.style("padding", "5px"); + var reasonHeader = reasonContainer.append("div"); + // some classes + reasonHeader.style("display", "inline-flex"); + reasonHeader.style("padding-right", "3px"); + + reasonHeader.node().innerHTML = "Reason:"; + var msgReason = reasonContainer.append("div"); + // some classes + msgReason.style("display", "inline-flex"); + msgReason.style("max-width", graphWidth + "px"); + msgReason.node().innerHTML = reason; + } + if ( action.length > 0 ) { + var actionContainer = warningContainer.append("div"); + actionContainer.style("padding", "5px"); + var actionHeader = actionContainer.append("div"); + // some classes + actionHeader.style("display", "inline-flex"); + actionHeader.style("padding-right", "8px"); + actionHeader.node().innerHTML = "Action:"; + var msgAction = actionContainer.append("div"); + // some classes + msgAction.style("display", "inline-flex"); + msgAction.style("max-width", graphWidth + "px"); + msgAction.node().innerHTML = action; + } + + var gotItButton = warningContainer.append("label"); + gotItButton.node().id = "killWarningErrorMessages_" + id; + gotItButton.node().innerHTML = "Continue"; + gotItButton.on("click", function (){ + warningModule.closeMessage(this.id); + d3.select("#blockGraphInteractions").classed("hidden", true); + callback(parameterArray[0], parameterArray[1], parameterArray[2], parameterArray[3]); + }); + warningContainer.append("span").node().innerHTML = "|"; + var cancelButton = warningContainer.append("label"); + cancelButton.node().id = "cancelButton_" + id; + cancelButton.node().innerHTML = "Cancel"; + cancelButton.on("click", function (){ + warningModule.closeMessage(this.id); + d3.select("#blockGraphInteractions").classed("hidden", true); + }); + moduleContainer.classed("hidden", false); + moduleContainer.style("-webkit-animation-name", "warn_ExpandAnimation"); + moduleContainer.style("-webkit-animation-duration", "0.5s"); + }; + + warningModule.showFilterHint = function (){ + var id = warningModule.addMessageBox(); + var warningContainer = _messageContext[id]; + var moduleContainer = _messageContainers[id]; + _visibleStatus[id] = true; + + _filterHintId = id; + var generalHint = warningContainer.append('div'); + /** Editing mode activated. You can now modify an existing ontology or create a new one via the ontology menu. You can save any ontology using the export menu (and exporting it as TTL file).**/ + generalHint.node().innerHTML = "Collapsing filter activated.
    " + + "The number of visualized elements has been automatically reduced.
    " + + "Use the degree of collapsing slider in the filter menu to adjust the visualization.

    " + + "Note: A performance decrease could be experienced with a growing amount of visual elements in the graph."; + + + generalHint.style("padding", "5px"); + generalHint.style("line-height", "1.2em"); + generalHint.style("font-size", "1.2em"); + + var gotItButton = warningContainer.append("label"); + gotItButton.node().id = "killFilterMessages_" + id; + gotItButton.node().innerHTML = "Got It"; + gotItButton.on("click", warningModule.closeMessage); + + moduleContainer.classed("hidden", false); + moduleContainer.style("-webkit-animation-name", "warn_ExpandAnimation"); + moduleContainer.style("-webkit-animation-duration", "0.5s"); + }; + + warningModule.showMultiFileUploadWarning = function (){ + var id = warningModule.addMessageBox(); + var warningContainer = _messageContext[id]; + var moduleContainer = _messageContainers[id]; + _visibleStatus[id] = true; + + _filterHintId = id; + var generalHint = warningContainer.append('div'); + + generalHint.node().innerHTML = "Uploading multiple files is not supported.
    "; + + generalHint.style("padding", "5px"); + generalHint.style("line-height", "1.2em"); + generalHint.style("font-size", "1.2em"); + + var gotItButton = warningContainer.append("label"); + gotItButton.node().id = "killFilterMessages_" + id; + gotItButton.node().innerHTML = "Got It"; + gotItButton.on("click", warningModule.closeMessage); + + moduleContainer.classed("hidden", false); + moduleContainer.style("-webkit-animation-name", "warn_ExpandAnimation"); + moduleContainer.style("-webkit-animation-duration", "0.5s"); + }; + + warningModule.showWarning = function ( header, reason, action, type, forcedWarning, additionalOpts ){ + var id = warningModule.addMessageBox(); + var warningContainer = _messageContext[id]; + var moduleContainer = _messageContainers[id]; + _visibleStatus[id] = true; + + // add new one; + var graphWidth = 0.5 * graph.options().width(); + + if ( header.length > 0 ) { + var head = warningContainer.append("div"); + head.style("padding", "5px"); + var titleHeader = head.append("div"); + // some classes + titleHeader.style("display", "inline-flex"); + titleHeader.node().innerHTML = "Warning:"; + titleHeader.style("padding-right", "3px"); + var msgHeader = head.append("div"); + // some classes + msgHeader.style("display", "inline-flex"); + msgHeader.style("max-width", graphWidth + "px"); + + msgHeader.node().innerHTML = header; + } + if ( reason.length > 0 ) { + var reasonContainer = warningContainer.append("div"); + reasonContainer.style("padding", "5px"); + var reasonHeader = reasonContainer.append("div"); + // some classes + reasonHeader.style("display", "inline-flex"); + reasonHeader.style("padding-right", "3px"); + + reasonHeader.node().innerHTML = "Reason:"; + var msgReason = reasonContainer.append("div"); + // some classes + msgReason.style("display", "inline-flex"); + msgReason.style("max-width", graphWidth + "px"); + msgReason.node().innerHTML = reason; + } + if ( action.length > 0 ) { + var actionContainer = warningContainer.append("div"); + actionContainer.style("padding", "5px"); + var actionHeader = actionContainer.append("div"); + // some classes + actionHeader.style("display", "inline-flex"); + actionHeader.style("padding-right", "8px"); + actionHeader.node().innerHTML = "Action:"; + var msgAction = actionContainer.append("div"); + // some classes + msgAction.style("display", "inline-flex"); + msgAction.style("max-width", graphWidth + "px"); + msgAction.node().innerHTML = action; + } + + var gotItButton; + if ( type === 1 ) { + gotItButton = warningContainer.append("label"); + gotItButton.node().id = "killWarningErrorMessages_" + id; + gotItButton.node().innerHTML = "Got It"; + gotItButton.on("click", warningModule.closeMessage); + } + + if ( type === 2 ) { + gotItButton = warningContainer.append("label"); + gotItButton.node().id = "killWarningErrorMessages_" + id; + gotItButton.node().innerHTML = "Got It"; + gotItButton.on("click", warningModule.closeMessage); + warningContainer.append("span").node().innerHTML = "|"; + var zoomToElementButton = warningContainer.append("label"); + zoomToElementButton.node().id = "zoomElementThing_" + id; + zoomToElementButton.node().innerHTML = "Zoom to element "; + zoomToElementButton.on("click", function (){ + // assume the additional Element is for halo; + graph.zoomToElementInGraph(additionalOpts); + }); + warningContainer.append("span").node().innerHTML = "|"; + var ShowElementButton = warningContainer.append("label"); + ShowElementButton.node().id = "showElementThing_" + id; + ShowElementButton.node().innerHTML = "Indicate element"; + ShowElementButton.on("click", function (){ + // assume the additional Element is for halo; + if ( additionalOpts.halo() === false ) { + additionalOpts.drawHalo(); + graph.updatePulseIds([additionalOpts.id()]); + } else { + additionalOpts.removeHalo(); + additionalOpts.drawHalo(); + graph.updatePulseIds([additionalOpts.id()]); + } + }); + } + moduleContainer.classed("hidden", false); + moduleContainer.style("-webkit-animation-name", "warn_ExpandAnimation"); + moduleContainer.style("-webkit-animation-duration", "0.5s"); + moduleContainer.classed("hidden", false); + }; + + return warningModule; + }; + + + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 344: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {module.exports = function ( graph ){ + /** variable defs **/ + var directInputModule = {}; + var inputContainer = d3.select("#DirectInputContent"); + inputContainer.style("top", "0"); + inputContainer.style("position", "absolute"); + var textArea = d3.select("#directInputTextArea"); + var visibleContainer = false; + + inputContainer.style("border", "1px solid black"); + inputContainer.style("padding", "5px"); + inputContainer.style("background", "#fff"); + + + // connect upload and close button; + directInputModule.handleDirectUpload = function (){ + + var text = textArea.node().value; + var jsonOBJ; + try { + jsonOBJ = JSON.parse(text); + graph.options().loadingModule().directInput(text); + // close if successful + if ( jsonOBJ.class.length > 0 ) { + directInputModule.setDirectInputMode(false); + } + } + catch ( e ) { + try { + // Initialize; + graph.options().loadingModule().initializeLoader(); + graph.options().loadingModule().requestServerTimeStampForDirectInput( + graph.options().ontologyMenu().callbackLoad_Ontology_From_DirectInput, text + ); + } catch ( error2 ) { + console.log("Error " + error2); + d3.select("#Error_onLoad").classed("hidden", false); + d3.select("#Error_onLoad").node().innerHTML = "Failed to convert the input!"; + } + } + }; + + directInputModule.handleCloseButton = function (){ + directInputModule.setDirectInputMode(false); + }; + + directInputModule.updateLayout = function (){ + var w = graph.options().width(); + var h = graph.options().height(); + textArea.style("width", 0.4 * w + "px"); + textArea.style("height", 0.7 * h + "px"); + }; + + directInputModule.setDirectInputMode = function ( val ){ + if ( !val ) { + visibleContainer = !visibleContainer; + } + else { + visibleContainer = val; + } + // update visibility; + directInputModule.updateLayout(); + d3.select("#Error_onLoad").classed("hidden", true); + inputContainer.classed("hidden", !visibleContainer); + }; + + + d3.select("#directUploadBtn").on("click", directInputModule.handleDirectUpload); + d3.select("#close_directUploadBtn").on("click", directInputModule.handleCloseButton); + + return directInputModule; + }; + + + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }) + +/******/ }); diff --git a/pgo/webvowl/js/webvowl.js b/pgo/webvowl/js/webvowl.js new file mode 100644 index 0000000..cf6ea16 --- /dev/null +++ b/pgo/webvowl/js/webvowl.js @@ -0,0 +1,25345 @@ +webvowl = +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; + +/******/ // The require function +/******/ function __webpack_require__(moduleId) { + +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; + +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; + +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); + +/******/ // Flag the module as loaded +/******/ module.loaded = true; + +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } + + +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; + +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; + +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; + +/******/ // Load entry module and return exports +/******/ return __webpack_require__(0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { + + __webpack_require__(1); + + var nodeMap = __webpack_require__(5)(); + var propertyMap = __webpack_require__(40)(); + + + var webvowl = {}; + webvowl.graph = __webpack_require__(57); + webvowl.options = __webpack_require__(64); + webvowl.version = "1.1.7"; + + webvowl.util = {}; + webvowl.util.constants = __webpack_require__(12); + webvowl.util.languageTools = __webpack_require__(11); + webvowl.util.elementTools = __webpack_require__(63); + webvowl.util.prefixTools = __webpack_require__(72); + webvowl.modules = {}; + webvowl.modules.colorExternalsSwitch = __webpack_require__(73); + webvowl.modules.compactNotationSwitch = __webpack_require__(74); + webvowl.modules.datatypeFilter = __webpack_require__(75); + webvowl.modules.disjointFilter = __webpack_require__(77); + webvowl.modules.focuser = __webpack_require__(78); + webvowl.modules.emptyLiteralFilter = __webpack_require__(79); + webvowl.modules.nodeDegreeFilter = __webpack_require__(80); + webvowl.modules.nodeScalingSwitch = __webpack_require__(81); + webvowl.modules.objectPropertyFilter = __webpack_require__(82); + webvowl.modules.pickAndPin = __webpack_require__(83); + webvowl.modules.selectionDetailsDisplayer = __webpack_require__(315); + webvowl.modules.setOperatorFilter = __webpack_require__(316); + webvowl.modules.statistics = __webpack_require__(317); + webvowl.modules.subclassFilter = __webpack_require__(318); + + + webvowl.nodes = {}; + nodeMap.entries().forEach(function ( entry ){ + mapEntryToIdentifier(webvowl.nodes, entry); + }); + + webvowl.properties = {}; + propertyMap.entries().forEach(function ( entry ){ + mapEntryToIdentifier(webvowl.properties, entry); + }); + + function mapEntryToIdentifier( map, entry ){ + var identifier = entry.key.replace(":", "").toLowerCase(); + map[identifier] = entry.value; + } + + + module.exports = webvowl; + + +/***/ }), +/* 1 */ +/***/ (function(module, exports) { + + // removed by extract-text-webpack-plugin + +/***/ }), +/* 2 */, +/* 3 */, +/* 4 */, +/* 5 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var nodes = []; + nodes.push(__webpack_require__(7)); + nodes.push(__webpack_require__(18)); + nodes.push(__webpack_require__(19)); + nodes.push(__webpack_require__(26)); + nodes.push(__webpack_require__(27)); + nodes.push(__webpack_require__(28)); + nodes.push(__webpack_require__(29)); + nodes.push(__webpack_require__(30)); + nodes.push(__webpack_require__(31)); + nodes.push(__webpack_require__(32)); + nodes.push(__webpack_require__(33)); + nodes.push(__webpack_require__(34)); + nodes.push(__webpack_require__(38)); + nodes.push(__webpack_require__(39)); + + var map = d3.map(nodes, function ( Prototype ){ + return new Prototype().type(); + }); + + module.exports = function (){ + return map; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 6 */ +/***/ (function(module, exports) { + + module.exports = d3; + +/***/ }), +/* 7 */ +/***/ (function(module, exports, __webpack_require__) { + + var RoundNode = __webpack_require__(8); + + module.exports = (function (){ + + var o = function ( graph ){ + RoundNode.apply(this, arguments); + + this.attributes(["external"]) + .type("ExternalClass"); + }; + o.prototype = Object.create(RoundNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 8 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseNode = __webpack_require__(9); + var CenteringTextElement = __webpack_require__(14); + var drawTools = __webpack_require__(17)(); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseNode.apply(this, arguments); + + var that = this, + collapsible = false, + radius = 50, + collapsingGroupElement, + pinGroupElement, + haloGroupElement = null, + rectangularRepresentation = false, + renderingElement, + textBlock; + + this.setRectangularRepresentation = function ( val ){ + rectangularRepresentation = val; + }; + this.getRectangularRepresentation = function (){ + return rectangularRepresentation; + }; + + this.getHalos = function (){ + return haloGroupElement; + }; + + // Properties + this.collapsible = function ( p ){ + if ( !arguments.length ) return collapsible; + collapsible = p; + return this; + }; + + this.textBlock = function ( p ){ + if ( !arguments.length ) return textBlock; + textBlock = p; + return this; + }; + + /** + * This might not be equal to the actual radius, because the instance count is used for its calculation. + * @param p + * @returns {*} + */ + this.radius = function ( p ){ + if ( !arguments.length ) return radius; + radius = p; + return this; + }; + + + // Functions + this.setHoverHighlighting = function ( enable ){ + that.nodeElement().selectAll("circle").classed("hovered", enable); + }; + + this.textWidth = function ( yOffset ){ + var availableWidth = this.actualRadius() * 2; + + // if the text is not placed in the center of the circle, it can't have the full width + if ( yOffset ) { + var relativeOffset = Math.abs(yOffset) / this.actualRadius(); + var isOffsetInsideOfNode = relativeOffset <= 1; + + if ( isOffsetInsideOfNode ) { + availableWidth = Math.cos(relativeOffset) * availableWidth; + } else { + availableWidth = 0; + } + } + + return availableWidth; + }; + + this.toggleFocus = function (){ + that.focused(!that.focused()); + if ( that.nodeElement() ) + that.nodeElement().select("circle").classed("focused", that.focused()); + graph.resetSearchHighlight(); + graph.options().searchMenu().clearText(); + + }; + + this.actualRadius = function (){ + if ( !graph.options().scaleNodesByIndividuals() || that.individuals().length <= 0 ) { + return that.radius(); + } else { + // we could "listen" for radius and maxIndividualCount changes, but this is easier + var MULTIPLIER = 8, + additionalRadius = Math.log(that.individuals().length + 1) * MULTIPLIER + 5; + + return that.radius() + additionalRadius; + } + }; + + this.distanceToBorder = function (){ + return that.actualRadius(); + }; + + this.removeHalo = function (){ + if ( that.halo() ) { + that.halo(false); + if ( haloGroupElement ) { + haloGroupElement.remove(); + } + } + }; + + this.drawHalo = function ( pulseAnimation ){ + that.halo(true); + if ( rectangularRepresentation === true ) { + haloGroupElement = drawTools.drawRectHalo(that.nodeElement(), 80, 80, 5); + } else { + haloGroupElement = drawTools.drawHalo(that.nodeElement(), that.actualRadius(), this.removeHalo); + } + if ( pulseAnimation === false ) { + var pulseItem = haloGroupElement.selectAll(".searchResultA"); + pulseItem.classed("searchResultA", false); + pulseItem.classed("searchResultB", true); + pulseItem.attr("animationRunning", false); + } + }; + + /** + * Draws the pin on a round node on a position depending on its radius. + */ + this.drawPin = function (){ + that.pinned(true); + var dx = (-3.5 / 5) * that.actualRadius(), + dy = (-7 / 10) * that.actualRadius(); + pinGroupElement = drawTools.drawPin(that.nodeElement(), dx, dy, this.removePin, graph.options().showDraggerObject, graph.options().useAccuracyHelper()); + + + }; + + /** + * Removes the pin and refreshs the graph to update the force layout. + */ + this.removePin = function (){ + that.pinned(false); + if ( pinGroupElement ) { + pinGroupElement.remove(); + } + graph.updateStyle(); + }; + + this.drawCollapsingButton = function (){ + + collapsingGroupElement = that.nodeElement() + .append("g") + .classed("hidden-in-export", true) + .attr("transform", function (){ + var dx = (-2 / 5) * that.actualRadius(), + dy = (1 / 2) * that.actualRadius(); + return "translate(" + dx + "," + dy + ")"; + }); + + collapsingGroupElement.append("rect") + .classed("class pin feature", true) + .attr("x", 0) + .attr("y", 0) + .attr("width", 40) + .attr("height", 24); + + collapsingGroupElement.append("line") + .attr("x1", 13) + .attr("y1", 12) + .attr("x2", 27) + .attr("y2", 12); + + collapsingGroupElement.append("line") + .attr("x1", 20) + .attr("y1", 6) + .attr("x2", 20) + .attr("y2", 18); + }; + + /** + * Draws a circular node. + * @param parentElement the element to which this node will be appended + * @param [additionalCssClasses] additional css classes + */ + this.draw = function ( parentElement, additionalCssClasses ){ + var cssClasses = that.collectCssClasses(); + that.nodeElement(parentElement); + + var bgColor = that.backgroundColor(); + if ( bgColor === null ) bgColor = undefined; + if ( that.attributes().indexOf("deprecated") > -1 ) { + bgColor = undefined; + } + if ( additionalCssClasses instanceof Array ) { + cssClasses = cssClasses.concat(additionalCssClasses); + } + if ( rectangularRepresentation === true ) { + renderingElement = drawTools.appendRectangularClass(parentElement, 80, 80, cssClasses, that.labelForCurrentLanguage(), bgColor); + } else { + renderingElement = drawTools.appendCircularClass(parentElement, that.actualRadius(), cssClasses, that.labelForCurrentLanguage(), bgColor); + } + that.postDrawActions(parentElement); + }; + + this.redrawElement = function (){ + renderingElement.remove(); + textBlock.remove(); + var bgColor = that.backgroundColor(); + if ( that.attributes().indexOf("deprecated") > -1 ) { + bgColor = undefined; + } + + var cssClasses = that.collectCssClasses(); + + if ( rectangularRepresentation === true ) { + renderingElement = drawTools.appendRectangularClass(that.nodeElement(), 80, 80, cssClasses, that.labelForCurrentLanguage(), bgColor); + } else { + renderingElement = drawTools.appendCircularClass(that.nodeElement(), that.actualRadius(), cssClasses, that.labelForCurrentLanguage(), bgColor); + } + that.postDrawActions(that.nodeElement()); + }; + /** + * Common actions that should be invoked after drawing a node. + */ + this.postDrawActions = function (){ + that.textBlock(createTextBlock()); + + that.addMouseListeners(); + if ( that.pinned() ) { + that.drawPin(); + } + if ( that.halo() ) { + that.drawHalo(false); + } + if ( that.collapsible() ) { + that.drawCollapsingButton(); + } + }; + + this.redrawLabelText = function (){ + that.textBlock().remove(); + that.textBlock(createTextBlock()); + renderingElement.select("title").text(that.labelForCurrentLanguage()); + }; + function createTextBlock(){ + var bgColor = that.backgroundColor(); + if ( that.attributes().indexOf("deprecated") > -1 ) + bgColor = undefined; + + var textBlock = new CenteringTextElement(that.nodeElement(), bgColor); + + var equivalentsString = that.equivalentsString(); + var suffixForFollowingEquivalents = equivalentsString ? "," : ""; + + textBlock.addText(that.labelForCurrentLanguage(), "", suffixForFollowingEquivalents); + textBlock.addEquivalents(equivalentsString); + if ( !graph.options().compactNotation() ) { + textBlock.addSubText(that.indicationString()); + } + textBlock.addInstanceCount(that.individuals().length); + + return textBlock; + } + + this.equivalentsString = function (){ + var equivalentClasses = that.equivalents(); + if ( !equivalentClasses ) { + return; + } + + return equivalentClasses + .map(function ( node ){ + return node.labelForCurrentLanguage(); + }) + .join(", "); + }; + }; + o.prototype = Object.create(BaseNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 9 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var BaseElement = __webpack_require__(10); + var forceLayoutNodeFunctions = __webpack_require__(13)(); + + module.exports = (function (){ + + var Base = function ( graph ){ + BaseElement.apply(this, arguments); + + var that = this, + // Basic attributes + complement, + disjointUnion, + disjointWith, + individuals = [], + intersection, + union, + links, + rendertype = "round", + // Additional attributes + maxIndividualCount, + fobj, // foreigner object for editing + ignoreLocalHoverEvents = false, + backupFullIri, + // Element containers + nodeElement; + + // array to store my properties; // we will need this also later for semantic zooming stuff + var assignedProperties = []; + that.editingTextElement = false; + + this.isPropertyAssignedToThisElement = function ( property ){ + // this goes via IRIS + console.log("Element IRI :" + property.iri()); + if ( property.type() === "rdfs:subClassOf" ) + for ( var i = 0; i < assignedProperties.length; i++ ) { + var iriEl = assignedProperties[i].iri(); + if ( property.iri() === iriEl ) { + return true; + } + if ( property.type() === "rdfs:subClassOf" && assignedProperties[i].type() === "rdfs:subClassOf" ) + return true; + if ( property.type() === "owl:disjointWith" && assignedProperties[i].type() === "owl:disjointWith" ) + return true; + + } + return false; + }; + + + this.existingPropertyIRI = function ( url ){ + // this goes via IRIS + for ( var i = 0; i < assignedProperties.length; i++ ) { + var iriEl = assignedProperties[i].iri(); + if ( iriEl === url ) { + return true; + } + } + return false; + }; + + this.addProperty = function ( property ){ + if ( assignedProperties.indexOf(property) === -1 ) { + assignedProperties.push(property); + } + }; + + this.removePropertyElement = function ( property ){ + // console.log("Calling removing old property!"+ property.iri()); + if ( assignedProperties.indexOf(property) !== -1 ) { + // console.log("Found it!"); + assignedProperties.splice(assignedProperties.indexOf(property), 1); + } + }; + this.getMyProperties = function (){ + return assignedProperties; + }; + this.copyOtherProperties = function ( otherProperties ){ + assignedProperties = otherProperties; + }; + + this.copyInformation = function ( other ){ + console.log(other.labelForCurrentLanguage()); + if ( other.type() !== "owl:Thing" ) + that.label(other.label()); + that.complement(other.complement()); + that.iri(other.iri()); + that.copyOtherProperties(other.getMyProperties()); + that.baseIri(other.baseIri()); + if ( other.type() === "owl:Class" ) { + that.backupLabel(other.label()); + // console.log("copied backup label"+that.backupLabel()); + } + if ( other.backupLabel() !== undefined ) { + that.backupLabel(other.backupLabel()); + } + }; + + this.enableEditing = function ( autoEditing ){ + if ( autoEditing === false ) + return; + that.raiseDoubleClickEdit(true); + }; + + this.raiseDoubleClickEdit = function ( forceIRISync ){ + d3.selectAll(".foreignelements").remove(); + if ( nodeElement === undefined || this.type() === "owl:Thing" || this.type() === "rdfs:Literal" ) { + console.log("No Container found"); + return; + } + if ( fobj !== undefined ) { + nodeElement.selectAll(".foreignelements").remove(); + } + + backupFullIri = undefined; + graph.options().focuserModule().handle(undefined); + graph.options().focuserModule().handle(that); + // add again the editing elements to that one + if ( graph.isTouchDevice() === true ) { + graph.activateHoverElements(true, that, true); + } + that.editingTextElement = true; + ignoreLocalHoverEvents = true; + that.nodeElement().selectAll("circle").classed("hoveredForEditing", true); + graph.killDelayedTimer(); + graph.ignoreOtherHoverEvents(false); + fobj = nodeElement.append("foreignObject") + .attr("x", -0.5 * (that.textWidth() - 2)) + .attr("y", -12) + .attr("height", 30) + .attr("class", "foreignelements") + .on("dragstart", function (){ + return false; + }) // remove drag operations of text element) + .attr("width", that.textWidth() - 2); + + var editText = fobj.append("xhtml:input") + .attr("class", "nodeEditSpan") + .attr("id", that.id()) + .attr("align", "center") + .attr("contentEditable", "true") + .on("dragstart", function (){ + return false; + }); // remove drag operations of text element) + + var bgColor = '#f00'; + var txtWidth = that.textWidth() - 2; + editText.style({ + + 'align': 'center', + 'color': 'black', + 'width': txtWidth + "px", + 'height': '15px', + 'background-color': bgColor, + 'border-bottom': '2px solid black' + }); + var txtNode = editText.node(); + txtNode.value = that.labelForCurrentLanguage(); + txtNode.focus(); + txtNode.select(); + that.frozen(true); // << releases the not after selection + that.locked(true); + + + d3.event.stopPropagation(); + // ignoreNodeHoverEvent=true; + // // add some events that relate to this object + editText.on("click", function (){ + d3.event.stopPropagation(); + }); + // // remove hover Events for now; + editText.on("mouseout", function (){ + d3.event.stopPropagation(); + + + }); + editText.on("mousedown", function (){ + d3.event.stopPropagation(); + }) + .on("keydown", function (){ + d3.event.stopPropagation(); + if ( d3.event.keyCode === 13 ) { + this.blur(); + that.frozen(false); // << releases the not after selection + that.locked(false); + } + }) + .on("keyup", function (){ + if ( forceIRISync ) { + var labelName = editText.node().value; + var resourceName = labelName.replaceAll(" ", "_"); + var syncedIRI = that.baseIri() + resourceName; + backupFullIri = syncedIRI; + + d3.select("#element_iriEditor").node().title = syncedIRI; + d3.select("#element_iriEditor").node().value = graph.options().prefixModule().getPrefixRepresentationForFullURI(syncedIRI); + } + d3.select("#element_labelEditor").node().value = editText.node().value; + + }) + .on("blur", function (){ + that.editingTextElement = false; + ignoreLocalHoverEvents = false; + that.nodeElement().selectAll("circle").classed("hoveredForEditing", false); + var newLabel = editText.node().value; + nodeElement.selectAll(".foreignelements").remove(); + // that.setLabelForCurrentLanguage(classNameConvention(editText.node().value)); + that.label(newLabel); + that.backupLabel(newLabel); + that.redrawLabelText(); + that.frozen(graph.paused()); + that.locked(graph.paused()); + graph.ignoreOtherHoverEvents(false); + // console.log("Calling blur on Node!"); + if ( backupFullIri ) { + var sanityCheckResult = graph.checkIfIriClassAlreadyExist(backupFullIri); + if ( sanityCheckResult === false ) { + that.iri(backupFullIri); + } else { + // throw warnign + graph.options().warningModule().showWarning("Already seen this class", + "Input IRI: " + backupFullIri + " for element: " + that.labelForCurrentLanguage() + " already been set", + "Restoring previous IRI for Element : " + that.iri(), 2, false, sanityCheckResult); + + } + } + if ( graph.isADraggerActive() === false ) { + graph.options().focuserModule().handle(undefined); + graph.options().focuserModule().handle(that); + } + }); // add a foreiner element to this thing; + }; + + + this.renderType = function ( t ){ + if ( !arguments.length ) return rendertype; + rendertype = t; + return this; + }; + // Properties + this.complement = function ( p ){ + if ( !arguments.length ) return complement; + complement = p; + return this; + }; + + this.disjointUnion = function ( p ){ + if ( !arguments.length ) return disjointUnion; + disjointUnion = p; + return this; + }; + + this.disjointWith = function ( p ){ + if ( !arguments.length ) return disjointWith; + disjointWith = p; + return this; + }; + + this.individuals = function ( p ){ + if ( !arguments.length ) return individuals; + individuals = p || []; + return this; + }; + + this.intersection = function ( p ){ + if ( !arguments.length ) return intersection; + intersection = p; + return this; + }; + + this.links = function ( p ){ + if ( !arguments.length ) return links; + links = p; + return this; + }; + + this.maxIndividualCount = function ( p ){ + if ( !arguments.length ) return maxIndividualCount; + maxIndividualCount = p; + return this; + }; + + this.nodeElement = function ( p ){ + if ( !arguments.length ) return nodeElement; + nodeElement = p; + return this; + }; + + this.union = function ( p ){ + if ( !arguments.length ) return union; + union = p; + return this; + }; + + + /** + * Returns css classes generated from the data of this object. + * @returns {Array} + */ + that.collectCssClasses = function (){ + var cssClasses = []; + + if ( typeof that.styleClass() === "string" ) { + cssClasses.push(that.styleClass()); + } + + cssClasses = cssClasses.concat(that.visualAttributes()); + + return cssClasses; + }; + + + // Reused functions TODO refactor + this.addMouseListeners = function (){ + // Empty node + if ( !that.nodeElement() ) { + console.warn(this); + return; + } + + that.nodeElement().selectAll("*") + .on("mouseover", onMouseOver) + .on("mouseout", onMouseOut); + }; + + this.animationProcess = function (){ + var animRuns = false; + if ( that.getHalos() ) { + var haloGr = that.getHalos(); + var haloEls = haloGr.selectAll(".searchResultA"); + animRuns = haloGr.attr("animationRunning"); + if ( typeof animRuns !== "boolean" ) { + // parse this to a boolean value + animRuns = (animRuns === 'true'); + } + if ( animRuns === false ) { + haloEls.classed("searchResultA", false); + haloEls.classed("searchResultB", true); + } + } + return animRuns; + }; + + this.foreground = function (){ + var selectedNode = that.nodeElement().node(), + nodeContainer = selectedNode.parentNode; + // check if the halo is present and an animation is running + if ( that.animationProcess() === false ) { + // Append hovered element as last child to the container list. + nodeContainer.appendChild(selectedNode); + } + + }; + + function onMouseOver(){ + if ( that.mouseEntered() || ignoreLocalHoverEvents === true ) { + return; + } + + var selectedNode = that.nodeElement().node(), + nodeContainer = selectedNode.parentNode; + + // Append hovered element as last child to the container list. + if ( that.animationProcess() === false ) { + nodeContainer.appendChild(selectedNode); + } + if ( graph.isTouchDevice() === false ) { + that.setHoverHighlighting(true); + that.mouseEntered(true); + if ( graph.editorMode() === true && graph.ignoreOtherHoverEvents() === false ) { + graph.activateHoverElements(true, that); + } + } else { + if ( graph.editorMode() === true && graph.ignoreOtherHoverEvents() === false ) { + graph.activateHoverElements(true, that, true); + } + + } + + + } + + function onMouseOut(){ + that.setHoverHighlighting(false); + that.mouseEntered(false); + if ( graph.editorMode() === true && graph.ignoreOtherHoverEvents() === false ) { + graph.activateHoverElements(false); + } + } + + + forceLayoutNodeFunctions.addTo(this); + }; + + Base.prototype = Object.create(BaseElement.prototype); + Base.prototype.constructor = Base; + + + return Base; + }()); + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 10 */ +/***/ (function(module, exports, __webpack_require__) { + + /** + * The base element for all visual elements of webvowl. + */ + module.exports = (function (){ + + var Base = function ( graph ){ + // Basic attributes + var equivalents = [], + id, + label, + type, + iri, + baseIri, + // Additional attributes + annotations, + attributes = [], + backgroundColor, + comment, + description, + equivalentBase, + visualAttributes = [], + // Style attributes + focused = false, + indications = [], + mouseEntered = false, + styleClass, + visible = true, + + backupLabel, + // Other + languageTools = __webpack_require__(11)(); + + + this.backupLabel = function ( label ){ + if ( !arguments.length ) return backupLabel; + backupLabel = label; + }; + // Properties + this.attributes = function ( p ){ + if ( !arguments.length ) return attributes; + attributes = p; + return this; + }; + + this.annotations = function ( p ){ + if ( !arguments.length ) return annotations; + annotations = p; + return this; + }; + + this.redrawElement = function (){ + // TODO: OVERLOADED BY INDIVIDUAL ELEMENTS + }; + + this.backgroundColor = function ( p ){ + if ( !arguments.length ) return backgroundColor; + backgroundColor = p; + return this; + }; + + this.baseIri = function ( p ){ + if ( !arguments.length ) return baseIri; + baseIri = p; + return this; + }; + + this.comment = function ( p ){ + if ( !arguments.length ) return comment; + comment = p; + return this; + }; + + this.description = function ( p ){ + if ( !arguments.length ) return description; + description = p; + return this; + }; + + this.equivalents = function ( p ){ + if ( !arguments.length ) return equivalents; + equivalents = p || []; + return this; + }; + + this.equivalentBase = function ( p ){ + if ( !arguments.length ) return equivalentBase; + equivalentBase = p; + return this; + }; + + this.focused = function ( p ){ + if ( !arguments.length ) return focused; + focused = p; + return this; + }; + + this.id = function ( p ){ + if ( !arguments.length ) return id; + id = p; + return this; + }; + + this.indications = function ( p ){ + if ( !arguments.length ) return indications; + indications = p; + return this; + }; + + this.iri = function ( p ){ + if ( !arguments.length ) return iri; + iri = p; + return this; + }; + + this.label = function ( p ){ + if ( !arguments.length ) return label; + label = p; + return this; + }; + + this.mouseEntered = function ( p ){ + if ( !arguments.length ) return mouseEntered; + mouseEntered = p; + return this; + }; + + this.styleClass = function ( p ){ + if ( !arguments.length ) return styleClass; + styleClass = p; + return this; + }; + + this.type = function ( p ){ + if ( !arguments.length ) return type; + type = p; + return this; + }; + + this.visible = function ( p ){ + if ( !arguments.length ) return visible; + visible = p; + return this; + }; + + this.visualAttributes = function ( p ){ + if ( !arguments.length ) return visualAttributes; + visualAttributes = p; + return this; + }; + + + this.commentForCurrentLanguage = function (){ + return languageTools.textInLanguage(this.comment(), graph.language()); + }; + + /** + * @returns {string} the css class of this node.. + */ + this.cssClassOfNode = function (){ + return "node" + this.id(); + }; + + this.descriptionForCurrentLanguage = function (){ + return languageTools.textInLanguage(this.description(), graph.language()); + }; + + this.defaultLabel = function (){ + return languageTools.textInLanguage(this.label(), "default"); + }; + + this.indicationString = function (){ + return this.indications().join(", "); + }; + + this.labelForCurrentLanguage = function (){ + var preferredLanguage = graph && graph.language ? graph.language() : null; + return languageTools.textInLanguage(this.label(), preferredLanguage); + }; + }; + + Base.prototype.constructor = Base; + + Base.prototype.equals = function ( other ){ + return other instanceof Base && this.id() === other.id(); + }; + + Base.prototype.toString = function (){ + return this.labelForCurrentLanguage() + " (" + this.type() + ")"; + }; + + + return Base; + }()); + + +/***/ }), +/* 11 */ +/***/ (function(module, exports, __webpack_require__) { + + var constants = __webpack_require__(12)(); + + /** + * Encapsulates methods which return a label in a specific language for a preferred language. + */ + module.exports = (function (){ + + var languageTools = {}; + + + languageTools.textInLanguage = function ( textObject, preferredLanguage ){ + if ( typeof textObject === "undefined" ) { + return undefined; + } + + if ( typeof textObject === "string" ) { + return textObject; + } + + if ( preferredLanguage && textObject.hasOwnProperty(preferredLanguage) ) { + return textObject[preferredLanguage]; + } + + var textForLanguage = searchLanguage(textObject, "en"); + if ( textForLanguage ) { + return textForLanguage; + } + textForLanguage = searchLanguage(textObject, constants.LANG_UNDEFINED); + if ( textForLanguage ) { + return textForLanguage; + } + + return textObject[constants.LANG_IRIBASED]; + }; + + + function searchLanguage( textObject, preferredLanguage ){ + for ( var language in textObject ) { + if ( language === preferredLanguage && textObject.hasOwnProperty(language) ) { + return textObject[language]; + } + } + } + + return function (){ + /* Use a function here to keep a consistent style like webvowl.path.to.module() + * despite having just a single languageTools object. */ + return languageTools; + }; + })(); + + +/***/ }), +/* 12 */ +/***/ (function(module, exports) { + + module.exports = (function (){ + + var constants = {}; + + constants.LANG_IRIBASED = "IRI-based"; + constants.LANG_UNDEFINED = "undefined"; + + return function (){ + /* Use a function here to keep a consistent style like webvowl.path.to.module() + * despite having just a single object. */ + return constants; + }; + })(); + + +/***/ }), +/* 13 */ +/***/ (function(module, exports) { + + /** + * The functions for controlling attributes of nodes of the force layout can't be modelled to the element hierarchy, + * which is used for inheriting visual and OWL-like attributes. + * + * To reduce code redundancy the common functions for controlling the force layout node attributes are excluded into this + * module, which can add them to the node objects. + * + * @type {{}} + */ + var nodeFunctions = {}; + module.exports = function (){ + return nodeFunctions; + }; + + + nodeFunctions.addTo = function ( node ){ + addFixedLocationFunctions(node); + }; + + function addFixedLocationFunctions( node ){ + var locked = false, + frozen = false, + halo = false, + pinned = false; + + node.locked = function ( p ){ + if ( !arguments.length ) { + return locked; + } + locked = p; + applyFixedLocationAttributes(); + return node; + }; + + node.frozen = function ( p ){ + if ( !arguments.length ) { + return frozen; + } + frozen = p; + applyFixedLocationAttributes(); + return node; + }; + + node.halo = function ( p ){ + if ( !arguments.length ) { + return halo; + } + halo = p; + applyFixedLocationAttributes(); + return node; + }; + + node.pinned = function ( p ){ + if ( !arguments.length ) { + return pinned; + } + pinned = p; + applyFixedLocationAttributes(); + return node; + }; + + function applyFixedLocationAttributes(){ + if ( node.locked() || node.frozen() || node.pinned() ) { + node.fixed = true; + } else { + node.fixed = false; + } + } + } + + +/***/ }), +/* 14 */ +/***/ (function(module, exports, __webpack_require__) { + + var textTools = __webpack_require__(15)(); + var AbstractTextElement = __webpack_require__(16); + + module.exports = CenteringTextElement; + function CenteringTextElement( container, backgroundColor ){ + AbstractTextElement.apply(this, arguments); + this.storedFullTextLines = []; + this.storedSpanArrays = []; + this.storedStyle = []; + + } + + CenteringTextElement.prototype = Object.create(AbstractTextElement.prototype); + CenteringTextElement.prototype.constructor = CenteringTextElement; + + CenteringTextElement.prototype.addText = function ( text, prefix, suffix ){ + if ( text ) { + this.addTextline(text, this.CSS_CLASSES.default, prefix, suffix); + } + }; + + CenteringTextElement.prototype.addSubText = function ( text ){ + if ( text ) { + this.addTextline(text, this.CSS_CLASSES.subtext, "(", ")"); + } + }; + + CenteringTextElement.prototype.addEquivalents = function ( text ){ + if ( text ) { + this.addTextline(text, this.CSS_CLASSES.default); + } + }; + + CenteringTextElement.prototype.addInstanceCount = function ( instanceCount ){ + if ( instanceCount ) { + this.addTextline(instanceCount.toString(), this.CSS_CLASSES.instanceCount); + } + }; + CenteringTextElement.prototype.saveCorrespondingSpan = function ( correspondingSpan ){ + this.storedSpanArrays.push(correspondingSpan); + }; + CenteringTextElement.prototype.saveFullTextLine = function ( fullText ){ + this.storedFullTextLines.push(fullText); + }; + CenteringTextElement.prototype.saveStyle = function ( style ){ + this.storedStyle.push(style); + }; + + CenteringTextElement.prototype.updateAllTextElements = function (){ + // TODO : TEST THIS postPrefix >>> _applyPreAndPostFix + for ( var i = 0; i < this.storedSpanArrays.length; i++ ) { + var truncatedText = textTools.truncate(this.storedFullTextLines[i], this._textBlock().datum().textWidth(), this.storedStyle[i]); + this.storedSpanArrays[i].text(truncatedText); + } + }; + + + CenteringTextElement.prototype.addTextline = function ( text, style, prefix, postfix ){ + var truncatedText = textTools.truncate(text, this._textBlock().datum().textWidth(), style); + this.saveFullTextLine(text); + this.saveStyle(style); + var tspan = this._textBlock().append("tspan") + .classed(this.CSS_CLASSES.default, true) + .classed(style, true) + .text(this._applyPreAndPostFix(truncatedText, prefix, postfix)) + .attr("x", 0); + this._repositionTextLine(tspan); + this.saveCorrespondingSpan(tspan); + + this._repositionTextBlock(); + }; + + CenteringTextElement.prototype._repositionTextLine = function ( tspan ){ + var fontSizeProperty = window.getComputedStyle(tspan.node()).getPropertyValue("font-size"); + var fontSize = parseFloat(fontSizeProperty); + + var siblingCount = this._lineCount() - 1; + var lineDistance = siblingCount > 0 ? this.LINE_DISTANCE : 0; + + tspan.attr("dy", fontSize + lineDistance + "px"); + }; + + CenteringTextElement.prototype.getTextBox = function (){ + return this._textBlock(); + }; + + + CenteringTextElement.prototype._repositionTextBlock = function (){ + // Nothing to do if no child elements exist + var lineCount = this._lineCount(); + if ( lineCount < 1 ) { + this._textBlock().attr("y", 0); + return; + } + + var textBlockHeight = this._textBlock().node().getBBox().height; + this._textBlock().attr("y", -textBlockHeight * 0.5 + "px"); + }; + + CenteringTextElement.prototype._lineCount = function (){ + return this._textBlock().property("childElementCount"); + }; + + +/***/ }), +/* 15 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var ADDITIONAL_TEXT_SPACE = 4; + + var tools = {}; + + function measureTextWidth( text, textStyle ){ + // Set a default value + if ( !textStyle ) { + textStyle = "text"; + } + var d = d3.select("body") + .append("div") + .attr("class", textStyle) + .attr("id", "width-test") // tag this element to identify it + .attr("style", "position:absolute; float:left; white-space:nowrap; visibility:hidden;") + .text(text), + w = document.getElementById("width-test").offsetWidth; + d.remove(); + return w; + } + + tools.truncate = function ( text, maxWidth, textStyle, additionalTextSpace ){ + maxWidth -= isNaN(additionalTextSpace) ? ADDITIONAL_TEXT_SPACE : additionalTextSpace; + if ( isNaN(maxWidth) || maxWidth <= 0 ) { + return text; + } + + var truncatedText = text, + newTruncatedTextLength, + textWidth, + ratio; + + while ( true ) { + textWidth = measureTextWidth(truncatedText, textStyle); + if ( textWidth <= maxWidth ) { + break; + } + + ratio = textWidth / maxWidth; + newTruncatedTextLength = Math.floor(truncatedText.length / ratio); + + // detect if nothing changes + if ( truncatedText.length === newTruncatedTextLength ) { + break; + } + + truncatedText = truncatedText.substring(0, newTruncatedTextLength); + } + + if ( text.length > truncatedText.length ) { + return text.substring(0, truncatedText.length - 3) + "..."; + } + return text; + }; + + + module.exports = function (){ + return tools; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 16 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {module.exports = AbstractTextElement; + + function AbstractTextElement( container, backgroundColor ){ + var textBlock = container.append("text") + .classed("text", true) + .style("fill", this._getTextColor(backgroundColor)) + .attr("text-anchor", "middle"); + + this._textBlock = function (){ + return textBlock; + }; + } + + AbstractTextElement.prototype.LINE_DISTANCE = 1; + AbstractTextElement.prototype.CSS_CLASSES = { + default: "text", + subtext: "subtext", + instanceCount: "instance-count" + }; + AbstractTextElement.prototype.DARK_TEXT_COLOR = "#000"; + AbstractTextElement.prototype.LIGHT_TEXT_COLOR = "#fff"; + + AbstractTextElement.prototype.translation = function ( x, y ){ + this._textBlock().attr("transform", "translate(" + x + ", " + y + ")"); + return this; + }; + + AbstractTextElement.prototype.remove = function (){ + this._textBlock().remove(); + return this; + }; + + AbstractTextElement.prototype._applyPreAndPostFix = function ( text, prefix, postfix ){ + if ( prefix ) { + text = prefix + text; + } + if ( postfix ) { + text += postfix; + } + return text; + }; + + AbstractTextElement.prototype._getTextColor = function ( rawBackgroundColor ){ + if ( !rawBackgroundColor ) { + return AbstractTextElement.prototype.DARK_TEXT_COLOR; + } + + var backgroundColor = d3.rgb(rawBackgroundColor); + if ( calculateLuminance(backgroundColor) > 0.5 ) { + return AbstractTextElement.prototype.DARK_TEXT_COLOR; + } else { + return AbstractTextElement.prototype.LIGHT_TEXT_COLOR; + } + }; + + function calculateLuminance( color ){ + return 0.3 * (color.r / 255) + 0.59 * (color.g / 255) + 0.11 * (color.b / 255); + } + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 17 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains reusable function for drawing nodes. + */ + module.exports = (function (){ + + var tools = {}; + + /** + * Append a circular class node with the passed attributes. + * @param parent the parent element to which the circle will be appended + * @param radius + * @param [cssClasses] an array of additional css classes + * @param [tooltip] + * @param [backgroundColor] + * @returns {*} + */ + tools.appendCircularClass = function ( parent, radius, cssClasses, tooltip, backgroundColor ){ + var circle = parent.append("circle") + .classed("class", true) + .attr("r", radius); + + addCssClasses(circle, cssClasses); + addToolTip(circle, tooltip); + addBackgroundColor(circle, backgroundColor); + + return circle; + }; + + function addCssClasses( element, cssClasses ){ + if ( cssClasses instanceof Array ) { + cssClasses.forEach(function ( cssClass ){ + element.classed(cssClass, true); + }); + } + } + + function addToolTip( element, tooltip ){ + if ( tooltip ) { + element.append("title").text(tooltip); + } + } + + function addBackgroundColor( element, backgroundColor ){ + if ( backgroundColor ) { + element.style("fill", backgroundColor); + } + } + + /** + * Appends a rectangular class node with the passed attributes. + * @param parent the parent element to which the rectangle will be appended + * @param width + * @param height + * @param [cssClasses] an array of additional css classes + * @param [tooltip] + * @param [backgroundColor] + * @returns {*} + */ + tools.appendRectangularClass = function ( parent, width, height, cssClasses, tooltip, backgroundColor ){ + var rectangle = parent.append("rect") + .classed("class", true) + .attr("x", -width / 2) + .attr("y", -height / 2) + .attr("width", width) + .attr("height", height); + + addCssClasses(rectangle, cssClasses); + addToolTip(rectangle, tooltip); + addBackgroundColor(rectangle, backgroundColor); + + return rectangle; + }; + + tools.drawPin = function ( container, dx, dy, onClick, accuraciesHelperFunction, useAccuracyHelper ){ + var pinGroupElement = container + .append("g") + .classed("hidden-in-export", true) + .attr("transform", "translate(" + dx + "," + dy + ")"); + + var base = pinGroupElement.append("circle") + .classed("class pin feature", true) + .attr("r", 12) + .on("click", function (){ + if ( onClick ) { + onClick(); + } + d3.event.stopPropagation(); + }); + + pinGroupElement.append("line") + .attr("x1", 0) + .attr("x2", 0) + .attr("y1", 12) + .attr("y2", 16); + + if ( useAccuracyHelper === true ) { + pinGroupElement.append("circle") + .attr("r", 15) + .attr("cx", -7) + .attr("cy", -7) + .classed("superHiddenElement ", true) + .classed("superOpacityElement", !accuraciesHelperFunction()) + .on("click", function (){ + if ( onClick ) { + onClick(); + } + d3.event.stopPropagation(); + }) + .on("mouseover", function (){ + base.classed("feature_hover", true); + }) + .on("mouseout", function (){ + base.classed("feature_hover", false); + }) + ; + + } + + + return pinGroupElement; + }; + + tools.drawRectHalo = function ( node, width, height, offset ){ + var container; + if ( node.nodeElement ) + container = node.nodeElement(); + else + container = node.labelElement(); + + if ( !container ) { + // console.log("no container found"); + return; + } + + var haloGroupElement = container + .append("g") + .classed("hidden-in-export", true); + + haloGroupElement.append("rect") + .classed("searchResultA", true) + .attr("x", (-width - offset) / 2) + .attr("y", (-offset - height) / 2) + .attr("width", width + offset) + .attr("height", height + offset); + haloGroupElement.attr("animationRunning", true); + + haloGroupElement.node().addEventListener("webkitAnimationEnd", function (){ + var test = haloGroupElement.selectAll(".searchResultA"); + test.classed("searchResultA", false) + .classed("searchResultB", true); + haloGroupElement.attr("animationRunning", false); + }); + haloGroupElement.node().addEventListener("animationend", function (){ + var test = haloGroupElement.selectAll(".searchResultA"); + test.classed("searchResultA", false) + .classed("searchResultB", true); + haloGroupElement.attr("animationRunning", false); + }); + + + return haloGroupElement; + + }; + tools.drawHalo = function ( container, radius ){ + if ( container === undefined ) { + return null; + // there is no element to add the halo to; + // this means the node was not rendered previously + } + + var haloGroupElement = container + .append("g") + .classed("hidden-in-export", true); + + + haloGroupElement.append("circle", ":first-child") + .classed("searchResultA", true) + .attr("r", radius + 15); + haloGroupElement.attr("animationRunning", true); + + + haloGroupElement.node().addEventListener("webkitAnimationEnd", function (){ + var test = haloGroupElement.selectAll(".searchResultA"); + test.classed("searchResultA", false) + .classed("searchResultB", true) + .attr("animationRunning", false); + haloGroupElement.attr("animationRunning", false); + }); + haloGroupElement.node().addEventListener("animationend", function (){ + var test = haloGroupElement.selectAll(".searchResultA"); + test.classed("searchResultA", false) + .classed("searchResultB", true) + .attr("animationRunning", false); + haloGroupElement.attr("animationRunning", false); + }); + + return haloGroupElement; + }; + + return function (){ + // Encapsulate into function to maintain default.module.path() + return tools; + }; + })(); + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 18 */ +/***/ (function(module, exports, __webpack_require__) { + + var RoundNode = __webpack_require__(8); + + module.exports = (function (){ + + var o = function ( graph ){ + RoundNode.apply(this, arguments); + + this.type("owl:Class"); + }; + o.prototype = Object.create(RoundNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 19 */ +/***/ (function(module, exports, __webpack_require__) { + + var SetOperatorNode = __webpack_require__(20); + + module.exports = (function (){ + + var o = function ( graph ){ + SetOperatorNode.apply(this, arguments); + + var that = this, + superDrawFunction = that.draw; + + this.styleClass("complementof") + .type("owl:complementOf"); + + this.draw = function ( element ){ + superDrawFunction(element); + + var symbol = element.append("g").classed("embedded", true); + + symbol.append("circle") + .attr("class", "symbol") + .classed("fineline", true) + .attr("r", 10); + symbol.append("path") + .attr("class", "nofill") + .attr("d", "m -7,-1.5 12,0 0,6") + .attr("transform", "scale(.5)"); + + symbol.attr("transform", + "translate(-" + (that.radius() - 15) / 100 + ",-" + (that.radius() - 15) / 100 + ")"); + + that.postDrawActions(); + }; + }; + o.prototype = Object.create(SetOperatorNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 20 */ +/***/ (function(module, exports, __webpack_require__) { + + var AbsoluteTextElement = __webpack_require__(21); + var BoxArrowLink = __webpack_require__(22); + var RoundNode = __webpack_require__(8); + var drawTools = __webpack_require__(17)(); + + module.exports = (function (){ + + var o = function ( graph ){ + RoundNode.apply(this, arguments); + + var that = this, + superHoverHighlightingFunction = that.setHoverHighlighting, + superPostDrawActions = that.postDrawActions; + + this.setHoverHighlighting = function ( enable ){ + superHoverHighlightingFunction(enable); + + // Highlight links pointing to included nodes when hovering the set operator + that.links() + .filter(function ( link ){ + return link instanceof BoxArrowLink; + }) + .filter(function ( link ){ + return link.domain().equals(that); + }) + .forEach(function ( link ){ + link.property().setHighlighting(enable); + }); + }; + + this.draw = function ( element ){ + that.nodeElement(element); + + drawTools.appendCircularClass(element, that.actualRadius(), + that.collectCssClasses().join(" "), + that.labelForCurrentLanguage(), that.backgroundColor()); + }; + + this.postDrawActions = function (){ + superPostDrawActions(); + that.textBlock().remove(); + + var textElement = new AbsoluteTextElement(that.nodeElement(), that.backgroundColor()); + + var equivalentsString = that.equivalentsString(); + var offsetForFollowingEquivalents = equivalentsString ? -30 : -17; + var suffixForFollowingEquivalents = equivalentsString ? "," : ""; + textElement.addText(that.labelForCurrentLanguage(), offsetForFollowingEquivalents, "", + suffixForFollowingEquivalents); + + textElement.addEquivalents(equivalentsString, -17); + + + if ( !graph.options().compactNotation() ) { + + if ( that.indicationString().length > 0 ) { + textElement.addSubText(that.indicationString(), 17); + textElement.addInstanceCount(that.individuals().length, 30); + } else { + textElement.addInstanceCount(that.individuals().length, 17); + } + } else { + textElement.addInstanceCount(that.individuals().length, 17); + } + + that.textBlock(textElement); + }; + }; + o.prototype = Object.create(RoundNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 21 */ +/***/ (function(module, exports, __webpack_require__) { + + var textTools = __webpack_require__(15)(); + var AbstractTextElement = __webpack_require__(16); + + module.exports = AbsoluteTextElement; + function AbsoluteTextElement( container, backgroundColor ){ + AbstractTextElement.apply(this, arguments); + } + + AbsoluteTextElement.prototype = Object.create(AbstractTextElement.prototype); + AbsoluteTextElement.prototype.constructor = AbsoluteTextElement; + + AbsoluteTextElement.prototype.addText = function ( text, yShift, prefix, suffix ){ + if ( text ) { + this.addTextline(text, this.CSS_CLASSES.default, yShift, prefix, suffix); + } + }; + + AbsoluteTextElement.prototype.addSubText = function ( text, yShift ){ + if ( text ) { + this.addTextline(text, this.CSS_CLASSES.subtext, yShift, "(", ")"); + } + }; + + AbsoluteTextElement.prototype.addEquivalents = function ( text, yShift ){ + if ( text ) { + this.addTextline(text, this.CSS_CLASSES.default, yShift); + } + }; + + AbsoluteTextElement.prototype.addInstanceCount = function ( instanceCount, yShift ){ + if ( instanceCount ) { + this.addTextline(instanceCount.toString(), this.CSS_CLASSES.instanceCount, yShift); + } + }; + + + AbsoluteTextElement.prototype.addTextline = function ( text, style, yShift, prefix, postfix ){ + var truncatedText = textTools.truncate(text, this._textBlock().datum().textWidth(yShift), style); + + var tspan = this._textBlock().append("tspan") + .classed(this.CSS_CLASSES.default, true) + .classed(style, true) + .text(this._applyPreAndPostFix(truncatedText, prefix, postfix)) + .attr("x", 0); + this._repositionTextLine(tspan, yShift); + }; + + AbsoluteTextElement.prototype._repositionTextLine = function ( tspan, yShift ){ + var fontSizeProperty = window.getComputedStyle(tspan.node()).getPropertyValue("font-size"); + var fontSize = parseFloat(fontSizeProperty); + + /* BBox height is not supported in Firefox for tspans and dominant-baseline doesn't work in some SVG editors */ + var approximatedShiftForVerticalCentering = (1 / 3) * fontSize; + + tspan.attr("y", approximatedShiftForVerticalCentering + (yShift || 0) + "px"); + }; + + +/***/ }), +/* 22 */ +/***/ (function(module, exports, __webpack_require__) { + + var PlainLink = __webpack_require__(23); + + + module.exports = BoxArrowLink; + + function BoxArrowLink( domain, range, property ){ + PlainLink.apply(this, arguments); + } + + BoxArrowLink.prototype = Object.create(PlainLink.prototype); + BoxArrowLink.prototype.constructor = BoxArrowLink; + + + BoxArrowLink.prototype.draw = function ( linkGroup, markerContainer ){ + var property = this.label().property(); + var inverse = this.label().inverse(); + + createPropertyMarker(markerContainer, property); + if ( inverse ) { + createInverseMarker(markerContainer, inverse); + } + + PlainLink.prototype.draw.apply(this, arguments); + + // attach the markers to the link + linkGroup.attr("marker-start", "url(#" + property.markerId() + ")"); + if ( inverse ) { + linkGroup.attr("marker-end", "url(#" + inverse.markerId() + ")"); + } + }; + + + function createPropertyMarker( markerContainer, inverse ){ + var inverseMarker = appendBasicMarker(markerContainer, inverse); + inverseMarker.attr("refX", -8); + inverseMarker.append("path") + .attr("d", "M0,-8L8,0L0,8L-8,0L0,-8L8,0") + .classed(inverse.markerType(), true); + + inverse.markerElement(inverseMarker); + } + + function createInverseMarker( markerContainer, property ){ + var marker = appendBasicMarker(markerContainer, property); + marker.attr("refX", 8); + marker.append("path") + .attr("d", "M0,-8L8,0L0,8L-8,0L0,-8L8,0") + .classed(property.markerType(), true); + + property.markerElement(marker); + } + + function appendBasicMarker( markerContainer, property ){ + return markerContainer.append("marker") + .datum(property) + .attr("id", property.markerId()) + .attr("viewBox", "-10 -10 20 20") + .attr("markerWidth", 20) + .attr("markerHeight", 20) + .attr("markerUnits", "userSpaceOnUse") + .attr("orient", "auto"); + } + + +/***/ }), +/* 23 */ +/***/ (function(module, exports, __webpack_require__) { + + var Label = __webpack_require__(24); + + + module.exports = PlainLink; + + /** + * A link connects at least two VOWL nodes. + * The properties connecting the VOWL nodes are stored separately into the label. + * @param domain + * @param range + * @param property + */ + function PlainLink( domain, range, property ){ + var layers, + layerIndex, + loops, + loopIndex, + pathEl, + label = new Label(property, this); + + var backPart = __webpack_require__(25)(domain, label, this), + frontPart = __webpack_require__(25)(label, range, this); + + + this.layers = function ( p ){ + if ( !arguments.length ) return layers; + layers = p; + return this; + }; + + this.layerIndex = function ( p ){ + if ( !arguments.length ) return layerIndex; + layerIndex = p; + return this; + }; + + this.loops = function ( p ){ + if ( !arguments.length ) return loops; + loops = p; + return this; + }; + + this.loopIndex = function ( p ){ + if ( !arguments.length ) return loopIndex; + loopIndex = p; + return this; + }; + + + this.domain = function (){ + return domain; + }; + + this.label = function (){ + return label; + }; + + this.linkParts = function (){ + return [frontPart, backPart]; + }; + + this.range = function (){ + return range; + }; + this.pathObj = function ( pE ){ + if ( !arguments.length ) { + return pathEl; + } + pathEl = pE; + }; + } + + + PlainLink.prototype.draw = function ( linkGroup ){ + var property = this.label().property(); + var inverse = this.label().inverse(); + + property.linkGroup(linkGroup); + if ( inverse ) { + inverse.linkGroup(linkGroup); + } + + var pathElement = linkGroup.append("path"); + pathElement.classed("link-path", true) + .classed(this.domain().cssClassOfNode(), true) + .classed(this.range().cssClassOfNode(), true) + .classed(property.linkType(), true); + this.pathObj(pathElement); + + }; + + + PlainLink.prototype.inverse = function (){ + return this.label().inverse(); + }; + + PlainLink.prototype.isLoop = function (){ + return this.domain().equals(this.range()); + }; + + PlainLink.prototype.property = function (){ + return this.label().property(); + }; + + + +/***/ }), +/* 24 */ +/***/ (function(module, exports) { + + module.exports = Label; + + /** + * A label represents the element(s) which further describe a link. + * It encapsulates the property and its inverse property. + * @param property the property; the inverse is inferred + * @param link the link this label belongs to + */ + function Label( property, link ){ + this.link = function (){ + return link; + }; + + this.property = function (){ + return property; + }; + + // "Forward" the fixed value set on the property to avoid having to access this container + Object.defineProperty(this, "fixed", { + get: function (){ + var inverseFixed = property.inverse() ? property.inverse().fixed : false; + return property.fixed || inverseFixed; + }, + set: function ( v ){ + property.fixed = v; + if ( property.inverse() ) property.inverse().fixed = v; + } + }); + this.frozen = property.frozen; + this.locked = property.locked; + this.pinned = property.pinned; + } + + Label.prototype.actualRadius = function (){ + return this.property().actualRadius(); + }; + + Label.prototype.draw = function ( container ){ + return this.property().draw(container); + }; + + Label.prototype.inverse = function (){ + return this.property().inverse(); + }; + + Label.prototype.equals = function ( other ){ + if ( !other ) { + return false; + } + + var instance = other instanceof Label; + var equalProperty = this.property().equals(other.property()); + + var equalInverse = false; + if ( this.inverse() ) { + equalInverse = this.inverse().equals(other.inverse()); + } else if ( !other.inverse() ) { + equalInverse = true; + } + + return instance && equalProperty && equalInverse; + }; + + +/***/ }), +/* 25 */ +/***/ (function(module, exports) { + + /** + * A linkPart connects two force layout nodes. + * It reprents a link which can be used in d3's force layout. + * @param _domain + * @param _range + * @param _link + */ + module.exports = function ( _domain, _range, _link ){ + var linkPart = {}, + domain = _domain, + link = _link, + range = _range; + + // Define d3 properties + Object.defineProperties(linkPart, { + "source": { value: domain, writable: true }, + "target": { value: range, writable: true } + }); + + + linkPart.domain = function (){ + return domain; + }; + + linkPart.link = function (){ + return link; + }; + + linkPart.range = function (){ + return range; + }; + + + return linkPart; + }; + + +/***/ }), +/* 26 */ +/***/ (function(module, exports, __webpack_require__) { + + var RoundNode = __webpack_require__(8); + + module.exports = (function (){ + + var o = function ( graph ){ + RoundNode.apply(this, arguments); + + this.attributes(["deprecated"]) + .type("owl:DeprecatedClass") + .styleClass("deprecated") + .indications(["deprecated"]); + }; + o.prototype = Object.create(RoundNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 27 */ +/***/ (function(module, exports, __webpack_require__) { + + var SetOperatorNode = __webpack_require__(20); + + module.exports = (function (){ + + var o = function ( graph ){ + SetOperatorNode.apply(this, arguments); + + var that = this, + superDrawFunction = that.draw; + + this.styleClass("disjointunionof") + .type("owl:disjointUnionOf"); + + this.draw = function ( element ){ + superDrawFunction(element); + + var symbol = element.append("g").classed("embedded", true); + + var symbolRadius = 10; + symbol.append("circle") + .attr("class", "symbol") + .attr("r", symbolRadius); + symbol.append("circle") + .attr("cx", 10) + .attr("class", "symbol") + .classed("fineline", true) + .attr("r", symbolRadius); + symbol.append("circle") + .attr("class", "nofill") + .classed("fineline", true) + .attr("r", symbolRadius); + symbol.append("text") + .attr("class", "link") + .text("1") + .attr("transform", "scale(.7)translate(3,5)"); + + symbol.attr("transform", "translate(-" + (that.radius() - 15) / 7 + ",-" + (that.radius() - 15) / 100 + ")"); + + that.postDrawActions(); + }; + }; + o.prototype = Object.create(SetOperatorNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 28 */ +/***/ (function(module, exports, __webpack_require__) { + + var RoundNode = __webpack_require__(8); + var drawTools = __webpack_require__(17)(); + + module.exports = (function (){ + + var o = function ( graph ){ + RoundNode.apply(this, arguments); + + var CIRCLE_SIZE_DIFFERENCE = 4; + var renderingElement; + var that = this, + superActualRadiusFunction = that.actualRadius; + + this.styleClass("equivalentclass") + .type("owl:equivalentClass"); + + this.actualRadius = function (){ + return superActualRadiusFunction() + CIRCLE_SIZE_DIFFERENCE; + }; + + this.redrawElement = function (){ + renderingElement.remove(); + that.textBlock().remove(); + var bgColor = that.backgroundColor(); + + if ( that.attributes().indexOf("deprecated") > -1 ) { + bgColor = undefined; + } + var cssClasses = that.collectCssClasses(); + renderingElement = that.nodeElement().append("g"); + + if ( that.getRectangularRepresentation() === true ) { + drawTools.appendRectangularClass(renderingElement, 84, 84, ["white", "embedded"]); + drawTools.appendRectangularClass(renderingElement, 80 - CIRCLE_SIZE_DIFFERENCE, 80 - CIRCLE_SIZE_DIFFERENCE, cssClasses, that.labelForCurrentLanguage(), bgColor); + } else { + drawTools.appendCircularClass(renderingElement, that.actualRadius(), ["white", "embedded"]); + console.log(cssClasses); + console.log(that.attributes()); + console.log("what is bgColor" + bgColor); + drawTools.appendCircularClass(renderingElement, that.actualRadius() - CIRCLE_SIZE_DIFFERENCE, cssClasses, that.labelForCurrentLanguage(), bgColor); + + } + that.postDrawActions(that.nodeElement()); + + }; + this.draw = function ( parentElement ){ + var cssClasses = that.collectCssClasses(); + + that.nodeElement(parentElement); + renderingElement = parentElement.append("g"); + var bgColor = that.backgroundColor(); + if ( that.attributes().indexOf("deprecated") > -1 ) { + bgColor = undefined; + } + // draw the outer circle at first and afterwards the inner circle + if ( that.getRectangularRepresentation() === true ) { + drawTools.appendRectangularClass(renderingElement, 84, 84, ["white", "embedded"]); + drawTools.appendRectangularClass(renderingElement, 80 - CIRCLE_SIZE_DIFFERENCE, 80 - CIRCLE_SIZE_DIFFERENCE, cssClasses, that.labelForCurrentLanguage(), bgColor); + } else { + drawTools.appendCircularClass(renderingElement, that.actualRadius(), ["white", "embedded"]); + drawTools.appendCircularClass(renderingElement, that.actualRadius() - CIRCLE_SIZE_DIFFERENCE, cssClasses, that.labelForCurrentLanguage(), bgColor); + + } + + that.postDrawActions(); + }; + + /** + * Sets the hover highlighting of this node. + * @param enable + */ + that.setHoverHighlighting = function ( enable ){ + that.nodeElement().selectAll("circle:last-of-type").classed("hovered", enable); + }; + }; + o.prototype = Object.create(RoundNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 29 */ +/***/ (function(module, exports, __webpack_require__) { + + var SetOperatorNode = __webpack_require__(20); + + module.exports = (function (){ + + var o = function ( graph ){ + SetOperatorNode.apply(this, arguments); + + var that = this, + superDrawFunction = that.draw, + INTERSECTION_BACKGROUND_PATH = createIntersectionPath(); + + this.styleClass("intersectionof") + .type("owl:intersectionOf"); + + this.draw = function ( element ){ + superDrawFunction(element); + + var symbol = element.append("g").classed("embedded", true); + + var symbolRadius = 10; + symbol.append("path") + .attr("class", "nostroke") + .classed("symbol", true) + .attr("d", INTERSECTION_BACKGROUND_PATH); + symbol.append("circle") + .attr("class", "nofill") + .classed("fineline", true) + .attr("r", symbolRadius); + symbol.append("circle") + .attr("cx", 10) + .attr("class", "nofill") + .classed("fineline", true) + .attr("r", symbolRadius); + symbol.append("path") + .attr("class", "nofill") + .attr("d", "m 9,5 c 0,-2 0,-4 0,-6 0,0 0,0 0,0 0,0 0,-1.8 -1,-2.3 -0.7,-0.6 -1.7,-0.8 -2.9," + + "-0.8 -1.2,0 -2,0 -3,0.8 -0.7,0.5 -1,1.4 -1,2.3 0,2 0,4 0,6") + .attr("transform", "scale(.5)translate(5,0)"); + + symbol.attr("transform", + "translate(-" + (that.radius() - 15) / 7 + ",-" + (that.radius() - 15) / 100 + ")"); + + that.postDrawActions(); + }; + + function createIntersectionPath(){ + var height = 18; + + var offsetX = 5; + var offsetY = -(height / 2); + + var bezierX = 7; + var bezierY = 5; + var bottomBezierY = height - bezierY; + + var startPosition = "M" + offsetX + "," + offsetY; + var rightSide = "c" + bezierX + "," + bezierY + " " + bezierX + "," + bottomBezierY + " 0," + height; + var leftSide = "c" + -bezierX + "," + -bezierY + " " + -bezierX + "," + -bottomBezierY + " 0," + -height; + + return startPosition + rightSide + leftSide; + } + }; + o.prototype = Object.create(SetOperatorNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 30 */ +/***/ (function(module, exports, __webpack_require__) { + + var OwlThing = __webpack_require__(31); + + module.exports = (function (){ + + var o = function ( graph ){ + OwlThing.apply(this, arguments); + + this.label("Nothing") + .type("owl:Nothing") + .iri("http://www.w3.org/2002/07/owl#Nothing"); + }; + o.prototype = Object.create(OwlThing.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 31 */ +/***/ (function(module, exports, __webpack_require__) { + + var RoundNode = __webpack_require__(8); + + module.exports = (function (){ + + var o = function ( graph ){ + RoundNode.apply(this, arguments); + + var superDrawFunction = this.draw; + + this.label("Thing") + .type("owl:Thing") + .iri("http://www.w3.org/2002/07/owl#Thing") + .radius(30); + + this.draw = function ( element ){ + superDrawFunction(element, ["white", "dashed"]); + }; + }; + o.prototype = Object.create(RoundNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 32 */ +/***/ (function(module, exports, __webpack_require__) { + + var SetOperatorNode = __webpack_require__(20); + + module.exports = (function (){ + + var o = function ( graph ){ + SetOperatorNode.apply(this, arguments); + + var that = this, + superDrawFunction = that.draw; + + this.styleClass("unionof") + .type("owl:unionOf"); + + this.draw = function ( element ){ + superDrawFunction(element); + + var symbol = element.append("g").classed("embedded", true); + + var symbolRadius = 10; + symbol.append("circle") + .attr("class", "symbol") + .attr("r", symbolRadius); + symbol.append("circle") + .attr("cx", 10) + .attr("class", "symbol") + .classed("fineline", true) + .attr("r", symbolRadius); + symbol.append("circle") + .attr("class", "nofill") + .classed("fineline", true) + .attr("r", symbolRadius); + symbol.append("path") + .attr("class", "link") + .attr("d", "m 1,-3 c 0,2 0,4 0,6 0,0 0,0 0,0 0,2 2,3 4,3 2,0 4,-1 4,-3 0,-2 0,-4 0,-6") + .attr("transform", "scale(.5)translate(5,0)"); + + symbol.attr("transform", "translate(-" + (that.radius() - 15) / 7 + ",-" + (that.radius() - 15) / 100 + ")"); + + that.postDrawActions(); + }; + }; + o.prototype = Object.create(SetOperatorNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 33 */ +/***/ (function(module, exports, __webpack_require__) { + + var RoundNode = __webpack_require__(8); + + module.exports = (function (){ + + var o = function ( graph ){ + RoundNode.apply(this, arguments); + + this.attributes(["rdf"]) + .type("rdfs:Class"); + }; + o.prototype = Object.create(RoundNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 34 */ +/***/ (function(module, exports, __webpack_require__) { + + var DatatypeNode = __webpack_require__(35); + + module.exports = (function (){ + + var o = function ( graph ){ + DatatypeNode.apply(this, arguments); + var dTypeString = "undefined"; + this.attributes(["datatype"]) + .type("rdfs:Datatype") + .styleClass("datatype"); + this.dType = function ( val ){ + if ( !arguments.length ) return dTypeString; + dTypeString = val; + + }; + }; + o.prototype = Object.create(DatatypeNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 35 */ +/***/ (function(module, exports, __webpack_require__) { + + var RectangularNode = __webpack_require__(36); + + module.exports = (function (){ + + var o = function ( graph ){ + RectangularNode.apply(this, arguments); + }; + o.prototype = Object.create(RectangularNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 36 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var BaseNode = __webpack_require__(9); + var CenteringTextElement = __webpack_require__(14); + var drawTools = __webpack_require__(17)(); + var rectangularElementTools = __webpack_require__(37)(); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseNode.apply(this, arguments); + + var that = this, + height = 20, + width = 60, + pinGroupElement, + haloGroupElement, + labelWidth = 80, + myWidth = 80, + defaultWidth = 80, + shapeElement, + textBlock, + smallestRadius = height / 2; + + that.renderType("rect"); + // Properties + this.height = function ( p ){ + if ( !arguments.length ) return height; + height = p; + return this; + }; + + this.width = function ( p ){ + if ( !arguments.length ) return width; + width = p; + return this; + }; + + this.getHalos = function (){ + return haloGroupElement; + }; + + // Functions + // for compatibility reasons // TODO resolve + this.actualRadius = function (){ + return smallestRadius; + }; + + this.distanceToBorder = function ( dx, dy ){ + return rectangularElementTools.distanceToBorder(that, dx, dy); + }; + + this.setHoverHighlighting = function ( enable ){ + that.nodeElement().selectAll("rect").classed("hovered", enable); + + var haloGroup = that.getHalos(); + if ( haloGroup ) { + var test = haloGroup.selectAll(".searchResultA"); + test.classed("searchResultA", false); + test.classed("searchResultB", true); + } + + }; + + + // overwrite the labelWith; + + + this.textWidth = function (){ + return labelWidth; + }; + this.width = function (){ + return labelWidth; + }; + + this.getMyWidth = function (){ + // use a simple heuristic + var text = that.labelForCurrentLanguage(); + myWidth = measureTextWidth(text, "text") + 20; + + // check for sub names; + var indicatorText = that.indicationString(); + var indicatorWidth = measureTextWidth(indicatorText, "subtext") + 20; + if ( indicatorWidth > myWidth ) + myWidth = indicatorWidth; + + return myWidth; + }; + + this.textWidth = function (){ + return that.width(); + }; + function measureTextWidth( text, textStyle ){ + // Set a default value + if ( !textStyle ) { + textStyle = "text"; + } + var d = d3.select("body") + .append("div") + .attr("class", textStyle) + .attr("id", "width-test") // tag this element to identify it + .attr("style", "position:absolute; float:left; white-space:nowrap; visibility:hidden;") + .text(text), + w = document.getElementById("width-test").offsetWidth; + d.remove(); + return w; + } + + this.toggleFocus = function (){ + that.focused(!that.focused()); + that.nodeElement().select("rect").classed("focused", that.focused()); + graph.resetSearchHighlight(); + graph.options().searchMenu().clearText(); + }; + + /** + * Draws the rectangular node. + * @param parentElement the element to which this node will be appended + * @param [additionalCssClasses] additional css classes + */ + this.draw = function ( parentElement, additionalCssClasses ){ + var cssClasses = that.collectCssClasses(); + + that.nodeElement(parentElement); + + if ( additionalCssClasses instanceof Array ) { + cssClasses = cssClasses.concat(additionalCssClasses); + } + + // set the value for that.width() + // update labelWidth Value; + if ( graph.options().dynamicLabelWidth() === true ) labelWidth = Math.min(that.getMyWidth(), graph.options().maxLabelWidth()); + else labelWidth = defaultWidth; + + width = labelWidth; + shapeElement = drawTools.appendRectangularClass(parentElement, that.width(), that.height(), cssClasses, that.labelForCurrentLanguage(), that.backgroundColor()); + + textBlock = new CenteringTextElement(parentElement, that.backgroundColor()); + textBlock.addText(that.labelForCurrentLanguage()); + + that.addMouseListeners(); + + if ( that.pinned() ) { + that.drawPin(); + } + if ( that.halo() ) { + that.drawHalo(false); + } + }; + + this.drawPin = function (){ + that.pinned(true); + // if (graph.options().dynamicLabelWidth()===true) labelWidth=that.getMyWidth(); + // else labelWidth=defaultWidth; + // width=labelWidth; + // console.log("this element label Width is "+labelWidth); + var dx = -0.5 * labelWidth + 5, + dy = -1.1 * height; + + pinGroupElement = drawTools.drawPin(that.nodeElement(), dx, dy, this.removePin, graph.options().showDraggerObject, graph.options().useAccuracyHelper()); + + }; + + this.removePin = function (){ + that.pinned(false); + if ( pinGroupElement ) { + pinGroupElement.remove(); + } + graph.updateStyle(); + }; + + this.removeHalo = function (){ + that.halo(false); + if ( haloGroupElement ) { + haloGroupElement.remove(); + haloGroupElement = null; + } + }; + + this.drawHalo = function ( pulseAnimation ){ + that.halo(true); + + var offset = 0; + haloGroupElement = drawTools.drawRectHalo(that, this.width(), this.height(), offset); + + if ( pulseAnimation === false ) { + var pulseItem = haloGroupElement.selectAll(".searchResultA"); + pulseItem.classed("searchResultA", false); + pulseItem.classed("searchResultB", true); + pulseItem.attr("animationRunning", false); + } + + if ( that.pinned() ) { + var selectedNode = pinGroupElement.node(); + var nodeContainer = selectedNode.parentNode; + nodeContainer.appendChild(selectedNode); + } + + }; + + this.updateTextElement = function (){ + textBlock.updateAllTextElements(); + + }; + + this.textBlock = function (){ + return textBlock; + }; + + this.redrawLabelText = function (){ + textBlock.remove(); + textBlock = new CenteringTextElement(that.nodeElement(), that.backgroundColor()); + textBlock.addText(that.labelForCurrentLanguage()); + that.animateDynamicLabelWidth(graph.options().dynamicLabelWidth()); + shapeElement.select("title").text(that.labelForCurrentLanguage()); + }; + + this.animateDynamicLabelWidth = function ( dynamic ){ + that.removeHalo(); + var height = that.height(); + if ( dynamic === true ) { + labelWidth = Math.min(that.getMyWidth(), graph.options().maxLabelWidth()); + shapeElement.transition().tween("attr", function (){ + }) + .ease('linear') + .duration(100) + .attr({ x: -labelWidth / 2, y: -height / 2, width: labelWidth, height: height }) + .each("end", function (){ + that.updateTextElement(); + }); + + } else { + labelWidth = defaultWidth; + that.updateTextElement(); + shapeElement.transition().tween("attr", function (){ + }) + .ease('linear') + .duration(100) + .attr({ x: -labelWidth / 2, y: -height / 2, width: labelWidth, height: height }); + + } + + // for the pin we dont need to differ between different widths -- they are already set + if ( that.pinned() === true && pinGroupElement ) { + + var dx = 0.5 * labelWidth - 10, + dy = -1.1 * height; + + pinGroupElement.transition() + .tween("attr.translate", function (){ + }) + .attr("transform", "translate(" + dx + "," + dy + ")") + .ease('linear') + .duration(100); + } + }; + + this.addTextLabelElement = function (){ + var parentElement = that.nodeElement(); + textBlock = new CenteringTextElement(parentElement, this.backgroundColor()); + textBlock.addText(that.labelForCurrentLanguage()); + }; + + + }; + o.prototype = Object.create(BaseNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 37 */ +/***/ (function(module, exports) { + + var tools = {}; + module.exports = function (){ + return tools; + }; + + tools.distanceToBorder = function ( rect, dx, dy ){ + var width = rect.width(), + height = rect.height(); + + var innerDistance, + m_link = Math.abs(dy / dx), + m_rect = height / width; + + if ( m_link <= m_rect ) { + var timesX = dx / (width / 2), + rectY = dy / timesX; + innerDistance = Math.sqrt(Math.pow(width / 2, 2) + Math.pow(rectY, 2)); + } else { + var timesY = dy / (height / 2), + rectX = dx / timesY; + innerDistance = Math.sqrt(Math.pow(height / 2, 2) + Math.pow(rectX, 2)); + } + + return innerDistance; + }; + + +/***/ }), +/* 38 */ +/***/ (function(module, exports, __webpack_require__) { + + var DatatypeNode = __webpack_require__(35); + + module.exports = (function (){ + + var o = function ( graph ){ + DatatypeNode.apply(this, arguments); + + var superDrawFunction = this.draw, + superLabelFunction = this.label; + + this.attributes(["datatype"]) + .label("Literal") + .styleClass("literal") + .type("rdfs:Literal") + .iri("http://www.w3.org/2000/01/rdf-schema#Literal"); + + this.draw = function ( element ){ + superDrawFunction(element, ["dashed"]); + }; + + this.label = function ( p ){ + if ( !arguments.length ) return superLabelFunction(); + return this; + }; + }; + o.prototype = Object.create(DatatypeNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 39 */ +/***/ (function(module, exports, __webpack_require__) { + + var RoundNode = __webpack_require__(8); + + module.exports = (function (){ + + var o = function ( graph ){ + RoundNode.apply(this, arguments); + + var superDrawFunction = this.draw; + + this.attributes(["rdf"]) + .label("Resource") + .radius(30) + .styleClass("rdfsresource") + .type("rdfs:Resource"); + + this.draw = function ( element ){ + superDrawFunction(element, ["rdf", "dashed"]); + }; + }; + o.prototype = Object.create(RoundNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 40 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var properties = []; + properties.push(__webpack_require__(41)); + properties.push(__webpack_require__(44)); + properties.push(__webpack_require__(45)); + properties.push(__webpack_require__(46)); + properties.push(__webpack_require__(47)); + properties.push(__webpack_require__(48)); + properties.push(__webpack_require__(49)); + properties.push(__webpack_require__(50)); + properties.push(__webpack_require__(51)); + properties.push(__webpack_require__(52)); + properties.push(__webpack_require__(53)); + properties.push(__webpack_require__(54)); + properties.push(__webpack_require__(55)); + properties.push(__webpack_require__(56)); + + var map = d3.map(properties, function ( Prototype ){ + return new Prototype().type(); + }); + + module.exports = function (){ + return map; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 41 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + var superGenerateCardinalityText = this.generateCardinalityText; + + this.linkType("values-from") + .markerType("filled values-from") + .styleClass("allvaluesfromproperty") + .type("owl:allValuesFrom"); + + this.generateCardinalityText = function (){ + var cardinalityText = "A"; + + var superCardinalityText = superGenerateCardinalityText(); + if ( superCardinalityText ) { + cardinalityText += ", " + superCardinalityText; + } + + return cardinalityText; + }; + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + + + +/***/ }), +/* 42 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var BaseElement = __webpack_require__(10); + var CenteringTextElement = __webpack_require__(14); + var drawTools = __webpack_require__(17)(); + var forceLayoutNodeFunctions = __webpack_require__(13)(); + var rectangularElementTools = __webpack_require__(37)(); + var math = __webpack_require__(43)(); + + module.exports = (function (){ + + // Static variables + var labelHeight = 28, + labelWidth = 80, + smallestRadius = labelHeight / 2; + + + // Constructor, private variables and privileged methods + var Base = function ( graph ){ + BaseElement.apply(this, arguments); + + var that = this, + // Basic attributes + cardinality, + domain, + inverse, + link, + minCardinality, + maxCardinality, + range, + subproperties, + superproperties, + // Style attributes + linkType = "normal", + markerType = "filled", + labelVisible = true, + // Element containers + cardinalityElement, + labelElement, + linkGroup, + markerElement, + // Other + ignoreLocalHoverEvents, + fobj, + pinGroupElement, + haloGroupElement, + myWidth = 80, + defaultWidth = 80, + shapeElement, + textElement, + parent_labelObject, + backupFullIri, + + redundantProperties = []; + + + this.existingPropertyIRI = function ( url ){ + return graph.options().editSidebar().checkForExistingURL(url); + }; + + this.getHalos = function (){ + return haloGroupElement; + }; + + this.getPin = function (){ + return pinGroupElement; + }; + this.labelObject = function ( lo, once ){ + if ( !arguments.length ) { + return parent_labelObject; + } + else { + parent_labelObject = lo; + if ( that.inverse() && once !== true ) { + that.inverse().labelObject(lo, true); + } + + } + }; + this.hide = function ( val ){ + that.labelElement().classed("hidden", val); + that.linkGroup().classed("hidden", val); + if ( that.cardinalityElement() ) + that.cardinalityElement().classed("hidden", val); + }; + + // Properties + this.cardinality = function ( p ){ + if ( !arguments.length ) return cardinality; + cardinality = p; + return this; + }; + + this.cardinalityElement = function ( p ){ + if ( !arguments.length ) return cardinalityElement; + cardinalityElement = p; + return this; + }; + + this.domain = function ( p ){ + if ( !arguments.length ) return domain; + domain = p; + return this; + }; + + this.inverse = function ( p ){ + if ( !arguments.length ) return inverse; + inverse = p; + return this; + }; + + this.labelElement = function ( p ){ + if ( !arguments.length ) return labelElement; + labelElement = p; + return this; + }; + + this.labelVisible = function ( p ){ + if ( !arguments.length ) return labelVisible; + labelVisible = p; + return this; + }; + + this.link = function ( p ){ + if ( !arguments.length ) return link; + link = p; + return this; + }; + + this.linkGroup = function ( p ){ + if ( !arguments.length ) return linkGroup; + linkGroup = p; + return this; + }; + + this.linkType = function ( p ){ + if ( !arguments.length ) return linkType; + linkType = p; + return this; + }; + + this.markerElement = function ( p ){ + if ( !arguments.length ) return markerElement; + markerElement = p; + return this; + }; + + this.markerType = function ( p ){ + if ( !arguments.length ) return markerType; + markerType = p; + return this; + }; + + this.maxCardinality = function ( p ){ + if ( !arguments.length ) return maxCardinality; + maxCardinality = p; + return this; + }; + + this.minCardinality = function ( p ){ + if ( !arguments.length ) return minCardinality; + minCardinality = p; + return this; + }; + + this.range = function ( p ){ + if ( !arguments.length ) return range; + range = p; + return this; + }; + + this.redundantProperties = function ( p ){ + if ( !arguments.length ) return redundantProperties; + redundantProperties = p; + return this; + }; + + this.subproperties = function ( p ){ + if ( !arguments.length ) return subproperties; + subproperties = p; + return this; + }; + + this.superproperties = function ( p ){ + if ( !arguments.length ) return superproperties; + superproperties = p; + return this; + }; + + + // Functions + this.distanceToBorder = function ( dx, dy ){ + return rectangularElementTools.distanceToBorder(that, dx, dy); + }; + + this.linkHasMarker = function (){ + return linkType !== "dashed"; + }; + + this.markerId = function (){ + return "marker" + that.id(); + }; + + this.toggleFocus = function (){ + that.focused(!that.focused()); + labelElement.select("rect").classed("focused", that.focused()); + graph.resetSearchHighlight(); + graph.options().searchMenu().clearText(); + }; + this.getShapeElement = function (){ + return shapeElement; + }; + + this.textBlock = function (){ + return textElement; + }; + + this.redrawElement = function (){ + shapeElement.remove(); + textElement.remove(); + + that.drawLabel(that.labelElement()); + that.animateDynamicLabelWidth(graph.options().dynamicLabelWidth()); + + + // shapeElement=this.addRect(that.labelElement()); + // + // var equivalentsString = that.equivalentsString(); + // var suffixForFollowingEquivalents = equivalentsString ? "," : ""; + // + // textElement = new CenteringTextElement(labelContainer, this.backgroundColor()); + // textElement.addText(this.labelForCurrentLanguage(), "", suffixForFollowingEquivalents); + // textElement.addEquivalents(equivalentsString); + // textElement.addSubText(this.indicationString()); + + }; + + // Reused functions TODO refactor + this.draw = function ( labelGroup ){ + function attachLabel( property ){ + var labelContainer = labelGroup.append("g") + .datum(property) + .classed("label", true) + .attr("id", property.id()); + + property.drawLabel(labelContainer); + return labelContainer; + } + + if ( !that.labelVisible() ) { + return undefined; + } + if ( graph.options().dynamicLabelWidth() === true ) myWidth = Math.min(that.getMyWidth(), graph.options().maxLabelWidth()); + else myWidth = defaultWidth; + + that.labelElement(attachLabel(that)); + // Draw an inverse label and reposition both labels if necessary + if ( that.inverse() ) { + var yTransformation = (that.height() / 2) + 1 /* additional space */; + that.inverse() + .labelElement(attachLabel(that.inverse())); + + that.labelElement() + .attr("transform", "translate(" + 0 + ",-" + yTransformation + ")"); + that.inverse() + .labelElement() + .attr("transform", "translate(" + 0 + "," + yTransformation + ")"); + } + + if ( that.pinned() ) { + that.drawPin(); + } else if ( that.inverse() && that.inverse().pinned() ) { + that.inverse().drawPin(); + } + + if ( that.halo() ) + that.drawHalo(false); + + return that.labelElement(); + }; + + this.addRect = function ( labelContainer ){ + var rect = labelContainer.append("rect") + .classed(that.styleClass(), true) + .classed("property", true) + .attr("x", -that.width() / 2) + .attr("y", -that.height() / 2) + .attr("width", that.width()) + .attr("height", that.height()) + .on("mouseover", function (){ + onMouseOver(); + }) + .on("mouseout", function (){ + onMouseOut(); + }); + + rect.append("title") + .text(that.labelForCurrentLanguage()); + + if ( that.visualAttributes() ) { + rect.classed(that.visualAttributes(), true); + } + + var bgColor = that.backgroundColor(); + + if ( that.attributes().indexOf("deprecated") > -1 ) { + bgColor = undefined; + rect.classed("deprecatedproperty", true); + } else { + rect.classed("deprecatedproperty", false); + } + rect.style("fill", bgColor); + + return rect; + }; + this.drawLabel = function ( labelContainer ){ + shapeElement = this.addRect(labelContainer); + + var equivalentsString = that.equivalentsString(); + var suffixForFollowingEquivalents = equivalentsString ? "," : ""; + + var bgColor = that.backgroundColor(); + if ( that.attributes().indexOf("deprecated") > -1 ) { + bgColor = undefined; + } + textElement = new CenteringTextElement(labelContainer, bgColor); + textElement.addText(this.labelForCurrentLanguage(), "", suffixForFollowingEquivalents); + textElement.addEquivalents(equivalentsString); + textElement.addSubText(this.indicationString()); + }; + + this.equivalentsString = function (){ + var equivalentProperties = that.equivalents(); + if ( !equivalentProperties ) { + return; + } + + return equivalentProperties + .map(function ( property ){ + if ( property === undefined || typeof(property) === "string" ) { // @WORKAROUND + return "ERROR"; + } + return property.labelForCurrentLanguage(); + }) + .join(", "); + }; + + this.drawCardinality = function ( container ){ + var cardinalityText = this.generateCardinalityText(); + + if ( cardinalityText ) { + that.cardinalityElement(container); + if ( cardinalityText.indexOf("A") === 0 && cardinalityText.length === 1 ) { + + // replacing text elements to svg elements; + container.classed("cardinality", true) + .attr("text-anchor", "middle") + .append("path") + .classed("cardinality", true) + .attr("d", "m -8.8832678,-11.303355 -7.97e-4,0 0.717374,1.833297 8.22987151,21.371761 8.66826659,-21.2123526 0.797082,-1.9927054 0.02471,0 -0.8218553,1.9927054 -2.2517565,5.4201577 -12.4444429,8e-6 -2.2019394,-5.5795821 z") + .style("fill", "none") + .attr("transform", "matrix(0.5,0,0,0.5,0.5,0.5)"); + return true; + } else if ( cardinalityText.indexOf("E") === 0 && cardinalityText.length === 1 ) { + container.classed("cardinality", true) + .attr("text-anchor", "middle") + .append("path") + .classed("cardinality", true) + .attr("d", "m -5.5788451,-8.0958763 10.8749368,0 0,8.34681523 -9.5707468,0.040132 9.5707468,-0.040132 0,8.42707237 -10.9150654,0") + .style("fill", "none") + .attr("transform", "matrix(0.5,0,0,0.5,0.5,0.5)"); + return true; + } + else { + container.append("text") + .classed("cardinality", true) + .attr("text-anchor", "middle") + .attr("dy", "0.5ex") + .text(cardinalityText); + return true; // drawing successful + } + } else { + return false; + } + }; + + this.generateCardinalityText = function (){ + if ( that.cardinality() ) { + return that.cardinality(); + } else if ( that.minCardinality() || that.maxCardinality() ) { + var minBoundary = that.minCardinality() || "*"; + var maxBoundary = that.maxCardinality() || "*"; + return minBoundary + ".." + maxBoundary; + } + }; + + that.setHighlighting = function ( enable ){ + if ( that.labelElement && that.labelElement() ) { + that.labelElement().select("rect").classed("hovered", enable); + } + that.linkGroup().selectAll("path, text").classed("hovered", enable); + if ( that.markerElement() ) { + that.markerElement().select("path").classed("hovered", enable); + if ( that.cardinalityElement() ) { + that.cardinalityElement().selectAll("path").classed("hovered-MathSymbol", enable); + that.cardinalityElement().classed("hovered", enable); + } + } + var subAndSuperProperties = getSubAndSuperProperties(); + subAndSuperProperties.forEach(function ( property ){ + + if ( property.labelElement && property.labelElement() ) { + property.labelElement().select("rect") + .classed("indirect-highlighting", enable); + } + + }); + var inversed = false; + + if ( graph.ignoreOtherHoverEvents() === false ) { + if ( that.inverse() ) { + inversed = true; + } + + if ( graph.isTouchDevice() === false ) { + graph.activateHoverElementsForProperties(enable, that, inversed); + } + else { + that.labelElement().select("rect").classed("hovered", false); + that.linkGroup().selectAll("path, text").classed("hovered", false); + if ( that.markerElement() ) { + that.markerElement().select("path").classed("hovered", false); + if ( that.cardinalityElement() ) { + that.cardinalityElement().classed("hovered", false); + } + } + graph.activateHoverElementsForProperties(enable, that, inversed, true); + } + } + }; + + /** + * Combines the sub- and superproperties into a single array, because + * they're often used equivalently. + * @returns {Array} + */ + function getSubAndSuperProperties(){ + var properties = []; + + if ( that.subproperties() ) { + properties = properties.concat(that.subproperties()); + } + if ( that.superproperties() ) { + properties = properties.concat(that.superproperties()); + } + + return properties; + } + + /** + * Foregrounds the property, its inverse and the link. + */ + this.foreground = function (){ + // check for additional objects that we can highlight + if ( !that.labelElement() ) + return; + if ( that.labelElement().node().parentNode === null ) { + return; + } + var selectedLabelGroup = that.labelElement().node().parentNode, + labelContainer = selectedLabelGroup.parentNode, + selectedLinkGroup = that.linkGroup().node(), + linkContainer = that.linkGroup().node().parentNode; + if ( that.animationProcess() === false ) { + labelContainer.appendChild(selectedLabelGroup); + } + linkContainer.appendChild(selectedLinkGroup); + }; + + /** + * Foregrounds the sub- and superproperties of this property. + * This is separated from the foreground-function to prevent endless loops. + */ + function foregroundSubAndSuperProperties(){ + var subAndSuperProperties = getSubAndSuperProperties(); + + subAndSuperProperties.forEach(function ( property ){ + if ( property.foreground ) property.foreground(); + }); + } + + function onMouseOver(){ + if ( that.mouseEntered() || ignoreLocalHoverEvents === true ) { + return; + } + that.mouseEntered(true); + that.setHighlighting(true); + that.foreground(); + foregroundSubAndSuperProperties(); + } + + function onMouseOut(){ + that.mouseEntered(false); + that.setHighlighting(false); + } + + this.drawPin = function (){ + that.pinned(true); + if ( graph.options().dynamicLabelWidth() === true ) myWidth = that.getMyWidth(); + else myWidth = defaultWidth; + + if ( that.inverse() ) { + // check which element is rendered on top and add a pin to it + var tr_that = that.labelElement().attr("transform"); + var tr_inv = that.inverse().labelElement().attr("transform"); + + var thatY = /translate\(\s*([^\s,)]+)[ ,]([^\s,)]+)/.exec(tr_that)[2]; + var invY = /translate\(\s*([^\s,)]+)[ ,]([^\s,)]+)/.exec(tr_inv)[2]; + + if ( thatY < invY ) + pinGroupElement = drawTools.drawPin(that.labelElement(), -0.5 * that.width() + 10, -25, this.removePin, graph.options().showDraggerObject, graph.options().useAccuracyHelper()); + else + pinGroupElement = drawTools.drawPin(that.inverse().labelElement(), -0.5 * that.inverse().width() + 10, -25, this.removePin, graph.options().showDraggerObject, graph.options().useAccuracyHelper()); + + } + else { + pinGroupElement = drawTools.drawPin(that.labelElement(), -0.5 * that.width() + 10, -25, this.removePin, graph.options().showDraggerObject, graph.options().useAccuracyHelper()); + } + + + }; + + /** + * Removes the pin and refreshs the graph to update the force layout. + */ + this.removePin = function (){ + that.pinned(false); + if ( pinGroupElement ) { + pinGroupElement.remove(); + } + graph.updateStyle(); + }; + + this.removeHalo = function (){ + that.halo(false); + if ( haloGroupElement ) { + haloGroupElement.remove(); + haloGroupElement = null; + } + }; + + this.animationProcess = function (){ + var animRuns = false; + if ( that.getHalos() ) { + var haloGr = that.getHalos(); + var haloEls = haloGr.selectAll(".searchResultA"); + animRuns = haloGr.attr("animationRunning"); + + if ( typeof animRuns !== "boolean" ) { + // parse this to a boolean value + animRuns = (animRuns === 'true'); + } + if ( animRuns === false ) { + haloEls.classed("searchResultA", false); + haloEls.classed("searchResultB", true); + } + } + return animRuns; + }; + + this.drawHalo = function ( pulseAnimation ){ + that.halo(true); + var offset = 0; + if ( that.labelElement() && that.labelElement().node() ) { + var labelNode = that.labelElement().node(); + var labelContainer = labelNode.parentNode; + // do this only if animation is not running + if ( that.animationProcess() === false ) + labelContainer.appendChild(labelNode); + } + haloGroupElement = drawTools.drawRectHalo(that, that.width(), that.height(), offset); + if ( haloGroupElement ) { + var haloNode = haloGroupElement.node(); + var haloContainer = haloNode.parentNode; + haloContainer.appendChild(haloNode); + } + var selectedNode; + var nodeContainer; + if ( that.pinned() ) { + selectedNode = pinGroupElement.node(); + nodeContainer = selectedNode.parentNode; + nodeContainer.appendChild(selectedNode); + } + if ( that.inverse() && that.inverse().pinned() ) { + if ( that.inverse().getPin() ) { + selectedNode = that.inverse().getPin().node(); + nodeContainer = selectedNode.parentNode; + nodeContainer.appendChild(selectedNode); + } + } + if ( pulseAnimation === false ) { + var pulseItem = haloGroupElement.selectAll(".searchResultA"); + pulseItem.classed("searchResultA", false); + pulseItem.classed("searchResultB", true); + pulseItem.attr("animationRunning", false); + } + }; + + this.getMyWidth = function (){ + var text = that.labelForCurrentLanguage(); + myWidth = measureTextWidth(text, "text") + 20; + // check for sub names; + var indicatorText = that.indicationString(); + var indicatorWidth = measureTextWidth(indicatorText, "subtext") + 20; + if ( indicatorWidth > myWidth ) + myWidth = indicatorWidth; + + return myWidth; + }; + + function measureTextWidth( text, textStyle ){ + // Set a default value + if ( !textStyle ) { + textStyle = "text"; + } + var d = d3.select("body") + .append("div") + .attr("class", textStyle) + .attr("id", "width-test") // tag this element to identify it + .attr("style", "position:absolute; float:left; white-space:nowrap; visibility:hidden;") + .text(text), + w = document.getElementById("width-test").offsetWidth; + d.remove(); + return w; + } + + this.textWidth = function (){ + return myWidth; + }; + this.width = function (){ + return myWidth; + }; + + this.animateDynamicLabelWidth = function ( dynamic ){ + that.removeHalo(); + if ( shapeElement === undefined ) {// this handles setOperatorProperties which dont have a shapeElement! + return; + } + + var h = that.height(); + if ( dynamic === true ) { + myWidth = Math.min(that.getMyWidth(), graph.options().maxLabelWidth()); + shapeElement.transition().tween("attr", function (){ + }) + .ease('linear') + .duration(100) + .attr({ x: -myWidth / 2, y: -h / 2, width: myWidth, height: h }) + .each("end", function (){ + that.updateTextElement(); + }); + } else { + // Static width for property labels = 80 + myWidth = defaultWidth; + that.updateTextElement(); + shapeElement.transition().tween("attr", function (){ + }) + .ease('linear') + .duration(100) + .attr({ x: -myWidth / 2, y: -h / 2, width: myWidth, height: h }); + } + if ( that.pinned() === true && pinGroupElement ) { + var dx = -0.5 * myWidth + 10, + dy = -25; + pinGroupElement.transition() + .tween("attr.translate", function (){ + }) + .attr("transform", "translate(" + dx + "," + dy + ")") + .ease('linear') + .duration(100); + } + }; + + this.redrawLabelText = function (){ + textElement.remove(); + that.addTextLabelElement(); + that.animateDynamicLabelWidth(graph.options().dynamicLabelWidth()); + shapeElement.select("title").text(that.labelForCurrentLanguage()); + }; + + this.addTextLabelElement = function (){ + var labelContainer = that.labelElement(); + + var equivalentsString = that.equivalentsString(); + var suffixForFollowingEquivalents = equivalentsString ? "," : ""; + + textElement = new CenteringTextElement(labelContainer, this.backgroundColor()); + textElement.addText(this.labelForCurrentLanguage(), "", suffixForFollowingEquivalents); + textElement.addEquivalents(equivalentsString); + textElement.addSubText(this.indicationString()); + }; + + this.updateTextElement = function (){ + textElement.updateAllTextElements(); + }; + this.enableEditing = function ( autoEditing ){ + if ( autoEditing === false ) + return; + that.raiseDoubleClickEdit(true); + }; + + this.raiseDoubleClickEdit = function ( forceIRISync ){ + d3.selectAll(".foreignelements").remove(); + if ( that.labelElement() === undefined || this.type() === "owl:disjointWith" || this.type() === "rdfs:subClassOf" ) { + console.log("No Container found"); + return; + } + if ( fobj !== undefined ) { + that.labelElement().selectAll(".foreignelements").remove(); + } + backupFullIri = undefined; + graph.options().focuserModule().handle(undefined); + graph.options().focuserModule().handle(that); + that.editingTextElement = true; + ignoreLocalHoverEvents = true; + that.labelElement().selectAll("rect").classed("hoveredForEditing", true); + that.frozen(true); + graph.killDelayedTimer(); + graph.ignoreOtherHoverEvents(false); + fobj = that.labelElement().append("foreignObject") + .attr("x", -0.5 * that.textWidth()) + .attr("y", -13) + .attr("height", 25) + .attr("class", "foreignelements") + .on("dragstart", function (){ + return false; + }) // remove drag operations of text element) + .attr("width", that.textWidth() - 2); + // adding a Style to the fObject + // + // + // + var editText = fobj.append("xhtml:input") + .attr("class", "nodeEditSpan") + .attr("id", that.id()) + .attr("align", "center") + .attr("contentEditable", "true") + .on("dragstart", function (){ + return false; + }); // remove drag operations of text element) + + var bgColor = '#f00'; + var txtWidth = that.textWidth() - 2; + editText.style({ + // 'line-height': '30px', + 'align': 'center', + 'color': 'black', + 'width': txtWidth + "px", + 'background-color': bgColor, + 'border-bottom': '2px solid black' + }); + var txtNode = editText.node(); + txtNode.value = that.labelForCurrentLanguage(); + txtNode.focus(); + txtNode.select(); + if ( d3.event.stopPropagation ) d3.event.stopPropagation(); + if ( d3.event.sourceEvent && d3.event.sourceEvent.stopPropagation ) d3.event.sourceEvent.stopPropagation(); + + // add some events that relate to this object + editText.on("click", function (){ + if ( d3.event.stopPropagation ) d3.event.stopPropagation(); + if ( d3.event.sourceEvent && d3.event.sourceEvent.stopPropagation ) d3.event.sourceEvent.stopPropagation(); + + }); + // // remove hover Events for now; + editText.on("mouseout", function (){ + if ( d3.event.stopPropagation ) d3.event.stopPropagation(); + if ( d3.event.sourceEvent && d3.event.sourceEvent.stopPropagation ) d3.event.sourceEvent.stopPropagation(); + }); + editText.on("mousedown", function (){ + if ( d3.event.stopPropagation ) d3.event.stopPropagation(); + if ( d3.event.sourceEvent && d3.event.sourceEvent.stopPropagation ) d3.event.sourceEvent.stopPropagation(); + }) + .on("keydown", function (){ + + if ( d3.event.keyCode === 13 ) { + this.blur(); + that.frozen(false); // << releases the not after selection + that.locked(false); + } + }) + .on("keyup", function (){ + if ( forceIRISync ) { + var labelName = editText.node().value; + var resourceName = labelName.replaceAll(" ", "_"); + var syncedIRI = that.baseIri() + resourceName; + backupFullIri = syncedIRI; + + d3.select("#element_iriEditor").node().title = syncedIRI; + d3.select("#element_iriEditor").node().value = graph.options().prefixModule().getPrefixRepresentationForFullURI(syncedIRI); + } + d3.select("#element_labelEditor").node().value = editText.node().value; + + }) + .on("blur", function (){ + + + that.editingTextElement = false; + ignoreLocalHoverEvents = false; + that.labelElement().selectAll("rect").classed("hoveredForEditing", false); + var newLabel = editText.node().value; + that.labelElement().selectAll(".foreignelements").remove(); + // that.setLabelForCurrentLanguage(classNameConvention(editText.node().value)); + that.label(newLabel); + that.backupLabel(newLabel); + that.redrawLabelText(); + updateHoverElements(true); + graph.showHoverElementsAfterAnimation(that, false); + graph.ignoreOtherHoverEvents(false); + + + that.frozen(graph.paused()); + that.locked(graph.paused()); + that.domain().frozen(graph.paused()); + that.domain().locked(graph.paused()); + that.range().frozen(graph.paused()); + that.range().locked(graph.paused()); + graph.removeEditElements(); + if ( backupFullIri ) { + // console.log("Checking if element is Identical ?"); + var sanityCheckResult = graph.options().editSidebar().checkProperIriChange(that, backupFullIri); + if ( sanityCheckResult !== false ) { + graph.options().warningModule().showWarning("Already seen this property", + "Input IRI: " + backupFullIri + " for element: " + that.labelForCurrentLanguage() + " already been set", + "Continuing with duplicate property!", 1, false, sanityCheckResult); + } + that.iri(backupFullIri); + } + graph.options().focuserModule().handle(undefined); + graph.options().focuserModule().handle(that); + graph.updatePropertyDraggerElements(that); + + + }); // add a foreiner element to this thing; + + }; + + // update hover elements + function updateHoverElements( enable ){ + if ( graph.ignoreOtherHoverEvents() === false ) { + var inversed = false; + if ( that.inverse() ) { + inversed = true; + } + if ( enable === true ) { + graph.activateHoverElementsForProperties(enable, that, inversed); + } + } + } + + that.copyInformation = function ( other ){ + that.label(other.label()); + that.iri(other.iri()); + that.baseIri(other.baseIri()); + if ( other.type() === "owl:ObjectProperty" || + other.type() === "owl:DatatypeProperty" ) { + that.backupLabel(other.label()); + // console.log("copied backup label"+that.backupLabel()); + } + if ( other.backupLabel() !== undefined ) { + that.backupLabel(other.backupLabel()); + } + }; + + forceLayoutNodeFunctions.addTo(this); + }; + + Base.prototype = Object.create(BaseElement.prototype); + Base.prototype.constructor = Base; + + Base.prototype.height = function (){ + return labelHeight; + }; + + Base.prototype.width = function (){ + return labelWidth; + }; + + Base.prototype.actualRadius = function (){ + return smallestRadius; + }; + + Base.prototype.textWidth = Base.prototype.width; + + + return Base; + }()); + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 43 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains a collection of mathematical functions with some additional data + * used for WebVOWL. + */ + module.exports = (function (){ + + var math = {}, + loopFunction = d3.svg.line() + .x(function ( d ){ + return d.x; + }) + .y(function ( d ){ + return d.y; + }) + .interpolate("cardinal") + .tension(-1); + + + /** + * Calculates the normal vector of the path between the two nodes. + * @param source the first node + * @param target the second node + * @param length the length of the calculated normal vector + * @returns {{x: number, y: number}} + */ + math.calculateNormalVector = function ( source, target, length ){ + var dx = target.x - source.x, + dy = target.y - source.y; + + var nx = -dy, + ny = dx; + + var vlength = Math.sqrt(nx * nx + ny * ny); + + var ratio = vlength !== 0 ? length / vlength : 0; + + return { "x": nx * ratio, "y": ny * ratio }; + }; + + /** + * Calculates the path for a link, if it is a loop. Currently only working for circlular nodes. + * @param link the link + * @returns {*} + */ + + + + math.getLoopPoints = function ( link ){ + var node = link.domain(), + label = link.label(); + + var fairShareLoopAngle = 360 / link.loops().length, + fairShareLoopAngleWithMargin = fairShareLoopAngle * 0.8, + loopAngle = Math.min(60, fairShareLoopAngleWithMargin); + + if ( label.increasedLoopAngle === true ) + loopAngle = 120; + + + var dx = label.x - node.x, + dy = label.y - node.y, + labelRadian = Math.atan2(dy, dx), + labelAngle = calculateAngle(labelRadian); + + var startAngle = labelAngle - loopAngle / 2, + endAngle = labelAngle + loopAngle / 2; + + + var arcFrom = calculateRadian(startAngle), + arcTo = calculateRadian(endAngle), + + x1 = Math.cos(arcFrom) * node.actualRadius(), + y1 = Math.sin(arcFrom) * node.actualRadius(), + + x2 = Math.cos(arcTo) * node.actualRadius(), + y2 = Math.sin(arcTo) * node.actualRadius(), + + fixPoint1 = { "x": node.x + x1, "y": node.y + y1 }, + fixPoint2 = { "x": node.x + x2, "y": node.y + y2 }; + + return [fixPoint1, fixPoint2]; + }; + math.calculateLoopPath = function ( link ){ + var node = link.domain(), + label = link.label(); + + + var fairShareLoopAngle = 360 / link.loops().length, + fairShareLoopAngleWithMargin = fairShareLoopAngle * 0.8, + loopAngle = Math.min(60, fairShareLoopAngleWithMargin); + + if ( label.increasedLoopAngle === true ) + loopAngle = 120; + + var dx = label.x - node.x, + dy = label.y - node.y, + labelRadian = Math.atan2(dy, dx), + labelAngle = calculateAngle(labelRadian); + + var startAngle = labelAngle - loopAngle / 2, + endAngle = labelAngle + loopAngle / 2; + + var arcFrom = calculateRadian(startAngle), + arcTo = calculateRadian(endAngle), + + x1 = Math.cos(arcFrom) * node.actualRadius(), + y1 = Math.sin(arcFrom) * node.actualRadius(), + + x2 = Math.cos(arcTo) * node.actualRadius(), + y2 = Math.sin(arcTo) * node.actualRadius(), + + fixPoint1 = { "x": node.x + x1, "y": node.y + y1 }, + fixPoint2 = { "x": node.x + x2, "y": node.y + y2 }; + + return loopFunction([fixPoint1, link.label(), fixPoint2]); + }; + + math.calculateLoopPoints = function ( link ){ + var node = link.domain(), + label = link.label(); + + var fairShareLoopAngle = 360 / link.loops().length, + fairShareLoopAngleWithMargin = fairShareLoopAngle * 0.8, + loopAngle = Math.min(60, fairShareLoopAngleWithMargin); + + var dx = label.x - node.x, + dy = label.y - node.y, + labelRadian = Math.atan2(dy, dx), + labelAngle = calculateAngle(labelRadian); + + var startAngle = labelAngle - loopAngle / 2, + endAngle = labelAngle + loopAngle / 2; + + var arcFrom = calculateRadian(startAngle), + arcTo = calculateRadian(endAngle), + + x1 = Math.cos(arcFrom) * node.actualRadius(), + y1 = Math.sin(arcFrom) * node.actualRadius(), + + x2 = Math.cos(arcTo) * (node.actualRadius()), + y2 = Math.sin(arcTo) * (node.actualRadius()), + + fixPoint1 = { "x": node.x + x1, "y": node.y + y1 }, + fixPoint2 = { "x": node.x + x2, "y": node.y + y2 }; + + return [fixPoint1, link.label(), fixPoint2]; + }; + + /** + * @param angle + * @returns {number} the radian of the angle + */ + function calculateRadian( angle ){ + angle = angle % 360; + if ( angle < 0 ) { + angle = angle + 360; + } + return (Math.PI * angle) / 180; + } + + /** + * @param radian + * @returns {number} the angle of the radian + */ + function calculateAngle( radian ){ + return radian * (180 / Math.PI); + } + + /** + * Calculates the point where the link between the source and target node + * intersects the border of the target node. + * @param source the source node + * @param target the target node + * @param additionalDistance additional distance the + * @returns {{x: number, y: number}} + */ + math.calculateIntersection = function ( source, target, additionalDistance ){ + var dx = target.x - source.x, + dy = target.y - source.y, + length = Math.sqrt(dx * dx + dy * dy); + + if ( length === 0 ) { + return { x: source.x, y: source.y }; + } + + var innerDistance = target.distanceToBorder(dx, dy); + + var ratio = (length - (innerDistance + additionalDistance)) / length, + x = dx * ratio + source.x, + y = dy * ratio + source.y; + + return { x: x, y: y }; + }; + + /** + * Calculates the position between the two points. + * @param firstPoint + * @param secondPoint + * @returns {{x: number, y: number}} + */ + math.calculateCenter = function ( firstPoint, secondPoint ){ + return { + x: (firstPoint.x + secondPoint.x) / 2, + y: (firstPoint.y + secondPoint.y) / 2 + }; + }; + + + return function (){ + /* Use a function here to keep a consistent style like webvowl.path.to.module() + * despite having just a single math object. */ + return math; + }; + })(); + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 44 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + this.attributes(["datatype"]) + .styleClass("datatypeproperty") + .type("owl:DatatypeProperty"); + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 45 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + this.attributes(["deprecated"]) + .styleClass("deprecatedproperty") + .type("owl:DeprecatedProperty"); + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 46 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + var CenteringTextElement = __webpack_require__(14); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + var label = "Disjoint With"; + var shapeElement; + // Disallow overwriting the label + this.label = function ( p ){ + if ( !arguments.length ) return label; + return this; + }; + + this.linkType("dashed") + .styleClass("disjointwith") + .type("owl:disjointWith"); + + this.drawLabel = function ( labelContainer ){ + shapeElement = this.addRect(labelContainer); + + labelContainer.append("circle") + .classed("symbol", true) + .classed("fineline", true) + .classed("embedded", true) + .attr("cx", -12.5) + .attr("r", 10); + + labelContainer.append("circle") + .classed("symbol", true) + .classed("fineline", true) + .classed("embedded", true) + .attr("cx", 12.5) + .attr("r", 10); + + var textElement = new CenteringTextElement(labelContainer, this.backgroundColor()); + if ( !graph.options().compactNotation() ) { + textElement.addSubText("disjoint"); + } + textElement.translation(0, 20); + }; + this.getShapeElement = function (){ + return shapeElement; + }; + this.markerElement = function (){ + return undefined; + }; + + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 47 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + this.styleClass("equivalentproperty") + .type("owl:equivalentProperty"); + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 48 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + this.attributes(["functional"]) + .styleClass("functionalproperty") + .type("owl:FunctionalProperty"); + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 49 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + this.attributes(["inverse functional"]) + .styleClass("inversefunctionalproperty") + .type("owl:InverseFunctionalProperty"); + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 50 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + this.attributes(["object"]) + .styleClass("objectproperty") + .type("owl:ObjectProperty"); + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + + + +/***/ }), +/* 51 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + var superGenerateCardinalityText = this.generateCardinalityText; + + this.linkType("values-from") + .markerType("filled values-from") + .styleClass("somevaluesfromproperty") + .type("owl:someValuesFrom"); + + this.generateCardinalityText = function (){ + var cardinalityText = "E"; + + var superCardinalityText = superGenerateCardinalityText(); + if ( superCardinalityText ) { + cardinalityText += ", " + superCardinalityText; + } + + return cardinalityText; + }; + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + + + +/***/ }), +/* 52 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + this.attributes(["symmetric"]) + .styleClass("symmetricproperty") + .type("owl:SymmetricProperty"); + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 53 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + this.attributes(["transitive"]) + .styleClass("transitiveproperty") + .type("owl:TransitiveProperty"); + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 54 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + this.attributes(["rdf"]) + .styleClass("rdfproperty") + .type("rdf:Property"); + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 55 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + var that = this, + superDrawFunction = that.draw, + label = "Subclass of"; + + this.draw = function ( labelGroup ){ + that.labelVisible(!graph.options().compactNotation()); + return superDrawFunction(labelGroup); + }; + + // Disallow overwriting the label + this.label = function ( p ){ + if ( !arguments.length ) return label; + return this; + }; + + this.linkType("dotted") + .markerType("white") + .styleClass("subclass") + .type("rdfs:subClassOf"); + + that.baseIri("http://www.w3.org/2000/01/rdf-schema#"); + that.iri("http://www.w3.org/2000/01/rdf-schema#subClassOf"); + + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 56 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + this.labelVisible(false) + .linkType("dashed") + .markerType("white") + .styleClass("setoperatorproperty") + .type("setOperatorProperty"); + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 57 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var _ = __webpack_require__(58); + var math = __webpack_require__(43)(); + var linkCreator = __webpack_require__(60)(); + var elementTools = __webpack_require__(63)(); + // add some maps for nodes and properties -- used for object generation + var nodePrototypeMap = __webpack_require__(5)(); + var propertyPrototypeMap = __webpack_require__(40)(); + + + module.exports = function ( graphContainerSelector ){ + var graph = {}, + CARDINALITY_HDISTANCE = 20, + CARDINALITY_VDISTANCE = 10, + curveFunction = d3.svg.line() + .x(function ( d ){ + return d.x; + }) + .y(function ( d ){ + return d.y; + }) + .interpolate("cardinal"), + options = __webpack_require__(64)(), + parser = __webpack_require__(65)(graph), + language = "default", + paused = false, + // Container for visual elements + graphContainer, + nodeContainer, + labelContainer, + cardinalityContainer, + linkContainer, + // Visual elements + nodeElements, + initialLoad = true, + updateRenderingDuringSimulation = false, + labelGroupElements, + linkGroups, + linkPathElements, + cardinalityElements, + // Internal data + classNodes, + labelNodes, + links, + properties, + unfilteredData, + // Graph behaviour + force, + dragBehaviour, + zoomFactor = 1.0, + centerGraphViewOnLoad = false, + transformAnimation = false, + graphTranslation = [0, 0], + graphUpdateRequired = false, + pulseNodeIds = [], + nodeArrayForPulse = [], + nodeMap = [], + locationId = 0, + defaultZoom = 1.0, + defaultTargetZoom = 0.8, + global_dof = -1, + touchDevice = false, + last_touch_time, + originalD3_dblClickFunction = null, + originalD3_touchZoomFunction = null, + + // editing elements + deleteGroupElement, + addDataPropertyGroupElement, + editContainer, + draggerLayer = null, + draggerObjectsArray = [], + delayedHider, + nodeFreezer, + hoveredNodeElement = null, + currentlySelectedNode = null, + hoveredPropertyElement = null, + draggingStarted = false, + frozenDomainForPropertyDragger, + frozenRangeForPropertyDragger, + + eP = 0, // id for new properties + eN = 0, // id for new Nodes + editMode = true, + debugContainer = d3.select("#FPS_Statistics"), + finishedLoadingSequence = false, + + ignoreOtherHoverEvents = false, + forceNotZooming = false, + now, then, // used for fps computation + showFPS = false, + seenEditorHint = false, + seenFilterWarning = false, + showFilterWarning = false, + + keepDetailsCollapsedOnLoading = true, + adjustingGraphSize = false, + showReloadButtonAfterLayoutOptimization = false, + zoom; + //var prefixModule=require("./prefixRepresentationModule")(graph); + var NodePrototypeMap = createLowerCasePrototypeMap(nodePrototypeMap); + var PropertyPrototypeMap = createLowerCasePrototypeMap(propertyPrototypeMap); + var classDragger = __webpack_require__(68)(graph); + var rangeDragger = __webpack_require__(69)(graph); + var domainDragger = __webpack_require__(70)(graph); + var shadowClone = __webpack_require__(71)(graph); + + graph.math = function (){ + return math; + }; + /** --------------------------------------------------------- **/ + /** -- getter and setter definitions -- **/ + /** --------------------------------------------------------- **/ + graph.isEditorMode = function (){ + return editMode; + }; + graph.getGlobalDOF = function (){ + return global_dof; + }; + graph.setGlobalDOF = function ( val ){ + global_dof = val; + }; + + graph.updateZoomSliderValueFromOutside = function (){ + graph.options().zoomSlider().updateZoomSliderValue(zoomFactor); + }; + + graph.setDefaultZoom = function ( val ){ + defaultZoom = val; + graph.reset(); + graph.options().zoomSlider().updateZoomSliderValue(defaultZoom); + }; + graph.setTargetZoom = function ( val ){ + defaultTargetZoom = val; + }; + graph.graphOptions = function (){ + return options; + }; + + graph.scaleFactor = function (){ + return zoomFactor; + }; + graph.translation = function (){ + return graphTranslation; + }; + + // Returns the visible nodes + graph.graphNodeElements = function (){ + return nodeElements; + }; + // Returns the visible Label Nodes + graph.graphLabelElements = function (){ + return labelNodes; + }; + + graph.graphLinkElements = function (){ + return links; + }; + + graph.setSliderZoom = function ( val ){ + + var cx = 0.5 * graph.options().width(); + var cy = 0.5 * graph.options().height(); + var cp = getWorldPosFromScreen(cx, cy, graphTranslation, zoomFactor); + var sP = [cp.x, cp.y, graph.options().height() / zoomFactor]; + var eP = [cp.x, cp.y, graph.options().height() / val]; + var pos_intp = d3.interpolateZoom(sP, eP); + + graphContainer.attr("transform", transform(sP, cx, cy)) + .transition() + .duration(1) + .attrTween("transform", function (){ + return function ( t ){ + return transform(pos_intp(t), cx, cy); + }; + }) + .each("end", function (){ + graphContainer.attr("transform", "translate(" + graphTranslation + ")scale(" + zoomFactor + ")"); + zoom.translate(graphTranslation); + zoom.scale(zoomFactor); + graph.options().zoomSlider().updateZoomSliderValue(zoomFactor); + }); + }; + + + graph.setZoom = function ( value ){ + zoom.scale(value); + }; + + graph.setTranslation = function ( translation ){ + zoom.translate([translation[0], translation[1]]); + }; + + graph.options = function (){ + return options; + }; + // search functionality + graph.getUpdateDictionary = function (){ + return parser.getDictionary(); + }; + + graph.language = function ( newLanguage ){ + if ( !arguments.length ) return language; + + // Just update if the language changes + if ( language !== newLanguage ) { + language = newLanguage || "default"; + redrawContent(); + recalculatePositions(); + graph.options().searchMenu().requestDictionaryUpdate(); + graph.resetSearchHighlight(); + } + return graph; + }; + + + /** --------------------------------------------------------- **/ + /** graph / rendering related functions **/ + /** --------------------------------------------------------- **/ + + // Initializes the graph. + function initializeGraph(){ + + options.graphContainerSelector(graphContainerSelector); + var moved = false; + force = d3.layout.force() + .on("tick", hiddenRecalculatePositions); + + dragBehaviour = d3.behavior.drag() + .origin(function ( d ){ + return d; + }) + .on("dragstart", function ( d ){ + d3.event.sourceEvent.stopPropagation(); // Prevent panning + graph.ignoreOtherHoverEvents(true); + if ( d.type && d.type() === "Class_dragger" ) { + classDragger.mouseButtonPressed = true; + clearTimeout(delayedHider); + classDragger.selectedViaTouch(true); + d.parentNode().locked(true); + draggingStarted = true; + } else if ( d.type && d.type() === "Range_dragger" ) { + graph.ignoreOtherHoverEvents(true); + clearTimeout(delayedHider); + frozenDomainForPropertyDragger = shadowClone.parentNode().domain(); + frozenRangeForPropertyDragger = shadowClone.parentNode().range(); + shadowClone.setInitialPosition(); + shadowClone.hideClone(false); + shadowClone.hideParentProperty(true); + shadowClone.updateElement(); + deleteGroupElement.classed("hidden", true); + addDataPropertyGroupElement.classed("hidden", true); + frozenDomainForPropertyDragger.frozen(true); + frozenDomainForPropertyDragger.locked(true); + frozenRangeForPropertyDragger.frozen(true); + frozenRangeForPropertyDragger.locked(true); + domainDragger.updateElement(); + domainDragger.mouseButtonPressed = true; + rangeDragger.updateElement(); + rangeDragger.mouseButtonPressed = true; + // shadowClone.setPosition(d.x, d.y); + + + } else if ( d.type && d.type() === "Domain_dragger" ) { + graph.ignoreOtherHoverEvents(true); + clearTimeout(delayedHider); + frozenDomainForPropertyDragger = shadowClone.parentNode().domain(); + frozenRangeForPropertyDragger = shadowClone.parentNode().range(); + shadowClone.setInitialPosition(); + shadowClone.hideClone(false); + shadowClone.hideParentProperty(true); + shadowClone.updateElement(); + deleteGroupElement.classed("hidden", true); + addDataPropertyGroupElement.classed("hidden", true); + + frozenDomainForPropertyDragger.frozen(true); + frozenDomainForPropertyDragger.locked(true); + frozenRangeForPropertyDragger.frozen(true); + frozenRangeForPropertyDragger.locked(true); + domainDragger.updateElement(); + domainDragger.mouseButtonPressed = true; + rangeDragger.updateElement(); + rangeDragger.mouseButtonPressed = true; + } + else { + d.locked(true); + moved = false; + } + }) + .on("drag", function ( d ){ + + if ( d.type && d.type() === "Class_dragger" ) { + clearTimeout(delayedHider); + classDragger.setPosition(d3.event.x, d3.event.y); + } else if ( d.type && d.type() === "Range_dragger" ) { + clearTimeout(delayedHider); + rangeDragger.setPosition(d3.event.x, d3.event.y); + shadowClone.setPosition(d3.event.x, d3.event.y); + domainDragger.updateElementViaRangeDragger(d3.event.x, d3.event.y); + } + else if ( d.type && d.type() === "Domain_dragger" ) { + clearTimeout(delayedHider); + domainDragger.setPosition(d3.event.x, d3.event.y); + shadowClone.setPositionDomain(d3.event.x, d3.event.y); + rangeDragger.updateElementViaDomainDragger(d3.event.x, d3.event.y); + } + + else { + d.px = d3.event.x; + d.py = d3.event.y; + force.resume(); + updateHaloRadius(); + moved = true; + if ( d.renderType && d.renderType() === "round" ) { + classDragger.setParentNode(d); + } + + } + }) + .on("dragend", function ( d ){ + graph.ignoreOtherHoverEvents(false); + if ( d.type && d.type() === "Class_dragger" ) { + var nX = classDragger.x; + var nY = classDragger.y; + clearTimeout(delayedHider); + classDragger.mouseButtonPressed = false; + classDragger.selectedViaTouch(false); + d.setParentNode(d.parentNode()); + + var draggerEndPos = [nX, nY]; + var targetNode = graph.getTargetNode(draggerEndPos); + if ( targetNode ) { + createNewObjectProperty(d.parentNode(), targetNode, draggerEndPos); + } + if ( touchDevice === false ) { + editElementHoverOut(); + } + draggingStarted = false; + } else if ( d.type && d.type() === "Range_dragger" ) { + graph.ignoreOtherHoverEvents(false); + frozenDomainForPropertyDragger.frozen(false); + frozenDomainForPropertyDragger.locked(false); + frozenRangeForPropertyDragger.frozen(false); + frozenRangeForPropertyDragger.locked(false); + rangeDragger.mouseButtonPressed = false; + domainDragger.mouseButtonPressed = false; + domainDragger.updateElement(); + rangeDragger.updateElement(); + shadowClone.hideClone(true); + var rX = rangeDragger.x; + var rY = rangeDragger.y; + var rangeDraggerEndPos = [rX, rY]; + var targetRangeNode = graph.getTargetNode(rangeDraggerEndPos); + if ( elementTools.isDatatype(targetRangeNode) === true ) { + targetRangeNode = null; + console.log("---------------TARGET NODE IS A DATATYPE/ LITERAL ------------"); + } + + if ( targetRangeNode === null ) { + d.reDrawEverthing(); + shadowClone.hideParentProperty(false); + } + else { + d.updateRange(targetRangeNode); + graph.update(); + shadowClone.hideParentProperty(false); + } + } else if ( d.type && d.type() === "Domain_dragger" ) { + graph.ignoreOtherHoverEvents(false); + frozenDomainForPropertyDragger.frozen(false); + frozenDomainForPropertyDragger.locked(false); + frozenRangeForPropertyDragger.frozen(false); + frozenRangeForPropertyDragger.locked(false); + rangeDragger.mouseButtonPressed = false; + domainDragger.mouseButtonPressed = false; + domainDragger.updateElement(); + rangeDragger.updateElement(); + shadowClone.hideClone(true); + + var dX = domainDragger.x; + var dY = domainDragger.y; + var domainDraggerEndPos = [dX, dY]; + var targetDomainNode = graph.getTargetNode(domainDraggerEndPos); + if ( elementTools.isDatatype(targetDomainNode) === true ) { + targetDomainNode = null; + console.log("---------------TARGET NODE IS A DATATYPE/ LITERAL ------------"); + } + shadowClone.hideClone(true); + if ( targetDomainNode === null ) { + d.reDrawEverthing(); + shadowClone.hideParentProperty(false); + } + else { + d.updateDomain(targetDomainNode); + graph.update(); + shadowClone.hideParentProperty(false); + } + } + + else { + d.locked(false); + var pnp = graph.options().pickAndPinModule(); + if ( pnp.enabled() === true && moved === true ) { + if ( d.id ) { // node + pnp.handle(d, true); + } + if ( d.property ) { + pnp.handle(d.property(), true); + } + } + } + }); + + // Apply the zooming factor. + zoom = d3.behavior.zoom() + .duration(150) + .scaleExtent([options.minMagnification(), options.maxMagnification()]) + .on("zoom", zoomed); + + draggerObjectsArray.push(classDragger); + draggerObjectsArray.push(rangeDragger); + draggerObjectsArray.push(domainDragger); + draggerObjectsArray.push(shadowClone); + force.stop(); + } + + graph.lazyRefresh = function (){ + redrawContent(); + recalculatePositions(); + }; + + graph.adjustingGraphSize = function ( val ){ + adjustingGraphSize = val; + }; + + graph.showReloadButtonAfterLayoutOptimization = function ( show ){ + showReloadButtonAfterLayoutOptimization = show; + }; + + + function hiddenRecalculatePositions(){ + finishedLoadingSequence = false; + if ( graph.options().loadingModule().successfullyLoadedOntology() === false ) { + force.stop(); + d3.select("#progressBarValue").node().innerHTML = ""; + graph.updateProgressBarMode(); + graph.options().loadingModule().showErrorDetailsMessage(hiddenRecalculatePositions); + if ( keepDetailsCollapsedOnLoading && adjustingGraphSize === false ) { + graph.options().loadingModule().collapseDetails("hiddenRecalculatePositions"); + } + return; + } + if ( updateRenderingDuringSimulation === false ) { + var value = 1.0 - 10 * force.alpha(); + var percent = parseInt(200 * value) + "%"; + graph.options().loadingModule().setPercentValue(percent); + d3.select("#progressBarValue").style("width", percent); + d3.select("#progressBarValue").node().innerHTML = percent; + + if ( value > 0.49 ) { + updateRenderingDuringSimulation = true; + // show graph container; + if ( graphContainer ) { + graphContainer.style("opacity", "1"); + percent = "100%"; + d3.select("#progressBarValue").style("width", percent); + d3.select("#progressBarValue").node().innerHTML = percent; + graph.options().ontologyMenu().append_message_toLastBulletPoint("done"); + d3.select("#reloadCachedOntology").classed("hidden", !showReloadButtonAfterLayoutOptimization); + if ( showFilterWarning === true && seenFilterWarning === false ) { + graph.options().warningModule().showFilterHint(); + seenFilterWarning = true; + } + } + + if ( initialLoad ) { + if ( graph.paused() === false ) + force.resume(); // resume force + initialLoad = false; + + } + + + finishedLoadingSequence = true; + if ( showFPS === true ) { + force.on("tick", recalculatePositionsWithFPS); + recalculatePositionsWithFPS(); + } + else { + force.on("tick", recalculatePositions); + recalculatePositions(); + } + + if ( centerGraphViewOnLoad === true && force.nodes().length > 0 ) { + if ( force.nodes().length < 10 ) graph.forceRelocationEvent(true); // uses dynamic zoomer; + else graph.forceRelocationEvent(); + centerGraphViewOnLoad = false; + // console.log("--------------------------------------") + } + + + graph.showEditorHintIfNeeded(); + + if ( graph.options().loadingModule().missingImportsWarning() === false ) { + graph.options().loadingModule().hideLoadingIndicator(); + graph.options().ontologyMenu().append_bulletPoint("Successfully loaded ontology"); + graph.options().loadingModule().setSuccessful(); + } else { + graph.options().loadingModule().showWarningDetailsMessage(); + graph.options().ontologyMenu().append_bulletPoint("Loaded ontology with warnings"); + } + } + } + } + + graph.showEditorHintIfNeeded = function (){ + if ( seenEditorHint === false && editMode === true ) { + seenEditorHint = true; + graph.options().warningModule().showEditorHint(); + } + }; + + graph.setForceTickFunctionWithFPS = function (){ + showFPS = true; + if ( force && finishedLoadingSequence === true ) { + force.on("tick", recalculatePositionsWithFPS); + } + + }; + graph.setDefaultForceTickFunction = function (){ + showFPS = false; + if ( force && finishedLoadingSequence === true ) { + force.on("tick", recalculatePositions); + } + }; + function recalculatePositionsWithFPS(){ + // compute the fps + + recalculatePositions(); + now = Date.now(); + var diff = now - then; + var fps = (1000 / (diff)).toFixed(2); + + debugContainer.node().innerHTML = "FPS: " + fps + "
    " + "Nodes: " + force.nodes().length + "
    " + "Links: " + force.links().length; + then = Date.now(); + + } + + function recalculatePositions(){ + // Set node positions + + + // add switch for edit mode to make this faster; + if ( !editMode ) { + nodeElements.attr("transform", function ( node ){ + return "translate(" + node.x + "," + node.y + ")"; + }); + + // Set label group positions + labelGroupElements.attr("transform", function ( label ){ + var position; + + // force centered positions on single-layered links + var link = label.link(); + if ( link.layers().length === 1 && !link.loops() ) { + var linkDomainIntersection = math.calculateIntersection(link.range(), link.domain(), 0); + var linkRangeIntersection = math.calculateIntersection(link.domain(), link.range(), 0); + position = math.calculateCenter(linkDomainIntersection, linkRangeIntersection); + label.x = position.x; + label.y = position.y; + } + return "translate(" + label.x + "," + label.y + ")"; + }); + // Set link paths and calculate additional information + linkPathElements.attr("d", function ( l ){ + if ( l.isLoop() ) { + return math.calculateLoopPath(l); + } + var curvePoint = l.label(); + var pathStart = math.calculateIntersection(curvePoint, l.domain(), 1); + var pathEnd = math.calculateIntersection(curvePoint, l.range(), 1); + + return curveFunction([pathStart, curvePoint, pathEnd]); + }); + + // Set cardinality positions + cardinalityElements.attr("transform", function ( property ){ + + var label = property.link().label(), + pos = math.calculateIntersection(label, property.range(), CARDINALITY_HDISTANCE), + normalV = math.calculateNormalVector(label, property.range(), CARDINALITY_VDISTANCE); + + return "translate(" + (pos.x + normalV.x) + "," + (pos.y + normalV.y) + ")"; + }); + + + updateHaloRadius(); + return; + } + + // TODO: this is Editor redraw function // we need to make this faster!! + + + nodeElements.attr("transform", function ( node ){ + return "translate(" + node.x + "," + node.y + ")"; + }); + + // Set label group positions + labelGroupElements.attr("transform", function ( label ){ + var position; + + // force centered positions on single-layered links + var link = label.link(); + if ( link.layers().length === 1 && !link.loops() ) { + var linkDomainIntersection = math.calculateIntersection(link.range(), link.domain(), 0); + var linkRangeIntersection = math.calculateIntersection(link.domain(), link.range(), 0); + position = math.calculateCenter(linkDomainIntersection, linkRangeIntersection); + label.x = position.x; + label.y = position.y; + label.linkRangeIntersection = linkRangeIntersection; + label.linkDomainIntersection = linkDomainIntersection; + if ( link.property().focused() === true || hoveredPropertyElement !== undefined ) { + rangeDragger.updateElement(); + domainDragger.updateElement(); + // shadowClone.setPosition(link.property().range().x,link.property().range().y); + // shadowClone.setPositionDomain(link.property().domain().x,link.property().domain().y); + } + } else { + label.linkDomainIntersection = math.calculateIntersection(link.label(), link.domain(), 0); + label.linkRangeIntersection = math.calculateIntersection(link.label(), link.range(), 0); + if ( link.property().focused() === true || hoveredPropertyElement !== undefined ) { + rangeDragger.updateElement(); + domainDragger.updateElement(); + // shadowClone.setPosition(link.property().range().x,link.property().range().y); + // shadowClone.setPositionDomain(link.property().domain().x,link.property().domain().y); + } + + } + return "translate(" + label.x + "," + label.y + ")"; + }); + // Set link paths and calculate additional information + linkPathElements.attr("d", function ( l ){ + if ( l.isLoop() ) { + + var ptrAr = math.getLoopPoints(l); + l.label().linkRangeIntersection = ptrAr[1]; + l.label().linkDomainIntersection = ptrAr[0]; + + if ( l.property().focused() === true || hoveredPropertyElement !== undefined ) { + rangeDragger.updateElement(); + domainDragger.updateElement(); + } + return math.calculateLoopPath(l); + } + var curvePoint = l.label(); + var pathStart = math.calculateIntersection(curvePoint, l.domain(), 1); + var pathEnd = math.calculateIntersection(curvePoint, l.range(), 1); + l.linkRangeIntersection = pathStart; + l.linkDomainIntersection = pathEnd; + if ( l.property().focused() === true || hoveredPropertyElement !== undefined ) { + domainDragger.updateElement(); + rangeDragger.updateElement(); + // shadowClone.setPosition(l.property().range().x,l.property().range().y); + // shadowClone.setPositionDomain(l.property().domain().x,l.property().domain().y); + } + return curveFunction([pathStart, curvePoint, pathEnd]); + }); + + // Set cardinality positions + cardinalityElements.attr("transform", function ( property ){ + + var label = property.link().label(), + pos = math.calculateIntersection(label, property.range(), CARDINALITY_HDISTANCE), + normalV = math.calculateNormalVector(label, property.range(), CARDINALITY_VDISTANCE); + + return "translate(" + (pos.x + normalV.x) + "," + (pos.y + normalV.y) + ")"; + }); + + if ( hoveredNodeElement ) { + setDeleteHoverElementPosition(hoveredNodeElement); + setAddDataPropertyHoverElementPosition(hoveredNodeElement); + if ( draggingStarted === false ) { + classDragger.setParentNode(hoveredNodeElement); + } + } + if ( hoveredPropertyElement ) { + setDeleteHoverElementPositionProperty(hoveredPropertyElement); + } + + updateHaloRadius(); + } + + graph.updatePropertyDraggerElements = function ( property ){ + if ( property.type() !== "owl:DatatypeProperty" ) { + + shadowClone.setParentProperty(property); + rangeDragger.setParentProperty(property); + rangeDragger.hideDragger(false); + rangeDragger.addMouseEvents(); + domainDragger.setParentProperty(property); + domainDragger.hideDragger(false); + domainDragger.addMouseEvents(); + + } + else { + rangeDragger.hideDragger(true); + domainDragger.hideDragger(true); + shadowClone.hideClone(true); + } + }; + + function addClickEvents(){ + function executeModules( selectedElement ){ + options.selectionModules().forEach(function ( module ){ + module.handle(selectedElement); + }); + } + + nodeElements.on("click", function ( clickedNode ){ + + // manaual double clicker // helper for iphone 6 etc... + if ( touchDevice === true && doubletap() === true ) { + d3.event.stopPropagation(); + if ( editMode === true ) { + clickedNode.raiseDoubleClickEdit(defaultIriValue(clickedNode)); + } + } + else { + executeModules(clickedNode); + } + }); + + nodeElements.on("dblclick", function ( clickedNode ){ + + d3.event.stopPropagation(); + if ( editMode === true ) { + clickedNode.raiseDoubleClickEdit(defaultIriValue(clickedNode)); + } + }); + + labelGroupElements.selectAll(".label").on("click", function ( clickedProperty ){ + executeModules(clickedProperty); + + // this is for enviroments that do not define dblClick function; + if ( touchDevice === true && doubletap() === true ) { + d3.event.stopPropagation(); + if ( editMode === true ) { + clickedProperty.raiseDoubleClickEdit(defaultIriValue(clickedProperty)); + } + } + + // currently removed the selection of an element to invoke the dragger + // if (editMode===true && clickedProperty.editingTextElement!==true) { + // return; + // // We say that Datatype properties are not allowed to have domain range draggers + // if (clickedProperty.focused() && clickedProperty.type() !== "owl:DatatypeProperty") { + // shadowClone.setParentProperty(clickedProperty); + // rangeDragger.setParentProperty(clickedProperty); + // rangeDragger.hideDragger(false); + // rangeDragger.addMouseEvents(); + // domainDragger.setParentProperty(clickedProperty); + // domainDragger.hideDragger(false); + // domainDragger.addMouseEvents(); + // + // if (clickedProperty.domain()===clickedProperty.range()){ + // clickedProperty.labelObject().increasedLoopAngle=true; + // recalculatePositions(); + // + // } + // + // } else if (clickedProperty.focused() && clickedProperty.type() === "owl:DatatypeProperty") { + // shadowClone.setParentProperty(clickedProperty); + // rangeDragger.setParentProperty(clickedProperty); + // rangeDragger.hideDragger(true); + // rangeDragger.addMouseEvents(); + // domainDragger.setParentProperty(clickedProperty); + // domainDragger.hideDragger(false); + // domainDragger.addMouseEvents(); + // + // } + // else { + // rangeDragger.hideDragger(true); + // domainDragger.hideDragger(true); + // if (clickedProperty.domain()===clickedProperty.range()){ + // clickedProperty.labelObject().increasedLoopAngle=false; + // recalculatePositions(); + // + // } + // } + // } + }); + labelGroupElements.selectAll(".label").on("dblclick", function ( clickedProperty ){ + d3.event.stopPropagation(); + if ( editMode === true ) { + clickedProperty.raiseDoubleClickEdit(defaultIriValue(clickedProperty)); + } + + }); + } + + function defaultIriValue( element ){ + // get the iri of that element; + if ( graph.options().getGeneralMetaObject().iri ) { + var str2Compare = graph.options().getGeneralMetaObject().iri + element.id(); + return element.iri() === str2Compare; + } + return false; + } + + /** Adjusts the containers current scale and position. */ + function zoomed(){ + if ( forceNotZooming === true ) { + zoom.translate(graphTranslation); + zoom.scale(zoomFactor); + return; + } + + + var zoomEventByMWheel = false; + if ( d3.event.sourceEvent ) { + if ( d3.event.sourceEvent.deltaY ) zoomEventByMWheel = true; + } + if ( zoomEventByMWheel === false ) { + if ( transformAnimation === true ) { + return; + } + zoomFactor = d3.event.scale; + graphTranslation = d3.event.translate; + graphContainer.attr("transform", "translate(" + graphTranslation + ")scale(" + zoomFactor + ")"); + updateHaloRadius(); + graph.options().zoomSlider().updateZoomSliderValue(zoomFactor); + return; + } + /** animate the transition **/ + zoomFactor = d3.event.scale; + graphTranslation = d3.event.translate; + graphContainer.transition() + .tween("attr.translate", function (){ + return function ( t ){ + transformAnimation = true; + var tr = d3.transform(graphContainer.attr("transform")); + graphTranslation[0] = tr.translate[0]; + graphTranslation[1] = tr.translate[1]; + zoomFactor = tr.scale[0]; + updateHaloRadius(); + graph.options().zoomSlider().updateZoomSliderValue(zoomFactor); + }; + }) + .each("end", function (){ + transformAnimation = false; + }) + .attr("transform", "translate(" + graphTranslation + ")scale(" + zoomFactor + ")") + .ease('linear') + .duration(250); + }// end of zoomed function + + function redrawGraph(){ + remove(); + + graphContainer = d3.selectAll(options.graphContainerSelector()) + .append("svg") + .classed("vowlGraph", true) + .attr("width", options.width()) + .attr("height", options.height()) + .call(zoom) + .append("g"); + // add touch and double click functions + + var svgGraph = d3.selectAll(".vowlGraph"); + originalD3_dblClickFunction = svgGraph.on("dblclick.zoom"); + originalD3_touchZoomFunction = svgGraph.on("touchstart"); + svgGraph.on("touchstart", touchzoomed); + if ( editMode === true ) { + svgGraph.on("dblclick.zoom", graph.modified_dblClickFunction); + } + else { + svgGraph.on("dblclick.zoom", originalD3_dblClickFunction); + } + + } + + function generateEditElements(){ + addDataPropertyGroupElement = editContainer.append('g') + .classed("hidden-in-export", true) + .classed("hidden", true) + .classed("addDataPropertyElement", true) + .attr("transform", "translate(" + 0 + "," + 0 + ")"); + + + addDataPropertyGroupElement.append("circle") + // .classed("deleteElement", true) + .attr("r", 12) + .attr("cx", 0) + .attr("cy", 0) + .append("title").text("Add Datatype Property"); + + addDataPropertyGroupElement.append("line") + // .classed("deleteElementIcon ",true) + .attr("x1", -8) + .attr("y1", 0) + .attr("x2", 8) + .attr("y2", 0) + .append("title").text("Add Datatype Property"); + + addDataPropertyGroupElement.append("line") + // .classed("deleteElementIcon",true) + .attr("x1", 0) + .attr("y1", -8) + .attr("x2", 0) + .attr("y2", 8) + .append("title").text("Add Datatype Property"); + + if ( graph.options().useAccuracyHelper() ) { + addDataPropertyGroupElement.append("circle") + .attr("r", 15) + .attr("cx", -7) + .attr("cy", 7) + .classed("superHiddenElement", true) + .classed("superOpacityElement", !graph.options().showDraggerObject()); + } + + + deleteGroupElement = editContainer.append('g') + .classed("hidden-in-export", true) + .classed("hidden", true) + .classed("deleteParentElement", true) + .attr("transform", "translate(" + 0 + "," + 0 + ")"); + + deleteGroupElement.append("circle") + .attr("r", 12) + .attr("cx", 0) + .attr("cy", 0) + .append("title").text("Delete This Node"); + + var crossLen = 5; + deleteGroupElement.append("line") + .attr("x1", -crossLen) + .attr("y1", -crossLen) + .attr("x2", crossLen) + .attr("y2", crossLen) + .append("title").text("Delete This Node"); + + deleteGroupElement.append("line") + .attr("x1", crossLen) + .attr("y1", -crossLen) + .attr("x2", -crossLen) + .attr("y2", crossLen) + .append("title").text("Delete This Node"); + + if ( graph.options().useAccuracyHelper() ) { + deleteGroupElement.append("circle") + .attr("r", 15) + .attr("cx", 7) + .attr("cy", -7) + .classed("superHiddenElement", true) + .classed("superOpacityElement", !graph.options().showDraggerObject()); + } + + + } + + graph.getUnfilteredData = function (){ + return unfilteredData; + }; + + graph.getClassDataForTtlExport = function (){ + var allNodes = unfilteredData.nodes; + var nodeData = []; + for ( var i = 0; i < allNodes.length; i++ ) { + if ( allNodes[i].type() !== "rdfs:Literal" && + allNodes[i].type() !== "rdfs:Datatype" && + allNodes[i].type() !== "owl:Thing" ) { + nodeData.push(allNodes[i]); + } + } + return nodeData; + }; + + graph.getPropertyDataForTtlExport = function (){ + var propertyData = []; + var allProperties = unfilteredData.properties; + for ( var i = 0; i < allProperties.length; i++ ) { + // currently using only the object properties + if ( allProperties[i].type() === "owl:ObjectProperty" || + allProperties[i].type() === "owl:DatatypeProperty" || + allProperties[i].type() === "owl:ObjectProperty" + + ) { + propertyData.push(allProperties[i]); + } else { + if ( allProperties[i].type() === "rdfs:subClassOf" ) { + allProperties[i].baseIri("http://www.w3.org/2000/01/rdf-schema#"); + allProperties[i].iri("http://www.w3.org/2000/01/rdf-schema#subClassOf"); + } + if ( allProperties[i].type() === "owl:disjointWith" ) { + allProperties[i].baseIri("http://www.w3.org/2002/07/owl#"); + allProperties[i].iri("http://www.w3.org/2002/07/owl#disjointWith"); + } + } + } + return propertyData; + }; + + graph.getAxiomsForTtlExport = function (){ + var axioms = []; + var allProperties = unfilteredData.properties; + for ( var i = 0; i < allProperties.length; i++ ) { + // currently using only the object properties + if ( allProperties[i].type() === "owl:ObjectProperty" || + allProperties[i].type() === "owl:DatatypeProperty" || + allProperties[i].type() === "owl:ObjectProperty" || + allProperties[i].type() === "rdfs:subClassOf" + ) { + } else { + } + } + return axioms; + }; + + + graph.getUnfilteredData = function (){ + return unfilteredData; + }; + + graph.getClassDataForTtlExport = function (){ + var allNodes = unfilteredData.nodes; + var nodeData = []; + for ( var i = 0; i < allNodes.length; i++ ) { + if ( allNodes[i].type() !== "rdfs:Literal" && + allNodes[i].type() !== "rdfs:Datatype" && + allNodes[i].type() !== "owl:Thing" ) { + nodeData.push(allNodes[i]); + } + } + return nodeData; + }; + + + function redrawContent(){ + var markerContainer; + + if ( !graphContainer ) { + return; + } + + // Empty the graph container + graphContainer.selectAll("*").remove(); + + // Last container -> elements of this container overlap others + linkContainer = graphContainer.append("g").classed("linkContainer", true); + cardinalityContainer = graphContainer.append("g").classed("cardinalityContainer", true); + labelContainer = graphContainer.append("g").classed("labelContainer", true); + nodeContainer = graphContainer.append("g").classed("nodeContainer", true); + + // adding editing Elements + var draggerPathLayer = graphContainer.append("g").classed("linkContainer", true); + draggerLayer = graphContainer.append("g").classed("editContainer", true); + editContainer = graphContainer.append("g").classed("editContainer", true); + + draggerPathLayer.classed("hidden-in-export", true); + editContainer.classed("hidden-in-export", true); + draggerLayer.classed("hidden-in-export", true); + + // Add an extra container for all markers + markerContainer = linkContainer.append("defs"); + var drElement = draggerLayer.selectAll(".node") + .data(draggerObjectsArray).enter() + .append("g") + .classed("node", true) + .classed("hidden-in-export", true) + .attr("id", function ( d ){ + return d.id(); + }) + .call(dragBehaviour); + drElement.each(function ( node ){ + node.svgRoot(d3.select(this)); + node.svgPathLayer(draggerPathLayer); + if ( node.type() === "shadowClone" ) { + node.drawClone(); + node.hideClone(true); + } else { + node.drawNode(); + node.hideDragger(true); + } + }); + generateEditElements(); + + + // Add an extra container for all markers + markerContainer = linkContainer.append("defs"); + + // Draw nodes + + if ( classNodes === undefined ) classNodes = []; + + nodeElements = nodeContainer.selectAll(".node") + .data(classNodes).enter() + .append("g") + .classed("node", true) + .attr("id", function ( d ){ + return d.id(); + }) + .call(dragBehaviour); + nodeElements.each(function ( node ){ + node.draw(d3.select(this)); + }); + + + if ( labelNodes === undefined ) labelNodes = []; + + // Draw label groups (property + inverse) + labelGroupElements = labelContainer.selectAll(".labelGroup") + .data(labelNodes).enter() + .append("g") + .classed("labelGroup", true) + .call(dragBehaviour); + + labelGroupElements.each(function ( label ){ + var success = label.draw(d3.select(this)); + label.property().labelObject(label); + // Remove empty groups without a label. + if ( !success ) { + d3.select(this).remove(); + } + }); + // Place subclass label groups on the bottom of all labels + labelGroupElements.each(function ( label ){ + // the label might be hidden e.g. in compact notation + if ( !this.parentNode ) { + return; + } + + if ( elementTools.isRdfsSubClassOf(label.property()) ) { + var parentNode = this.parentNode; + parentNode.insertBefore(this, parentNode.firstChild); + } + }); + if ( properties === undefined ) properties = []; + // Draw cardinality elements + cardinalityElements = cardinalityContainer.selectAll(".cardinality") + .data(properties).enter() + .append("g") + .classed("cardinality", true); + + cardinalityElements.each(function ( property ){ + var success = property.drawCardinality(d3.select(this)); + + // Remove empty groups without a label. + if ( !success ) { + d3.select(this).remove(); + } + }); + // Draw links + if ( links === undefined ) links = []; + linkGroups = linkContainer.selectAll(".link") + .data(links).enter() + .append("g") + .classed("link", true); + + linkGroups.each(function ( link ){ + link.draw(d3.select(this), markerContainer); + }); + linkPathElements = linkGroups.selectAll("path"); + // Select the path for direct access to receive a better performance + addClickEvents(); + } + + function remove(){ + if ( graphContainer ) { + // Select the parent element because the graph container is a group (e.g. for zooming) + d3.select(graphContainer.node().parentNode).remove(); + } + } + + initializeGraph(); // << call the initialization function + + graph.updateCanvasContainerSize = function (){ + if ( graphContainer ) { + var svgElement = d3.selectAll(".vowlGraph"); + svgElement.attr("width", options.width()); + svgElement.attr("height", options.height()); + graphContainer.attr("transform", "translate(" + graphTranslation + ")scale(" + zoomFactor + ")"); + } + }; + + // Loads all settings, removes the old graph (if it exists) and draws a new one. + graph.start = function (){ + force.stop(); + loadGraphData(true); + redrawGraph(); + graph.update(true); + + if ( graph.options().loadingModule().successfullyLoadedOntology() === false ) { + graph.options().loadingModule().setErrorMode(); + } + + }; + + // Updates only the style of the graph. + graph.updateStyle = function (){ + refreshGraphStyle(); + if ( graph.options().loadingModule().successfullyLoadedOntology() === false ) { + force.stop(); + } else { + force.start(); + } + }; + + graph.reload = function (){ + loadGraphData(); + graph.update(); + + }; + + graph.load = function (){ + force.stop(); + loadGraphData(); + refreshGraphData(); + for ( var i = 0; i < labelNodes.length; i++ ) { + var label = labelNodes[i]; + if ( label.property().x && label.property().y ) { + label.x = label.property().x; + label.y = label.property().y; + // also set the prev position of the label + label.px = label.x; + label.py = label.y; + } + } + graph.update(); + }; + + graph.fastUpdate = function (){ + // fast update function for editor calls; + // -- experimental ; + quick_refreshGraphData(); + updateNodeMap(); + force.start(); + redrawContent(); + graph.updatePulseIds(nodeArrayForPulse); + refreshGraphStyle(); + updateHaloStyles(); + + }; + + graph.getNodeMapForSearch = function (){ + return nodeMap; + }; + function updateNodeMap(){ + nodeMap = []; + var node; + for ( var j = 0; j < force.nodes().length; j++ ) { + node = force.nodes()[j]; + if ( node.id ) { + nodeMap[node.id()] = j; + // check for equivalents + var eqs = node.equivalents(); + if ( eqs.length > 0 ) { + for ( var e = 0; e < eqs.length; e++ ) { + var eqObject = eqs[e]; + nodeMap[eqObject.id()] = j; + } + } + } + if ( node.property ) { + nodeMap[node.property().id()] = j; + var inverse = node.inverse(); + if ( inverse ) { + nodeMap[inverse.id()] = j; + } + } + } + } + + function updateHaloStyles(){ + var haloElement; + var halo; + var node; + for ( var j = 0; j < force.nodes().length; j++ ) { + node = force.nodes()[j]; + if ( node.id ) { + haloElement = node.getHalos(); + if ( haloElement ) { + halo = haloElement.selectAll(".searchResultA"); + halo.classed("searchResultA", false); + halo.classed("searchResultB", true); + } + } + + if ( node.property ) { + haloElement = node.property().getHalos(); + if ( haloElement ) { + halo = haloElement.selectAll(".searchResultA"); + halo.classed("searchResultA", false); + halo.classed("searchResultB", true); + } + } + } + } + + // Updates the graphs displayed data and style. + graph.update = function ( init ){ + var validOntology = graph.options().loadingModule().successfullyLoadedOntology(); + if ( validOntology === false && (init && init === true) ) { + graph.options().loadingModule().collapseDetails(); + return; + } + if ( validOntology === false ) { + return; + } + + keepDetailsCollapsedOnLoading = false; + refreshGraphData(); + // update node map + updateNodeMap(); + + force.start(); + redrawContent(); + graph.updatePulseIds(nodeArrayForPulse); + refreshGraphStyle(); + updateHaloStyles(); + }; + + graph.paused = function ( p ){ + if ( !arguments.length ) return paused; + paused = p; + graph.updateStyle(); + return graph; + }; + // resetting the graph + graph.reset = function (){ + // window size + var w = 0.5 * graph.options().width(); + var h = 0.5 * graph.options().height(); + // computing initial translation for the graph due tue the dynamic default zoom level + var tx = w - defaultZoom * w; + var ty = h - defaultZoom * h; + zoom.translate([tx, ty]) + .scale(defaultZoom); + }; + + + graph.zoomOut = function (){ + + var minMag = options.minMagnification(), + maxMag = options.maxMagnification(); + var stepSize = (maxMag - minMag) / 10; + var val = zoomFactor - stepSize; + if ( val < minMag ) val = minMag; + + var cx = 0.5 * graph.options().width(); + var cy = 0.5 * graph.options().height(); + var cp = getWorldPosFromScreen(cx, cy, graphTranslation, zoomFactor); + var sP = [cp.x, cp.y, graph.options().height() / zoomFactor]; + var eP = [cp.x, cp.y, graph.options().height() / val]; + var pos_intp = d3.interpolateZoom(sP, eP); + + graphContainer.attr("transform", transform(sP, cx, cy)) + .transition() + .duration(250) + .attrTween("transform", function (){ + return function ( t ){ + return transform(pos_intp(t), cx, cy); + }; + }) + .each("end", function (){ + graphContainer.attr("transform", "translate(" + graphTranslation + ")scale(" + zoomFactor + ")"); + zoom.translate(graphTranslation); + zoom.scale(zoomFactor); + updateHaloRadius(); + options.zoomSlider().updateZoomSliderValue(zoomFactor); + }); + + }; + + graph.zoomIn = function (){ + var minMag = options.minMagnification(), + maxMag = options.maxMagnification(); + var stepSize = (maxMag - minMag) / 10; + var val = zoomFactor + stepSize; + if ( val > maxMag ) val = maxMag; + var cx = 0.5 * graph.options().width(); + var cy = 0.5 * graph.options().height(); + var cp = getWorldPosFromScreen(cx, cy, graphTranslation, zoomFactor); + var sP = [cp.x, cp.y, graph.options().height() / zoomFactor]; + var eP = [cp.x, cp.y, graph.options().height() / val]; + var pos_intp = d3.interpolateZoom(sP, eP); + + graphContainer.attr("transform", transform(sP, cx, cy)) + .transition() + .duration(250) + .attrTween("transform", function (){ + return function ( t ){ + return transform(pos_intp(t), cx, cy); + }; + }) + .each("end", function (){ + graphContainer.attr("transform", "translate(" + graphTranslation + ")scale(" + zoomFactor + ")"); + zoom.translate(graphTranslation); + zoom.scale(zoomFactor); + updateHaloRadius(); + options.zoomSlider().updateZoomSliderValue(zoomFactor); + }); + + + }; + + /** --------------------------------------------------------- **/ + /** -- data related handling -- **/ + /** --------------------------------------------------------- **/ + + var cachedJsonOBJ = null; + graph.clearAllGraphData = function (){ + if ( graph.graphNodeElements() && graph.graphNodeElements().length > 0 ) { + cachedJsonOBJ = graph.options().exportMenu().createJSON_exportObject(); + } else { + cachedJsonOBJ = null; + } + force.stop(); + if ( unfilteredData ) { + unfilteredData.nodes = []; + unfilteredData.properties = []; + } + }; + graph.getCachedJsonObj = function (){ + return cachedJsonOBJ; + }; + + // removes data when data could not be loaded + graph.clearGraphData = function (){ + force.stop(); + var sidebar = graph.options().sidebar(); + if ( sidebar ) + sidebar.clearOntologyInformation(); + if ( graphContainer ) + redrawGraph(); + }; + + function generateDictionary( data ){ + var i; + var originalDictionary = []; + var nodes = data.nodes; + for ( i = 0; i < nodes.length; i++ ) { + // check if node has a label + if ( nodes[i].labelForCurrentLanguage() !== undefined ) + originalDictionary.push(nodes[i]); + } + var props = data.properties; + for ( i = 0; i < props.length; i++ ) { + if ( props[i].labelForCurrentLanguage() !== undefined ) + originalDictionary.push(props[i]); + } + parser.setDictionary(originalDictionary); + + var literFilter = graph.options().literalFilter(); + var idsToRemove = literFilter.removedNodes(); + var originalDict = parser.getDictionary(); + var newDict = []; + + // go through the dictionary and remove the ids; + for ( i = 0; i < originalDict.length; i++ ) { + var dictElement = originalDict[i]; + var dictElementId; + if ( dictElement.property ) + dictElementId = dictElement.property().id(); + else + dictElementId = dictElement.id(); + // compare against the removed ids; + var addToDictionary = true; + for ( var j = 0; j < idsToRemove.length; j++ ) { + var currentId = idsToRemove[j]; + if ( currentId === dictElementId ) { + addToDictionary = false; + } + } + if ( addToDictionary === true ) { + newDict.push(dictElement); + } + } + // tell the parser that the dictionary is updated + parser.setDictionary(newDict); + + } + + graph.updateProgressBarMode = function (){ + var loadingModule = graph.options().loadingModule(); + + var state = loadingModule.getProgressBarMode(); + switch ( state ) { + case 0: + loadingModule.setErrorMode(); + break; + case 1: + loadingModule.setBusyMode(); + break; + case 2: + loadingModule.setPercentMode(); + break; + default: + loadingModule.setPercentMode(); + } + }; + + graph.setFilterWarning = function ( val ){ + showFilterWarning = val; + }; + function loadGraphData( init ){ + // reset the locate button and previously selected locations and other variables + + var loadingModule = graph.options().loadingModule(); + force.stop(); + + force.nodes([]); + force.links([]); + nodeArrayForPulse = []; + pulseNodeIds = []; + locationId = 0; + d3.select("#locateSearchResult").classed("highlighted", false); + d3.select("#locateSearchResult").node().title = "Nothing to locate"; + graph.clearGraphData(); + + if ( init ) { + force.stop(); + return; + } + + showFilterWarning = false; + parser.parse(options.data()); + unfilteredData = { + nodes: parser.nodes(), + properties: parser.properties() + }; + // fixing class and property id counter for the editor + eN = unfilteredData.nodes.length + 1; + eP = unfilteredData.properties.length + 1; + + initialLoad = true; + graph.options().warningModule().closeFilterHint(); + + // loading handler + updateRenderingDuringSimulation = true; + var validOntology = graph.options().loadingModule().successfullyLoadedOntology(); + if ( graphContainer && validOntology === true ) { + + updateRenderingDuringSimulation = false; + graph.options().ontologyMenu().append_bulletPoint("Generating visualization ... "); + loadingModule.setPercentMode(); + + if ( unfilteredData.nodes.length > 0 ) { + graphContainer.style("opacity", "0"); + force.on("tick", hiddenRecalculatePositions); + } else { + graphContainer.style("opacity", "1"); + if ( showFPS === true ) { + force.on("tick", recalculatePositionsWithFPS); + } + else { + force.on("tick", recalculatePositions); + } + } + + force.start(); + } else { + force.stop(); + graph.options().ontologyMenu().append_bulletPoint("Failed to load ontology"); + loadingModule.setErrorMode(); + } + // update prefixList( + // update general MetaOBJECT + graph.options().clearMetaObject(); + graph.options().clearGeneralMetaObject(); + graph.options().editSidebar().clearMetaObjectValue(); + if ( options.data() !== undefined ) { + var header = options.data().header; + if ( header ) { + if ( header.iri ) { + graph.options().addOrUpdateGeneralObjectEntry("iri", header.iri); + } + if ( header.title ) { + graph.options().addOrUpdateGeneralObjectEntry("title", header.title); + } + if ( header.author ) { + graph.options().addOrUpdateGeneralObjectEntry("author", header.author); + } + if ( header.version ) { + graph.options().addOrUpdateGeneralObjectEntry("version", header.version); + } + if ( header.description ) { + graph.options().addOrUpdateGeneralObjectEntry("description", header.description); + } + if ( header.prefixList ) { + var pL = header.prefixList; + for ( var pr in pL ) { + if ( pL.hasOwnProperty(pr) ) { + var val = pL[pr]; + graph.options().addPrefix(pr, val); + } + } + } + // get other metadata; + if ( header.other ) { + var otherObjects = header.other; + for ( var name in otherObjects ) { + if ( otherObjects.hasOwnProperty(name) ) { + var otherObj = otherObjects[name]; + if ( otherObj.hasOwnProperty("identifier") && otherObj.hasOwnProperty("value") ) { + graph.options().addOrUpdateMetaObjectEntry(otherObj.identfier, otherObj.value); + } + } + } + } + } + } + // update more meta OBJECT + // Initialize filters with data to replicate consecutive filtering + var initializationData = _.clone(unfilteredData); + options.filterModules().forEach(function ( module ){ + initializationData = filterFunction(module, initializationData, true); + }); + // generate dictionary here ; + generateDictionary(unfilteredData); + + parser.parseSettings(); + graphUpdateRequired = parser.settingsImported(); + centerGraphViewOnLoad = true; + if ( parser.settingsImportGraphZoomAndTranslation() === true ) { + centerGraphViewOnLoad = false; + } + graph.options().searchMenu().requestDictionaryUpdate(); + graph.options().editSidebar().updateGeneralOntologyInfo(); + graph.options().editSidebar().updatePrefixUi(); + graph.options().editSidebar().updateElementWidth(); + } + + graph.handleOnLoadingError = function (){ + force.stop(); + graph.clearGraphData(); + graph.options().ontologyMenu().append_bulletPoint("Failed to load ontology"); + d3.select("#progressBarValue").node().innherHTML = ""; + d3.select("#progressBarValue").classed("busyProgressBar", false); + graph.options().loadingModule().setErrorMode(); + graph.options().loadingModule().showErrorDetailsMessage(); + }; + + function quick_refreshGraphData(){ + links = linkCreator.createLinks(properties); + labelNodes = links.map(function ( link ){ + return link.label(); + }); + + storeLinksOnNodes(classNodes, links); + setForceLayoutData(classNodes, labelNodes, links); + } + + //Applies the data of the graph options object and parses it. The graph is not redrawn. + function refreshGraphData(){ + var shouldExecuteEmptyFilter = options.literalFilter().enabled(); + graph.executeEmptyLiteralFilter(); + options.literalFilter().enabled(shouldExecuteEmptyFilter); + + var preprocessedData = _.clone(unfilteredData); + + // Filter the data + options.filterModules().forEach(function ( module ){ + preprocessedData = filterFunction(module, preprocessedData); + }); + options.focuserModule().handle(undefined, true); + classNodes = preprocessedData.nodes; + properties = preprocessedData.properties; + links = linkCreator.createLinks(properties); + labelNodes = links.map(function ( link ){ + return link.label(); + }); + storeLinksOnNodes(classNodes, links); + setForceLayoutData(classNodes, labelNodes, links); + // for (var i = 0; i < classNodes.length; i++) { + // if (classNodes[i].setRectangularRepresentation) + // classNodes[i].setRectangularRepresentation(graph.options().rectangularRepresentation()); + // } + } + + function filterFunction( module, data, initializing ){ + links = linkCreator.createLinks(data.properties); + storeLinksOnNodes(data.nodes, links); + + if ( initializing ) { + if ( module.initialize ) { + module.initialize(data.nodes, data.properties); + } + } + module.filter(data.nodes, data.properties); + return { + nodes: module.filteredNodes(), + properties: module.filteredProperties() + }; + } + + + /** --------------------------------------------------------- **/ + /** -- force-layout related functions -- **/ + /** --------------------------------------------------------- **/ + function storeLinksOnNodes( nodes, links ){ + for ( var i = 0, nodesLength = nodes.length; i < nodesLength; i++ ) { + var node = nodes[i], + connectedLinks = []; + + // look for properties where this node is the domain or range + for ( var j = 0, linksLength = links.length; j < linksLength; j++ ) { + var link = links[j]; + + if ( link.domain() === node || link.range() === node ) { + connectedLinks.push(link); + } + } + node.links(connectedLinks); + } + } + + function setForceLayoutData( classNodes, labelNodes, links ){ + var d3Links = []; + links.forEach(function ( link ){ + d3Links = d3Links.concat(link.linkParts()); + }); + + var d3Nodes = [].concat(classNodes).concat(labelNodes); + setPositionOfOldLabelsOnNewLabels(force.nodes(), labelNodes); + + force.nodes(d3Nodes) + .links(d3Links); + } + + // The label nodes are positioned randomly, because they are created from scratch if the data changes and lose + // their position information. With this hack the position of old labels is copied to the new labels. + function setPositionOfOldLabelsOnNewLabels( oldLabelNodes, labelNodes ){ + labelNodes.forEach(function ( labelNode ){ + for ( var i = 0; i < oldLabelNodes.length; i++ ) { + var oldNode = oldLabelNodes[i]; + if ( oldNode.equals(labelNode) ) { + labelNode.x = oldNode.x; + labelNode.y = oldNode.y; + labelNode.px = oldNode.px; + labelNode.py = oldNode.py; + break; + } + } + }); + } + + // Applies all options that don't change the graph data. + function refreshGraphStyle(){ + zoom = zoom.scaleExtent([options.minMagnification(), options.maxMagnification()]); + if ( graphContainer ) { + zoom.event(graphContainer); + } + + force.charge(function ( element ){ + var charge = options.charge(); + if ( elementTools.isLabel(element) ) { + charge *= 0.8; + } + return charge; + }) + .size([options.width(), options.height()]) + .linkDistance(calculateLinkPartDistance) + .gravity(options.gravity()) + .linkStrength(options.linkStrength()); // Flexibility of links + + force.nodes().forEach(function ( n ){ + n.frozen(paused); + }); + } + + function calculateLinkPartDistance( linkPart ){ + var link = linkPart.link(); + + if ( link.isLoop() ) { + return options.loopDistance(); + } + + // divide by 2 to receive the length for a single link part + var linkPartDistance = getVisibleLinkDistance(link) / 2; + linkPartDistance += linkPart.domain().actualRadius(); + linkPartDistance += linkPart.range().actualRadius(); + return linkPartDistance; + } + + function getVisibleLinkDistance( link ){ + if ( elementTools.isDatatype(link.domain()) || elementTools.isDatatype(link.range()) ) { + return options.datatypeDistance(); + } else { + return options.classDistance(); + } + } + + /** --------------------------------------------------------- **/ + /** -- animation functions for the nodes -- **/ + /** --------------------------------------------------------- **/ + + graph.animateDynamicLabelWidth = function (){ + var wantedWidth = options.dynamicLabelWidth(); + var i; + for ( i = 0; i < classNodes.length; i++ ) { + var nodeElement = classNodes[i]; + if ( elementTools.isDatatype(nodeElement) ) { + nodeElement.animateDynamicLabelWidth(wantedWidth); + } + } + for ( i = 0; i < properties.length; i++ ) { + properties[i].animateDynamicLabelWidth(wantedWidth); + } + }; + + + /** --------------------------------------------------------- **/ + /** -- halo and localization functions -- **/ + /** --------------------------------------------------------- **/ + function updateHaloRadius(){ + if ( pulseNodeIds && pulseNodeIds.length > 0 ) { + var forceNodes = force.nodes(); + for ( var i = 0; i < pulseNodeIds.length; i++ ) { + var node = forceNodes[pulseNodeIds[i]]; + if ( node ) { + if ( node.property ) { + // match search strings with property label + if ( node.property().inverse ) { + var searchString = graph.options().searchMenu().getSearchString().toLowerCase(); + var name = node.property().labelForCurrentLanguage().toLowerCase(); + if ( name === searchString ) computeDistanceToCenter(node); + else { + node.property().removeHalo(); + if ( node.property().inverse() ) { + if ( !node.property().inverse().getHalos() ) + node.property().inverse().drawHalo(); + computeDistanceToCenter(node, true); + } + if ( node.property().equivalents() ) { + var eq = node.property().equivalents(); + for ( var e = 0; e < eq.length; e++ ) { + if ( !eq[e].getHalos() ) + eq[e].drawHalo(); + } + if ( !node.property().getHalos() ) + node.property().drawHalo(); + computeDistanceToCenter(node, false); + + } + } + } + } + computeDistanceToCenter(node); + } + } + } + } + + function getScreenCoords( x, y, translate, scale ){ + var xn = translate[0] + x * scale; + var yn = translate[1] + y * scale; + return { x: xn, y: yn }; + } + + function getClickedScreenCoords( x, y, translate, scale ){ + var xn = (x - translate[0]) / scale; + var yn = (y - translate[1]) / scale; + return { x: xn, y: yn }; + } + + + function computeDistanceToCenter( node, inverse ){ + var container = node; + var w = graph.options().width(); + var h = graph.options().height(); + var posXY = getScreenCoords(node.x, node.y, graphTranslation, zoomFactor); + + var highlightOfInv = false; + + if ( inverse && inverse === true ) { + highlightOfInv = true; + posXY = getScreenCoords(node.x, node.y + 20, graphTranslation, zoomFactor); + } + var x = posXY.x; + var y = posXY.y; + var nodeIsRect = false; + var halo; + var roundHalo; + var rectHalo; + var borderPoint_x = 0; + var borderPoint_y = 0; + var defaultRadius; + var offset = 15; + var radius; + + if ( node.property && highlightOfInv === true ) { + if ( node.property().inverse() ) { + rectHalo = node.property().inverse().getHalos().select("rect"); + + } else { + if ( node.property().getHalos() ) + rectHalo = node.property().getHalos().select("rect"); + else { + node.property().drawHalo(); + rectHalo = node.property().getHalos().select("rect"); + } + } + rectHalo.classed("hidden", true); + if ( node.property().inverse() ) { + if ( node.property().inverse().getHalos() ) { + roundHalo = node.property().inverse().getHalos().select("circle"); + } + } else { + roundHalo = node.property().getHalos().select("circle"); + } + if ( roundHalo.node() === null ) { + radius = node.property().inverse().width() + 15; + + roundHalo = node.property().inverse().getHalos().append("circle") + .classed("searchResultB", true) + .classed("searchResultA", false) + .attr("r", radius + 15); + + } + halo = roundHalo; // swap the halo to be round + nodeIsRect = true; + container = node.property().inverse(); + } + + if ( node.id ) { + if ( !node.getHalos() ) return; // something went wrong before + halo = node.getHalos().select("rect"); + if ( halo.node() === null ) { + // this is a round node + nodeIsRect = false; + roundHalo = node.getHalos().select("circle"); + defaultRadius = node.actualRadius(); + roundHalo.attr("r", defaultRadius + offset); + halo = roundHalo; + } else { // this is a rect node + nodeIsRect = true; + rectHalo = node.getHalos().select("rect"); + rectHalo.classed("hidden", true); + roundHalo = node.getHalos().select("circle"); + if ( roundHalo.node() === null ) { + radius = node.width(); + roundHalo = node.getHalos().append("circle") + .classed("searchResultB", true) + .classed("searchResultA", false) + .attr("r", radius + offset); + } + halo = roundHalo; + } + } + if ( node.property && !inverse ) { + if ( !node.property().getHalos() ) return; // something went wrong before + rectHalo = node.property().getHalos().select("rect"); + rectHalo.classed("hidden", true); + + roundHalo = node.property().getHalos().select("circle"); + if ( roundHalo.node() === null ) { + radius = node.property().width(); + + roundHalo = node.property().getHalos().append("circle") + .classed("searchResultB", true) + .classed("searchResultA", false) + .attr("r", radius + 15); + + } + halo = roundHalo; // swap the halo to be round + nodeIsRect = true; + container = node.property(); + } + + if ( x < 0 || x > w || y < 0 || y > h ) { + // node outside viewport; + // check for quadrant and get the correct boarder point (intersection with viewport) + if ( x < 0 && y < 0 ) { + borderPoint_x = 0; + borderPoint_y = 0; + } else if ( x > 0 && x < w && y < 0 ) { + borderPoint_x = x; + borderPoint_y = 0; + } else if ( x > w && y < 0 ) { + borderPoint_x = w; + borderPoint_y = 0; + } else if ( x > w && y > 0 && y < h ) { + borderPoint_x = w; + borderPoint_y = y; + } else if ( x > w && y > h ) { + borderPoint_x = w; + borderPoint_y = h; + } else if ( x > 0 && x < w && y > h ) { + borderPoint_x = x; + borderPoint_y = h; + } else if ( x < 0 && y > h ) { + borderPoint_x = 0; + borderPoint_y = h; + } else if ( x < 0 && y > 0 && y < h ) { + borderPoint_x = 0; + borderPoint_y = y; + } + // kill all pulses of nodes that are outside the viewport + container.getHalos().select("rect").classed("searchResultA", false); + container.getHalos().select("circle").classed("searchResultA", false); + container.getHalos().select("rect").classed("searchResultB", true); + container.getHalos().select("circle").classed("searchResultB", true); + halo.classed("hidden", false); + // compute in pixel coordinates length of difference vector + var borderRadius_x = borderPoint_x - x; + var borderRadius_y = borderPoint_y - y; + + var len = borderRadius_x * borderRadius_x + borderRadius_y * borderRadius_y; + len = Math.sqrt(len); + + var normedX = borderRadius_x / len; + var normedY = borderRadius_y / len; + + len = len + 20; // add 20 px; + + // re-normalized vector + var newVectorX = normedX * len + x; + var newVectorY = normedY * len + y; + // compute world coordinates of this point + var wX = (newVectorX - graphTranslation[0]) / zoomFactor; + var wY = (newVectorY - graphTranslation[1]) / zoomFactor; + + // compute distance in world coordinates + var dx = wX - node.x; + var dy = wY - node.y; + if ( highlightOfInv === true ) + dy = wY - node.y - 20; + + if ( highlightOfInv === false && node.property && node.property().inverse() ) + dy = wY - node.y + 20; + + var newRadius = Math.sqrt(dx * dx + dy * dy); + halo = container.getHalos().select("circle"); + // sanity checks and setting new halo radius + if ( !nodeIsRect ) { + defaultRadius = node.actualRadius() + offset; + if ( newRadius < defaultRadius ) { + newRadius = defaultRadius; + } + halo.attr("r", newRadius); + } else { + defaultRadius = 0.5 * container.width(); + if ( newRadius < defaultRadius ) + newRadius = defaultRadius; + halo.attr("r", newRadius); + } + } else { // node is in viewport , render original; + // reset the halo to original radius + defaultRadius = node.actualRadius() + 15; + if ( !nodeIsRect ) { + halo.attr("r", defaultRadius); + } else { // this is rectangular node render as such + halo = container.getHalos().select("rect"); + halo.classed("hidden", false); + //halo.classed("searchResultB", true); + //halo.classed("searchResultA", false); + var aCircHalo = container.getHalos().select("circle"); + aCircHalo.classed("hidden", true); + + container.getHalos().select("rect").classed("hidden", false); + container.getHalos().select("circle").classed("hidden", true); + } + } + } + + function transform( p, cx, cy ){ + // one iteration step for the locate target animation + zoomFactor = graph.options().height() / p[2]; + graphTranslation = [(cx - p[0] * zoomFactor), (cy - p[1] * zoomFactor)]; + updateHaloRadius(); + // update the values in case the user wants to break the animation + zoom.translate(graphTranslation); + zoom.scale(zoomFactor); + graph.options().zoomSlider().updateZoomSliderValue(zoomFactor); + return "translate(" + graphTranslation[0] + "," + graphTranslation[1] + ")scale(" + zoomFactor + ")"; + } + + graph.zoomToElementInGraph = function ( element ){ + targetLocationZoom(element); + }; + graph.updateHaloRadius = function ( element ){ + computeDistanceToCenter(element); + }; + + function targetLocationZoom( target ){ + // store the original information + var cx = 0.5 * graph.options().width(); + var cy = 0.5 * graph.options().height(); + var cp = getWorldPosFromScreen(cx, cy, graphTranslation, zoomFactor); + var sP = [cp.x, cp.y, graph.options().height() / zoomFactor]; + + var zoomLevel = Math.max(defaultZoom + 0.5 * defaultZoom, defaultTargetZoom); + var eP = [target.x, target.y, graph.options().height() / zoomLevel]; + var pos_intp = d3.interpolateZoom(sP, eP); + + var lenAnimation = pos_intp.duration; + if ( lenAnimation > 2500 ) { + lenAnimation = 2500; + } + + graphContainer.attr("transform", transform(sP, cx, cy)) + .transition() + .duration(lenAnimation) + .attrTween("transform", function (){ + return function ( t ){ + return transform(pos_intp(t), cx, cy); + }; + }) + .each("end", function (){ + graphContainer.attr("transform", "translate(" + graphTranslation + ")scale(" + zoomFactor + ")"); + zoom.translate(graphTranslation); + zoom.scale(zoomFactor); + updateHaloRadius(); + }); + } + + function getWorldPosFromScreen( x, y, translate, scale ){ + var temp = scale[0], xn, yn; + if ( temp ) { + xn = (x - translate[0]) / temp; + yn = (y - translate[1]) / temp; + } else { + xn = (x - translate[0]) / scale; + yn = (y - translate[1]) / scale; + } + return { x: xn, y: yn }; + } + + graph.locateSearchResult = function (){ + if ( pulseNodeIds && pulseNodeIds.length > 0 ) { + // move the center of the viewport to this location + if ( transformAnimation === true ) return; // << prevents incrementing the location id if we are in an animation + var node = force.nodes()[pulseNodeIds[locationId]]; + locationId++; + locationId = locationId % pulseNodeIds.length; + if ( node.id ) node.foreground(); + if ( node.property ) node.property().foreground(); + + targetLocationZoom(node); + } + }; + + graph.resetSearchHighlight = function (){ + // get all nodes (handle also already filtered nodes ) + pulseNodeIds = []; + nodeArrayForPulse = []; + // clear from stored nodes + var nodes = unfilteredData.nodes; + var props = unfilteredData.properties; + var j; + for ( j = 0; j < nodes.length; j++ ) { + var node = nodes[j]; + if ( node.removeHalo ) + node.removeHalo(); + } + for ( j = 0; j < props.length; j++ ) { + var prop = props[j]; + if ( prop.removeHalo ) + prop.removeHalo(); + } + }; + + graph.updatePulseIds = function ( nodeIdArray ){ + pulseNodeIds = []; + for ( var i = 0; i < nodeIdArray.length; i++ ) { + var selectedId = nodeIdArray[i]; + var forceId = nodeMap[selectedId]; + if ( forceId !== undefined ) { + var le_node = force.nodes()[forceId]; + if ( le_node.id ) { + if ( pulseNodeIds.indexOf(forceId) === -1 ) { + pulseNodeIds.push(forceId); + } + } + if ( le_node.property ) { + if ( pulseNodeIds.indexOf(forceId) === -1 ) { + pulseNodeIds.push(forceId); + } + } + } + } + locationId = 0; + if ( pulseNodeIds.length > 0 ) { + d3.select("#locateSearchResult").classed("highlighted", true); + d3.select("#locateSearchResult").node().title = "Locate search term"; + } + else { + d3.select("#locateSearchResult").classed("highlighted", false); + d3.select("#locateSearchResult").node().title = "Nothing to locate"; + } + + }; + + graph.highLightNodes = function ( nodeIdArray ){ + if ( nodeIdArray.length === 0 ) { + return; // nothing to highlight + } + pulseNodeIds = []; + nodeArrayForPulse = nodeIdArray; + var missedIds = []; + + // identify the force id to highlight + for ( var i = 0; i < nodeIdArray.length; i++ ) { + var selectedId = nodeIdArray[i]; + var forceId = nodeMap[selectedId]; + if ( forceId !== undefined ) { + var le_node = force.nodes()[forceId]; + if ( le_node.id ) { + if ( pulseNodeIds.indexOf(forceId) === -1 ) { + pulseNodeIds.push(forceId); + le_node.foreground(); + le_node.drawHalo(); + } + } + if ( le_node.property ) { + if ( pulseNodeIds.indexOf(forceId) === -1 ) { + pulseNodeIds.push(forceId); + le_node.property().foreground(); + le_node.property().drawHalo(); + } + } + } + else { + missedIds.push(selectedId); + } + } + + if ( missedIds.length === nodeIdArray.length ) { + + } + // store the highlight on the missed nodes; + var s_nodes = unfilteredData.nodes; + var s_props = unfilteredData.properties; + for ( i = 0; i < missedIds.length; i++ ) { + var missedId = missedIds[i]; + // search for this in the nodes; + for ( var n = 0; n < s_nodes.length; n++ ) { + var nodeId = s_nodes[n].id(); + if ( nodeId === missedId ) { + s_nodes[n].drawHalo(); + } + } + for ( var p = 0; p < s_props.length; p++ ) { + var propId = s_props[p].id(); + if ( propId === missedId ) { + s_props[p].drawHalo(); + } + } + } + if ( missedIds.length === nodeIdArray.length ) { + d3.select("#locateSearchResult").classed("highlighted", false); + } + else { + d3.select("#locateSearchResult").classed("highlighted", true); + } + locationId = 0; + updateHaloRadius(); + }; + + graph.hideHalos = function (){ + var haloElements = d3.selectAll(".searchResultA,.searchResultB"); + haloElements.classed("hidden", true); + return haloElements; + }; + + function nodeInViewport( node, property ){ + + var w = graph.options().width(); + var h = graph.options().height(); + var posXY = getScreenCoords(node.x, node.y, graphTranslation, zoomFactor); + var x = posXY.x; + var y = posXY.y; + + var retVal = !(x < 0 || x > w || y < 0 || y > h); + return retVal; + } + + graph.getBoundingBoxForTex = function (){ + var halos = graph.hideHalos(); + var bbox = graphContainer.node().getBoundingClientRect(); + halos.classed("hidden", false); + var w = graph.options().width(); + var h = graph.options().height(); + + // get the graph coordinates + var topLeft = getWorldPosFromScreen(0, 0, graphTranslation, zoomFactor); + var botRight = getWorldPosFromScreen(w, h, graphTranslation, zoomFactor); + + + var t_topLeft = getWorldPosFromScreen(bbox.left, bbox.top, graphTranslation, zoomFactor); + var t_botRight = getWorldPosFromScreen(bbox.right, bbox.bottom, graphTranslation, zoomFactor); + + // tighten up the bounding box; + + var tX = Math.max(t_topLeft.x, topLeft.x); + var tY = Math.max(t_topLeft.y, topLeft.y); + + var bX = Math.min(t_botRight.x, botRight.x); + var bY = Math.min(t_botRight.y, botRight.y); + + + // tighten further; + var allForceNodes = force.nodes(); + var numNodes = allForceNodes.length; + var visibleNodes = []; + var bbx; + + + var contentBBox = { tx: 1000000000000, ty: 1000000000000, bx: -1000000000000, by: -1000000000000 }; + + for ( var i = 0; i < numNodes; i++ ) { + var node = allForceNodes[i]; + if ( node ) { + if ( node.property ) { + if ( nodeInViewport(node, true) ) { + if ( node.property().labelElement() === undefined ) continue; + bbx = node.property().labelElement().node().getBoundingClientRect(); + if ( bbx ) { + contentBBox.tx = Math.min(contentBBox.tx, bbx.left); + contentBBox.bx = Math.max(contentBBox.bx, bbx.right); + contentBBox.ty = Math.min(contentBBox.ty, bbx.top); + contentBBox.by = Math.max(contentBBox.by, bbx.bottom); + } + } + } else { + if ( nodeInViewport(node, false) ) { + bbx = node.nodeElement().node().getBoundingClientRect(); + if ( bbx ) { + contentBBox.tx = Math.min(contentBBox.tx, bbx.left); + contentBBox.bx = Math.max(contentBBox.bx, bbx.right); + contentBBox.ty = Math.min(contentBBox.ty, bbx.top); + contentBBox.by = Math.max(contentBBox.by, bbx.bottom); + } + } + } + } + } + + var tt_topLeft = getWorldPosFromScreen(contentBBox.tx, contentBBox.ty, graphTranslation, zoomFactor); + var tt_botRight = getWorldPosFromScreen(contentBBox.bx, contentBBox.by, graphTranslation, zoomFactor); + + tX = Math.max(tX, tt_topLeft.x); + tY = Math.max(tY, tt_topLeft.y); + + bX = Math.min(bX, tt_botRight.x); + bY = Math.min(bY, tt_botRight.y); + // y axis flip for tex + return [tX, -tY, bX, -bY]; + + }; + + var updateTargetElement = function (){ + var bbox = graphContainer.node().getBoundingClientRect(); + + + // get the graph coordinates + var bboxOffset = 50; // default radius of a node; + var topLeft = getWorldPosFromScreen(bbox.left, bbox.top, graphTranslation, zoomFactor); + var botRight = getWorldPosFromScreen(bbox.right, bbox.bottom, graphTranslation, zoomFactor); + + var w = graph.options().width(); + if ( graph.options().leftSidebar().isSidebarVisible() === true ) + w -= 200; + var h = graph.options().height(); + topLeft.x += bboxOffset; + topLeft.y -= bboxOffset; + botRight.x -= bboxOffset; + botRight.y += bboxOffset; + + var g_w = botRight.x - topLeft.x; + var g_h = botRight.y - topLeft.y; + + // endpoint position calculations + var posX = 0.5 * (topLeft.x + botRight.x); + var posY = 0.5 * (topLeft.y + botRight.y); + var cx = 0.5 * w, + cy = 0.5 * h; + + if ( graph.options().leftSidebar().isSidebarVisible() === true ) + cx += 200; + var cp = getWorldPosFromScreen(cx, cy, graphTranslation, zoomFactor); + + // zoom factor calculations and fail safes; + var newZoomFactor = 1.0; // fail save if graph and window are squares + //get the smaller one + var a = w / g_w; + var b = h / g_h; + if ( a < b ) newZoomFactor = a; + else newZoomFactor = b; + + + // fail saves + if ( newZoomFactor > zoom.scaleExtent()[1] ) { + newZoomFactor = zoom.scaleExtent()[1]; + } + if ( newZoomFactor < zoom.scaleExtent()[0] ) { + newZoomFactor = zoom.scaleExtent()[0]; + } + + // apply Zooming + var sP = [cp.x, cp.y, h / zoomFactor]; + var eP = [posX, posY, h / newZoomFactor]; + + + var pos_intp = d3.interpolateZoom(sP, eP); + return [pos_intp, cx, cy]; + + }; + + graph.forceRelocationEvent = function ( dynamic ){ + // we need to kill the halo to determine the bounding box; + var halos = graph.hideHalos(); + var bbox = graphContainer.node().getBoundingClientRect(); + halos.classed("hidden", false); + + // get the graph coordinates + var bboxOffset = 50; // default radius of a node; + var topLeft = getWorldPosFromScreen(bbox.left, bbox.top, graphTranslation, zoomFactor); + var botRight = getWorldPosFromScreen(bbox.right, bbox.bottom, graphTranslation, zoomFactor); + + var w = graph.options().width(); + if ( graph.options().leftSidebar().isSidebarVisible() === true ) + w -= 200; + var h = graph.options().height(); + topLeft.x += bboxOffset; + topLeft.y -= bboxOffset; + botRight.x -= bboxOffset; + botRight.y += bboxOffset; + + var g_w = botRight.x - topLeft.x; + var g_h = botRight.y - topLeft.y; + + // endpoint position calculations + var posX = 0.5 * (topLeft.x + botRight.x); + var posY = 0.5 * (topLeft.y + botRight.y); + var cx = 0.5 * w, + cy = 0.5 * h; + + if ( graph.options().leftSidebar().isSidebarVisible() === true ) + cx += 200; + var cp = getWorldPosFromScreen(cx, cy, graphTranslation, zoomFactor); + + // zoom factor calculations and fail safes; + var newZoomFactor = 1.0; // fail save if graph and window are squares + //get the smaller one + var a = w / g_w; + var b = h / g_h; + if ( a < b ) newZoomFactor = a; + else newZoomFactor = b; + + + // fail saves + if ( newZoomFactor > zoom.scaleExtent()[1] ) { + newZoomFactor = zoom.scaleExtent()[1]; + } + if ( newZoomFactor < zoom.scaleExtent()[0] ) { + newZoomFactor = zoom.scaleExtent()[0]; + } + + // apply Zooming + var sP = [cp.x, cp.y, h / zoomFactor]; + var eP = [posX, posY, h / newZoomFactor]; + + + var pos_intp = d3.interpolateZoom(sP, eP); + var lenAnimation = pos_intp.duration; + if ( lenAnimation > 2500 ) { + lenAnimation = 2500; + } + graphContainer.attr("transform", transform(sP, cx, cy)) + .transition() + .duration(lenAnimation) + .attrTween("transform", function (){ + return function ( t ){ + if ( dynamic ) { + var param = updateTargetElement(); + var nV = param[0](t); + return transform(nV, cx, cy); + } + return transform(pos_intp(t), cx, cy); + }; + }) + .each("end", function (){ + if ( dynamic ) { + return; + } + + graphContainer.attr("transform", "translate(" + graphTranslation + ")scale(" + zoomFactor + ")"); + zoom.translate(graphTranslation); + zoom.scale(zoomFactor); + graph.options().zoomSlider().updateZoomSliderValue(zoomFactor); + + + }); + }; + + + graph.isADraggerActive = function (){ + if ( classDragger.mouseButtonPressed === true || + domainDragger.mouseButtonPressed === true || + rangeDragger.mouseButtonPressed === true ) { + return true; + } + return false; + }; + + /** --------------------------------------------------------- **/ + /** -- VOWL EDITOR create/ edit /delete functions -- **/ + /** --------------------------------------------------------- **/ + + graph.changeNodeType = function ( element ){ + + var typeString = d3.select("#typeEditor").node().value; + + if ( graph.classesSanityCheck(element, typeString) === false ) { + // call reselection to restore previous type selection + graph.options().editSidebar().updateSelectionInformation(element); + return; + } + + var prototype = NodePrototypeMap.get(typeString.toLowerCase()); + var aNode = new prototype(graph); + + aNode.x = element.x; + aNode.y = element.y; + aNode.px = element.x; + aNode.py = element.y; + aNode.id(element.id()); + aNode.copyInformation(element); + + if ( typeString === "owl:Thing" ) { + aNode.label("Thing"); + } + else if ( elementTools.isDatatype(element) === false ) { + if ( element.backupLabel() !== undefined ) { + aNode.label(element.backupLabel()); + } else if ( aNode.backupLabel() !== undefined ) { + aNode.label(aNode.backupLabel()); + } else { + aNode.label("NewClass"); + } + } + + if ( typeString === "rdfs:Datatype" ) { + if ( aNode.dType() === "undefined" ) + aNode.label("undefined"); + else { + var identifier = aNode.dType().split(":")[1]; + aNode.label(identifier); + } + } + var i; + // updates the property domain and range + for ( i = 0; i < unfilteredData.properties.length; i++ ) { + if ( unfilteredData.properties[i].domain() === element ) { + // unfilteredData.properties[i].toString(); + unfilteredData.properties[i].domain(aNode); + } + if ( unfilteredData.properties[i].range() === element ) { + unfilteredData.properties[i].range(aNode); + // unfilteredData.properties[i].toString(); + } + } + + // update for fastUpdate: + for ( i = 0; i < properties.length; i++ ) { + if ( properties[i].domain() === element ) { + // unfilteredData.properties[i].toString(); + properties[i].domain(aNode); + } + if ( properties[i].range() === element ) { + properties[i].range(aNode); + // unfilteredData.properties[i].toString(); + } + } + + var remId = unfilteredData.nodes.indexOf(element); + if ( remId !== -1 ) + unfilteredData.nodes.splice(remId, 1); + remId = classNodes.indexOf(element); + if ( remId !== -1 ) + classNodes.splice(remId, 1); + // very important thing for selection!; + addNewNodeElement(aNode); + // handle focuser! + options.focuserModule().handle(aNode); + generateDictionary(unfilteredData); + graph.getUpdateDictionary(); + element = null; + }; + + + graph.changePropertyType = function ( element ){ + var typeString = d3.select("#typeEditor").node().value; + + // create warning + if ( graph.sanityCheckProperty(element.domain(), element.range(), typeString) === false ) return false; + + var propPrototype = PropertyPrototypeMap.get(typeString.toLowerCase()); + var aProp = new propPrototype(graph); + aProp.copyInformation(element); + aProp.id(element.id()); + + element.domain().removePropertyElement(element); + element.range().removePropertyElement(element); + aProp.domain(element.domain()); + aProp.range(element.range()); + + if ( element.backupLabel() !== undefined ) { + aProp.label(element.backupLabel()); + } else { + aProp.label("newObjectProperty"); + } + + if ( aProp.type() === "rdfs:subClassOf" ) { + aProp.iri("http://www.w3.org/2000/01/rdf-schema#subClassOf"); + } else { + if ( element.iri() === "http://www.w3.org/2000/01/rdf-schema#subClassOf" ) + aProp.iri(graph.options().getGeneralMetaObjectProperty('iri') + aProp.id()); + + } + + + if ( graph.propertyCheckExistenceChecker(aProp, element.domain(), element.range()) === false ) { + graph.options().editSidebar().updateSelectionInformation(element); + return; + } + // // TODO: change its base IRI to proper value + // var ontoIRI="http://someTest.de"; + // aProp.baseIri(ontoIRI); + // aProp.iri(aProp.baseIri()+aProp.id()); + + + // add this to the data; + unfilteredData.properties.push(aProp); + if ( properties.indexOf(aProp) === -1 ) + properties.push(aProp); + var remId = unfilteredData.properties.indexOf(element); + if ( remId !== -1 ) + unfilteredData.properties.splice(remId, 1); + if ( properties.indexOf(aProp) === -1 ) + properties.push(aProp); + remId = properties.indexOf(element); + if ( remId !== -1 ) + properties.splice(remId, 1); + graph.fastUpdate(); + aProp.domain().addProperty(aProp); + aProp.range().addProperty(aProp); + if ( element.labelObject() && aProp.labelObject() ) { + aProp.labelObject().x = element.labelObject().x; + aProp.labelObject().px = element.labelObject().px; + aProp.labelObject().y = element.labelObject().y; + aProp.labelObject().py = element.labelObject().py; + } + + options.focuserModule().handle(aProp); + element = null; + }; + + graph.removeEditElements = function (){ + // just added to be called form outside + removeEditElements(); + }; + + function removeEditElements(){ + rangeDragger.hideDragger(true); + domainDragger.hideDragger(true); + shadowClone.hideClone(true); + + classDragger.hideDragger(true); + if ( addDataPropertyGroupElement ) + addDataPropertyGroupElement.classed("hidden", true); + if ( deleteGroupElement ) + deleteGroupElement.classed("hidden", true); + + + if ( hoveredNodeElement ) { + if ( hoveredNodeElement.pinned() === false ) { + hoveredNodeElement.locked(graph.paused()); + hoveredNodeElement.frozen(graph.paused()); + } + } + if ( hoveredPropertyElement ) { + if ( hoveredPropertyElement.pinned() === false ) { + hoveredPropertyElement.locked(graph.paused()); + hoveredPropertyElement.frozen(graph.paused()); + } + } + + + } + + graph.editorMode = function ( val ){ + var create_entry = d3.select("#empty"); + var create_container = d3.select("#emptyContainer"); + + var modeOfOpString = d3.select("#modeOfOperationString").node(); + if ( !arguments.length ) { + create_entry.node().checked = editMode; + if ( editMode === false ) { + create_container.node().title = "Enable editing in modes menu to create a new ontology"; + create_entry.node().title = "Enable editing in modes menu to create a new ontology"; + create_entry.style("pointer-events", "none"); + } else { + create_container.node().title = "Creates a new empty ontology"; + create_entry.node().title = "Creates a new empty ontology"; + d3.select("#useAccuracyHelper").style("color", "#2980b9"); + d3.select("#useAccuracyHelper").style("pointer-events", "auto"); + create_entry.node().disabled = false; + create_entry.style("pointer-events", "auto"); + } + + return editMode; + } + graph.options().setEditorModeForDefaultObject(val); + + // if (seenEditorHint===false && val===true){ + // seenEditorHint=true; + // graph.options().warningModule().showEditorHint(); + // } + editMode = val; + + if ( create_entry ) { + create_entry.classed("disabled", !editMode); + if ( !editMode ) { + create_container.node().title = "Enable editing in modes menu to create a new ontology"; + create_entry.node().title = "Enable editing in modes menu to create a new ontology"; + create_entry.node().disabled = true; + d3.select("#useAccuracyHelper").style("color", "#979797"); + d3.select("#useAccuracyHelper").style("pointer-events", "none"); + create_entry.style("pointer-events", "none"); + } else { + create_container.node().title = "Creates a new empty ontology"; + create_entry.node().title = "Creates a new empty ontology"; + d3.select("#useAccuracyHelper").style("color", "#2980b9"); + d3.select("#useAccuracyHelper").style("pointer-events", "auto"); + create_entry.style("pointer-events", "auto"); + } + } + + // adjust compact notation + // selector = compactNotationOption; + // box =ModuleCheckbox + var compactNotationContainer = d3.select("#compactnotationModuleCheckbox"); + if ( compactNotationContainer ) { + compactNotationContainer.classed("disabled", !editMode); + if ( !editMode ) { + compactNotationContainer.node().title = ""; + compactNotationContainer.node().disabled = false; + compactNotationContainer.style("pointer-events", "auto"); + d3.select("#compactNotationOption").style("color", ""); + d3.select("#compactNotationOption").node().title = ""; + options.literalFilter().enabled(true); + graph.update(); + } else { + // if editor Mode + //1) uncheck the element + d3.select("#compactNotationOption").node().title = "Compact notation can only be used in view mode"; + compactNotationContainer.node().disabled = true; + compactNotationContainer.node().checked = false; + options.compactNotationModule().enabled(false); + options.literalFilter().enabled(false); + graph.executeCompactNotationModule(); + graph.executeEmptyLiteralFilter(); + graph.lazyRefresh(); + compactNotationContainer.style("pointer-events", "none"); + d3.select("#compactNotationOption").style("color", "#979797"); + } + } + + if ( modeOfOpString ) { + if ( touchDevice === true ) { + modeOfOpString.innerHTML = "touch able device detected"; + } else { + modeOfOpString.innerHTML = "point & click device detected"; + } + } + var svgGraph = d3.selectAll(".vowlGraph"); + + if ( editMode === true ) { + options.leftSidebar().showSidebar(options.leftSidebar().getSidebarVisibility(), true); + options.leftSidebar().hideCollapseButton(false); + graph.options().editSidebar().updatePrefixUi(); + graph.options().editSidebar().updateElementWidth(); + svgGraph.on("dblclick.zoom", graph.modified_dblClickFunction); + + } else { + svgGraph.on("dblclick.zoom", originalD3_dblClickFunction); + options.leftSidebar().showSidebar(0); + options.leftSidebar().hideCollapseButton(true); + // hide hovered edit elements + removeEditElements(); + } + options.sidebar().updateShowedInformation(); + options.editSidebar().updateElementWidth(); + + }; + + function createLowerCasePrototypeMap( prototypeMap ){ + return d3.map(prototypeMap.values(), function ( Prototype ){ + return new Prototype().type().toLowerCase(); + }); + } + + function createNewNodeAtPosition( pos ){ + var aNode, prototype; + var forceUpdate = true; + // create a node of that id; + + var typeToCreate = d3.select("#defaultClass").node().title; + prototype = NodePrototypeMap.get(typeToCreate.toLowerCase()); + aNode = new prototype(graph); + var autoEditElement = false; + if ( typeToCreate === "owl:Thing" ) { + aNode.label("Thing"); + } + else { + aNode.label("NewClass"); + autoEditElement = true; + } + aNode.x = pos.x; + aNode.y = pos.y; + aNode.px = aNode.x; + aNode.py = aNode.y; + aNode.id("Class" + eN++); + // aNode.paused(true); + + aNode.baseIri(d3.select("#iriEditor").node().value); + aNode.iri(aNode.baseIri() + aNode.id()); + addNewNodeElement(aNode, forceUpdate); + options.focuserModule().handle(aNode, true); + aNode.frozen(graph.paused()); + aNode.locked(graph.paused()); + aNode.enableEditing(autoEditElement); + } + + + function addNewNodeElement( element ){ + unfilteredData.nodes.push(element); + if ( classNodes.indexOf(element) === -1 ) + classNodes.push(element); + + generateDictionary(unfilteredData); + graph.getUpdateDictionary(); + graph.fastUpdate(); + } + + graph.getTargetNode = function ( position ){ + var dx = position[0]; + var dy = position[1]; + var tN = null; + var minDist = 1000000000000; + // This is a bit OVERKILL for the computation of one node >> TODO: KD-TREE SEARCH + unfilteredData.nodes.forEach(function ( el ){ + var cDist = Math.sqrt((el.x - dx) * (el.x - dx) + (el.y - dy) * (el.y - dy)); + if ( cDist < minDist ) { + minDist = cDist; + tN = el; + } + }); + if ( hoveredNodeElement ) { + var offsetDist = hoveredNodeElement.actualRadius() + 30; + if ( minDist > offsetDist ) return null; + if ( tN.renderType() === "rect" ) return null; + if ( tN === hoveredNodeElement && minDist <= hoveredNodeElement.actualRadius() ) { + return tN; + } else if ( tN === hoveredNodeElement && minDist > hoveredNodeElement.actualRadius() ) { + return null; + } + return tN; + } + else { + + if ( minDist > (tN.actualRadius() + 30) ) + return null; + else return tN; + + } + }; + + graph.genericPropertySanityCheck = function ( domain, range, typeString, header, action ){ + if ( domain === range && typeString === "rdfs:subClassOf" ) { + graph.options().warningModule().showWarning(header, + "rdfs:subClassOf can not be created as loops (domain == range)", + action, 1, false); + return false; + } + if ( domain === range && typeString === "owl:disjointWith" ) { + graph.options().warningModule().showWarning(header, + "owl:disjointWith can not be created as loops (domain == range)", + action, 1, false); + return false; + } + // allProps[i].type()==="owl:allValuesFrom" || + // allProps[i].type()==="owl:someValuesFrom" + if ( domain.type() === "owl:Thing" && typeString === "owl:allValuesFrom" ) { + graph.options().warningModule().showWarning(header, + "owl:allValuesFrom can not originate from owl:Thing", + action, 1, false); + return false; + } + if ( domain.type() === "owl:Thing" && typeString === "owl:someValuesFrom" ) { + graph.options().warningModule().showWarning(header, + "owl:someValuesFrom can not originate from owl:Thing", + action, 1, false); + return false; + } + + if ( range.type() === "owl:Thing" && typeString === "owl:allValuesFrom" ) { + graph.options().warningModule().showWarning(header, + "owl:allValuesFrom can not be connected to owl:Thing", + action, 1, false); + return false; + } + if ( range.type() === "owl:Thing" && typeString === "owl:someValuesFrom" ) { + graph.options().warningModule().showWarning(header, + "owl:someValuesFrom can not be connected to owl:Thing", + action, 1, false); + return false; + } + + return true; // we can Change the domain or range + }; + + graph.checkIfIriClassAlreadyExist = function ( url ){ + // search for a class node with this url + var allNodes = unfilteredData.nodes; + for ( var i = 0; i < allNodes.length; i++ ) { + if ( elementTools.isDatatype(allNodes[i]) === true || allNodes[i].type() === "owl:Thing" ) + continue; + + // now we are a real class; + //get class IRI + var classIRI = allNodes[i].iri(); + + // this gives me the node for halo + if ( url === classIRI ) { + return allNodes[i]; + } + } + return false; + }; + + graph.classesSanityCheck = function ( classElement, targetType ){ + // this is added due to someValuesFrom properties + // we should not be able to change a classElement to a owl:Thing + // when it has a property attached to it that uses these restrictions + // + + if ( targetType === "owl:Class" ) return true; + + else { + // collect all properties which have that one as a domain or range + var allProps = unfilteredData.properties; + for ( var i = 0; i < allProps.length; i++ ) { + if ( allProps[i].range() === classElement || allProps[i].domain() === classElement ) { + // check for the type of that property + if ( allProps[i].type() === "owl:someValuesFrom" ) { + graph.options().warningModule().showWarning("Can not change class type", + "The element has a property that is of type owl:someValuesFrom", + "Element type not changed!", 1, true); + return false; + } + if ( allProps[i].type() === "owl:allValuesFrom" ) { + graph.options().warningModule().showWarning("Can not change class type", + "The element has a property that is of type owl:allValuesFrom", + "Element type not changed!", 1, true); + return false; + } + } + } + + + } + return true; + }; + + graph.propertyCheckExistenceChecker = function ( property, domain, range ){ + var allProps = unfilteredData.properties; + var i; + if ( property.type() === "rdfs:subClassOf" || property.type() === "owl:disjointWith" ) { + + for ( i = 0; i < allProps.length; i++ ) { + if ( allProps[i] === property ) continue; + if ( allProps[i].domain() === domain && allProps[i].range() === range && allProps[i].type() === property.type() ) { + graph.options().warningModule().showWarning("Warning", + "This triple already exist!", + "Element not created!", 1, false); + return false; + } + if ( allProps[i].domain() === range && allProps[i].range() === domain && allProps[i].type() === property.type() ) { + graph.options().warningModule().showWarning("Warning", + "Inverse assignment already exist! ", + "Element not created!", 1, false); + return false; + } + } + return true; + } + return true; + }; + + // graph.checkForTripleDuplicate=function(property){ + // var domain=property.domain(); + // var range=property.range(); + // console.log("checking for duplicates"); + // var b1= domain.isPropertyAssignedToThisElement(property); + // var b2= range.isPropertyAssignedToThisElement(property); + // + // console.log("test domain results in "+ b1); + // console.log("test range results in "+ b1); + // + // if (b1 && b2 ){ + // graph.options().warningModule().showWarning("Warning", + // "This triple already exist!", + // "Element not created!",1,false); + // return false; + // } + // return true; + // }; + + graph.sanityCheckProperty = function ( domain, range, typeString ){ + + // check for duplicate triple in the element; + + + if ( typeString === "owl:objectProperty" && graph.options().objectPropertyFilter().enabled() === true ) { + graph.options().warningModule().showWarning("Warning", + "Object properties are filtered out in the visualization!", + "Element not created!", 1, false); + return false; + } + + if ( typeString === "owl:disjointWith" && graph.options().disjointPropertyFilter().enabled() === true ) { + graph.options().warningModule().showWarning("Warning", + "owl:disjointWith properties are filtered out in the visualization!", + "Element not created!", 1, false); + return false; + } + + + if ( domain === range && typeString === "rdfs:subClassOf" ) { + graph.options().warningModule().showWarning("Warning", + "rdfs:subClassOf can not be created as loops (domain == range)", + "Element not created!", 1, false); + return false; + } + if ( domain === range && typeString === "owl:disjointWith" ) { + graph.options().warningModule().showWarning("Warning", + "owl:disjointWith can not be created as loops (domain == range)", + "Element not created!", 1, false); + return false; + } + + if ( domain.type() === "owl:Thing" && typeString === "owl:someValuesFrom" ) { + graph.options().warningModule().showWarning("Warning", + "owl:someValuesFrom can not originate from owl:Thing", + "Element not created!", 1, false); + return false; + } + if ( domain.type() === "owl:Thing" && typeString === "owl:allValuesFrom" ) { + graph.options().warningModule().showWarning("Warning", + "owl:allValuesFrom can not originate from owl:Thing", + "Element not created!", 1, false); + return false; + } + + if ( range.type() === "owl:Thing" && typeString === "owl:allValuesFrom" ) { + graph.options().warningModule().showWarning("Warning", + "owl:allValuesFrom can not be connected to owl:Thing", + "Element not created!", 1, false); + return false; + } + if ( range.type() === "owl:Thing" && typeString === "owl:someValuesFrom" ) { + graph.options().warningModule().showWarning("Warning", + "owl:someValuesFrom can not be connected to owl:Thing", + "Element not created!", 1, false); + return false; + } + return true; // we can create a property + }; + + function createNewObjectProperty( domain, range, draggerEndposition ){ + // check type of the property that we want to create; + + var defaultPropertyName = d3.select("#defaultProperty").node().title; + + // check if we are allow to create that property + if ( graph.sanityCheckProperty(domain, range, defaultPropertyName) === false ) return false; + + + var propPrototype = PropertyPrototypeMap.get(defaultPropertyName.toLowerCase()); + var aProp = new propPrototype(graph); + aProp.id("objectProperty" + eP++); + aProp.domain(domain); + aProp.range(range); + aProp.label("newObjectProperty"); + aProp.baseIri(d3.select("#iriEditor").node().value); + aProp.iri(aProp.baseIri() + aProp.id()); + + // check for duplicate; + if ( graph.propertyCheckExistenceChecker(aProp, domain, range) === false ) { + // delete aProp; + // hope for garbage collection here -.- + return false; + } + + var autoEditElement = false; + + if ( defaultPropertyName === "owl:objectProperty" ) { + autoEditElement = true; + } + var pX = 0.49 * (domain.x + range.x); + var pY = 0.49 * (domain.y + range.y); + + if ( domain === range ) { + // we use the dragger endposition to determine an angle to put the loop there; + var dirD_x = draggerEndposition[0] - domain.x; + var dirD_y = draggerEndposition[1] - domain.y; + + // normalize; + var len = Math.sqrt(dirD_x * dirD_x + dirD_y * dirD_y); + // it should be very hard to set the position on the same sport but why not handling this + var nx = dirD_x / len; + var ny = dirD_y / len; + // is Nan in javascript like in c len==len returns false when it is not a number? + if ( isNaN(len) ) { + nx = 0; + ny = -1; + } + + // get domain actual raidus + var offset = 2 * domain.actualRadius() + 50; + pX = domain.x + offset * nx; + pY = domain.y + offset * ny; + } + + // add this property to domain and range; + domain.addProperty(aProp); + range.addProperty(aProp); + + + // add this to the data; + unfilteredData.properties.push(aProp); + if ( properties.indexOf(aProp) === -1 ) + properties.push(aProp); + graph.fastUpdate(); + aProp.labelObject().x = pX; + aProp.labelObject().px = pX; + aProp.labelObject().y = pY; + aProp.labelObject().py = pY; + + aProp.frozen(graph.paused()); + aProp.locked(graph.paused()); + domain.frozen(graph.paused()); + domain.locked(graph.paused()); + range.frozen(graph.paused()); + range.locked(graph.paused()); + + + generateDictionary(unfilteredData); + graph.getUpdateDictionary(); + + options.focuserModule().handle(aProp); + graph.activateHoverElementsForProperties(true, aProp, false, touchDevice); + aProp.labelObject().increasedLoopAngle = true; + aProp.enableEditing(autoEditElement); + } + + graph.createDataTypeProperty = function ( node ){ + // random postion issues; + clearTimeout(nodeFreezer); + // tells user when element is filtered out + if ( graph.options().datatypeFilter().enabled() === true ) { + graph.options().warningModule().showWarning("Warning", + "Datatype properties are filtered out in the visualization!", + "Element not created!", 1, false); + return; + } + + + var aNode, prototype; + + // create a default datatype Node >> HERE LITERAL; + var defaultDatatypeName = d3.select("#defaultDatatype").node().title; + if ( defaultDatatypeName === "rdfs:Literal" ) { + prototype = NodePrototypeMap.get("rdfs:literal"); + aNode = new prototype(graph); + aNode.label("Literal"); + aNode.iri("http://www.w3.org/2000/01/rdf-schema#Literal"); + aNode.baseIri("http://www.w3.org/2000/01/rdf-schema#"); + } else { + prototype = NodePrototypeMap.get("rdfs:datatype"); + aNode = new prototype(graph); + var identifier = ""; + if ( defaultDatatypeName === "undefined" ) { + identifier = "undefined"; + + aNode.label(identifier); + // TODO : HANDLER FOR UNDEFINED DATATYPES!!<<<>>>>>>>>>>>.. + aNode.iri("http://www.undefinedDatatype.org/#" + identifier); + aNode.baseIri("http://www.undefinedDatatype.org/#"); + aNode.dType(defaultDatatypeName); + } else { + identifier = defaultDatatypeName.split(":")[1]; + aNode.label(identifier); + aNode.dType(defaultDatatypeName); + aNode.iri("http://www.w3.org/2001/XMLSchema#" + identifier); + aNode.baseIri("http://www.w3.org/2001/XMLSchema#"); + } + } + + + var nX = node.x - node.actualRadius() - 100; + var nY = node.y + node.actualRadius() + 100; + + aNode.x = nX; + aNode.y = nY; + aNode.px = aNode.x; + aNode.py = aNode.y; + aNode.id("NodeId" + eN++); + // add this property to the nodes; + unfilteredData.nodes.push(aNode); + if ( classNodes.indexOf(aNode) === -1 ) + classNodes.push(aNode); + + + // add also the datatype Property to it + var propPrototype = PropertyPrototypeMap.get("owl:datatypeproperty"); + var aProp = new propPrototype(graph); + aProp.id("datatypeProperty" + eP++); + + // create the connection + aProp.domain(node); + aProp.range(aNode); + aProp.label("newDatatypeProperty"); + + + // TODO: change its base IRI to proper value + var ontoIri = d3.select("#iriEditor").node().value; + aProp.baseIri(ontoIri); + aProp.iri(ontoIri + aProp.id()); + // add this to the data; + unfilteredData.properties.push(aProp); + if ( properties.indexOf(aProp) === -1 ) + properties.push(aProp); + graph.fastUpdate(); + generateDictionary(unfilteredData); + graph.getUpdateDictionary(); + + nodeFreezer = setTimeout(function (){ + if ( node && node.frozen() === true && node.pinned() === false && graph.paused() === false ) { + node.frozen(graph.paused()); + node.locked(graph.paused()); + } + }, 1000); + options.focuserModule().handle(undefined); + if ( node ) { + node.frozen(true); + node.locked(true); + } + }; + + graph.removeNodesViaResponse = function ( nodesToRemove, propsToRemove ){ + var i, remId; + // splice them; + for ( i = 0; i < propsToRemove.length; i++ ) { + remId = unfilteredData.properties.indexOf(propsToRemove[i]); + if ( remId !== -1 ) + unfilteredData.properties.splice(remId, 1); + remId = properties.indexOf(propsToRemove[i]); + if ( remId !== -1 ) + properties.splice(remId, 1); + propsToRemove[i] = null; + } + for ( i = 0; i < nodesToRemove.length; i++ ) { + remId = unfilteredData.nodes.indexOf(nodesToRemove[i]); + if ( remId !== -1 ) { + unfilteredData.nodes.splice(remId, 1); + } + remId = classNodes.indexOf(nodesToRemove[i]); + if ( remId !== -1 ) + classNodes.splice(remId, 1); + nodesToRemove[i] = null; + } + graph.fastUpdate(); + generateDictionary(unfilteredData); + graph.getUpdateDictionary(); + options.focuserModule().handle(undefined); + nodesToRemove = null; + propsToRemove = null; + + }; + + graph.removeNodeViaEditor = function ( node ){ + var propsToRemove = []; + var nodesToRemove = []; + var datatypes = 0; + + var remId; + + nodesToRemove.push(node); + for ( var i = 0; i < unfilteredData.properties.length; i++ ) { + if ( unfilteredData.properties[i].domain() === node || unfilteredData.properties[i].range() === node ) { + propsToRemove.push(unfilteredData.properties[i]); + if ( unfilteredData.properties[i].type().toLocaleLowerCase() === "owl:datatypeproperty" && + unfilteredData.properties[i].range() !== node ) { + nodesToRemove.push(unfilteredData.properties[i].range()); + datatypes++; + } + } + } + var removedItems = propsToRemove.length + nodesToRemove.length; + if ( removedItems > 2 ) { + var text = "You are about to delete 1 class and " + propsToRemove.length + " properties"; + if ( datatypes !== 0 ) { + text = "You are about to delete 1 class, " + datatypes + " datatypes and " + propsToRemove.length + " properties"; + } + + + graph.options().warningModule().responseWarning( + "Removing elements", + text, + "Awaiting response!", graph.removeNodesViaResponse, [nodesToRemove, propsToRemove], false); + + + // + // if (confirm("Remove :\n"+propsToRemove.length + " properties\n"+nodesToRemove.length+" classes? ")===false){ + // return; + // }else{ + // // todo : store for undo delete button ; + // } + } else { + // splice them; + for ( i = 0; i < propsToRemove.length; i++ ) { + remId = unfilteredData.properties.indexOf(propsToRemove[i]); + if ( remId !== -1 ) + unfilteredData.properties.splice(remId, 1); + remId = properties.indexOf(propsToRemove[i]); + if ( remId !== -1 ) + properties.splice(remId, 1); + propsToRemove[i] = null; + } + for ( i = 0; i < nodesToRemove.length; i++ ) { + remId = unfilteredData.nodes.indexOf(nodesToRemove[i]); + if ( remId !== -1 ) + unfilteredData.nodes.splice(remId, 1); + remId = classNodes.indexOf(nodesToRemove[i]); + if ( remId !== -1 ) + classNodes.splice(remId, 1); + nodesToRemove[i] = null; + } + graph.fastUpdate(); + generateDictionary(unfilteredData); + graph.getUpdateDictionary(); + options.focuserModule().handle(undefined); + nodesToRemove = null; + propsToRemove = null; + } + }; + + graph.removePropertyViaEditor = function ( property ){ + property.domain().removePropertyElement(property); + property.range().removePropertyElement(property); + var remId; + + if ( property.type().toLocaleLowerCase() === "owl:datatypeproperty" ) { + var datatype = property.range(); + remId = unfilteredData.nodes.indexOf(property.range()); + if ( remId !== -1 ) + unfilteredData.nodes.splice(remId, 1); + remId = classNodes.indexOf(property.range()); + if ( remId !== -1 ) + classNodes.splice(remId, 1); + datatype = null; + } + remId = unfilteredData.properties.indexOf(property); + if ( remId !== -1 ) + unfilteredData.properties.splice(remId, 1); + remId = properties.indexOf(property); + if ( remId !== -1 ) + properties.splice(remId, 1); + if ( property.inverse() ) { + // so we have inverse + property.inverse().inverse(0); + + } + + + hoveredPropertyElement = undefined; + graph.fastUpdate(); + generateDictionary(unfilteredData); + graph.getUpdateDictionary(); + options.focuserModule().handle(undefined); + property = null; + }; + + graph.executeColorExternalsModule = function (){ + options.colorExternalsModule().filter(unfilteredData.nodes, unfilteredData.properties); + }; + + graph.executeCompactNotationModule = function (){ + if ( unfilteredData ) { + options.compactNotationModule().filter(unfilteredData.nodes, unfilteredData.properties); + } + + }; + graph.executeEmptyLiteralFilter = function (){ + + if ( unfilteredData && unfilteredData.nodes.length > 1 ) { + options.literalFilter().filter(unfilteredData.nodes, unfilteredData.properties); + unfilteredData.nodes = options.literalFilter().filteredNodes(); + unfilteredData.properties = options.literalFilter().filteredProperties(); + } + + }; + + + /** --------------------------------------------------------- **/ + /** -- animation functions for the nodes -- **/ + /** --------------------------------------------------------- **/ + + graph.animateDynamicLabelWidth = function (){ + var wantedWidth = options.dynamicLabelWidth(); + var i; + for ( i = 0; i < classNodes.length; i++ ) { + var nodeElement = classNodes[i]; + if ( elementTools.isDatatype(nodeElement) ) { + nodeElement.animateDynamicLabelWidth(wantedWidth); + } + } + for ( i = 0; i < properties.length; i++ ) { + properties[i].animateDynamicLabelWidth(wantedWidth); + } + }; + + + /** --------------------------------------------------------- **/ + /** -- Touch behaviour functions -- **/ + /** --------------------------------------------------------- **/ + + graph.setTouchDevice = function ( val ){ + touchDevice = val; + }; + + graph.isTouchDevice = function (){ + return touchDevice; + }; + + graph.modified_dblClickFunction = function (){ + + d3.event.stopPropagation(); + d3.event.preventDefault(); + // get position where we want to add the node; + var grPos = getClickedScreenCoords(d3.event.clientX, d3.event.clientY, graph.translation(), graph.scaleFactor()); + createNewNodeAtPosition(grPos); + }; + + function doubletap(){ + var touch_time = d3.event.timeStamp; + var numTouchers = 1; + if ( d3.event && d3.event.touches && d3.event.touches.length ) + numTouchers = d3.event.touches.length; + + if ( touch_time - last_touch_time < 300 && numTouchers === 1 ) { + d3.event.stopPropagation(); + if ( editMode === true ) { + //graph.modified_dblClickFunction(); + d3.event.preventDefault(); + d3.event.stopPropagation(); + last_touch_time = touch_time; + return true; + } + } + last_touch_time = touch_time; + return false; + } + + + function touchzoomed(){ + forceNotZooming = true; + + + var touch_time = d3.event.timeStamp; + if ( touch_time - last_touch_time < 300 && d3.event.touches.length === 1 ) { + d3.event.stopPropagation(); + + if ( editMode === true ) { + //graph.modified_dblClickFunction(); + d3.event.preventDefault(); + d3.event.stopPropagation(); + zoom.translate(graphTranslation); + zoom.scale(zoomFactor); + graph.modified_dblTouchFunction(); + } + else { + forceNotZooming = false; + if ( originalD3_touchZoomFunction ) + originalD3_touchZoomFunction(); + } + return; + } + forceNotZooming = false; + last_touch_time = touch_time; + // TODO: WORK AROUND TO CHECK FOR ORIGINAL FUNCTION + if ( originalD3_touchZoomFunction ) + originalD3_touchZoomFunction(); + } + + graph.modified_dblTouchFunction = function ( d ){ + d3.event.stopPropagation(); + d3.event.preventDefault(); + var xy; + if ( editMode === true ) { + xy = d3.touches(d3.selectAll(".vowlGraph").node()); + } + var grPos = getClickedScreenCoords(xy[0][0], xy[0][1], graph.translation(), graph.scaleFactor()); + createNewNodeAtPosition(grPos); + }; + + /** --------------------------------------------------------- **/ + /** -- Hover and Selection functions, adding edit elements -- **/ + /** --------------------------------------------------------- **/ + + graph.ignoreOtherHoverEvents = function ( val ){ + if ( !arguments.length ) { + return ignoreOtherHoverEvents; + } + else ignoreOtherHoverEvents = val; + }; + + function delayedHiddingHoverElements( tbh ){ + if ( tbh === true ) return; + if ( hoveredNodeElement ) { + if ( hoveredNodeElement.editingTextElement === true ) return; + delayedHider = setTimeout(function (){ + deleteGroupElement.classed("hidden", true); + addDataPropertyGroupElement.classed("hidden", true); + classDragger.hideDragger(true); + if ( hoveredNodeElement && hoveredNodeElement.pinned() === false && graph.paused() === false && hoveredNodeElement.editingTextElement === false ) { + hoveredNodeElement.frozen(false); + hoveredNodeElement.locked(false); + } + }, 1000); + } + if ( hoveredPropertyElement ) { + if ( hoveredPropertyElement.editingTextElement === true ) return; + delayedHider = setTimeout(function (){ + deleteGroupElement.classed("hidden", true); + addDataPropertyGroupElement.classed("hidden", true); + classDragger.hideDragger(true); + rangeDragger.hideDragger(true); + domainDragger.hideDragger(true); + shadowClone.hideClone(true); + if ( hoveredPropertyElement && hoveredPropertyElement.focused() === true && graph.options().drawPropertyDraggerOnHover() === true ) { + hoveredPropertyElement.labelObject().increasedLoopAngle = false; + // lazy update + recalculatePositions(); + } + + if ( hoveredPropertyElement && hoveredPropertyElement.pinned() === false && graph.paused() === false && hoveredPropertyElement.editingTextElement === false ) { + hoveredPropertyElement.frozen(false); + hoveredPropertyElement.locked(false); + } + }, 1000); + } + + } + + + // TODO : experimental code for updating dynamic label with and its hover element + graph.hideHoverPropertyElementsForAnimation = function (){ + deleteGroupElement.classed("hidden", true); + }; + graph.showHoverElementsAfterAnimation = function ( property, inversed ){ + setDeleteHoverElementPositionProperty(property, inversed); + deleteGroupElement.classed("hidden", false); + + }; + + function editElementHoverOnHidden(){ + classDragger.nodeElement.classed("classDraggerNodeHovered", true); + classDragger.nodeElement.classed("classDraggerNode", false); + editElementHoverOn(); + } + + function editElementHoverOutHidden(){ + classDragger.nodeElement.classed("classDraggerNodeHovered", false); + classDragger.nodeElement.classed("classDraggerNode", true); + editElementHoverOut(); + } + + function editElementHoverOn( touch ){ + if ( touch === true ) return; + clearTimeout(delayedHider); // ignore touch behaviour + + } + + graph.killDelayedTimer = function (){ + clearTimeout(delayedHider); + clearTimeout(nodeFreezer); + }; + + + function editElementHoverOut( tbh ){ + if ( hoveredNodeElement ) { + if ( graph.ignoreOtherHoverEvents() === true || tbh === true || hoveredNodeElement.editingTextElement === true ) return; + delayedHider = setTimeout(function (){ + if ( graph.isADraggerActive() === true ) return; + deleteGroupElement.classed("hidden", true); + addDataPropertyGroupElement.classed("hidden", true); + classDragger.hideDragger(true); + if ( hoveredNodeElement && hoveredNodeElement.pinned() === false && graph.paused() === false ) { + hoveredNodeElement.frozen(false); + hoveredNodeElement.locked(false); + } + + }, 1000); + } + if ( hoveredPropertyElement ) { + if ( graph.ignoreOtherHoverEvents() === true || tbh === true || hoveredPropertyElement.editingTextElement === true ) return; + delayedHider = setTimeout(function (){ + if ( graph.isADraggerActive() === true ) return; + deleteGroupElement.classed("hidden", true); + addDataPropertyGroupElement.classed("hidden", true); + classDragger.hideDragger(true); + if ( hoveredPropertyElement && hoveredPropertyElement.pinned() === false && graph.paused() === false ) { + hoveredPropertyElement.frozen(false); + hoveredPropertyElement.locked(false); + } + + }, 1000); + } + } + + graph.activateHoverElementsForProperties = function ( val, property, inversed, touchBehaviour ){ + if ( editMode === false ) return; // nothing to do; + + if ( touchBehaviour === undefined ) + touchBehaviour = false; + + if ( val === true ) { + clearTimeout(delayedHider); + if ( hoveredPropertyElement ) { + if ( hoveredPropertyElement.domain() === hoveredPropertyElement.range() ) { + hoveredPropertyElement.labelObject().increasedLoopAngle = false; + recalculatePositions(); + } + } + + hoveredPropertyElement = property; + if ( graph.options().drawPropertyDraggerOnHover() === true ) { + + + if ( property.type() !== "owl:DatatypeProperty" ) { + if ( property.domain() === property.range() ) { + property.labelObject().increasedLoopAngle = true; + recalculatePositions(); + } + shadowClone.setParentProperty(property, inversed); + rangeDragger.setParentProperty(property, inversed); + rangeDragger.hideDragger(false); + rangeDragger.addMouseEvents(); + domainDragger.setParentProperty(property, inversed); + domainDragger.hideDragger(false); + domainDragger.addMouseEvents(); + + + } else if ( property.type() === "owl:DatatypeProperty" ) { + shadowClone.setParentProperty(property, inversed); + rangeDragger.setParentProperty(property, inversed); + rangeDragger.hideDragger(true); + rangeDragger.addMouseEvents(); + domainDragger.setParentProperty(property, inversed); + domainDragger.hideDragger(false); + domainDragger.addMouseEvents(); + } + } + else { // hide when we dont want that option + if ( graph.options().drawPropertyDraggerOnHover() === true ) { + rangeDragger.hideDragger(true); + domainDragger.hideDragger(true); + shadowClone.hideClone(true); + if ( property.domain() === property.range() ) { + property.labelObject().increasedLoopAngle = false; + recalculatePositions(); + } + } + } + + if ( hoveredNodeElement ) { + if ( hoveredNodeElement && hoveredNodeElement.pinned() === false && graph.paused() === false ) { + hoveredNodeElement.frozen(false); + hoveredNodeElement.locked(false); + } + } + hoveredNodeElement = undefined; + deleteGroupElement.classed("hidden", false); + setDeleteHoverElementPositionProperty(property, inversed); + deleteGroupElement.selectAll("*").on("click", function (){ + if ( touchBehaviour && property.focused() === false ) { + graph.options().focuserModule().handle(property); + return; + } + graph.removePropertyViaEditor(property); + d3.event.stopPropagation(); + }); + classDragger.hideDragger(true); + addDataPropertyGroupElement.classed("hidden", true); + } else { + delayedHiddingHoverElements(); + } + }; + + graph.updateDraggerElements = function (){ + + // set opacity style for all elements + + rangeDragger.draggerObject.classed("superOpacityElement", !graph.options().showDraggerObject()); + domainDragger.draggerObject.classed("superOpacityElement", !graph.options().showDraggerObject()); + classDragger.draggerObject.classed("superOpacityElement", !graph.options().showDraggerObject()); + + nodeContainer.selectAll(".superHiddenElement").classed("superOpacityElement", !graph.options().showDraggerObject()); + labelContainer.selectAll(".superHiddenElement").classed("superOpacityElement", !graph.options().showDraggerObject()); + + deleteGroupElement.selectAll(".superHiddenElement").classed("superOpacityElement", !graph.options().showDraggerObject()); + addDataPropertyGroupElement.selectAll(".superHiddenElement").classed("superOpacityElement", !graph.options().showDraggerObject()); + + + }; + + function setAddDataPropertyHoverElementPosition( node ){ + var delX, delY = 0; + if ( node.renderType() === "round" ) { + var scale = 0.5 * Math.sqrt(2.0); + var oX = scale * node.actualRadius(); + var oY = scale * node.actualRadius(); + delX = node.x - oX; + delY = node.y + oY; + addDataPropertyGroupElement.attr("transform", "translate(" + delX + "," + delY + ")"); + } + } + + function setDeleteHoverElementPosition( node ){ + var delX, delY = 0; + if ( node.renderType() === "round" ) { + var scale = 0.5 * Math.sqrt(2.0); + var oX = scale * node.actualRadius(); + var oY = scale * node.actualRadius(); + delX = node.x + oX; + delY = node.y - oY; + } else { + delX = node.x + 0.5 * node.width() + 6; + delY = node.y - 0.5 * node.height() - 6; + } + deleteGroupElement.attr("transform", "translate(" + delX + "," + delY + ")"); + } + + function setDeleteHoverElementPositionProperty( property, inversed ){ + if ( property && property.labelElement() ) { + var pos = [property.labelObject().x, property.labelObject().y]; + var widthElement = parseFloat(property.getShapeElement().attr("width")); + var heightElement = parseFloat(property.getShapeElement().attr("height")); + var delX = pos[0] + 0.5 * widthElement + 6; + var delY = pos[1] - 0.5 * heightElement - 6; + // this is the lower element + if ( property.labelElement().attr("transform") === "translate(0,15)" ) + delY += 15; + // this is upper element + if ( property.labelElement().attr("transform") === "translate(0,-15)" ) + delY -= 15; + deleteGroupElement.attr("transform", "translate(" + delX + "," + delY + ")"); + } else { + deleteGroupElement.classed("hidden", true);// hide when there is no property + } + + + } + + graph.activateHoverElements = function ( val, node, touchBehaviour ){ + if ( editMode === false ) { + return; // nothing to do; + } + if ( touchBehaviour === undefined ) touchBehaviour = false; + if ( val === true ) { + if ( graph.options().drawPropertyDraggerOnHover() === true ) { + rangeDragger.hideDragger(true); + domainDragger.hideDragger(true); + shadowClone.hideClone(true); + } + // make them visible + clearTimeout(delayedHider); + clearTimeout(nodeFreezer); + if ( hoveredNodeElement && node.pinned() === false && graph.paused() === false ) { + hoveredNodeElement.frozen(false); + hoveredNodeElement.locked(false); + } + hoveredNodeElement = node; + if ( node && node.frozen() === false && node.pinned() === false ) { + node.frozen(true); + node.locked(false); + } + if ( hoveredPropertyElement && hoveredPropertyElement.focused() === false ) { + hoveredPropertyElement.labelObject().increasedLoopAngle = false; + recalculatePositions(); + // update the loopAngles; + + } + hoveredPropertyElement = undefined; + deleteGroupElement.classed("hidden", false); + setDeleteHoverElementPosition(node); + + + deleteGroupElement.selectAll("*").on("click", function (){ + if ( touchBehaviour && node.focused() === false ) { + graph.options().focuserModule().handle(node); + return; + } + graph.removeNodeViaEditor(node); + d3.event.stopPropagation(); + }) + .on("mouseover", function (){ + editElementHoverOn(node, touchBehaviour); + }) + .on("mouseout", function (){ + editElementHoverOut(node, touchBehaviour); + }); + + addDataPropertyGroupElement.classed("hidden", true); + classDragger.nodeElement.on("mouseover", editElementHoverOn) + .on("mouseout", editElementHoverOut); + classDragger.draggerObject.on("mouseover", editElementHoverOnHidden) + .on("mouseout", editElementHoverOutHidden); + + // add the dragger element; + if ( node.renderType() === "round" ) { + classDragger.svgRoot(draggerLayer); + classDragger.setParentNode(node); + classDragger.hideDragger(false); + addDataPropertyGroupElement.classed("hidden", false); + setAddDataPropertyHoverElementPosition(node); + addDataPropertyGroupElement.selectAll("*").on("click", function (){ + if ( touchBehaviour && node.focused() === false ) { + graph.options().focuserModule().handle(node); + return; + } + graph.createDataTypeProperty(node); + d3.event.stopPropagation(); + }) + .on("mouseover", function (){ + editElementHoverOn(node, touchBehaviour); + }) + .on("mouseout", function (){ + editElementHoverOut(node, touchBehaviour); + }); + } else { + classDragger.hideDragger(true); + + } + + } else { + delayedHiddingHoverElements(node, touchBehaviour); + + } + }; + + + return graph; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 58 */ +/***/ (function(module, exports, __webpack_require__) { + + var __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(global, module) {/** + * @license + * Lodash (Custom Build) + * Build: `lodash core -o ./dist/lodash.core.js` + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ + ;(function() { + + /** Used as a safe reference for `undefined` in pre-ES5 environments. */ + var undefined; + + /** Used as the semantic version number. */ + var VERSION = '4.17.15'; + + /** Error message constants. */ + var FUNC_ERROR_TEXT = 'Expected a function'; + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + + /** Used to compose bitmasks for function metadata. */ + var WRAP_BIND_FLAG = 1, + WRAP_PARTIAL_FLAG = 32; + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0, + MAX_SAFE_INTEGER = 9007199254740991; + + /** `Object#toString` result references. */ + var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + asyncTag = '[object AsyncFunction]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + numberTag = '[object Number]', + objectTag = '[object Object]', + proxyTag = '[object Proxy]', + regexpTag = '[object RegExp]', + stringTag = '[object String]'; + + /** Used to match HTML entities and HTML characters. */ + var reUnescapedHtml = /[&<>"']/g, + reHasUnescapedHtml = RegExp(reUnescapedHtml.source); + + /** Used to detect unsigned integer values. */ + var reIsUint = /^(?:0|[1-9]\d*)$/; + + /** Used to map characters to HTML entities. */ + var htmlEscapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' + }; + + /** Detect free variable `global` from Node.js. */ + var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + + /** Detect free variable `self`. */ + var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + + /** Used as a reference to the global object. */ + var root = freeGlobal || freeSelf || Function('return this')(); + + /** Detect free variable `exports`. */ + var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + + /** Detect free variable `module`. */ + var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + + /*--------------------------------------------------------------------------*/ + + /** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ + function arrayPush(array, values) { + array.push.apply(array, values); + return array; + } + + /** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; + } + + /** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ + function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; + } + + /** + * The base implementation of `_.propertyOf` without support for deep paths. + * + * @private + * @param {Object} object The object to query. + * @returns {Function} Returns the new accessor function. + */ + function basePropertyOf(object) { + return function(key) { + return object == null ? undefined : object[key]; + }; + } + + /** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ + function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; + } + + /** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ + function baseValues(object, props) { + return baseMap(props, function(key) { + return object[key]; + }); + } + + /** + * Used by `_.escape` to convert characters to HTML entities. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ + var escapeHtmlChar = basePropertyOf(htmlEscapes); + + /** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ + function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; + } + + /*--------------------------------------------------------------------------*/ + + /** Used for built-in method references. */ + var arrayProto = Array.prototype, + objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** Used to generate unique IDs. */ + var idCounter = 0; + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString = objectProto.toString; + + /** Used to restore the original `_` reference in `_.noConflict`. */ + var oldDash = root._; + + /** Built-in value references. */ + var objectCreate = Object.create, + propertyIsEnumerable = objectProto.propertyIsEnumerable; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeIsFinite = root.isFinite, + nativeKeys = overArg(Object.keys, Object), + nativeMax = Math.max; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` object which wraps `value` to enable implicit method + * chain sequences. Methods that operate on and return arrays, collections, + * and functions can be chained together. Methods that retrieve a single value + * or may return a primitive value will automatically end the chain sequence + * and return the unwrapped value. Otherwise, the value must be unwrapped + * with `_#value`. + * + * Explicit chain sequences, which must be unwrapped with `_#value`, may be + * enabled using `_.chain`. + * + * The execution of chained methods is lazy, that is, it's deferred until + * `_#value` is implicitly or explicitly called. + * + * Lazy evaluation allows several methods to support shortcut fusion. + * Shortcut fusion is an optimization to merge iteratee calls; this avoids + * the creation of intermediate arrays and can greatly reduce the number of + * iteratee executions. Sections of a chain sequence qualify for shortcut + * fusion if the section is applied to an array and iteratees accept only + * one argument. The heuristic for whether a section qualifies for shortcut + * fusion is subject to change. + * + * Chaining is supported in custom builds as long as the `_#value` method is + * directly or indirectly included in the build. + * + * In addition to lodash methods, wrappers have `Array` and `String` methods. + * + * The wrapper `Array` methods are: + * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` + * + * The wrapper `String` methods are: + * `replace` and `split` + * + * The wrapper methods that support shortcut fusion are: + * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, + * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, + * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` + * + * The chainable wrapper methods are: + * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, + * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, + * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, + * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, + * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, + * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, + * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, + * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, + * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, + * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, + * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, + * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, + * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, + * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, + * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, + * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, + * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, + * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, + * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, + * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, + * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, + * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, + * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, + * `zipObject`, `zipObjectDeep`, and `zipWith` + * + * The wrapper methods that are **not** chainable by default are: + * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, + * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, + * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, + * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, + * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, + * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, + * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, + * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, + * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, + * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, + * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, + * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, + * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, + * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, + * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, + * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, + * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, + * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, + * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, + * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, + * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, + * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, + * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, + * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, + * `upperFirst`, `value`, and `words` + * + * @name _ + * @constructor + * @category Seq + * @param {*} value The value to wrap in a `lodash` instance. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var wrapped = _([1, 2, 3]); + * + * // Returns an unwrapped value. + * wrapped.reduce(_.add); + * // => 6 + * + * // Returns a wrapped value. + * var squares = wrapped.map(square); + * + * _.isArray(squares); + * // => false + * + * _.isArray(squares.value()); + * // => true + */ + function lodash(value) { + return value instanceof LodashWrapper + ? value + : new LodashWrapper(value); + } + + /** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} proto The object to inherit from. + * @returns {Object} Returns the new object. + */ + var baseCreate = (function() { + function object() {} + return function(proto) { + if (!isObject(proto)) { + return {}; + } + if (objectCreate) { + return objectCreate(proto); + } + object.prototype = proto; + var result = new object; + object.prototype = undefined; + return result; + }; + }()); + + /** + * The base constructor for creating `lodash` wrapper objects. + * + * @private + * @param {*} value The value to wrap. + * @param {boolean} [chainAll] Enable explicit method chain sequences. + */ + function LodashWrapper(value, chainAll) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__chain__ = !!chainAll; + } + + LodashWrapper.prototype = baseCreate(lodash.prototype); + LodashWrapper.prototype.constructor = LodashWrapper; + + /*------------------------------------------------------------------------*/ + + /** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } + } + + /** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function baseAssignValue(object, key, value) { + object[key] = value; + } + + /** + * The base implementation of `_.delay` and `_.defer` which accepts `args` + * to provide to `func`. + * + * @private + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {Array} args The arguments to provide to `func`. + * @returns {number|Object} Returns the timer id or timeout object. + */ + function baseDelay(func, wait, args) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return setTimeout(function() { func.apply(undefined, args); }, wait); + } + + /** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ + var baseEach = createBaseEach(baseForOwn); + + /** + * The base implementation of `_.every` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false` + */ + function baseEvery(collection, predicate) { + var result = true; + baseEach(collection, function(value, index, collection) { + result = !!predicate(value, index, collection); + return result; + }); + return result; + } + + /** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ + function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? (current === current && !false) + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; + } + + /** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function baseFilter(collection, predicate) { + var result = []; + baseEach(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; + } + + /** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ + function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + arrayPush(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; + } + + /** + * The base implementation of `baseForOwn` which iterates over `object` + * properties returned by `keysFunc` and invokes `iteratee` for each property. + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ + var baseFor = createBaseFor(); + + /** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ + function baseForOwn(object, iteratee) { + return object && baseFor(object, iteratee, keys); + } + + /** + * The base implementation of `_.functions` which creates an array of + * `object` function property names filtered from `props`. + * + * @private + * @param {Object} object The object to inspect. + * @param {Array} props The property names to filter. + * @returns {Array} Returns the function names. + */ + function baseFunctions(object, props) { + return baseFilter(props, function(key) { + return isFunction(object[key]); + }); + } + + /** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + function baseGetTag(value) { + return objectToString(value); + } + + /** + * The base implementation of `_.gt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + */ + function baseGt(value, other) { + return value > other; + } + + /** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ + var baseIsArguments = noop; + + /** + * The base implementation of `_.isDate` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a date object, else `false`. + */ + function baseIsDate(value) { + return isObjectLike(value) && baseGetTag(value) == dateTag; + } + + /** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ + function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); + } + + /** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = objIsArr ? arrayTag : baseGetTag(object), + othTag = othIsArr ? arrayTag : baseGetTag(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + stack || (stack = []); + var objStack = find(stack, function(entry) { + return entry[0] == object; + }); + var othStack = find(stack, function(entry) { + return entry[0] == other; + }); + if (objStack && othStack) { + return objStack[1] == other; + } + stack.push([object, other]); + stack.push([other, object]); + if (isSameTag && !objIsObj) { + var result = (objIsArr) + ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + stack.pop(); + return result; + } + if (!(bitmask & COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + var result = equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + stack.pop(); + return result; + } + } + if (!isSameTag) { + return false; + } + var result = equalObjects(object, other, bitmask, customizer, equalFunc, stack); + stack.pop(); + return result; + } + + /** + * The base implementation of `_.isRegExp` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + */ + function baseIsRegExp(value) { + return isObjectLike(value) && baseGetTag(value) == regexpTag; + } + + /** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ + function baseIteratee(func) { + if (typeof func == 'function') { + return func; + } + if (func == null) { + return identity; + } + return (typeof func == 'object' ? baseMatches : baseProperty)(func); + } + + /** + * The base implementation of `_.lt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + */ + function baseLt(value, other) { + return value < other; + } + + /** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function baseMap(collection, iteratee) { + var index = -1, + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; + } + + /** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ + function baseMatches(source) { + var props = nativeKeys(source); + return function(object) { + var length = props.length; + if (object == null) { + return !length; + } + object = Object(object); + while (length--) { + var key = props[length]; + if (!(key in object && + baseIsEqual(source[key], object[key], COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG) + )) { + return false; + } + } + return true; + }; + } + + /** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @returns {Object} Returns the new object. + */ + function basePick(object, props) { + object = Object(object); + return reduce(props, function(result, key) { + if (key in object) { + result[key] = object[key]; + } + return result; + }, {}); + } + + /** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ + function baseRest(func, start) { + return setToString(overRest(func, start, identity), func + ''); + } + + /** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = end > length ? length : end; + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; + } + + /** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ + function copyArray(source) { + return baseSlice(source, 0, source.length); + } + + /** + * The base implementation of `_.some` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ + function baseSome(collection, predicate) { + var result; + + baseEach(collection, function(value, index, collection) { + result = predicate(value, index, collection); + return !result; + }); + return !!result; + } + + /** + * The base implementation of `wrapperValue` which returns the result of + * performing a sequence of actions on the unwrapped `value`, where each + * successive action is supplied the return value of the previous. + * + * @private + * @param {*} value The unwrapped value. + * @param {Array} actions Actions to perform to resolve the unwrapped value. + * @returns {*} Returns the resolved value. + */ + function baseWrapperValue(value, actions) { + var result = value; + return reduce(actions, function(result, action) { + return action.func.apply(action.thisArg, arrayPush([result], action.args)); + }, result); + } + + /** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ + function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = false; + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = false; + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; + } + + /** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property identifiers to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ + function copyObject(source, props, object, customizer) { + var isNew = !object; + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : undefined; + + if (newValue === undefined) { + newValue = source[key]; + } + if (isNew) { + baseAssignValue(object, key, newValue); + } else { + assignValue(object, key, newValue); + } + } + return object; + } + + /** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ + function createAssigner(assigner) { + return baseRest(function(object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined; + + customizer = (assigner.length > 3 && typeof customizer == 'function') + ? (length--, customizer) + : undefined; + + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); + } + + /** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!isArrayLike(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; + } + + /** + * Creates a base function for methods like `_.forIn` and `_.forOwn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; + + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; + } + + /** + * Creates a function that produces an instance of `Ctor` regardless of + * whether it was invoked as part of a `new` expression or by `call` or `apply`. + * + * @private + * @param {Function} Ctor The constructor to wrap. + * @returns {Function} Returns the new wrapped function. + */ + function createCtor(Ctor) { + return function() { + // Use a `switch` statement to work with class constructors. See + // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist + // for more details. + var args = arguments; + var thisBinding = baseCreate(Ctor.prototype), + result = Ctor.apply(thisBinding, args); + + // Mimic the constructor's `return` behavior. + // See https://es5.github.io/#x13.2.2 for more details. + return isObject(result) ? result : thisBinding; + }; + } + + /** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ + function createFind(findIndexFunc) { + return function(collection, predicate, fromIndex) { + var iterable = Object(collection); + if (!isArrayLike(collection)) { + var iteratee = baseIteratee(predicate, 3); + collection = keys(collection); + predicate = function(key) { return iteratee(iterable[key], key, iterable); }; + } + var index = findIndexFunc(collection, predicate, fromIndex); + return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; + }; + } + + /** + * Creates a function that wraps `func` to invoke it with the `this` binding + * of `thisArg` and `partials` prepended to the arguments it receives. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} partials The arguments to prepend to those provided to + * the new function. + * @returns {Function} Returns the new wrapped function. + */ + function createPartial(func, bitmask, thisArg, partials) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + var isBind = bitmask & WRAP_BIND_FLAG, + Ctor = createCtor(func); + + function wrapper() { + var argsIndex = -1, + argsLength = arguments.length, + leftIndex = -1, + leftLength = partials.length, + args = Array(leftLength + argsLength), + fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + + while (++leftIndex < leftLength) { + args[leftIndex] = partials[leftIndex]; + } + while (argsLength--) { + args[leftIndex++] = arguments[++argsIndex]; + } + return fn.apply(isBind ? thisArg : this, args); + } + return wrapper; + } + + /** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ + function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? [] : undefined; + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + var compared; + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!baseSome(other, function(othValue, othIndex) { + if (!indexOf(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + return result; + } + + /** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return eq(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + } + return false; + } + + /** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + objProps = keys(object), + objLength = objProps.length, + othProps = keys(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { + return false; + } + } + var result = true; + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + var compared; + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + return result; + } + + /** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ + function flatRest(func) { + return setToString(overRest(func, undefined, flatten), func + ''); + } + + /** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ + function isFlattenable(value) { + return isArray(value) || isArguments(value); + } + + /** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ + function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); + } + + /** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ + function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object) + ) { + return eq(object[index], value); + } + return false; + } + + /** + * This function is like + * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * except that it includes inherited enumerable properties. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function nativeKeysIn(object) { + var result = []; + if (object != null) { + for (var key in Object(object)) { + result.push(key); + } + } + return result; + } + + /** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ + function objectToString(value) { + return nativeObjectToString.call(value); + } + + /** + * A specialized version of `baseRest` which transforms the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @param {Function} transform The rest array transform. + * @returns {Function} Returns the new function. + */ + function overRest(func, start, transform) { + start = nativeMax(start === undefined ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = transform(array); + return func.apply(this, otherArgs); + }; + } + + /** + * Sets the `toString` method of `func` to return `string`. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ + var setToString = identity; + + /*------------------------------------------------------------------------*/ + + /** + * Creates an array with all falsey values removed. The values `false`, `null`, + * `0`, `""`, `undefined`, and `NaN` are falsey. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to compact. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.compact([0, 1, false, 2, '', 3]); + * // => [1, 2, 3] + */ + function compact(array) { + return baseFilter(array, Boolean); + } + + /** + * Creates a new array concatenating `array` with any additional arrays + * and/or values. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to concatenate. + * @param {...*} [values] The values to concatenate. + * @returns {Array} Returns the new concatenated array. + * @example + * + * var array = [1]; + * var other = _.concat(array, 2, [3], [[4]]); + * + * console.log(other); + * // => [1, 2, 3, [4]] + * + * console.log(array); + * // => [1] + */ + function concat() { + var length = arguments.length; + if (!length) { + return []; + } + var args = Array(length - 1), + array = arguments[0], + index = length; + + while (index--) { + args[index - 1] = arguments[index]; + } + return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); + } + + /** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ + function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return baseFindIndex(array, baseIteratee(predicate, 3), index); + } + + /** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ + function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, 1) : []; + } + + /** + * Recursively flattens `array`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flattenDeep([1, [2, [3, [4]], 5]]); + * // => [1, 2, 3, 4, 5] + */ + function flattenDeep(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, INFINITY) : []; + } + + /** + * Gets the first element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias first + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the first element of `array`. + * @example + * + * _.head([1, 2, 3]); + * // => 1 + * + * _.head([]); + * // => undefined + */ + function head(array) { + return (array && array.length) ? array[0] : undefined; + } + + /** + * Gets the index at which the first occurrence of `value` is found in `array` + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. If `fromIndex` is negative, it's used as the + * offset from the end of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.indexOf([1, 2, 1, 2], 2); + * // => 1 + * + * // Search from the `fromIndex`. + * _.indexOf([1, 2, 1, 2], 2, 2); + * // => 3 + */ + function indexOf(array, value, fromIndex) { + var length = array == null ? 0 : array.length; + if (typeof fromIndex == 'number') { + fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : fromIndex; + } else { + fromIndex = 0; + } + var index = (fromIndex || 0) - 1, + isReflexive = value === value; + + while (++index < length) { + var other = array[index]; + if ((isReflexive ? other === value : other !== other)) { + return index; + } + } + return -1; + } + + /** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ + function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; + } + + /** + * Creates a slice of `array` from `start` up to, but not including, `end`. + * + * **Note:** This method is used instead of + * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are + * returned. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function slice(array, start, end) { + var length = array == null ? 0 : array.length; + start = start == null ? 0 : +start; + end = end === undefined ? length : +end; + return length ? baseSlice(array, start, end) : []; + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` wrapper instance that wraps `value` with explicit method + * chain sequences enabled. The result of such sequences must be unwrapped + * with `_#value`. + * + * @static + * @memberOf _ + * @since 1.3.0 + * @category Seq + * @param {*} value The value to wrap. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'pebbles', 'age': 1 } + * ]; + * + * var youngest = _ + * .chain(users) + * .sortBy('age') + * .map(function(o) { + * return o.user + ' is ' + o.age; + * }) + * .head() + * .value(); + * // => 'pebbles is 1' + */ + function chain(value) { + var result = lodash(value); + result.__chain__ = true; + return result; + } + + /** + * This method invokes `interceptor` and returns `value`. The interceptor + * is invoked with one argument; (value). The purpose of this method is to + * "tap into" a method chain sequence in order to modify intermediate results. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns `value`. + * @example + * + * _([1, 2, 3]) + * .tap(function(array) { + * // Mutate input array. + * array.pop(); + * }) + * .reverse() + * .value(); + * // => [2, 1] + */ + function tap(value, interceptor) { + interceptor(value); + return value; + } + + /** + * This method is like `_.tap` except that it returns the result of `interceptor`. + * The purpose of this method is to "pass thru" values replacing intermediate + * results in a method chain sequence. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns the result of `interceptor`. + * @example + * + * _(' abc ') + * .chain() + * .trim() + * .thru(function(value) { + * return [value]; + * }) + * .value(); + * // => ['abc'] + */ + function thru(value, interceptor) { + return interceptor(value); + } + + /** + * Creates a `lodash` wrapper instance with explicit method chain sequences enabled. + * + * @name chain + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * // A sequence without explicit chaining. + * _(users).head(); + * // => { 'user': 'barney', 'age': 36 } + * + * // A sequence with explicit chaining. + * _(users) + * .chain() + * .head() + * .pick('user') + * .value(); + * // => { 'user': 'barney' } + */ + function wrapperChain() { + return chain(this); + } + + /** + * Executes the chain sequence to resolve the unwrapped value. + * + * @name value + * @memberOf _ + * @since 0.1.0 + * @alias toJSON, valueOf + * @category Seq + * @returns {*} Returns the resolved unwrapped value. + * @example + * + * _([1, 2, 3]).value(); + * // => [1, 2, 3] + */ + function wrapperValue() { + return baseWrapperValue(this.__wrapped__, this.__actions__); + } + + /*------------------------------------------------------------------------*/ + + /** + * Checks if `predicate` returns truthy for **all** elements of `collection`. + * Iteration is stopped once `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * **Note:** This method returns `true` for + * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because + * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of + * elements of empty collections. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + * @example + * + * _.every([true, 1, null, 'yes'], Boolean); + * // => false + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.every(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.every(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.every(users, 'active'); + * // => false + */ + function every(collection, predicate, guard) { + predicate = guard ? undefined : predicate; + return baseEvery(collection, baseIteratee(predicate)); + } + + /** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + */ + function filter(collection, predicate) { + return baseFilter(collection, baseIteratee(predicate)); + } + + /** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ + var find = createFind(findIndex); + + /** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ + function forEach(collection, iteratee) { + return baseEach(collection, baseIteratee(iteratee)); + } + + /** + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ + function map(collection, iteratee) { + return baseMap(collection, baseIteratee(iteratee)); + } + + /** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ + function reduce(collection, iteratee, accumulator) { + return baseReduce(collection, baseIteratee(iteratee), accumulator, arguments.length < 3, baseEach); + } + + /** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable string keyed properties for objects. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ + function size(collection) { + if (collection == null) { + return 0; + } + collection = isArrayLike(collection) ? collection : nativeKeys(collection); + return collection.length; + } + + /** + * Checks if `predicate` returns truthy for **any** element of `collection`. + * Iteration is stopped once `predicate` returns truthy. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + * @example + * + * _.some([null, 0, 'yes', false], Boolean); + * // => true + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.some(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.some(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.some(users, 'active'); + * // => true + */ + function some(collection, predicate, guard) { + predicate = guard ? undefined : predicate; + return baseSome(collection, baseIteratee(predicate)); + } + + /** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + * The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, [function(o) { return o.user; }]); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]] + */ + function sortBy(collection, iteratee) { + var index = 0; + iteratee = baseIteratee(iteratee); + + return baseMap(baseMap(collection, function(value, key, collection) { + return { 'value': value, 'index': index++, 'criteria': iteratee(value, key, collection) }; + }).sort(function(object, other) { + return compareAscending(object.criteria, other.criteria) || (object.index - other.index); + }), baseProperty('value')); + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates a function that invokes `func`, with the `this` binding and arguments + * of the created function, while it's called less than `n` times. Subsequent + * calls to the created function return the result of the last `func` invocation. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {number} n The number of calls at which `func` is no longer invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * jQuery(element).on('click', _.before(5, addContactToList)); + * // => Allows adding up to 4 contacts to the list. + */ + function before(n, func) { + var result; + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + n = toInteger(n); + return function() { + if (--n > 0) { + result = func.apply(this, arguments); + } + if (n <= 1) { + func = undefined; + } + return result; + }; + } + + /** + * Creates a function that invokes `func` with the `this` binding of `thisArg` + * and `partials` prepended to the arguments it receives. + * + * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for partially applied arguments. + * + * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" + * property of bound functions. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to bind. + * @param {*} thisArg The `this` binding of `func`. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * function greet(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * } + * + * var object = { 'user': 'fred' }; + * + * var bound = _.bind(greet, object, 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * // Bound with placeholders. + * var bound = _.bind(greet, object, _, '!'); + * bound('hi'); + * // => 'hi fred!' + */ + var bind = baseRest(function(func, thisArg, partials) { + return createPartial(func, WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG, thisArg, partials); + }); + + /** + * Defers invoking the `func` until the current call stack has cleared. Any + * additional arguments are provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to defer. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.defer(function(text) { + * console.log(text); + * }, 'deferred'); + * // => Logs 'deferred' after one millisecond. + */ + var defer = baseRest(function(func, args) { + return baseDelay(func, 1, args); + }); + + /** + * Invokes `func` after `wait` milliseconds. Any additional arguments are + * provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.delay(function(text) { + * console.log(text); + * }, 1000, 'later'); + * // => Logs 'later' after one second. + */ + var delay = baseRest(function(func, wait, args) { + return baseDelay(func, toNumber(wait) || 0, args); + }); + + /** + * Creates a function that negates the result of the predicate `func`. The + * `func` predicate is invoked with the `this` binding and arguments of the + * created function. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} predicate The predicate to negate. + * @returns {Function} Returns the new negated function. + * @example + * + * function isEven(n) { + * return n % 2 == 0; + * } + * + * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); + * // => [1, 3, 5] + */ + function negate(predicate) { + if (typeof predicate != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return function() { + var args = arguments; + return !predicate.apply(this, args); + }; + } + + /** + * Creates a function that is restricted to invoking `func` once. Repeat calls + * to the function return the value of the first invocation. The `func` is + * invoked with the `this` binding and arguments of the created function. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var initialize = _.once(createApplication); + * initialize(); + * initialize(); + * // => `createApplication` is invoked once + */ + function once(func) { + return before(2, func); + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates a shallow clone of `value`. + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) + * and supports cloning arrays, array buffers, booleans, date objects, maps, + * numbers, `Object` objects, regexes, sets, strings, symbols, and typed + * arrays. The own enumerable properties of `arguments` objects are cloned + * as plain objects. An empty object is returned for uncloneable values such + * as error objects, functions, DOM nodes, and WeakMaps. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to clone. + * @returns {*} Returns the cloned value. + * @see _.cloneDeep + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var shallow = _.clone(objects); + * console.log(shallow[0] === objects[0]); + * // => true + */ + function clone(value) { + if (!isObject(value)) { + return value; + } + return isArray(value) ? copyArray(value) : copyObject(value, nativeKeys(value)); + } + + /** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ + function eq(value, other) { + return value === other || (value !== value && other !== other); + } + + /** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ + var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { + return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); + }; + + /** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ + var isArray = Array.isArray; + + /** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ + function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); + } + + /** + * Checks if `value` is classified as a boolean primitive or object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. + * @example + * + * _.isBoolean(false); + * // => true + * + * _.isBoolean(null); + * // => false + */ + function isBoolean(value) { + return value === true || value === false || + (isObjectLike(value) && baseGetTag(value) == boolTag); + } + + /** + * Checks if `value` is classified as a `Date` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a date object, else `false`. + * @example + * + * _.isDate(new Date); + * // => true + * + * _.isDate('Mon April 23 2012'); + * // => false + */ + var isDate = baseIsDate; + + /** + * Checks if `value` is an empty object, collection, map, or set. + * + * Objects are considered empty if they have no own enumerable string keyed + * properties. + * + * Array-like values such as `arguments` objects, arrays, buffers, strings, or + * jQuery-like collections are considered empty if they have a `length` of `0`. + * Similarly, maps and sets are considered empty if they have a `size` of `0`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is empty, else `false`. + * @example + * + * _.isEmpty(null); + * // => true + * + * _.isEmpty(true); + * // => true + * + * _.isEmpty(1); + * // => true + * + * _.isEmpty([1, 2, 3]); + * // => false + * + * _.isEmpty({ 'a': 1 }); + * // => false + */ + function isEmpty(value) { + if (isArrayLike(value) && + (isArray(value) || isString(value) || + isFunction(value.splice) || isArguments(value))) { + return !value.length; + } + return !nativeKeys(value).length; + } + + /** + * Performs a deep comparison between two values to determine if they are + * equivalent. + * + * **Note:** This method supports comparing arrays, array buffers, booleans, + * date objects, error objects, maps, numbers, `Object` objects, regexes, + * sets, strings, symbols, and typed arrays. `Object` objects are compared + * by their own, not inherited, enumerable properties. Functions and DOM + * nodes are compared by strict equality, i.e. `===`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.isEqual(object, other); + * // => true + * + * object === other; + * // => false + */ + function isEqual(value, other) { + return baseIsEqual(value, other); + } + + /** + * Checks if `value` is a finite primitive number. + * + * **Note:** This method is based on + * [`Number.isFinite`](https://mdn.io/Number/isFinite). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. + * @example + * + * _.isFinite(3); + * // => true + * + * _.isFinite(Number.MIN_VALUE); + * // => true + * + * _.isFinite(Infinity); + * // => false + * + * _.isFinite('3'); + * // => false + */ + function isFinite(value) { + return typeof value == 'number' && nativeIsFinite(value); + } + + /** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ + function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; + } + + /** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ + function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; + } + + /** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ + function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); + } + + /** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ + function isObjectLike(value) { + return value != null && typeof value == 'object'; + } + + /** + * Checks if `value` is `NaN`. + * + * **Note:** This method is based on + * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as + * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for + * `undefined` and other non-number values. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + * @example + * + * _.isNaN(NaN); + * // => true + * + * _.isNaN(new Number(NaN)); + * // => true + * + * isNaN(undefined); + * // => true + * + * _.isNaN(undefined); + * // => false + */ + function isNaN(value) { + // An `NaN` primitive is the only value that is not equal to itself. + // Perform the `toStringTag` check first to avoid errors with some + // ActiveX objects in IE. + return isNumber(value) && value != +value; + } + + /** + * Checks if `value` is `null`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `null`, else `false`. + * @example + * + * _.isNull(null); + * // => true + * + * _.isNull(void 0); + * // => false + */ + function isNull(value) { + return value === null; + } + + /** + * Checks if `value` is classified as a `Number` primitive or object. + * + * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are + * classified as numbers, use the `_.isFinite` method. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a number, else `false`. + * @example + * + * _.isNumber(3); + * // => true + * + * _.isNumber(Number.MIN_VALUE); + * // => true + * + * _.isNumber(Infinity); + * // => true + * + * _.isNumber('3'); + * // => false + */ + function isNumber(value) { + return typeof value == 'number' || + (isObjectLike(value) && baseGetTag(value) == numberTag); + } + + /** + * Checks if `value` is classified as a `RegExp` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + * @example + * + * _.isRegExp(/abc/); + * // => true + * + * _.isRegExp('/abc/'); + * // => false + */ + var isRegExp = baseIsRegExp; + + /** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ + function isString(value) { + return typeof value == 'string' || + (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); + } + + /** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ + function isUndefined(value) { + return value === undefined; + } + + /** + * Converts `value` to an array. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to convert. + * @returns {Array} Returns the converted array. + * @example + * + * _.toArray({ 'a': 1, 'b': 2 }); + * // => [1, 2] + * + * _.toArray('abc'); + * // => ['a', 'b', 'c'] + * + * _.toArray(1); + * // => [] + * + * _.toArray(null); + * // => [] + */ + function toArray(value) { + if (!isArrayLike(value)) { + return values(value); + } + return value.length ? copyArray(value) : []; + } + + /** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ + var toInteger = Number; + + /** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ + var toNumber = Number; + + /** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ + function toString(value) { + if (typeof value == 'string') { + return value; + } + return value == null ? '' : (value + ''); + } + + /*------------------------------------------------------------------------*/ + + /** + * Assigns own enumerable string keyed properties of source objects to the + * destination object. Source objects are applied from left to right. + * Subsequent sources overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object` and is loosely based on + * [`Object.assign`](https://mdn.io/Object/assign). + * + * @static + * @memberOf _ + * @since 0.10.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assignIn + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assign({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'c': 3 } + */ + var assign = createAssigner(function(object, source) { + copyObject(source, nativeKeys(source), object); + }); + + /** + * This method is like `_.assign` except that it iterates over own and + * inherited source properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias extend + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assign + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assignIn({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } + */ + var assignIn = createAssigner(function(object, source) { + copyObject(source, nativeKeysIn(source), object); + }); + + /** + * Creates an object that inherits from the `prototype` object. If a + * `properties` object is given, its own enumerable string keyed properties + * are assigned to the created object. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Object + * @param {Object} prototype The object to inherit from. + * @param {Object} [properties] The properties to assign to the object. + * @returns {Object} Returns the new object. + * @example + * + * function Shape() { + * this.x = 0; + * this.y = 0; + * } + * + * function Circle() { + * Shape.call(this); + * } + * + * Circle.prototype = _.create(Shape.prototype, { + * 'constructor': Circle + * }); + * + * var circle = new Circle; + * circle instanceof Circle; + * // => true + * + * circle instanceof Shape; + * // => true + */ + function create(prototype, properties) { + var result = baseCreate(prototype); + return properties == null ? result : assign(result, properties); + } + + /** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ + var defaults = baseRest(function(object, sources) { + object = Object(object); + + var index = -1; + var length = sources.length; + var guard = length > 2 ? sources[2] : undefined; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = keysIn(source); + var propsIndex = -1; + var propsLength = props.length; + + while (++propsIndex < propsLength) { + var key = props[propsIndex]; + var value = object[key]; + + if (value === undefined || + (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; + }); + + /** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ + function has(object, path) { + return object != null && hasOwnProperty.call(object, path); + } + + /** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ + var keys = nativeKeys; + + /** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ + var keysIn = nativeKeysIn; + + /** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ + var pick = flatRest(function(object, paths) { + return object == null ? {} : basePick(object, paths); + }); + + /** + * This method is like `_.get` except that if the resolved value is a + * function it's invoked with the `this` binding of its parent object and + * its result is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to resolve. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; + * + * _.result(object, 'a[0].b.c1'); + * // => 3 + * + * _.result(object, 'a[0].b.c2'); + * // => 4 + * + * _.result(object, 'a[0].b.c3', 'default'); + * // => 'default' + * + * _.result(object, 'a[0].b.c3', _.constant('default')); + * // => 'default' + */ + function result(object, path, defaultValue) { + var value = object == null ? undefined : object[path]; + if (value === undefined) { + value = defaultValue; + } + return isFunction(value) ? value.call(object) : value; + } + + /** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ + function values(object) { + return object == null ? [] : baseValues(object, keys(object)); + } + + /*------------------------------------------------------------------------*/ + + /** + * Converts the characters "&", "<", ">", '"', and "'" in `string` to their + * corresponding HTML entities. + * + * **Note:** No other characters are escaped. To escape additional + * characters use a third-party library like [_he_](https://mths.be/he). + * + * Though the ">" character is escaped for symmetry, characters like + * ">" and "/" don't need escaping in HTML and have no special meaning + * unless they're part of a tag or unquoted attribute value. See + * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) + * (under "semi-related fun fact") for more details. + * + * When working with HTML you should always + * [quote attribute values](http://wonko.com/post/html-escaping) to reduce + * XSS vectors. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escape('fred, barney, & pebbles'); + * // => 'fred, barney, & pebbles' + */ + function escape(string) { + string = toString(string); + return (string && reHasUnescapedHtml.test(string)) + ? string.replace(reUnescapedHtml, escapeHtmlChar) + : string; + } + + /*------------------------------------------------------------------------*/ + + /** + * This method returns the first argument it receives. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'a': 1 }; + * + * console.log(_.identity(object) === object); + * // => true + */ + function identity(value) { + return value; + } + + /** + * Creates a function that invokes `func` with the arguments of the created + * function. If `func` is a property name, the created function returns the + * property value for a given element. If `func` is an array or object, the + * created function returns `true` for elements that contain the equivalent + * source properties, otherwise it returns `false`. + * + * @static + * @since 4.0.0 + * @memberOf _ + * @category Util + * @param {*} [func=_.identity] The value to convert to a callback. + * @returns {Function} Returns the callback. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true })); + * // => [{ 'user': 'barney', 'age': 36, 'active': true }] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, _.iteratee(['user', 'fred'])); + * // => [{ 'user': 'fred', 'age': 40 }] + * + * // The `_.property` iteratee shorthand. + * _.map(users, _.iteratee('user')); + * // => ['barney', 'fred'] + * + * // Create custom iteratee shorthands. + * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) { + * return !_.isRegExp(func) ? iteratee(func) : function(string) { + * return func.test(string); + * }; + * }); + * + * _.filter(['abc', 'def'], /ef/); + * // => ['def'] + */ + var iteratee = baseIteratee; + + /** + * Creates a function that performs a partial deep comparison between a given + * object and `source`, returning `true` if the given object has equivalent + * property values, else `false`. + * + * **Note:** The created function is equivalent to `_.isMatch` with `source` + * partially applied. + * + * Partial comparisons will match empty array and empty object `source` + * values against any array or object value, respectively. See `_.isEqual` + * for a list of supported value comparisons. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Util + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + * @example + * + * var objects = [ + * { 'a': 1, 'b': 2, 'c': 3 }, + * { 'a': 4, 'b': 5, 'c': 6 } + * ]; + * + * _.filter(objects, _.matches({ 'a': 4, 'c': 6 })); + * // => [{ 'a': 4, 'b': 5, 'c': 6 }] + */ + function matches(source) { + return baseMatches(assign({}, source)); + } + + /** + * Adds all own enumerable string keyed function properties of a source + * object to the destination object. If `object` is a function, then methods + * are added to its prototype as well. + * + * **Note:** Use `_.runInContext` to create a pristine `lodash` function to + * avoid conflicts caused by modifying the original. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {Function|Object} [object=lodash] The destination object. + * @param {Object} source The object of functions to add. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.chain=true] Specify whether mixins are chainable. + * @returns {Function|Object} Returns `object`. + * @example + * + * function vowels(string) { + * return _.filter(string, function(v) { + * return /[aeiou]/i.test(v); + * }); + * } + * + * _.mixin({ 'vowels': vowels }); + * _.vowels('fred'); + * // => ['e'] + * + * _('fred').vowels().value(); + * // => ['e'] + * + * _.mixin({ 'vowels': vowels }, { 'chain': false }); + * _('fred').vowels(); + * // => ['e'] + */ + function mixin(object, source, options) { + var props = keys(source), + methodNames = baseFunctions(source, props); + + if (options == null && + !(isObject(source) && (methodNames.length || !props.length))) { + options = source; + source = object; + object = this; + methodNames = baseFunctions(source, keys(source)); + } + var chain = !(isObject(options) && 'chain' in options) || !!options.chain, + isFunc = isFunction(object); + + baseEach(methodNames, function(methodName) { + var func = source[methodName]; + object[methodName] = func; + if (isFunc) { + object.prototype[methodName] = function() { + var chainAll = this.__chain__; + if (chain || chainAll) { + var result = object(this.__wrapped__), + actions = result.__actions__ = copyArray(this.__actions__); + + actions.push({ 'func': func, 'args': arguments, 'thisArg': object }); + result.__chain__ = chainAll; + return result; + } + return func.apply(object, arrayPush([this.value()], arguments)); + }; + } + }); + + return object; + } + + /** + * Reverts the `_` variable to its previous value and returns a reference to + * the `lodash` function. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @returns {Function} Returns the `lodash` function. + * @example + * + * var lodash = _.noConflict(); + */ + function noConflict() { + if (root._ === this) { + root._ = oldDash; + } + return this; + } + + /** + * This method returns `undefined`. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example + * + * _.times(2, _.noop); + * // => [undefined, undefined] + */ + function noop() { + // No operation performed. + } + + /** + * Generates a unique ID. If `prefix` is given, the ID is appended to it. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {string} [prefix=''] The value to prefix the ID with. + * @returns {string} Returns the unique ID. + * @example + * + * _.uniqueId('contact_'); + * // => 'contact_104' + * + * _.uniqueId(); + * // => '105' + */ + function uniqueId(prefix) { + var id = ++idCounter; + return toString(prefix) + id; + } + + /*------------------------------------------------------------------------*/ + + /** + * Computes the maximum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the maximum value. + * @example + * + * _.max([4, 2, 8, 6]); + * // => 8 + * + * _.max([]); + * // => undefined + */ + function max(array) { + return (array && array.length) + ? baseExtremum(array, identity, baseGt) + : undefined; + } + + /** + * Computes the minimum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the minimum value. + * @example + * + * _.min([4, 2, 8, 6]); + * // => 2 + * + * _.min([]); + * // => undefined + */ + function min(array) { + return (array && array.length) + ? baseExtremum(array, identity, baseLt) + : undefined; + } + + /*------------------------------------------------------------------------*/ + + // Add methods that return wrapped values in chain sequences. + lodash.assignIn = assignIn; + lodash.before = before; + lodash.bind = bind; + lodash.chain = chain; + lodash.compact = compact; + lodash.concat = concat; + lodash.create = create; + lodash.defaults = defaults; + lodash.defer = defer; + lodash.delay = delay; + lodash.filter = filter; + lodash.flatten = flatten; + lodash.flattenDeep = flattenDeep; + lodash.iteratee = iteratee; + lodash.keys = keys; + lodash.map = map; + lodash.matches = matches; + lodash.mixin = mixin; + lodash.negate = negate; + lodash.once = once; + lodash.pick = pick; + lodash.slice = slice; + lodash.sortBy = sortBy; + lodash.tap = tap; + lodash.thru = thru; + lodash.toArray = toArray; + lodash.values = values; + + // Add aliases. + lodash.extend = assignIn; + + // Add methods to `lodash.prototype`. + mixin(lodash, lodash); + + /*------------------------------------------------------------------------*/ + + // Add methods that return unwrapped values in chain sequences. + lodash.clone = clone; + lodash.escape = escape; + lodash.every = every; + lodash.find = find; + lodash.forEach = forEach; + lodash.has = has; + lodash.head = head; + lodash.identity = identity; + lodash.indexOf = indexOf; + lodash.isArguments = isArguments; + lodash.isArray = isArray; + lodash.isBoolean = isBoolean; + lodash.isDate = isDate; + lodash.isEmpty = isEmpty; + lodash.isEqual = isEqual; + lodash.isFinite = isFinite; + lodash.isFunction = isFunction; + lodash.isNaN = isNaN; + lodash.isNull = isNull; + lodash.isNumber = isNumber; + lodash.isObject = isObject; + lodash.isRegExp = isRegExp; + lodash.isString = isString; + lodash.isUndefined = isUndefined; + lodash.last = last; + lodash.max = max; + lodash.min = min; + lodash.noConflict = noConflict; + lodash.noop = noop; + lodash.reduce = reduce; + lodash.result = result; + lodash.size = size; + lodash.some = some; + lodash.uniqueId = uniqueId; + + // Add aliases. + lodash.each = forEach; + lodash.first = head; + + mixin(lodash, (function() { + var source = {}; + baseForOwn(lodash, function(func, methodName) { + if (!hasOwnProperty.call(lodash.prototype, methodName)) { + source[methodName] = func; + } + }); + return source; + }()), { 'chain': false }); + + /*------------------------------------------------------------------------*/ + + /** + * The semantic version number. + * + * @static + * @memberOf _ + * @type {string} + */ + lodash.VERSION = VERSION; + + // Add `Array` methods to `lodash.prototype`. + baseEach(['pop', 'join', 'replace', 'reverse', 'split', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) { + var func = (/^(?:replace|split)$/.test(methodName) ? String.prototype : arrayProto)[methodName], + chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru', + retUnwrapped = /^(?:pop|join|replace|shift)$/.test(methodName); + + lodash.prototype[methodName] = function() { + var args = arguments; + if (retUnwrapped && !this.__chain__) { + var value = this.value(); + return func.apply(isArray(value) ? value : [], args); + } + return this[chainName](function(value) { + return func.apply(isArray(value) ? value : [], args); + }); + }; + }); + + // Add chain sequence methods to the `lodash` wrapper. + lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue; + + /*--------------------------------------------------------------------------*/ + + // Some AMD build optimizers, like r.js, check for condition patterns like: + if (true) { + // Expose Lodash on the global object to prevent errors when Lodash is + // loaded by a script tag in the presence of an AMD loader. + // See http://requirejs.org/docs/errors.html#mismatch for more details. + // Use `_.noConflict` to remove Lodash from the global object. + root._ = lodash; + + // Define as an anonymous module so, through path mapping, it can be + // referenced as the "underscore" module. + !(__WEBPACK_AMD_DEFINE_RESULT__ = function() { + return lodash; + }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + } + // Check for `exports` after `define` in case a build optimizer adds it. + else if (freeModule) { + // Export for Node.js. + (freeModule.exports = lodash)._ = lodash; + // Export for CommonJS support. + freeExports._ = lodash; + } + else { + // Export to the global object. + root._ = lodash; + } + }.call(this)); + + /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()), __webpack_require__(59)(module))) + +/***/ }), +/* 59 */ +/***/ (function(module, exports) { + + module.exports = function(module) { + if(!module.webpackPolyfill) { + module.deprecate = function() {}; + module.paths = []; + // module.parent = undefined by default + module.children = []; + module.webpackPolyfill = 1; + } + return module; + } + + +/***/ }), +/* 60 */ +/***/ (function(module, exports, __webpack_require__) { + + var ArrowLink = __webpack_require__(61); + var BoxArrowLink = __webpack_require__(22); + var PlainLink = __webpack_require__(23); + var OwlDisjointWith = __webpack_require__(46); + var SetOperatorProperty = __webpack_require__(56); + + /** + * Stores the passed properties in links. + * @returns {Function} + */ + module.exports = (function (){ + var linkCreator = {}; + + /** + * Creates links from the passed properties. + * @param properties + */ + linkCreator.createLinks = function ( properties ){ + var links = groupPropertiesToLinks(properties); + + for ( var i = 0, l = links.length; i < l; i++ ) { + var link = links[i]; + + countAndSetLayers(link, links); + countAndSetLoops(link, links); + } + + return links; + }; + + /** + * Creates links of properties and - if existing - their inverses. + * @param properties the properties + * @returns {Array} + */ + function groupPropertiesToLinks( properties ){ + var links = [], + property, + addedProperties = __webpack_require__(62)(); + + for ( var i = 0, l = properties.length; i < l; i++ ) { + property = properties[i]; + + if ( !addedProperties.has(property) ) { + var link = createLink(property); + + property.link(link); + if ( property.inverse() ) { + property.inverse().link(link); + } + + links.push(link); + + addedProperties.add(property); + if ( property.inverse() ) { + addedProperties.add(property.inverse()); + } + } + } + + return links; + } + + function countAndSetLayers( link, allLinks ){ + var layer, + layers, + i, l; + + if ( typeof link.layers() === "undefined" ) { + layers = []; + + // Search for other links that are another layer + for ( i = 0, l = allLinks.length; i < l; i++ ) { + var otherLink = allLinks[i]; + if ( link.domain() === otherLink.domain() && link.range() === otherLink.range() || + link.domain() === otherLink.range() && link.range() === otherLink.domain() ) { + layers.push(otherLink); + } + } + + // Set the results on each of the layers + for ( i = 0, l = layers.length; i < l; ++i ) { + layer = layers[i]; + + layer.layerIndex(i); + layer.layers(layers); + } + } + } + + function countAndSetLoops( link, allLinks ){ + var loop, + loops, + i, l; + + if ( typeof link.loops() === "undefined" ) { + loops = []; + + // Search for other links that are also loops of the same node + for ( i = 0, l = allLinks.length; i < l; i++ ) { + var otherLink = allLinks[i]; + if ( link.domain() === otherLink.domain() && link.domain() === otherLink.range() ) { + loops.push(otherLink); + } + } + + // Set the results on each of the loops + for ( i = 0, l = loops.length; i < l; ++i ) { + loop = loops[i]; + + loop.loopIndex(i); + loop.loops(loops); + } + } + } + + function createLink( property ){ + var domain = property.domain(); + var range = property.range(); + + if ( property instanceof OwlDisjointWith ) { + return new PlainLink(domain, range, property); + } else if ( property instanceof SetOperatorProperty ) { + return new BoxArrowLink(domain, range, property); + } + return new ArrowLink(domain, range, property); + } + + return function (){ + // Return a function to keep module interfaces consistent + return linkCreator; + }; + })(); + + +/***/ }), +/* 61 */ +/***/ (function(module, exports, __webpack_require__) { + + var PlainLink = __webpack_require__(23); + + + module.exports = ArrowLink; + + function ArrowLink( domain, range, property ){ + PlainLink.apply(this, arguments); + } + + ArrowLink.prototype = Object.create(PlainLink.prototype); + ArrowLink.prototype.constructor = ArrowLink; + + + ArrowLink.prototype.draw = function ( linkGroup, markerContainer ){ + var property = this.label().property(); + var inverse = this.label().inverse(); + + createPropertyMarker(markerContainer, property); + if ( inverse ) { + createInverseMarker(markerContainer, inverse); + } + + PlainLink.prototype.draw.apply(this, arguments); + + // attach the markers to the link + linkGroup.attr("marker-end", "url(#" + property.markerId() + ")"); + if ( inverse ) { + linkGroup.attr("marker-start", "url(#" + inverse.markerId() + ")"); + } + }; + + function createPropertyMarker( markerContainer, property ){ + var marker = appendBasicMarker(markerContainer, property); + //marker.attr("refX", 12); + var m1X = -12; + var m1Y = 8; + var m2X = -12; + var m2Y = -8; + marker.append("path") + //.attr("d", "M0,-8L12,0L0,8Z") + .attr("d", "M0,0L " + m1X + "," + m1Y + "L" + m2X + "," + m2Y + "L" + 0 + "," + 0) + .classed(property.markerType(), true); + + property.markerElement(marker); + } + + function createInverseMarker( markerContainer, inverse ){ + var m1X = -12; + var m1Y = 8; + var m2X = -12; + var m2Y = -8; + var inverseMarker = appendBasicMarker(markerContainer, inverse); + inverseMarker.append("path") + //.attr("d", "M12,-8L0,0L12,8Z") + .attr("d", "M0,0L " + -m1X + "," + -m1Y + "L" + -m2X + "," + -m2Y + "L" + 0 + "," + 0) + .classed(inverse.markerType(), true); + + inverse.markerElement(inverseMarker); + } + + function appendBasicMarker( markerContainer, property ){ + return markerContainer.append("marker") + .datum(property) + .attr("id", property.markerId()) + + .attr("viewBox", "-14 -10 28 20") + .attr("markerWidth", 10) + .attr("markerHeight", 10) + //.attr("markerUnits", "userSpaceOnUse") + .attr("orient", "auto"); + } + + +/***/ }), +/* 62 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * A simple incomplete encapsulation of the d3 set, which is able to store webvowl + * elements by using their id. + */ + module.exports = function ( array ){ + + var set = {}, + d3Set = d3.set(array); + + set.has = function ( webvowlElement ){ + return d3Set.has(webvowlElement.id()); + }; + + set.add = function ( webvowlElement ){ + return d3Set.add(webvowlElement.id()); + }; + + set.remove = function ( webvowlElement ){ + return d3Set.remove(webvowlElement.id()); + }; + + set.empty = function (){ + return d3Set.empty(); + }; + + set.size = function (){ + return d3Set.size(); + }; + + return set; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 63 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + var BaseNode = __webpack_require__(9); + var DatatypeNode = __webpack_require__(35); + var Thing = __webpack_require__(31); + var ObjectProperty = __webpack_require__(50); + var DatatypeProperty = __webpack_require__(44); + var RdfsSubClassOf = __webpack_require__(55); + var Label = __webpack_require__(24); + + + var tools = {}; + module.exports = function (){ + return tools; + }; + + tools.isLabel = function ( element ){ + return element instanceof Label; + }; + + tools.isNode = function ( element ){ + return element instanceof BaseNode; + }; + + tools.isDatatype = function ( node ){ + return node instanceof DatatypeNode; + }; + + tools.isThing = function ( node ){ + return node instanceof Thing; + }; + + tools.isProperty = function ( element ){ + return element instanceof BaseProperty; + }; + + tools.isObjectProperty = function ( element ){ + return element instanceof ObjectProperty; + }; + + tools.isDatatypeProperty = function ( element ){ + return element instanceof DatatypeProperty; + }; + + tools.isRdfsSubClassOf = function ( property ){ + return property instanceof RdfsSubClassOf; + }; + + +/***/ }), +/* 64 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {module.exports = function (){ + var options = {}, + data, + graphContainerSelector, + classDistance = 200, + datatypeDistance = 120, + loopDistance = 150, + charge = -500, + gravity = 0.025, + linkStrength = 1, + height = 600, + width = 800, + selectionModules = [], + filterModules = [], + minMagnification = 0.01, + maxMagnification = 4, + compactNotation = false, + dynamicLabelWidth = true, + // some filters + literalFilter, + // menus + gravityMenu, + filterMenu, + loadingModule, + modeMenu, + pausedMenu, + pickAndPinModule, + resetMenu, + searchMenu, + ontologyMenu, + sidebar, + leftSidebar, + editSidebar, + navigationMenu, + exportMenu, + graphObject, + zoomSlider, + datatypeFilter, + focuserModule, + colorExternalsModule, + compactNotationModule, + objectPropertyFilter, + subclassFilter, + setOperatorFilter, + maxLabelWidth = 120, + metadataObject = {}, + generalOntologyMetaData = {}, + disjointPropertyFilter, + rectangularRep = false, + warningModule, + prefixModule, + drawPropertyDraggerOnHover = true, + showDraggerObject = false, + directInputModule, + scaleNodesByIndividuals = true, + useAccuracyHelper = true, + showRenderingStatistic = true, + showInputModality = false, + hideDebugOptions = true, + nodeDegreeFilter, + debugMenu, + + supportedDatatypes = ["rdfs:Literal", "xsd:boolean", "xsd:double", "xsd:integer", "xsd:string", "undefined"], + supportedClasses = ["owl:Thing", "owl:Class", "owl:DeprecatedClass"], + supportedProperties = ["owl:objectProperty", + "rdfs:subClassOf", + "owl:disjointWith", + "owl:allValuesFrom", + "owl:someValuesFrom" + ], + prefixList = { + rdf: 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', + rdfs: 'http://www.w3.org/2000/01/rdf-schema#', + owl: 'http://www.w3.org/2002/07/owl#', + xsd: 'http://www.w3.org/2001/XMLSchema#', + dc: 'http://purl.org/dc/elements/1.1/#', + xml: 'http://www.w3.org/XML/1998/namespace' + }; + + options.clearMetaObject = function (){ + generalOntologyMetaData = {}; + }; + options.clearGeneralMetaObject = function (){ + generalOntologyMetaData = {}; + }; + + options.debugMenu = function ( val ){ + if ( !arguments.length ) return debugMenu; + debugMenu = val; + }; + + options.getHideDebugFeatures = function (){ + return hideDebugOptions; + }; + options.executeHiddenDebugFeatuers = function (){ + hideDebugOptions = !hideDebugOptions; + d3.selectAll(".debugOption").classed("hidden", hideDebugOptions); + if ( hideDebugOptions === false ) { + graphObject.setForceTickFunctionWithFPS(); + } + else { + graphObject.setDefaultForceTickFunction(); + } + if ( debugMenu ) { + debugMenu.updateSettings(); + } + options.setHideDebugFeaturesForDefaultObject(hideDebugOptions); + }; + + + options.addOrUpdateGeneralObjectEntry = function ( property, value ){ + if ( generalOntologyMetaData.hasOwnProperty(property) ) { + //console.log("Updating Property:"+ property); + if ( property === "iri" ) { + if ( validURL(value) === false ) { + warningModule.showWarning("Invalid Ontology IRI", "Input IRI does not represent an URL", "Restoring previous IRI for ontology", 1, false); + return false; + } + } + generalOntologyMetaData[property] = value; + } else { + generalOntologyMetaData[property] = value; + } + return true; + }; + + options.getGeneralMetaObjectProperty = function ( property ){ + if ( generalOntologyMetaData.hasOwnProperty(property) ) { + return generalOntologyMetaData[property]; + } + }; + + options.getGeneralMetaObject = function (){ + return generalOntologyMetaData; + }; + + options.addOrUpdateMetaObjectEntry = function ( property, value ){ + + if ( metadataObject.hasOwnProperty(property) ) { + metadataObject[property] = value; + } else { + metadataObject[property] = value; + } + }; + + options.getMetaObjectProperty = function ( property ){ + if ( metadataObject.hasOwnProperty(property) ) { + return metadataObject[property]; + } + }; + options.getMetaObject = function (){ + return metadataObject; + }; + + + options.prefixList = function (){ + return prefixList; + }; + options.addPrefix = function ( prefix, url ){ + prefixList[prefix] = url; + }; + + function validURL( str ){ + var urlregex = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/; + return urlregex.test(str); + } + + options.updatePrefix = function ( oldPrefix, newPrefix, oldURL, newURL ){ + if ( oldPrefix === newPrefix && oldURL === newURL ) { + // console.log("Nothing to update"); + return true; + } + if ( oldPrefix === newPrefix && oldURL !== newURL && validURL(newURL) === true ) { + // console.log("Update URL"); + prefixList[oldPrefix] = newURL; + } else if ( oldPrefix === newPrefix && oldURL !== newURL && validURL(newURL) === false ) { + if ( validURL(newURL) === false ) { + warningModule.showWarning("Invalid Prefix IRI", "Input IRI does not represent an IRI", "You should enter a valid IRI in form of a URL", 1, false); + return false; + } + + return false; + } + if ( oldPrefix !== newPrefix && validURL(newURL) === true ) { + + // sanity check + if ( prefixList.hasOwnProperty(newPrefix) ) { + // console.log("Already have this prefix!"); + warningModule.showWarning("Prefix Already Exist", "Prefix: " + newPrefix + " is already defined", "You should use an other one", 1, false); + return false; + } + options.removePrefix(oldPrefix); + options.addPrefix(newPrefix, newURL); + editSidebar.updateEditDeleteButtonIds(oldPrefix, newPrefix); + return true; + } + + // console.log("Is new URL ("+newURL+") valid? >> "+validURL(newURL)); + if ( validURL(newURL) === false ) { + warningModule.showWarning("Invalid Prefix IRI", "Input IRI does not represent an URL", "You should enter a valid URL", 1, false); + + } + return false; + }; + + options.removePrefix = function ( prefix ){ + delete prefixList[prefix]; + }; + + + options.supportedDatatypes = function (){ + return supportedDatatypes; + }; + options.supportedClasses = function (){ + return supportedClasses; + }; + options.supportedProperties = function (){ + return supportedProperties; + }; + + options.datatypeFilter = function ( val ){ + if ( !arguments.length ) return datatypeFilter; + datatypeFilter = val; + }; + + options.showDraggerObject = function ( val ){ + if ( !arguments.length ) { + return showDraggerObject; + } + showDraggerObject = val; + }; + options.useAccuracyHelper = function ( val ){ + if ( !arguments.length ) { + return useAccuracyHelper; + } + useAccuracyHelper = val; + }; + options.showAccuracyHelper = function ( val ){ + if ( !arguments.length ) { + return options.showDraggerObject(); + } + options.showDraggerObject(val); + }; + options.showRenderingStatistic = function ( val ){ + if ( !arguments.length ) { + return showRenderingStatistic; + } + showRenderingStatistic = val; + }; + options.showInputModality = function ( val ){ + if ( !arguments.length ) { + return showInputModality; + } + showInputModality = val; + }; + + options.drawPropertyDraggerOnHover = function ( val ){ + if ( !arguments.length ) return drawPropertyDraggerOnHover; + drawPropertyDraggerOnHover = val; + }; + + options.warningModule = function ( val ){ + if ( !arguments.length ) return warningModule; + warningModule = val; + }; + options.directInputModule = function ( val ){ + if ( !arguments.length ) return directInputModule; + directInputModule = val; + }; + options.prefixModule = function ( val ){ + if ( !arguments.length ) return prefixModule; + prefixModule = val; + }; + + options.focuserModule = function ( val ){ + if ( !arguments.length ) return focuserModule; + focuserModule = val; + }; + options.colorExternalsModule = function ( val ){ + if ( !arguments.length ) return colorExternalsModule; + colorExternalsModule = val; + }; + options.compactNotationModule = function ( val ){ + if ( !arguments.length ) return compactNotationModule; + compactNotationModule = val; + }; + + options.maxLabelWidth = function ( val ){ + if ( !arguments.length ) return maxLabelWidth; + maxLabelWidth = val; + }; + options.objectPropertyFilter = function ( val ){ + if ( !arguments.length ) return objectPropertyFilter; + objectPropertyFilter = val; + }; + options.disjointPropertyFilter = function ( val ){ + if ( !arguments.length ) return disjointPropertyFilter; + disjointPropertyFilter = val; + }; + options.subclassFilter = function ( val ){ + if ( !arguments.length ) return subclassFilter; + subclassFilter = val; + }; + options.setOperatorFilter = function ( val ){ + if ( !arguments.length ) return setOperatorFilter; + setOperatorFilter = val; + }; + options.leftSidebar = function ( val ){ + if ( !arguments.length ) return leftSidebar; + leftSidebar = val; + }; + options.editSidebar = function ( val ){ + if ( !arguments.length ) return editSidebar; + editSidebar = val; + }; + + options.zoomSlider = function ( val ){ + if ( !arguments.length ) return zoomSlider; + zoomSlider = val; + }; + + options.graphObject = function ( val ){ + if ( !arguments.length ) return graphObject; + graphObject = val; + }; + + + var defaultOptionsConfig = {}; + defaultOptionsConfig.sidebar = "1"; + defaultOptionsConfig.doc = -1; + defaultOptionsConfig.cd = 200; + defaultOptionsConfig.dd = 120; + defaultOptionsConfig.editorMode = "false"; + defaultOptionsConfig.filter_datatypes = "false"; + defaultOptionsConfig.filter_objectProperties = "false"; + defaultOptionsConfig.filter_sco = "false"; + defaultOptionsConfig.filter_disjoint = "true"; + defaultOptionsConfig.filter_setOperator = "false"; + defaultOptionsConfig.mode_dynamic = "true"; + defaultOptionsConfig.mode_scaling = "true"; + defaultOptionsConfig.mode_compact = "false"; + defaultOptionsConfig.mode_colorExt = "true"; + defaultOptionsConfig.mode_multiColor = "false"; + defaultOptionsConfig.debugFeatures = "false"; + defaultOptionsConfig.rect = 0; + + + options.initialConfig = function (){ + var initCfg = {}; + initCfg.sidebar = "1"; + initCfg.doc = -1; + initCfg.cd = 200; + initCfg.dd = 120; + initCfg.editorMode = "false"; + initCfg.filter_datatypes = "false"; + initCfg.filter_objectProperties = "false"; + initCfg.filter_sco = "false"; + initCfg.filter_disjoint = "true"; + initCfg.filter_setOperator = "false"; + initCfg.mode_dynamic = "true"; + initCfg.mode_scaling = "true"; + initCfg.mode_compact = "false"; + initCfg.mode_colorExt = "true"; + initCfg.mode_multiColor = "false"; + initCfg.mode_pnp = "false"; + initCfg.debugFeatures = "false"; + initCfg.rect = 0; + return initCfg; + }; + + options.setEditorModeForDefaultObject = function ( val ){ + defaultOptionsConfig.editorMode = String(val); + }; + options.setHideDebugFeaturesForDefaultObject = function ( val ){ + defaultOptionsConfig.debugFeatures = String(!val); + }; + + function updateConfigObject(){ + defaultOptionsConfig.sidebar = options.sidebar().getSidebarVisibility(); + defaultOptionsConfig.cd = options.classDistance(); + defaultOptionsConfig.dd = options.datatypeDistance(); + defaultOptionsConfig.filter_datatypes = String(options.filterMenu().getCheckBoxValue("datatypeFilterCheckbox")); + defaultOptionsConfig.filter_sco = String(options.filterMenu().getCheckBoxValue("subclassFilterCheckbox")); + defaultOptionsConfig.filter_disjoint = String(options.filterMenu().getCheckBoxValue("disjointFilterCheckbox")); + defaultOptionsConfig.filter_setOperator = String(options.filterMenu().getCheckBoxValue("setoperatorFilterCheckbox")); + defaultOptionsConfig.filter_objectProperties = String(options.filterMenu().getCheckBoxValue("objectPropertyFilterCheckbox")); + defaultOptionsConfig.mode_dynamic = String(options.dynamicLabelWidth()); + defaultOptionsConfig.mode_scaling = String(options.modeMenu().getCheckBoxValue("nodescalingModuleCheckbox")); + defaultOptionsConfig.mode_compact = String(options.modeMenu().getCheckBoxValue("compactnotationModuleCheckbox")); + defaultOptionsConfig.mode_colorExt = String(options.modeMenu().getCheckBoxValue("colorexternalsModuleCheckbox")); + defaultOptionsConfig.mode_multiColor = String(options.modeMenu().colorModeState()); + defaultOptionsConfig.mode_pnp = String(options.modeMenu().getCheckBoxValue("pickandpinModuleCheckbox")); + defaultOptionsConfig.rect = 0; + } + + options.defaultConfig = function (){ + updateConfigObject(); + return defaultOptionsConfig; + }; + + options.exportMenu = function ( val ){ + if ( !arguments.length ) return exportMenu; + exportMenu = val; + }; + + options.rectangularRepresentation = function ( val ){ + if ( !arguments.length ) { + return rectangularRep; + } else { + var intVal = parseInt(val); + if ( intVal === 0 ) { + rectangularRep = false; + } else { + rectangularRep = true; + } + } + }; + + options.dynamicLabelWidth = function ( val ){ + if ( !arguments.length ) + return dynamicLabelWidth; + else { + dynamicLabelWidth = val; + } + }; + options.sidebar = function ( s ){ + if ( !arguments.length ) return sidebar; + sidebar = s; + return options; + + }; + + options.navigationMenu = function ( m ){ + if ( !arguments.length ) return navigationMenu; + navigationMenu = m; + return options; + + }; + + options.ontologyMenu = function ( m ){ + if ( !arguments.length ) return ontologyMenu; + ontologyMenu = m; + return options; + }; + + options.searchMenu = function ( m ){ + if ( !arguments.length ) return searchMenu; + searchMenu = m; + return options; + }; + + options.resetMenu = function ( m ){ + if ( !arguments.length ) return resetMenu; + resetMenu = m; + return options; + }; + + options.pausedMenu = function ( m ){ + if ( !arguments.length ) return pausedMenu; + pausedMenu = m; + return options; + }; + + options.pickAndPinModule = function ( m ){ + if ( !arguments.length ) return pickAndPinModule; + pickAndPinModule = m; + return options; + }; + + options.gravityMenu = function ( m ){ + if ( !arguments.length ) return gravityMenu; + gravityMenu = m; + return options; + }; + + options.filterMenu = function ( m ){ + if ( !arguments.length ) return filterMenu; + filterMenu = m; + return options; + }; + + options.modeMenu = function ( m ){ + if ( !arguments.length ) return modeMenu; + modeMenu = m; + return options; + }; + + options.charge = function ( p ){ + if ( !arguments.length ) return charge; + charge = +p; + return options; + }; + + options.classDistance = function ( p ){ + if ( !arguments.length ) return classDistance; + classDistance = +p; + return options; + }; + + options.compactNotation = function ( p ){ + + if ( !arguments.length ) return compactNotation; + compactNotation = p; + return options; + }; + + options.data = function ( p ){ + if ( !arguments.length ) return data; + data = p; + return options; + }; + + options.datatypeDistance = function ( p ){ + if ( !arguments.length ) return datatypeDistance; + datatypeDistance = +p; + return options; + }; + + options.filterModules = function ( p ){ + if ( !arguments.length ) return filterModules; + filterModules = p; + return options; + }; + + options.graphContainerSelector = function ( p ){ + if ( !arguments.length ) return graphContainerSelector; + graphContainerSelector = p; + return options; + }; + + options.gravity = function ( p ){ + if ( !arguments.length ) return gravity; + gravity = +p; + return options; + }; + + options.height = function ( p ){ + if ( !arguments.length ) return height; + height = +p; + return options; + }; + + options.linkStrength = function ( p ){ + if ( !arguments.length ) return linkStrength; + linkStrength = +p; + return options; + }; + + options.loopDistance = function ( p ){ + if ( !arguments.length ) return loopDistance; + loopDistance = p; + return options; + }; + + options.minMagnification = function ( p ){ + if ( !arguments.length ) return minMagnification; + minMagnification = +p; + return options; + }; + + options.maxMagnification = function ( p ){ + if ( !arguments.length ) return maxMagnification; + maxMagnification = +p; + return options; + }; + + options.scaleNodesByIndividuals = function ( p ){ + if ( !arguments.length ) return scaleNodesByIndividuals; + scaleNodesByIndividuals = p; + return options; + }; + + options.selectionModules = function ( p ){ + if ( !arguments.length ) return selectionModules; + selectionModules = p; + return options; + }; + + options.width = function ( p ){ + if ( !arguments.length ) return width; + width = +p; + return options; + }; + + options.literalFilter = function ( p ){ + if ( !arguments.length ) return literalFilter; + literalFilter = p; + return options; + }; + options.nodeDegreeFilter = function ( p ){ + if ( !arguments.length ) return nodeDegreeFilter; + nodeDegreeFilter = p; + return options; + }; + + options.loadingModule = function ( p ){ + if ( !arguments.length ) return loadingModule; + loadingModule = p; + return options; + }; + + // define url loadable options; + // update all set values in the default object + options.setOptionsFromURL = function ( opts, changeEditFlag ){ + if ( opts.sidebar !== undefined ) sidebar.showSidebar(parseInt(opts.sidebar), true); + if ( opts.doc ) { + var asInt = parseInt(opts.doc); + filterMenu.setDegreeSliderValue(asInt); + graphObject.setGlobalDOF(asInt); + // reset the value to be -1; + defaultOptionsConfig.doc = -1; + } + var settingFlag = false; + if ( opts.editorMode ) { + if ( opts.editorMode === "true" ) settingFlag = true; + d3.select("#editorModeModuleCheckbox").node().checked = settingFlag; + + if ( changeEditFlag && changeEditFlag === true ) { + graphObject.editorMode(settingFlag); + } + + // update config object + defaultOptionsConfig.editorMode = opts.editorMode; + + } + if ( opts.cd ) { // class distance + options.classDistance(opts.cd); // class distance + defaultOptionsConfig.cd = opts.cd; + } + if ( opts.dd ) { // data distance + options.datatypeDistance(opts.dd); + defaultOptionsConfig.cd = opts.cd; + } + if ( opts.cd || opts.dd ) options.gravityMenu().reset(); // reset the values so the slider is updated; + + + settingFlag = false; + if ( opts.filter_datatypes ) { + if ( opts.filter_datatypes === "true" ) settingFlag = true; + filterMenu.setCheckBoxValue("datatypeFilterCheckbox", settingFlag); + defaultOptionsConfig.filter_datatypes = opts.filter_datatypes; + } + if ( opts.debugFeatures ) { + if ( opts.debugFeatures === "true" ) settingFlag = true; + hideDebugOptions = settingFlag; + if ( options.getHideDebugFeatures() === false ) { + options.executeHiddenDebugFeatuers(); + } + defaultOptionsConfig.debugFeatures = opts.debugFeatures; + } + + settingFlag = false; + if ( opts.filter_objectProperties ) { + if ( opts.filter_objectProperties === "true" ) settingFlag = true; + filterMenu.setCheckBoxValue("objectPropertyFilterCheckbox", settingFlag); + defaultOptionsConfig.filter_objectProperties = opts.filter_objectProperties; + } + settingFlag = false; + if ( opts.filter_sco ) { + if ( opts.filter_sco === "true" ) settingFlag = true; + filterMenu.setCheckBoxValue("subclassFilterCheckbox", settingFlag); + defaultOptionsConfig.filter_sco = opts.filter_sco; + } + settingFlag = false; + if ( opts.filter_disjoint ) { + if ( opts.filter_disjoint === "true" ) settingFlag = true; + filterMenu.setCheckBoxValue("disjointFilterCheckbox", settingFlag); + defaultOptionsConfig.filter_disjoint = opts.filter_disjoint; + } + settingFlag = false; + if ( opts.filter_setOperator ) { + if ( opts.filter_setOperator === "true" ) settingFlag = true; + filterMenu.setCheckBoxValue("setoperatorFilterCheckbox", settingFlag); + defaultOptionsConfig.filter_setOperator = opts.filter_setOperator; + } + filterMenu.updateSettings(); + + // modesMenu + settingFlag = false; + if ( opts.mode_dynamic ) { + if ( opts.mode_dynamic === "true" ) settingFlag = true; + modeMenu.setDynamicLabelWidth(settingFlag); + dynamicLabelWidth = settingFlag; + defaultOptionsConfig.mode_dynamic = opts.mode_dynamic; + } + // settingFlag=false; + // THIS SHOULD NOT BE SET USING THE OPTIONS ON THE URL + // if (opts.mode_picnpin) { + // graph.options().filterMenu().setCheckBoxValue("pickandpin ModuleCheckbox", settingFlag); + // } + + settingFlag = false; + if ( opts.mode_pnp ) { + if ( opts.mode_pnp === "true" ) settingFlag = true; + modeMenu.setCheckBoxValue("pickandpinModuleCheckbox", settingFlag); + defaultOptionsConfig.mode_pnp = opts.mode_pnp; + } + + settingFlag = false; + if ( opts.mode_scaling ) { + if ( opts.mode_scaling === "true" ) settingFlag = true; + modeMenu.setCheckBoxValue("nodescalingModuleCheckbox", settingFlag); + defaultOptionsConfig.mode_scaling = opts.mode_scaling; + } + + settingFlag = false; + if ( opts.mode_compact ) { + if ( opts.mode_compact === "true" ) settingFlag = true; + modeMenu.setCheckBoxValue("compactnotationModuleCheckbox", settingFlag); + defaultOptionsConfig.mode_compact = opts.mode_compact; + } + + settingFlag = false; + if ( opts.mode_colorExt ) { + if ( opts.mode_colorExt === "true" ) settingFlag = true; + modeMenu.setCheckBoxValue("colorexternalsModuleCheckbox", settingFlag); + defaultOptionsConfig.mode_colorExt = opts.mode_colorExt; + } + + settingFlag = false; + if ( opts.mode_multiColor ) { + if ( opts.mode_multiColor === "true" ) settingFlag = true; + modeMenu.setColorSwitchStateUsingURL(settingFlag); + defaultOptionsConfig.mode_multiColor = opts.mode_multiColor; + } + modeMenu.updateSettingsUsingURL(); + options.rectangularRepresentation(opts.rect); + }; + + return options; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 65 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var OwlDisjointWith = __webpack_require__(46); + var attributeParser = __webpack_require__(66)(); + var equivalentPropertyMerger = __webpack_require__(67)(); + var nodePrototypeMap = __webpack_require__(5)(); + var propertyPrototypeMap = __webpack_require__(40)(); + + /** + * Encapsulates the parsing and preparation logic of the input data. + * @param graph the graph object that will be passed to the elements + * @returns {{}} + */ + module.exports = function ( graph ){ + var parser = {}, + nodes, + properties, + classMap, + settingsData, + settingsImported = false, + settingsImportGraphZoomAndTranslation = false, + dictionary = [], + propertyMap; + + parser.getDictionary = function (){ + return dictionary; + }; + + parser.setDictionary = function ( d ){ + dictionary = d; + }; + + parser.settingsImported = function (){ + return settingsImported; + }; + parser.settingsImportGraphZoomAndTranslation = function (){ + return settingsImportGraphZoomAndTranslation; + }; + + parser.parseSettings = function (){ + settingsImported = true; + settingsImportGraphZoomAndTranslation = false; + + if ( !settingsData ) { + settingsImported = false; + return; + } + /** global settings **********************************************************/ + if ( settingsData.global ) { + if ( settingsData.global.zoom ) { + var zoomFactor = settingsData.global.zoom; + graph.setZoom(zoomFactor); + settingsImportGraphZoomAndTranslation = true; + } + + if ( settingsData.global.translation ) { + var translation = settingsData.global.translation; + graph.setTranslation(translation); + settingsImportGraphZoomAndTranslation = true; + } + + if ( settingsData.global.paused ) { + var paused = settingsData.global.paused; + graph.options().pausedMenu().setPauseValue(paused); + } + } + /** Gravity Settings **********************************************************/ + if ( settingsData.gravity ) { + if ( settingsData.gravity.classDistance ) { + var classDistance = settingsData.gravity.classDistance; + graph.options().classDistance(classDistance); + } + if ( settingsData.gravity.datatypeDistance ) { + var datatypeDistance = settingsData.gravity.datatypeDistance; + graph.options().datatypeDistance(datatypeDistance); + } + graph.options().gravityMenu().reset(); // reads the options values and sets the gui values + } + + + // shared variable declaration + + var i; + var id; + var checked; + /** Filter Settings **********************************************************/ + if ( settingsData.filter ) { + // checkbox settings + if ( settingsData.filter.checkBox ) { + var filter_cb = settingsData.filter.checkBox; + for ( i = 0; i < filter_cb.length; i++ ) { + id = filter_cb[i].id; + checked = filter_cb[i].checked; + graph.options().filterMenu().setCheckBoxValue(id, checked); + } + } + // node degree filter settings + if ( settingsData.filter.degreeSliderValue ) { + var degreeSliderValue = settingsData.filter.degreeSliderValue; + graph.options().filterMenu().setDegreeSliderValue(degreeSliderValue); + } + graph.options().filterMenu().updateSettings(); + } + + /** Modes Setting **********************************************************/ + if ( settingsData.modes ) { + // checkbox settings + if ( settingsData.modes.checkBox ) { + var modes_cb = settingsData.modes.checkBox; + for ( i = 0; i < modes_cb.length; i++ ) { + id = modes_cb[i].id; + checked = modes_cb[i].checked; + graph.options().modeMenu().setCheckBoxValue(id, checked); + } + } + // color switch settings + var state = settingsData.modes.colorSwitchState; + // state could be undefined + if ( state === true || state === false ) { + graph.options().modeMenu().setColorSwitchState(state); + } + graph.options().modeMenu().updateSettings(); + } + graph.updateStyle(); // updates graph representation(setting charges and distances) + }; + + + /** + * Parses the ontology data and preprocesses it (e.g. connecting inverse properties and so on). + * @param ontologyData the loaded ontology json file + */ + parser.parse = function ( ontologyData ){ + if ( !ontologyData ) { + nodes = []; + properties = []; + dictionary = []; + return; + } + dictionary = []; + if ( ontologyData.settings ) settingsData = ontologyData.settings; + else settingsData = undefined; + + var classes = combineClasses(ontologyData.class, ontologyData.classAttribute), + datatypes = combineClasses(ontologyData.datatype, ontologyData.datatypeAttribute), + combinedClassesAndDatatypes = classes.concat(datatypes), + unparsedProperties = ontologyData.property || [], + combinedProperties; + + // Inject properties for unions, intersections, ... + addSetOperatorProperties(combinedClassesAndDatatypes, unparsedProperties); + combinedProperties = combineProperties(unparsedProperties, ontologyData.propertyAttribute); + classMap = mapElements(combinedClassesAndDatatypes); + propertyMap = mapElements(combinedProperties); + mergeRangesOfEquivalentProperties(combinedProperties, combinedClassesAndDatatypes); + + // Process the graph data + convertTypesToIris(combinedClassesAndDatatypes, ontologyData.namespace); + convertTypesToIris(combinedProperties, ontologyData.namespace); + nodes = createNodeStructure(combinedClassesAndDatatypes, classMap); + properties = createPropertyStructure(combinedProperties, classMap, propertyMap); + }; + + /** + * @return {Array} the preprocessed nodes + */ + parser.nodes = function (){ + return nodes; + }; + + /** + * @returns {Array} the preprocessed properties + */ + parser.properties = function (){ + return properties; + }; + + /** + * Combines the passed objects with its attributes and prototypes. This also applies + * attributes defined in the base of the prototype. + */ + function combineClasses( baseObjects, attributes ){ + var combinations = []; + var prototypeMap = createLowerCasePrototypeMap(nodePrototypeMap); + + if ( baseObjects ) { + baseObjects.forEach(function ( element ){ + var matchingAttribute; + + if ( attributes ) { + // Look for an attribute with the same id and merge them + for ( var i = 0; i < attributes.length; i++ ) { + var attribute = attributes[i]; + if ( element.id === attribute.id ) { + matchingAttribute = attribute; + break; + } + } + addAdditionalAttributes(element, matchingAttribute); + } + + // Then look for a prototype to add its properties + var Prototype = prototypeMap.get(element.type.toLowerCase()); + + if ( Prototype ) { + addAdditionalAttributes(element, Prototype); // TODO might be unnecessary + + var node = new Prototype(graph); + node.annotations(element.annotations) + .baseIri(element.baseIri) + .comment(element.comment) + .complement(element.complement) + .disjointUnion(element.disjointUnion) + .description(element.description) + .equivalents(element.equivalent) + .id(element.id) + .intersection(element.intersection) + .label(element.label) + // .type(element.type) Ignore, because we predefined it + .union(element.union) + .iri(element.iri); + if ( element.pos ) { + node.x = element.pos[0]; + node.y = element.pos[1]; + node.px = node.x; + node.py = node.y; + } + //class element pin + var elementPinned = element.pinned; + if ( elementPinned === true ) { + node.pinned(true); + graph.options().pickAndPinModule().addPinnedElement(node); + } + // Create node objects for all individuals + if ( element.individuals ) { + element.individuals.forEach(function ( individual ){ + var individualNode = new Prototype(graph); + individualNode.label(individual.labels) + .iri(individual.iri); + + node.individuals().push(individualNode); + }); + } + + if ( element.attributes ) { + var deduplicatedAttributes = d3.set(element.attributes.concat(node.attributes())); + node.attributes(deduplicatedAttributes.values()); + } + combinations.push(node); + } else { + console.error("Unknown element type: " + element.type); + } + }); + } + + return combinations; + } + + function combineProperties( baseObjects, attributes ){ + var combinations = []; + var prototypeMap = createLowerCasePrototypeMap(propertyPrototypeMap); + + if ( baseObjects ) { + baseObjects.forEach(function ( element ){ + var matchingAttribute; + + if ( attributes ) { + // Look for an attribute with the same id and merge them + for ( var i = 0; i < attributes.length; i++ ) { + var attribute = attributes[i]; + if ( element.id === attribute.id ) { + matchingAttribute = attribute; + break; + } + } + addAdditionalAttributes(element, matchingAttribute); + } + + // Then look for a prototype to add its properties + var Prototype = prototypeMap.get(element.type.toLowerCase()); + + if ( Prototype ) { + // Create the matching object and set the properties + var property = new Prototype(graph); + property.annotations(element.annotations) + .baseIri(element.baseIri) + .cardinality(element.cardinality) + .comment(element.comment) + .domain(element.domain) + .description(element.description) + .equivalents(element.equivalent) + .id(element.id) + .inverse(element.inverse) + .label(element.label) + .minCardinality(element.minCardinality) + .maxCardinality(element.maxCardinality) + .range(element.range) + .subproperties(element.subproperty) + .superproperties(element.superproperty) + // .type(element.type) Ignore, because we predefined it + .iri(element.iri); + + // adding property position + if ( element.pos ) { + property.x = element.pos[0]; + property.y = element.pos[1]; + property.px = element.pos[0]; + property.py = element.pos[1]; + } + var elementPinned = element.pinned; + if ( elementPinned === true ) { + property.pinned(true); + graph.options().pickAndPinModule().addPinnedElement(property); + } + + + if ( element.attributes ) { + var deduplicatedAttributes = d3.set(element.attributes.concat(property.attributes())); + property.attributes(deduplicatedAttributes.values()); + } + combinations.push(property); + } else { + console.error("Unknown element type: " + element.type); + } + + }); + } + + return combinations; + } + + function createLowerCasePrototypeMap( prototypeMap ){ + return d3.map(prototypeMap.values(), function ( Prototype ){ + return new Prototype().type().toLowerCase(); + }); + } + + function mergeRangesOfEquivalentProperties( properties, nodes ){ + // pass clones of arrays into the merger to keep the current functionality of this module + var newNodes = equivalentPropertyMerger.merge(properties.slice(), nodes.slice(), propertyMap, classMap, graph); + + // replace all the existing nodes and map the nodes again + nodes.length = 0; + Array.prototype.push.apply(nodes, newNodes); + classMap = mapElements(nodes); + } + + /** + * Checks all attributes which have to be rewritten. + * For example: + * equivalent is filled with only ID's of the corresponding nodes. It would be better to used the + * object instead of the ID so we swap the ID's with the correct object reference and can delete it from drawing + * because it is not necessary. + */ + function createNodeStructure( rawNodes, classMap ){ + var nodes = []; + + // Set the default values + var maxIndividualCount = 0; + rawNodes.forEach(function ( node ){ + maxIndividualCount = Math.max(maxIndividualCount, node.individuals().length); + node.visible(true); + }); + + rawNodes.forEach(function ( node ){ + // Merge and connect the equivalent nodes + processEquivalentIds(node, classMap); + + attributeParser.parseClassAttributes(node); + + node.maxIndividualCount(maxIndividualCount); + }); + + // Collect all nodes that should be displayed + rawNodes.forEach(function ( node ){ + if ( node.visible() ) { + nodes.push(node); + } + }); + + return nodes; + } + + /** + * Sets the disjoint attribute of the nodes if a disjoint label is found. + * @param property + */ + function processDisjoints( property ){ + if ( property instanceof OwlDisjointWith === false ) { + return; + } + + var domain = property.domain(), + range = property.range(); + + // Check the domain. + if ( !domain.disjointWith() ) { + domain.disjointWith([]); + } + + // Check the range. + if ( !range.disjointWith() ) { + range.disjointWith([]); + } + + domain.disjointWith().push(property.range()); + range.disjointWith().push(property.domain()); + } + + /** + * Connect all properties and also their sub- and superproperties. + * We iterate over the rawProperties array because it is way faster than iterating + * over an object and its attributes. + * + * @param rawProperties the properties + * @param classMap a map of all classes + * @param propertyMap the properties in a map + */ + function createPropertyStructure( rawProperties, classMap, propertyMap ){ + var properties = []; + // Set default values + rawProperties.forEach(function ( property ){ + property.visible(true); + }); + + // Connect properties + rawProperties.forEach(function ( property ){ + var domain, + range, + domainObject, + rangeObject, + inverse; + + /* Skip properties that have no information about their domain and range, like + inverse properties with optional inverse and optional domain and range attributes */ + if ( (property.domain() && property.range()) || property.inverse() ) { + + var inversePropertyId = findId(property.inverse()); + // Look if an inverse property exists + if ( inversePropertyId ) { + inverse = propertyMap[inversePropertyId]; + if ( !inverse ) { + console.warn("No inverse property was found for id: " + inversePropertyId); + property.inverse(undefined); + } + } + + // Either domain and range are set on this property or at the inverse + if ( typeof property.domain() !== "undefined" && typeof property.range() !== "undefined" ) { + domain = findId(property.domain()); + range = findId(property.range()); + + domainObject = classMap[domain]; + rangeObject = classMap[range]; + } else if ( inverse ) { + // Domain and range need to be switched + domain = findId(inverse.range()); + range = findId(inverse.domain()); + + domainObject = classMap[domain]; + rangeObject = classMap[range]; + } else { + console.warn("Domain and range not found for property: " + property.id()); + } + + // Set the references on this property + property.domain(domainObject); + property.range(rangeObject); + + // Also set the attributes of the inverse property + if ( inverse ) { + property.inverse(inverse); + inverse.inverse(property); + + // Switch domain and range + inverse.domain(rangeObject); + inverse.range(domainObject); + } + } + // Reference sub- and superproperties + referenceSubOrSuperProperties(property.subproperties()); + referenceSubOrSuperProperties(property.superproperties()); + }); + + // Merge equivalent properties and process disjoints. + rawProperties.forEach(function ( property ){ + processEquivalentIds(property, propertyMap); + processDisjoints(property); + + attributeParser.parsePropertyAttributes(property); + }); + // Add additional information to the properties + rawProperties.forEach(function ( property ){ + // Properties of merged classes should point to/from the visible equivalent class + var propertyWasRerouted = false; + + if ( property.domain() === undefined ) { + console.warn("No Domain was found for id:" + property.id()); + return; + } + + if ( wasNodeMerged(property.domain()) ) { + property.domain(property.domain().equivalentBase()); + propertyWasRerouted = true; + } + if ( property.range() === undefined ) { + console.warn("No range was found for id:" + property.id()); + return; + } + if ( wasNodeMerged(property.range()) ) { + property.range(property.range().equivalentBase()); + propertyWasRerouted = true; + } + // But there should not be two equal properties between the same domain and range + var equalProperty = getOtherEqualProperty(rawProperties, property); + + if ( propertyWasRerouted && equalProperty ) { + property.visible(false); + + equalProperty.redundantProperties().push(property); + } + + // Hide property if source or target node is hidden + if ( !property.domain().visible() || !property.range().visible() ) { + property.visible(false); + } + + // Collect all properties that should be displayed + if ( property.visible() ) { + properties.push(property); + } + }); + return properties; + } + + function referenceSubOrSuperProperties( subOrSuperPropertiesArray ){ + var i, l; + + if ( !subOrSuperPropertiesArray ) { + return; + } + + for ( i = 0, l = subOrSuperPropertiesArray.length; i < l; ++i ) { + var subOrSuperPropertyId = findId(subOrSuperPropertiesArray[i]); + var subOrSuperProperty = propertyMap[subOrSuperPropertyId]; + + if ( subOrSuperProperty ) { + // Replace id with object + subOrSuperPropertiesArray[i] = subOrSuperProperty; + } else { + console.warn("No sub-/superproperty was found for id: " + subOrSuperPropertyId); + } + } + } + + function wasNodeMerged( node ){ + return !node.visible() && node.equivalentBase(); + } + + function getOtherEqualProperty( properties, referenceProperty ){ + var i, l, property; + + for ( i = 0, l = properties.length; i < l; i++ ) { + property = properties[i]; + + if ( referenceProperty === property ) { + continue; + } + if ( referenceProperty.domain() !== property.domain() || + referenceProperty.range() !== property.range() ) { + continue; + } + + // Check for an equal IRI, if non existent compare label and type + if ( referenceProperty.iri() && property.iri() ) { + if ( referenceProperty.iri() === property.iri() ) { + return property; + } + } else if ( referenceProperty.type() === property.type() && + referenceProperty.defaultLabel() === property.defaultLabel() ) { + return property; + } + } + + return undefined; + } + + /** + * Generates and adds properties for links to set operators. + * @param classes unprocessed classes + * @param properties unprocessed properties + */ + function addSetOperatorProperties( classes, properties ){ + function addProperties( domainId, rangeIds, operatorType ){ + if ( !rangeIds ) { + return; + } + + rangeIds.forEach(function ( rangeId, index ){ + var property = { + id: "GENERATED-" + operatorType + "-" + domainId + "-" + rangeId + "-" + index, + type: "setOperatorProperty", + domain: domainId, + range: rangeId + }; + + properties.push(property); + }); + } + + classes.forEach(function ( clss ){ + addProperties(clss.id(), clss.complement(), "COMPLEMENT"); + addProperties(clss.id(), clss.intersection(), "INTERSECTION"); + addProperties(clss.id(), clss.union(), "UNION"); + addProperties(clss.id(), clss.disjointUnion(), "DISJOINTUNION"); + }); + } + + /** + * Replaces the ids of equivalent nodes/properties with the matching objects, cross references them + * and tags them as processed. + * @param element a node or a property + * @param elementMap a map where nodes/properties can be looked up + */ + function processEquivalentIds( element, elementMap ){ + var eqIds = element.equivalents(); + + if ( !eqIds || element.equivalentBase() ) { + return; + } + + // Replace ids with the corresponding objects + for ( var i = 0, l = eqIds.length; i < l; ++i ) { + var eqId = findId(eqIds[i]); + var eqObject = elementMap[eqId]; + + if ( eqObject ) { + // Cross reference both objects + eqObject.equivalents(eqObject.equivalents()); + eqObject.equivalents().push(element); + eqObject.equivalentBase(element); + eqIds[i] = eqObject; + + // Hide other equivalent nodes + eqObject.visible(false); + } else { + console.warn("No class/property was found for equivalent id: " + eqId); + } + } + } + + /** + * Tries to convert the type to an iri and sets it. + * @param elements classes or properties + * @param namespaces an array of namespaces + */ + function convertTypesToIris( elements, namespaces ){ + elements.forEach(function ( element ){ + if ( typeof element.iri() === "string" ) { + element.iri(replaceNamespace(element.iri(), namespaces)); + } + }); + } + + /** + * Creates a map by mapping the array with the passed function. + * @param array the array + * @returns {{}} + */ + function mapElements( array ){ + var map = {}; + for ( var i = 0, length = array.length; i < length; i++ ) { + var element = array[i]; + map[element.id()] = element; + } + return map; + } + + /** + * Adds the attributes of the additional object to the base object, but doesn't + * overwrite existing ones. + * + * @param base the base object + * @param addition the object with additional data + * @returns the combination is also returned + */ + function addAdditionalAttributes( base, addition ){ + // Check for an undefined value + addition = addition || {}; + + for ( var addAttribute in addition ) { + // Add the attribute if it doesn't exist + if ( !(addAttribute in base) && addition.hasOwnProperty(addAttribute) ) { + base[addAttribute] = addition[addAttribute]; + } + } + return base; + } + + /** + * Replaces the namespace (and the separator) if one exists and returns the new value. + * @param address the address with a namespace in it + * @param namespaces an array of namespaces + * @returns {string} the processed address with the (possibly) replaced namespace + */ + function replaceNamespace( address, namespaces ){ + var separatorIndex = address.indexOf(":"); + if ( separatorIndex === -1 ) { + return address; + } + var namespaceName = address.substring(0, separatorIndex); + + for ( var i = 0, length = namespaces.length; i < length; ++i ) { + var namespace = namespaces[i]; + if ( namespaceName === namespace.name ) { + return namespace.iri + address.substring(separatorIndex + 1); + } + } + + return address; + } + + /** + * Looks whether the passed object is already the id or if it was replaced + * with the object that belongs to the id. + * @param object an id, a class or a property + * @returns {string} the id of the passed object or undefined + */ + function findId( object ){ + if ( !object ) { + return undefined; + } else if ( typeof object === "string" ) { + return object; + } else if ( "id" in object ) { + return object.id(); + } else { + console.warn("No Id was found for this object: " + object); + return undefined; + } + } + + return parser; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 66 */ +/***/ (function(module, exports) { + + /** + * Parses the attributes an element has and sets the corresponding attributes. + * @returns {Function} + */ + module.exports = (function (){ + var attributeParser = {}, + // Style + ANONYMOUS = "anonymous", + DATATYPE = "datatype", + DEPRECATED = "deprecated", + EXTERNAL = "external", + OBJECT = "object", + RDF = "rdf", + // Representations + ASYMMETRIC = "asymmetric", + FUNCTIONAL = "functional", + INVERSE_FUNCTIONAL = "inverse functional", + IRREFLEXIVE = "irreflexive", + KEY = "key", + REFLEXIVE = "reflexive", + SYMMETRIC = "symmetric", + TRANSITIVE = "transitive", + // Attribute groups + VISUAL_ATTRIBUTE_GROUPS = [ + [DEPRECATED, DATATYPE, OBJECT, RDF], + [ANONYMOUS] + ], + CLASS_INDICATIONS = [DEPRECATED, EXTERNAL], + PROPERTY_INDICATIONS = [ASYMMETRIC, FUNCTIONAL, INVERSE_FUNCTIONAL, IRREFLEXIVE, KEY, REFLEXIVE, SYMMETRIC, + TRANSITIVE]; + + /** + * Parses and sets the attributes of a class. + * @param clazz + */ + attributeParser.parseClassAttributes = function ( clazz ){ + if ( !(clazz.attributes() instanceof Array) ) { + return; + } + + parseVisualAttributes(clazz); + parseClassIndications(clazz); + }; + + function parseVisualAttributes( element ){ + VISUAL_ATTRIBUTE_GROUPS.forEach(function ( attributeGroup ){ + setVisualAttributeOfGroup(element, attributeGroup); + }); + } + + function setVisualAttributeOfGroup( element, group ){ + var i, l, attribute; + + for ( i = 0, l = group.length; i < l; i++ ) { + attribute = group[i]; + if ( element.attributes().indexOf(attribute) >= 0 ) { + element.visualAttributes().push(attribute); + + // Just a single attribute is possible + break; + } + } + } + + function parseClassIndications( clazz ){ + var i, l, indication; + + for ( i = 0, l = CLASS_INDICATIONS.length; i < l; i++ ) { + indication = CLASS_INDICATIONS[i]; + + if ( clazz.attributes().indexOf(indication) >= 0 ) { + clazz.indications().push(indication); + } + } + } + + /** + * Parses and sets the attributes of a property. + * @param property + */ + attributeParser.parsePropertyAttributes = function ( property ){ + if ( !(property.attributes() instanceof Array) ) { + return; + } + + parseVisualAttributes(property); + parsePropertyIndications(property); + }; + + function parsePropertyIndications( property ){ + var i, l, indication; + + for ( i = 0, l = PROPERTY_INDICATIONS.length; i < l; i++ ) { + indication = PROPERTY_INDICATIONS[i]; + + if ( property.attributes().indexOf(indication) >= 0 ) { + property.indications().push(indication); + } + } + } + + + return function (){ + // Return a function to keep module interfaces consistent + return attributeParser; + }; + })(); + + +/***/ }), +/* 67 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var OwlThing = __webpack_require__(31); + var RdfsLiteral = __webpack_require__(38); + var elementTools = __webpack_require__(63)(); + + var equivalentPropertyMerger = {}; + module.exports = function (){ + return equivalentPropertyMerger; + }; + + var PREFIX = "GENERATED-MERGED_RANGE-"; + var OBJECT_PROPERTY_DEFAULT_RANGE_TYPE = "owl:Thing"; + var DATA_PROPERTY_DEFAULT_RANGE_TYPE = "rdfs:Literal"; + + + equivalentPropertyMerger.merge = function ( properties, nodes, propertyMap, nodeMap, graph ){ + var totalNodeIdsToHide = d3.set(); + var processedPropertyIds = d3.set(); + var mergeNodes = []; + + for ( var i = 0; i < properties.length; i++ ) { + var property = properties[i]; + var equivalents = property.equivalents().map(createIdToPropertyMapper(propertyMap)); + + if ( equivalents.length === 0 || processedPropertyIds.has(property.id()) ) { + continue; + } + + var propertyWithEquivalents = equivalents.concat(property); + + var mergeNode = findMergeNode(propertyWithEquivalents, nodeMap); + if ( !mergeNode ) { + if ( mergeNode !== undefined ) { + mergeNode = createDefaultMergeNode(property, graph); + mergeNodes.push(mergeNode); + } + } + + var nodeIdsToHide = replaceRangesAndCollectNodesToHide(propertyWithEquivalents, mergeNode, properties, + processedPropertyIds); + for ( var j = 0; j < nodeIdsToHide.length; j++ ) { + totalNodeIdsToHide.add(nodeIdsToHide[j]); + } + } + + return filterVisibleNodes(nodes.concat(mergeNodes), totalNodeIdsToHide); + }; + + + function createIdToPropertyMapper( propertyMap ){ + return function ( id ){ + return propertyMap[id]; + }; + } + + function findMergeNode( propertyWithEquivalents, nodeMap ){ + var typeMap = mapPropertiesRangesToType(propertyWithEquivalents, nodeMap); + var typeSet = d3.set(typeMap.keys()); + + // default types are the fallback values and should be ignored for the type determination + typeSet.remove(OBJECT_PROPERTY_DEFAULT_RANGE_TYPE); + typeSet.remove(DATA_PROPERTY_DEFAULT_RANGE_TYPE); + + // exactly one type to chose from -> take the node of this type as range + if ( typeSet.size() === 1 ) { + var type = typeSet.values()[0]; + var ranges = typeMap.get(type); + + if ( ranges.length === 1 ) { + return ranges[0]; + } + } + } + + function mapPropertiesRangesToType( properties, nodeMap ){ + var typeMap = d3.map(); + + properties.forEach(function ( property ){ + if ( property === undefined ) //@ WORKAROUND + return; + + var range = nodeMap[property.range()]; + var type = range.type(); + + if ( !typeMap.has(type) ) { + typeMap.set(type, []); + } + + typeMap.get(type).push(range); + }); + + return typeMap; + } + + function createDefaultMergeNode( property, graph ){ + var range; + + if ( elementTools.isDatatypeProperty(property) ) { + range = new RdfsLiteral(graph); + } else { + range = new OwlThing(graph); + } + range.id(PREFIX + property.id()); + + return range; + } + + function replaceRangesAndCollectNodesToHide( propertyWithEquivalents, mergeNode, properties, processedPropertyIds ){ + var nodesToHide = []; + + propertyWithEquivalents.forEach(function ( property ){ + + if ( property === undefined || mergeNode === undefined ) // @ WORKAROUND + return; + var oldRangeId = property.range(); + property.range(mergeNode.id()); + if ( !isDomainOrRangeOfOtherProperty(oldRangeId, properties) ) { + nodesToHide.push(oldRangeId); + } + + processedPropertyIds.add(property.id()); + }); + + return nodesToHide; + } + + function isDomainOrRangeOfOtherProperty( nodeId, properties ){ + for ( var i = 0; i < properties.length; i++ ) { + var property = properties[i]; + if ( property.domain() === nodeId || property.range() === nodeId ) { + return true; + } + } + + return false; + } + + function filterVisibleNodes( nodes, nodeIdsToHide ){ + var filteredNodes = []; + + nodes.forEach(function ( node ){ + if ( !nodeIdsToHide.has(node.id()) ) { + filteredNodes.push(node); + } + }); + + return filteredNodes; + } + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 68 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {module.exports = function ( graph ){ + /** variable defs **/ + var Class_dragger = {}; + Class_dragger.nodeId = 10001; + Class_dragger.parent = undefined; + Class_dragger.x = 0; + Class_dragger.y = 0; + Class_dragger.rootElement = undefined; + Class_dragger.rootNodeLayer = undefined; + Class_dragger.pathLayer = undefined; + Class_dragger.mouseEnteredVar = false; + Class_dragger.mouseButtonPressed = false; + Class_dragger.nodeElement = undefined; + Class_dragger.draggerObject = undefined; + Class_dragger.pathElement = undefined; + Class_dragger.typus = "Class_dragger"; + + Class_dragger.type = function (){ + return Class_dragger.typus; + }; + + Class_dragger.parentNode = function (){ + return Class_dragger.parent; + }; + + Class_dragger.hideClass_dragger = function ( val ){ + Class_dragger.pathElement.classed("hidden", val); + Class_dragger.nodeElement.classed("hidden", val); + Class_dragger.draggerObject.classed("hidden", val); + }; + + Class_dragger.setParentNode = function ( parentNode ){ + Class_dragger.parent = parentNode; + + if ( Class_dragger.mouseButtonPressed === false ) { + if ( Class_dragger.parent.actualRadius && Class_dragger.parent.actualRadius() ) { + Class_dragger.x = Class_dragger.parent.x + 10 + Class_dragger.parent.actualRadius(); + Class_dragger.y = Class_dragger.parent.y + 10 + Class_dragger.parent.actualRadius(); + } else { + Class_dragger.x = Class_dragger.parent.x + 60; + Class_dragger.y = Class_dragger.parent.y + 60; + } + } + Class_dragger.updateElement(); + }; + + Class_dragger.hideDragger = function ( val ){ + if ( Class_dragger.pathElement ) Class_dragger.pathElement.classed("hidden", val); + if ( Class_dragger.nodeElement ) Class_dragger.nodeElement.classed("hidden", val); + if ( Class_dragger.draggerObject ) Class_dragger.draggerObject.classed("hidden", val); + + }; + /** BASE HANDLING FUNCTIONS ------------------------------------------------- **/ + Class_dragger.id = function ( index ){ + if ( !arguments.length ) { + return Class_dragger.nodeId; + } + Class_dragger.nodeId = index; + }; + + Class_dragger.svgPathLayer = function ( layer ){ + Class_dragger.pathLayer = layer.append('g'); + }; + + Class_dragger.svgRoot = function ( root ){ + if ( !arguments.length ) + return Class_dragger.rootElement; + Class_dragger.rootElement = root; + Class_dragger.rootNodeLayer = Class_dragger.rootElement.append('g'); + Class_dragger.addMouseEvents(); + }; + + /** DRAWING FUNCTIONS ------------------------------------------------- **/ + Class_dragger.drawNode = function (){ + Class_dragger.pathElement = Class_dragger.pathLayer.append('line') + .classed("classNodeDragPath", true); + Class_dragger.pathElement.attr("x1", 0) + .attr("y1", 0) + .attr("x2", 0) + .attr("y2", 0); + + // var lineData = [ + // {"x": 0, "y": 0}, + // {"x": 0, "y": 40}, + // {"x": -40, "y": 0}, + // {"x": 0, "y": -40}, + // {"x": 0, "y": 0} + // ]; + + var lineData = [ + { "x": -40, "y": 0 }, // start + { "x": -20, "y": -10 }, + { "x": 20, "y": -50 }, + { "x": -10, "y": 0 }, // center + { "x": 20, "y": 50 }, + { "x": -20, "y": 10 }, + { "x": -40, "y": 0 } + ]; + + + var lineFunction = d3.svg.line() + .x(function ( d ){ + return d.x; + }) + .y(function ( d ){ + return d.y; + }) + .interpolate("basis-closed"); + var pathData = "M 20,40 C 0,15 0,-15 20,-40 L -40,0 Z"; + // var pathData="M 20,40 C 0,15 0,-15 20,-40 20,-40 -35.22907,-23.905556 -45.113897,0.06313453 -35.22907,20.095453 20,40 20,40 Z"; + // var pathData="M 39.107144,51.25 C 0,17.362169 0,-13.75 39.285715,-49.821429 c 0,0 -69.58321,34.511175 -100.714286,50.35714329 C -22.96643,20.324376 39.107144,51.25 39.107144,51.25 Z"; + + Class_dragger.nodeElement = Class_dragger.rootNodeLayer.append('path').attr("d", pathData); + Class_dragger.nodeElement.classed("classDraggerNode", true); + Class_dragger.draggerObject = Class_dragger.rootNodeLayer.append("circle"); + if ( graph.options().useAccuracyHelper() ) { + Class_dragger.draggerObject.attr("r", 40) + .attr("cx", 0) + .attr("cy", 0) + .classed("superHiddenElement", true); + Class_dragger.draggerObject.classed("superOpacityElement", !graph.options().showDraggerObject()); + } + + + }; + + Class_dragger.updateElement = function (){ + + // Class_dragger.pathLayer.attr("transform", "translate(" + Class_dragger.x + "," + Class_dragger.y + ")"); + // Class_dragger.rootElement.attr("transform", "translate(" + Class_dragger.x + "," + Class_dragger.y + ")"); + if ( Class_dragger.pathElement ) { + + // compute start point ; + + + var sX = Class_dragger.parent.x, + sY = Class_dragger.parent.y, + eX = Class_dragger.x, + eY = Class_dragger.y; + + + // this is used only when you dont have a proper layout ordering; + var dirX = eX - sX; + var dirY = eY - sY; + var len = Math.sqrt((dirX * dirX) + (dirY * dirY)); + + var nX = dirX / len; + var nY = dirY / len; + + var ppX = sX + nX * Class_dragger.parent.actualRadius(); + var ppY = sY + nY * Class_dragger.parent.actualRadius(); + + var ncx = nX * 15; + var ncy = nY * 15; + Class_dragger.draggerObject.attr("cx", ncx) + .attr("cy", ncy); + + Class_dragger.pathElement.attr("x1", ppX) + .attr("y1", ppY) + .attr("x2", eX) + .attr("y2", eY); + } + var angle = Math.atan2(Class_dragger.parent.y - Class_dragger.y, Class_dragger.parent.x - Class_dragger.x) * 180 / Math.PI; + + Class_dragger.nodeElement.attr("transform", "translate(" + Class_dragger.x + "," + Class_dragger.y + ")" + "rotate(" + angle + ")"); + Class_dragger.draggerObject.attr("transform", "translate(" + Class_dragger.x + "," + Class_dragger.y + ")"); + // console.log("update Elmenent root element"+Class_dragger.x + "," + Class_dragger.y ); + // + // Class_dragger.nodeElement.attr("transform", function (d) { + // return "rotate(" + angle + ")"; + // }); + }; + + /** MOUSE HANDLING FUNCTIONS ------------------------------------------------- **/ + + Class_dragger.addMouseEvents = function (){ + // console.log("adding mouse events"); + Class_dragger.rootNodeLayer.selectAll("*").on("mouseover", Class_dragger.onMouseOver) + .on("mouseout", Class_dragger.onMouseOut) + .on("click", function (){ + }) + .on("dblclick", function (){ + }) + .on("mousedown", Class_dragger.mouseDown) + .on("mouseup", Class_dragger.mouseUp); + }; + + Class_dragger.mouseDown = function (){ + Class_dragger.nodeElement.style("cursor", "move"); + Class_dragger.nodeElement.classed("classDraggerNodeHovered", true); + Class_dragger.mouseButtonPressed = true; + console.log("Mouse DOWN from Dragger"); + }; + + Class_dragger.mouseUp = function (){ + Class_dragger.nodeElement.style("cursor", "auto"); + Class_dragger.mouseButtonPressed = false; + console.log("Mouse UP from Dragger"); + }; + + + Class_dragger.mouseEntered = function ( p ){ + if ( !arguments.length ) return Class_dragger.mouseEnteredVar; + Class_dragger.mouseEnteredVar = p; + return Class_dragger; + }; + + Class_dragger.selectedViaTouch = function ( val ){ + Class_dragger.nodeElement.classed("classDraggerNode", !val); + Class_dragger.nodeElement.classed("classDraggerNodeHovered", val); + + }; + + Class_dragger.onMouseOver = function (){ + if ( Class_dragger.mouseEntered() ) { + return; + } + Class_dragger.nodeElement.classed("classDraggerNode", false); + Class_dragger.nodeElement.classed("classDraggerNodeHovered", true); + var selectedNode = Class_dragger.rootElement.node(), + nodeContainer = selectedNode.parentNode; + nodeContainer.appendChild(selectedNode); + + Class_dragger.mouseEntered(true); + + }; + Class_dragger.onMouseOut = function (){ + if ( Class_dragger.mouseButtonPressed === true ) + return; + Class_dragger.nodeElement.classed("classDraggerNodeHovered", false); + Class_dragger.nodeElement.classed("classDraggerNode", true); + Class_dragger.mouseEntered(false); + }; + + Class_dragger.setPosition = function ( x, y ){ + + Class_dragger.x = x; + Class_dragger.y = y; + Class_dragger.updateElement(); + }; + + Class_dragger.setAdditionalClassForClass_dragger = function ( name, val ){ + // console.log("Class_dragger should sett the class here") + // Class_dragger.nodeElement.classed(name,val); + + }; + return Class_dragger; + }; + + + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 69 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {module.exports = function ( graph ){ + /** variable defs **/ + var Range_dragger = {}; + Range_dragger.nodeId = 10002; + Range_dragger.parent = undefined; + Range_dragger.x = 0; + Range_dragger.y = 0; + Range_dragger.rootElement = undefined; + Range_dragger.rootNodeLayer = undefined; + Range_dragger.pathLayer = undefined; + Range_dragger.mouseEnteredVar = false; + Range_dragger.mouseButtonPressed = false; + Range_dragger.nodeElement = undefined; + Range_dragger.draggerObject = undefined; + + Range_dragger.pathElement = undefined; + Range_dragger.typus = "Range_dragger"; + + Range_dragger.type = function (){ + return Range_dragger.typus; + }; + + // TODO: We need the endPoint of the Link here! + Range_dragger.parentNode = function (){ + return Range_dragger.parent; + }; + + Range_dragger.hide_dragger = function ( val ){ + Range_dragger.pathElement.classed("hidden", val); + Range_dragger.nodeElement.classed("hidden", val); + Range_dragger.draggerObject.classed("hidden", val); + }; + Range_dragger.hideDragger = function ( val ){ + if ( Range_dragger.pathElement ) Range_dragger.pathElement.classed("hidden", val); + if ( Range_dragger.nodeElement ) Range_dragger.nodeElement.classed("hidden", val); + if ( Range_dragger.draggerObject ) Range_dragger.draggerObject.classed("hidden", val); + + + }; + + Range_dragger.reDrawEverthing = function (){ + Range_dragger.setParentProperty(Range_dragger.parent); + }; + Range_dragger.updateRange = function ( newRange ){ + + if ( graph.genericPropertySanityCheck(Range_dragger.parent.domain(), newRange, + Range_dragger.parent.type(), + "Could not update range", "Restoring previous range") === false ) return; + + // check for triple duplicates! + + if ( graph.propertyCheckExistenceChecker(Range_dragger.parent, Range_dragger.parent.domain(), newRange) === false ) + return; + if ( Range_dragger.parent.labelElement() === undefined ) return; + if ( Range_dragger.parent.labelElement().attr("transform") === "translate(0,15)" || + Range_dragger.parent.labelElement().attr("transform") === "translate(0,-15)" ) { + var prop = Range_dragger.parent; + Range_dragger.parent.inverse().inverse(null); + Range_dragger.parent.inverse(null); + prop.range(newRange); + } + + else { + Range_dragger.parent.range(newRange); + } + // update the position of the new range + var rX = newRange.x; + var rY = newRange.y; + + var dX = Range_dragger.parent.domain().x; + var dY = Range_dragger.parent.domain().y; + + + // center + var cX = 0.49 * (dX + rX); + var cY = 0.49 * (dY + rY); + // put position there; + Range_dragger.parent.labelElement().x = cX; + Range_dragger.parent.labelElement().px = cX; + Range_dragger.parent.labelElement().y = cY; + Range_dragger.parent.labelElement().py = cY; + + }; + + Range_dragger.setParentProperty = function ( parentProperty, inversed ){ + Range_dragger.parent = parentProperty; + var iP; + var renElem; + Range_dragger.isLoopProperty = false; + if ( parentProperty.domain() === parentProperty.range() ) Range_dragger.isLoopProperty = true; + Range_dragger.parent = parentProperty; + renElem = parentProperty.labelObject(); + if ( inversed === true ) { + if ( parentProperty.labelElement() && parentProperty.labelElement().attr("transform") === "translate(0,15)" ) { + iP = renElem.linkDomainIntersection; + if ( renElem.linkDomainIntersection ) { + Range_dragger.x = iP.x; + Range_dragger.y = iP.y; + } + } else { + iP = renElem.linkRangeIntersection; + if ( renElem.linkRangeIntersection ) { + Range_dragger.x = iP.x; + Range_dragger.y = iP.y; + } + } + } + else { + iP = renElem.linkRangeIntersection; + if ( renElem.linkRangeIntersection ) { + Range_dragger.x = iP.x; + Range_dragger.y = iP.y; + } + } + + Range_dragger.updateElement(); + }; + + + /** BASE HANDLING FUNCTIONS ------------------------------------------------- **/ + Range_dragger.id = function ( index ){ + if ( !arguments.length ) { + return Range_dragger.nodeId; + } + Range_dragger.nodeId = index; + }; + + Range_dragger.svgPathLayer = function ( layer ){ + Range_dragger.pathLayer = layer.append('g'); + }; + + Range_dragger.svgRoot = function ( root ){ + if ( !arguments.length ) + return Range_dragger.rootElement; + Range_dragger.rootElement = root; + Range_dragger.rootNodeLayer = Range_dragger.rootElement.append('g'); + Range_dragger.addMouseEvents(); + }; + + /** DRAWING FUNCTIONS ------------------------------------------------- **/ + Range_dragger.drawNode = function (){ + Range_dragger.pathElement = Range_dragger.pathLayer.append('line') + .classed("classNodeDragPath", true); + Range_dragger.pathElement.attr("x1", 0) + .attr("y1", 0) + .attr("x2", 0) + .attr("y2", 0); + + // var lineData = [ + // {"x": 0, "y": 0}, + // {"x": 0, "y": 40}, + // {"x": -40, "y": 0}, + // {"x": 0, "y": -40}, + // {"x": 0, "y": 0} + // ]; + + var lineData = [ + { "x": -40, "y": 0 }, // start + { "x": -20, "y": -10 }, + { "x": 20, "y": -50 }, + { "x": -10, "y": 0 }, // center + { "x": 20, "y": 50 }, + { "x": -20, "y": 10 }, + { "x": -40, "y": 0 } + ]; + + + var lineFunction = d3.svg.line() + .x(function ( d ){ + return d.x; + }) + .y(function ( d ){ + return d.y; + }) + .interpolate("basis-closed"); + var pathData = "M 61,40 C 41,15 41,-15 61,-40 L 1,0 Z"; + + Range_dragger.nodeElement = Range_dragger.rootNodeLayer.append('path').attr("d", pathData); + Range_dragger.nodeElement.classed("classDraggerNode", true); + if ( graph.options().useAccuracyHelper() ) { + Range_dragger.draggerObject = Range_dragger.rootNodeLayer.append("circle"); + Range_dragger.draggerObject.attr("r", 40) + .attr("cx", 0) + .attr("cy", 0) + .classed("superHiddenElement", true); + Range_dragger.draggerObject.classed("superOpacityElement", !graph.options().showDraggerObject()); + } + + + }; + + Range_dragger.updateElementViaDomainDragger = function ( x, y ){ + + var range_x = x; + var range_y = y; + + var dex = Range_dragger.parent.range().x; + var dey = Range_dragger.parent.range().y; + + var dir_X = x - dex; + var dir_Y = y - dey; + + var len = Math.sqrt(dir_X * dir_X + dir_Y * dir_Y); + + var nX = dir_X / len; + var nY = dir_Y / len; + + + var ep_range_x = dex + nX * Range_dragger.parent.range().actualRadius(); + var ep_range_y = dey + nY * Range_dragger.parent.range().actualRadius(); + + + var dx = range_x - ep_range_x; + var dy = range_y - ep_range_y; + len = Math.sqrt(dx * dx + dy * dy); + nX = dx / len; + nY = dy / len; + + var angle = Math.atan2(ep_range_y - range_y, ep_range_x - range_x) * 180 / Math.PI + 180; + Range_dragger.nodeElement.attr("transform", "translate(" + ep_range_x + "," + ep_range_y + ")" + "rotate(" + angle + ")"); + var doX = ep_range_x + nX * 40; + var doY = ep_range_y + nY * 40; + Range_dragger.draggerObject.attr("transform", "translate(" + doX + "," + doY + ")"); + + }; + + + Range_dragger.updateElement = function (){ + if ( Range_dragger.mouseButtonPressed === true || Range_dragger.parent === undefined ) return; + + var range = Range_dragger.parent.range(); + var iP = Range_dragger.parent.labelObject().linkRangeIntersection; + if ( Range_dragger.parent.labelElement() === undefined ) return; + var offsetForLoop = 48; + if ( Range_dragger.parent.labelElement().attr("transform") === "translate(0,15)" ) { + range = Range_dragger.parent.inverse().domain(); + iP = Range_dragger.parent.labelObject().linkDomainIntersection; + offsetForLoop = -48; + } + + if ( iP === undefined ) return; + var range_x = range.x; + var range_y = range.y; + + var ep_range_x = iP.x; + var ep_range_y = iP.y; + // offset for dragger object + var dx = range_x - ep_range_x; + var dy = range_y - ep_range_y; + var len = Math.sqrt(dx * dx + dy * dy); + var nX = dx / len; + var nY = dy / len; + var angle = Math.atan2(ep_range_y - range_y, ep_range_x - range_x) * 180 / Math.PI; + + var doX = ep_range_x - nX * 40; + var doY = ep_range_y - nY * 40; + + if ( Range_dragger.isLoopProperty === true ) + angle -= offsetForLoop; + + + Range_dragger.nodeElement.attr("transform", "translate(" + ep_range_x + "," + ep_range_y + ")" + "rotate(" + angle + ")"); + Range_dragger.draggerObject.attr("transform", "translate(" + doX + "," + doY + ")"); + + + }; + + /** MOUSE HANDLING FUNCTIONS ------------------------------------------------- **/ + + Range_dragger.addMouseEvents = function (){ + var rootLayer = Range_dragger.rootNodeLayer.selectAll("*"); + rootLayer.on("mouseover", Range_dragger.onMouseOver) + .on("mouseout", Range_dragger.onMouseOut) + .on("click", function (){ + }) + .on("dblclick", function (){ + }) + .on("mousedown", Range_dragger.mouseDown) + .on("mouseup", Range_dragger.mouseUp); + }; + + Range_dragger.mouseDown = function (){ + Range_dragger.nodeElement.style("cursor", "move"); + Range_dragger.nodeElement.classed("classDraggerNodeHovered", true); + Range_dragger.mouseButtonPressed = true; + }; + + Range_dragger.mouseUp = function (){ + Range_dragger.nodeElement.style("cursor", "auto"); + Range_dragger.nodeElement.classed("classDraggerNodeHovered", false); + Range_dragger.mouseButtonPressed = false; + }; + + + Range_dragger.mouseEntered = function ( p ){ + if ( !arguments.length ) return Range_dragger.mouseEnteredVar; + Range_dragger.mouseEnteredVar = p; + return Range_dragger; + }; + + Range_dragger.selectedViaTouch = function ( val ){ + Range_dragger.nodeElement.classed("classDraggerNode", !val); + Range_dragger.nodeElement.classed("classDraggerNodeHovered", val); + + }; + + Range_dragger.onMouseOver = function (){ + if ( Range_dragger.mouseEntered() ) { + return; + } + Range_dragger.nodeElement.classed("classDraggerNode", false); + Range_dragger.nodeElement.classed("classDraggerNodeHovered", true); + var selectedNode = Range_dragger.rootElement.node(), + nodeContainer = selectedNode.parentNode; + nodeContainer.appendChild(selectedNode); + + Range_dragger.mouseEntered(true); + + }; + Range_dragger.onMouseOut = function (){ + if ( Range_dragger.mouseButtonPressed === true ) + return; + Range_dragger.nodeElement.classed("classDraggerNodeHovered", false); + Range_dragger.nodeElement.classed("classDraggerNode", true); + Range_dragger.mouseEntered(false); + }; + + Range_dragger.setPosition = function ( x, y ){ + var range_x = Range_dragger.parent.domain().x; + var range_y = Range_dragger.parent.domain().y; + + // var position of the rangeEndPoint + var ep_range_x = x; + var ep_range_y = y; + + // offset for dragger object + var dx = range_x - ep_range_x; + var dy = range_y - ep_range_y; + + var len = Math.sqrt(dx * dx + dy * dy); + + var nX = dx / len; + var nY = dy / len; + + + var angle = Math.atan2(dy, dx) * 180 / Math.PI; + var doX = ep_range_x + nX * 40; + var doY = ep_range_y + nY * 40; + Range_dragger.nodeElement.attr("transform", "translate(" + ep_range_x + "," + ep_range_y + ")" + "rotate(" + angle + ")"); + Range_dragger.draggerObject.attr("transform", "translate(" + doX + "," + doY + ")"); + Range_dragger.x = x; + Range_dragger.y = y; + + }; + + Range_dragger.setAdditionalClassForClass_dragger = function ( name, val ){ + + }; + return Range_dragger; + }; + + + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 70 */ +/***/ (function(module, exports) { + + module.exports = function ( graph ){ + /** variable defs **/ + var Domain_dragger = {}; + Domain_dragger.nodeId = 10002; + Domain_dragger.parent = undefined; + Domain_dragger.x = 0; + Domain_dragger.y = 0; + Domain_dragger.rootElement = undefined; + Domain_dragger.rootNodeLayer = undefined; + Domain_dragger.pathLayer = undefined; + Domain_dragger.mouseEnteredVar = false; + Domain_dragger.mouseButtonPressed = false; + Domain_dragger.nodeElement = undefined; + Domain_dragger.draggerObject = undefined; + + Domain_dragger.pathElement = undefined; + Domain_dragger.typus = "Domain_dragger"; + + Domain_dragger.type = function (){ + return Domain_dragger.typus; + }; + + + // TODO: We need the endPoint of the Link here! + Domain_dragger.parentNode = function (){ + return Domain_dragger.parent; + }; + + Domain_dragger.hide_dragger = function ( val ){ + Domain_dragger.pathElement.classed("hidden", val); + Domain_dragger.nodeElement.classed("hidden", val); + Domain_dragger.draggerObject.classed("hidden", val); + }; + + Domain_dragger.reDrawEverthing = function (){ + Domain_dragger.setParentProperty(Domain_dragger.parent); + }; + Domain_dragger.updateDomain = function ( newDomain ){ + + if ( graph.genericPropertySanityCheck(Domain_dragger.parent.range(), newDomain, Domain_dragger.parent.type(), + "Could not update domain", "Restoring previous domain") === false ) { + Domain_dragger.updateElement(); + return; + } + + if ( graph.propertyCheckExistenceChecker(Domain_dragger.parent, newDomain, Domain_dragger.parent.range()) === false ) + return; + + + if ( Domain_dragger.parent.labelElement() === undefined ) { + Domain_dragger.updateElement(); + return; + } + if ( Domain_dragger.parent.labelElement().attr("transform") === "translate(0,15)" || + Domain_dragger.parent.labelElement().attr("transform") === "translate(0,-15)" ) { + var prop = Domain_dragger.parent; + Domain_dragger.parent.inverse().inverse(null); + Domain_dragger.parent.inverse(null); + console.log("SPLITTING ITEMS!"); + prop.domain(newDomain); + } + else { + Domain_dragger.parent.domain(newDomain); + } + + // update the position of the new range + var rX = Domain_dragger.parent.range().x; + var rY = Domain_dragger.parent.range().y; + var dX = newDomain.x; + var dY = newDomain.y; + + // center + var cX = 0.49 * (dX + rX); + var cY = 0.49 * (dY + rY); + // put position there; + Domain_dragger.parent.labelObject().x = cX; + Domain_dragger.parent.labelObject().px = cX; + Domain_dragger.parent.labelObject().y = cY; + Domain_dragger.parent.labelObject().py = cY; + Domain_dragger.updateElement(); + + }; + + Domain_dragger.setParentProperty = function ( parentProperty, inverted ){ + Domain_dragger.invertedProperty = inverted; + var renElem; + var iP; + Domain_dragger.isLoopProperty = false; + if ( parentProperty.domain() === parentProperty.range() ) + Domain_dragger.isLoopProperty = true; + + Domain_dragger.parent = parentProperty; + renElem = parentProperty.labelObject(); + if ( inverted === true ) { + + // this is the lower element + if ( parentProperty.labelElement() && parentProperty.labelElement().attr("transform") === "translate(0,15)" ) { + // console.log("This is the lower element!"); + iP = renElem.linkRangeIntersection; + if ( renElem.linkRangeIntersection ) { + Domain_dragger.x = iP.x; + Domain_dragger.y = iP.y; + } + } + else { + // console.log("This is the upper element"); + iP = renElem.linkDomainIntersection; + if ( renElem.linkDomainIntersection ) { + Domain_dragger.x = iP.x; + Domain_dragger.y = iP.y; + } + } + } + else { + // console.log("This is single element"); + iP = renElem.linkDomainIntersection; + if ( renElem.linkDomainIntersection ) { + Domain_dragger.x = iP.x; + Domain_dragger.y = iP.y; + } + } + Domain_dragger.updateElement(); + + }; + + Domain_dragger.hideDragger = function ( val ){ + if ( Domain_dragger.pathElement ) Domain_dragger.pathElement.classed("hidden", val); + if ( Domain_dragger.nodeElement ) Domain_dragger.nodeElement.classed("hidden", val); + if ( Domain_dragger.draggerObject ) Domain_dragger.draggerObject.classed("hidden", val); + + + }; + /** BASE HANDLING FUNCTIONS ------------------------------------------------- **/ + Domain_dragger.id = function ( index ){ + if ( !arguments.length ) { + return Domain_dragger.nodeId; + } + Domain_dragger.nodeId = index; + }; + + Domain_dragger.svgPathLayer = function ( layer ){ + Domain_dragger.pathLayer = layer.append('g'); + }; + + Domain_dragger.svgRoot = function ( root ){ + if ( !arguments.length ) + return Domain_dragger.rootElement; + Domain_dragger.rootElement = root; + Domain_dragger.rootNodeLayer = Domain_dragger.rootElement.append('g'); + Domain_dragger.addMouseEvents(); + }; + + /** DRAWING FUNCTIONS ------------------------------------------------- **/ + Domain_dragger.drawNode = function (){ + Domain_dragger.pathElement = Domain_dragger.pathLayer.append('line') + .classed("classNodeDragPath", true); + Domain_dragger.pathElement.attr("x1", 0) + .attr("y1", 0) + .attr("x2", 0) + .attr("y2", 0); + + var pathData = "M 10,40 C -10,15 -10,-15 10,-40 -8.8233455,-13.641384 -36.711107,-5.1228436 -50,0 -36.696429,4.9079017 -8.6403157,13.745728 10,40 Z"; + Domain_dragger.nodeElement = Domain_dragger.rootNodeLayer.append('path').attr("d", pathData); + Domain_dragger.nodeElement.classed("classDraggerNode", true); + if ( graph.options().useAccuracyHelper() ) { + Domain_dragger.draggerObject = Domain_dragger.rootNodeLayer.append("circle"); + Domain_dragger.draggerObject.attr("r", 40) + .attr("cx", 0) + .attr("cy", 0) + .classed("superHiddenElement", true); + Domain_dragger.draggerObject.classed("superOpacityElement", !graph.options().showDraggerObject()); + } + + + }; + Domain_dragger.updateElementViaRangeDragger = function ( x, y ){ + var range_x = x; + var range_y = y; + + var dex = Domain_dragger.parent.domain().x; + var dey = Domain_dragger.parent.domain().y; + + var dir_X = x - dex; + var dir_Y = y - dey; + + var len = Math.sqrt(dir_X * dir_X + dir_Y * dir_Y); + + var nX = dir_X / len; + var nY = dir_Y / len; + + + var ep_range_x = dex + nX * Domain_dragger.parent.domain().actualRadius(); + var ep_range_y = dey + nY * Domain_dragger.parent.domain().actualRadius(); + + var angle = Math.atan2(ep_range_y - range_y, ep_range_x - range_x) * 180 / Math.PI; + + Domain_dragger.nodeElement.attr("transform", "translate(" + ep_range_x + "," + ep_range_y + ")" + "rotate(" + angle + ")"); + var dox = ep_range_x + nX * 20; + var doy = ep_range_y + nY * 20; + Domain_dragger.draggerObject.attr("transform", "translate(" + dox + "," + doy + ")"); + }; + + + Domain_dragger.updateElement = function (){ + if ( Domain_dragger.mouseButtonPressed === true || Domain_dragger.parent === undefined ) return; + + var domain = Domain_dragger.parent.domain(); + var iP = Domain_dragger.parent.labelObject().linkDomainIntersection; + if ( Domain_dragger.parent.labelElement() === undefined ) return; + if ( Domain_dragger.parent.labelElement().attr("transform") === "translate(0,15)" ) { + Domain_dragger.parent.inverse().domain(); + iP = Domain_dragger.parent.labelObject().linkRangeIntersection; + + } + var range_x = domain.x; + var range_y = domain.y; + + + if ( iP === undefined ) return; + var ep_range_x = iP.x; + var ep_range_y = iP.y; + + var dx = range_x - ep_range_x; + var dy = range_y - ep_range_y; + var len = Math.sqrt(dx * dx + dy * dy); + + var nX = dx / len; + var nY = dy / len; + + var dox = ep_range_x - nX * 20; + var doy = ep_range_y - nY * 20; + var angle = Math.atan2(ep_range_y - range_y, ep_range_x - range_x) * 180 / Math.PI + 180; + + Domain_dragger.nodeElement.attr("transform", "translate(" + ep_range_x + "," + ep_range_y + ")" + "rotate(" + angle + ")"); + Domain_dragger.draggerObject.attr("transform", "translate(" + dox + "," + doy + ")"); + }; + + /** MOUSE HANDLING FUNCTIONS ------------------------------------------------- **/ + + Domain_dragger.addMouseEvents = function (){ + var rootLayer = Domain_dragger.rootNodeLayer.selectAll("*"); + rootLayer.on("mouseover", Domain_dragger.onMouseOver) + .on("mouseout", Domain_dragger.onMouseOut) + .on("click", function (){ + }) + .on("dblclick", function (){ + }) + .on("mousedown", Domain_dragger.mouseDown) + .on("mouseup", Domain_dragger.mouseUp); + }; + + Domain_dragger.mouseDown = function (){ + Domain_dragger.nodeElement.style("cursor", "move"); + Domain_dragger.nodeElement.classed("classDraggerNodeHovered", true); + Domain_dragger.mouseButtonPressed = true; + }; + + Domain_dragger.mouseUp = function (){ + Domain_dragger.nodeElement.style("cursor", "auto"); + Domain_dragger.nodeElement.classed("classDraggerNodeHovered", false); + Domain_dragger.mouseButtonPressed = false; + }; + + + Domain_dragger.mouseEntered = function ( p ){ + if ( !arguments.length ) return Domain_dragger.mouseEnteredVar; + Domain_dragger.mouseEnteredVar = p; + return Domain_dragger; + }; + + Domain_dragger.selectedViaTouch = function ( val ){ + Domain_dragger.nodeElement.classed("classDraggerNode", !val); + Domain_dragger.nodeElement.classed("classDraggerNodeHovered", val); + + }; + + Domain_dragger.onMouseOver = function (){ + if ( Domain_dragger.mouseEntered() ) { + return; + } + Domain_dragger.nodeElement.classed("classDraggerNode", false); + Domain_dragger.nodeElement.classed("classDraggerNodeHovered", true); + var selectedNode = Domain_dragger.rootElement.node(), + nodeContainer = selectedNode.parentNode; + nodeContainer.appendChild(selectedNode); + + Domain_dragger.mouseEntered(true); + + }; + Domain_dragger.onMouseOut = function (){ + if ( Domain_dragger.mouseButtonPressed === true ) + return; + Domain_dragger.nodeElement.classed("classDraggerNodeHovered", false); + Domain_dragger.nodeElement.classed("classDraggerNode", true); + Domain_dragger.mouseEntered(false); + }; + + Domain_dragger.setPosition = function ( x, y ){ + var range_x = Domain_dragger.parent.range().x; + var range_y = Domain_dragger.parent.range().y; + + // var position of the rangeEndPoint + var ep_range_x = x; + var ep_range_y = y; + + // offset for dragger object + var dx = range_x - ep_range_x; + var dy = range_y - ep_range_y; + + var len = Math.sqrt(dx * dx + dy * dy); + + var nX = dx / len; + var nY = dy / len; + var dox = ep_range_x + nX * 20; + var doy = ep_range_y + nY * 20; + + var angle = Math.atan2(range_y - ep_range_y, range_x - ep_range_x) * 180 / Math.PI + 180; + + Domain_dragger.nodeElement.attr("transform", "translate(" + ep_range_x + "," + ep_range_y + ")" + "rotate(" + angle + ")"); + Domain_dragger.draggerObject.attr("transform", "translate(" + dox + "," + doy + ")"); + + Domain_dragger.x = x; + Domain_dragger.y = y; + + }; + + Domain_dragger.setAdditionalClassForClass_dragger = function ( name, val ){ + // console.log("Class_dragger should sett the class here") + // Class_dragger.nodeElement.classed(name,val); + + }; + return Domain_dragger; + }; + + + + +/***/ }), +/* 71 */ +/***/ (function(module, exports, __webpack_require__) { + + var CenteringTextElement = __webpack_require__(14); + var elementTools = __webpack_require__(63)(); + var math = __webpack_require__(43)(); + module.exports = function ( graph ){ + /** variable defs **/ + var ShadowClone = {}; + ShadowClone.nodeId = 10003; + ShadowClone.parent = undefined; + ShadowClone.s_x = 0; + ShadowClone.s_y = 0; + ShadowClone.e_x = 0; + ShadowClone.e_y = 0; + ShadowClone.rootElement = undefined; + ShadowClone.rootNodeLayer = undefined; + ShadowClone.pathLayer = undefined; + ShadowClone.nodeElement = undefined; + ShadowClone.pathElement = undefined; + ShadowClone.typus = "shadowClone"; + + + ShadowClone.type = function (){ + return ShadowClone.typus; + }; + + // TODO: We need the endPoint of the Link here! + ShadowClone.parentNode = function (){ + return ShadowClone.parent; + }; + + ShadowClone.setParentProperty = function ( parentProperty, inverted ){ + ShadowClone.invertedProperty = inverted; + ShadowClone.parent = parentProperty; + var renElment; + if ( inverted === true ) { + renElment = parentProperty.inverse().labelObject(); + if ( renElment.linkRangeIntersection && renElment.linkDomainIntersection ) { + var iiP_range = renElment.linkDomainIntersection; + var iiP_domain = renElment.linkRangeIntersection; + ShadowClone.s_x = iiP_domain.x; + ShadowClone.s_y = iiP_domain.y; + ShadowClone.e_x = iiP_range.x; + ShadowClone.e_y = iiP_range.y; + } + } + else { + renElment = parentProperty.labelObject(); + + if ( renElment.linkRangeIntersection && renElment.linkDomainIntersection ) { + var iP_range = renElment.linkRangeIntersection; + var iP_domain = renElment.linkDomainIntersection; + ShadowClone.s_x = iP_domain.x; + ShadowClone.s_y = iP_domain.y; + ShadowClone.e_x = iP_range.x; + ShadowClone.e_y = iP_range.y; + } + + } + + ShadowClone.rootNodeLayer.remove(); + ShadowClone.rootNodeLayer = ShadowClone.rootElement.append('g'); + ShadowClone.rootNodeLayer.datum(parentProperty); + + // ShadowClone.pathElement.remove(); + // ShadowClone.pathElement = ShadowClone.pathLayer.append('line'); + // + // ShadowClone.pathElement.attr("x1", ShadowClone.s_x) + // .attr("y1", ShadowClone.s_y) + // .attr("x2", ShadowClone.e_x) + // .attr("y2", ShadowClone.e_y); + ShadowClone.pathElement.remove(); + ShadowClone.pathElement = ShadowClone.pathLayer.append('line'); + ShadowClone.markerElement = ShadowClone.pathLayer.append("marker"); + ShadowClone.markerElement.attr("id", "shadowCloneMarker"); + ShadowClone.pathElement.attr("x1", ShadowClone.e_x) + .attr("y1", ShadowClone.e_y) + .attr("x2", ShadowClone.s_x) + .attr("y2", ShadowClone.s_y); + ShadowClone.pathElement.classed(parentProperty.linkType(), true); + + if ( parentProperty.markerElement() ) { + ShadowClone.markerElement.attr("viewBox", parentProperty.markerElement().attr("viewBox")) + .attr("markerWidth", parentProperty.markerElement().attr("markerWidth")) + .attr("markerHeight", parentProperty.markerElement().attr("markerHeight")) + .attr("orient", parentProperty.markerElement().attr("orient")); + + var markerPath = parentProperty.markerElement().select("path"); + ShadowClone.markerElement.append("path") + .attr("d", markerPath.attr("d")) + .classed(parentProperty.markerType(), true); + + ShadowClone.pathElement.attr("marker-end", "url(#" + "shadowCloneMarker" + ")"); + ShadowClone.markerElement.classed("hidden", !elementTools.isDatatypeProperty(parentProperty)); + } + var rect = ShadowClone.rootNodeLayer.append("rect") + .classed(parentProperty.styleClass(), true) + .classed("property", true) + .attr("x", -parentProperty.width() / 2) + .attr("y", -parentProperty.height() / 2) + .attr("width", parentProperty.width()) + .attr("height", parentProperty.height()); + + if ( parentProperty.visualAttributes() ) { + rect.classed(parentProperty.visualAttributes(), true); + } + rect.classed("datatype", false); + var bgColor = parentProperty.backgroundColor(); + + if ( parentProperty.attributes().indexOf("deprecated") > -1 ) { + bgColor = undefined; + rect.classed("deprecatedproperty", true); + } else { + rect.classed("deprecatedproperty", false); + } + rect.style("fill", bgColor); + + // add Text; + var equivalentsString = parentProperty.equivalentsString(); + var suffixForFollowingEquivalents = equivalentsString ? "," : ""; + + + var textElement = new CenteringTextElement(ShadowClone.rootNodeLayer, bgColor); + textElement.addText(parentProperty.labelForCurrentLanguage(), "", suffixForFollowingEquivalents); + textElement.addEquivalents(equivalentsString); + textElement.addSubText(parentProperty.indicationString()); + + + var cx = 0.5 * (ShadowClone.s_x + ShadowClone.e_x); + var cy = 0.5 * (ShadowClone.s_y + ShadowClone.e_y); + ShadowClone.rootNodeLayer.attr("transform", "translate(" + cx + "," + cy + ")"); + ShadowClone.rootNodeLayer.classed("hidden", true); + ShadowClone.pathElement.classed("hidden", true); + + + }; + + ShadowClone.hideClone = function ( val ){ + if ( ShadowClone.rootNodeLayer ) ShadowClone.rootNodeLayer.classed("hidden", val); + if ( ShadowClone.pathElement ) ShadowClone.pathElement.classed("hidden", val); + }; + + ShadowClone.hideParentProperty = function ( val ){ + + var labelObj = ShadowClone.parent.labelObject(); + if ( labelObj ) { + if ( ShadowClone.parent.labelElement().attr("transform") === "translate(0,15)" || + ShadowClone.parent.labelElement().attr("transform") === "translate(0,-15)" ) + ShadowClone.parent.inverse().hide(val); + + + } + ShadowClone.parent.hide(val); + + + }; + + /** BASE HANDLING FUNCTIONS ------------------------------------------------- **/ + ShadowClone.id = function ( index ){ + if ( !arguments.length ) { + return ShadowClone.nodeId; + } + ShadowClone.nodeId = index; + }; + + ShadowClone.svgPathLayer = function ( layer ){ + ShadowClone.pathLayer = layer.append('g'); + }; + + ShadowClone.svgRoot = function ( root ){ + if ( !arguments.length ) + return ShadowClone.rootElement; + ShadowClone.rootElement = root; + ShadowClone.rootNodeLayer = ShadowClone.rootElement.append('g'); + + }; + + /** DRAWING FUNCTIONS ------------------------------------------------- **/ + ShadowClone.drawClone = function (){ + ShadowClone.pathElement = ShadowClone.pathLayer.append('line'); + + ShadowClone.pathElement.attr("x1", 0) + .attr("y1", 0) + .attr("x2", 0) + .attr("y2", 0); + + }; + + + ShadowClone.updateElement = function (){ + ShadowClone.pathElement.attr("x1", ShadowClone.e_x) + .attr("y1", ShadowClone.e_y) + .attr("x2", ShadowClone.s_x) + .attr("y2", ShadowClone.s_y); + + var cx = 0.5 * (ShadowClone.s_x + ShadowClone.e_x); + var cy = 0.5 * (ShadowClone.s_y + ShadowClone.e_y); + ShadowClone.rootNodeLayer.attr("transform", "translate(" + cx + "," + cy + ")"); + }; + + ShadowClone.setInitialPosition = function (){ + + var renElment = ShadowClone.parent.labelObject(); + if ( renElment.linkRangeIntersection && renElment.linkDomainIntersection ) { + var iP_range = renElment.linkRangeIntersection; + var iP_domain = renElment.linkDomainIntersection; + ShadowClone.e_x = iP_domain.x; + ShadowClone.e_y = iP_domain.y; + ShadowClone.s_x = iP_range.x; + ShadowClone.s_y = iP_range.y; + } + ShadowClone.updateElement(); + return; + // + // var rex=ShadowClone.parent.range().x; + // var rey=ShadowClone.parent.range().y; + // + // + // var dex=ShadowClone.parent.domain().x; + // var dey=ShadowClone.parent.domain().y; + // + // + // var dir_X= rex-dex; + // var dir_Y= rey-dey; + // + // var len=Math.sqrt(dir_X*dir_X+dir_Y*dir_Y); + // var nX=dir_X/len; + // var nY=dir_Y/len; + // ShadowClone.s_x=rex-nX*ShadowClone.parent.range().actualRadius(); + // ShadowClone.s_y=rey-nY*ShadowClone.parent.range().actualRadius(); + // + // ShadowClone.e_x=dex+nX*ShadowClone.parent.domain().actualRadius(); + // ShadowClone.e_y=dey+nY*ShadowClone.parent.domain().actualRadius(); + // ShadowClone.updateElement(); + + }; + ShadowClone.setPositionDomain = function ( e_x, e_y ){ + + var rex = ShadowClone.parent.range().x; + var rey = ShadowClone.parent.range().y; + + + if ( elementTools.isDatatype(ShadowClone.parent.range()) === true ) { + var intersection = math.calculateIntersection({ x: e_x, y: e_y }, ShadowClone.parent.range(), 0); + ShadowClone.s_x = intersection.x; + ShadowClone.s_y = intersection.y; + } else { + var dir_X = rex - e_x; + var dir_Y = rey - e_y; + + var len = Math.sqrt(dir_X * dir_X + dir_Y * dir_Y); + + var nX = dir_X / len; + var nY = dir_Y / len; + ShadowClone.s_x = rex - nX * ShadowClone.parent.range().actualRadius(); + ShadowClone.s_y = rey - nY * ShadowClone.parent.range().actualRadius(); + + } + + + ShadowClone.e_x = e_x; + ShadowClone.e_y = e_y; + ShadowClone.updateElement(); + }; + + ShadowClone.setPosition = function ( s_x, s_y ){ + ShadowClone.s_x = s_x; + ShadowClone.s_y = s_y; + + // add normalized dir; + + var dex = ShadowClone.parent.domain().x; + var dey = ShadowClone.parent.domain().y; + + var dir_X = s_x - dex; + var dir_Y = s_y - dey; + + var len = Math.sqrt(dir_X * dir_X + dir_Y * dir_Y); + + var nX = dir_X / len; + var nY = dir_Y / len; + + + ShadowClone.e_x = dex + nX * ShadowClone.parent.domain().actualRadius(); + ShadowClone.e_y = dey + nY * ShadowClone.parent.domain().actualRadius(); + + + ShadowClone.updateElement(); + + + }; + + + /** MOUSE HANDLING FUNCTIONS ------------------------------------------------- **/ + + return ShadowClone; + }; + + + + +/***/ }), +/* 72 */ +/***/ (function(module, exports) { + + module.exports = function ( graph ){ + /** variable defs **/ + var prefixRepresentationModule = {}; + + var currentPrefixModel; + + prefixRepresentationModule.updatePrefixModel = function (){ + currentPrefixModel = graph.options().prefixList(); + }; + + + prefixRepresentationModule.validURL = function ( url ){ + return validURL(url); + }; + function validURL( str ){ + var urlregex = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/; + return urlregex.test(str); + } + + function splitURLIntoBaseAndResource( fullURL ){ + var splitedURL = { base: "", resource: "" }; + if ( fullURL === undefined ) { + splitedURL = { base: "ERROR", resource: "NOT FOUND" }; + return splitedURL; + } + + var resource, base; + // check if there is a last hashTag + if ( fullURL.indexOf("#") > -1 ) { + resource = fullURL.substring(fullURL.lastIndexOf('#') + 1); + base = fullURL.substring(0, fullURL.length - resource.length); + // overwrite base if it is ontologyIri; + if ( base === graph.options().getGeneralMetaObjectProperty('iri') ) { + base = ":"; + } + splitedURL.base = base; + splitedURL.resource = resource; + } else { + resource = fullURL.substring(fullURL.lastIndexOf('/') + 1); + base = fullURL.substring(0, fullURL.length - resource.length); + // overwrite base if it is ontologyIri; + if ( base === graph.options().getGeneralMetaObjectProperty('iri') ) { + base = ":"; + } + splitedURL.base = base; + splitedURL.resource = resource; + } + return splitedURL; + } + + prefixRepresentationModule.getPrefixRepresentationForFullURI = function ( fullURL ){ + prefixRepresentationModule.updatePrefixModel(); + var splittedURL = splitURLIntoBaseAndResource(fullURL); + + // lazy approach , for + // loop over prefix model + for ( var name in currentPrefixModel ) { + if ( currentPrefixModel.hasOwnProperty(name) ) { + // THIS IS CASE SENSITIVE! + if ( currentPrefixModel[name] === splittedURL.base ) { + return name + ":" + splittedURL.resource; + } + } + } + + if ( splittedURL.base === ":" ) { + return ":" + splittedURL.resource; + } + + return fullURL; + }; + + + return prefixRepresentationModule; + }; + + + + +/***/ }), +/* 73 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var _ = __webpack_require__(58); + + module.exports = function (){ + + var DEFAULT_STATE = true; + var COLOR_MODES = [ + { type: "same", range: [d3.rgb("#36C"), d3.rgb("#36C")] }, + { type: "gradient", range: [d3.rgb("#36C"), d3.rgb("#EE2867")] } // taken from LD-VOWL + ]; + + var filter = {}, + nodes, + properties, + enabled = DEFAULT_STATE, + filteredNodes, + filteredProperties, + colorModeType = "same"; + + + filter.filter = function ( untouchedNodes, untouchedProperties ){ + nodes = untouchedNodes; + properties = untouchedProperties; + + var externalElements = filterExternalElements(nodes.concat(properties)); + + if ( enabled ) { + setColorsForExternals(externalElements); + } else { + resetBackgroundColors(externalElements); + } + + filteredNodes = nodes; + filteredProperties = properties; + }; + + function filterExternalElements( elements ){ + return elements.filter(function ( element ){ + if ( element.visualAttributes().indexOf("deprecated") >= 0 ) { + // deprecated is the only attribute which has preference over external + return false; + } + + return element.attributes().indexOf("external") >= 0; + }); + } + + function setColorsForExternals( elements ){ + var iriMap = mapExternalsToBaseUri(elements); + var entries = iriMap.entries(); + + var colorScale = d3.scale.linear() + .domain([0, entries.length - 1]) + .range(_.find(COLOR_MODES, { type: colorModeType }).range) + .interpolate(d3.interpolateHsl); + + for ( var i = 0; i < entries.length; i++ ) { + var groupedElements = entries[i].value; + setBackgroundColorForElements(groupedElements, colorScale(i)); + } + } + + function mapExternalsToBaseUri( elements ){ + var map = d3.map(); + + elements.forEach(function ( element ){ + var baseIri = element.baseIri(); + + if ( !map.has(baseIri) ) { + map.set(baseIri, []); + } + map.get(baseIri).push(element); + }); + + return map; + } + + function setBackgroundColorForElements( elements, backgroundColor ){ + elements.forEach(function ( element ){ + element.backgroundColor(backgroundColor); + }); + } + + function resetBackgroundColors( elements ){ + console.log("Resetting color"); + elements.forEach(function ( element ){ + element.backgroundColor(null); + }); + } + + filter.colorModeType = function ( p ){ + if ( !arguments.length ) return colorModeType; + colorModeType = p; + return filter; + }; + + filter.enabled = function ( p ){ + if ( !arguments.length ) return enabled; + enabled = p; + return filter; + }; + + filter.reset = function (){ + enabled = DEFAULT_STATE; + }; + + + // Functions a filter must have + filter.filteredNodes = function (){ + return filteredNodes; + }; + + filter.filteredProperties = function (){ + return filteredProperties; + }; + + + return filter; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 74 */ +/***/ (function(module, exports) { + + /** + * This module abuses the filter function a bit like the statistics module. Nothing is filtered. + * + * @returns {{}} + */ + + + module.exports = function ( graph ){ + + var DEFAULT_STATE = false; + + var filter = {}, + nodes, + properties, + enabled = DEFAULT_STATE, + filteredNodes, + filteredProperties; + + + /** + * If enabled, redundant details won't be drawn anymore. + * @param untouchedNodes + * @param untouchedProperties + */ + filter.filter = function ( untouchedNodes, untouchedProperties ){ + nodes = untouchedNodes; + properties = untouchedProperties; + graph.options().compactNotation(enabled); + filteredNodes = nodes; + filteredProperties = properties; + }; + + filter.enabled = function ( p ){ + if ( !arguments.length ) return enabled; + enabled = p; + return filter; + }; + + filter.reset = function (){ + enabled = DEFAULT_STATE; + }; + + + // Functions a filter must have + filter.filteredNodes = function (){ + return filteredNodes; + }; + + filter.filteredProperties = function (){ + return filteredProperties; + }; + + + return filter; + }; + + +/***/ }), +/* 75 */ +/***/ (function(module, exports, __webpack_require__) { + + var elementTools = __webpack_require__(63)(); + var filterTools = __webpack_require__(76)(); + + module.exports = function (){ + + var filter = {}, + nodes, + properties, + enabled = false, + filteredNodes, + filteredProperties; + + + /** + * If enabled, all datatypes and literals including connected properties are filtered. + * @param untouchedNodes + * @param untouchedProperties + */ + filter.filter = function ( untouchedNodes, untouchedProperties ){ + nodes = untouchedNodes; + properties = untouchedProperties; + + if ( this.enabled() ) { + removeDatatypesAndLiterals(); + } + + filteredNodes = nodes; + filteredProperties = properties; + }; + + function removeDatatypesAndLiterals(){ + var filteredData = filterTools.filterNodesAndTidy(nodes, properties, isNoDatatypeOrLiteral); + + nodes = filteredData.nodes; + properties = filteredData.properties; + } + + function isNoDatatypeOrLiteral( node ){ + return !elementTools.isDatatype(node); + } + + filter.enabled = function ( p ){ + if ( !arguments.length ) return enabled; + enabled = p; + return filter; + }; + + + // Functions a filter must have + filter.filteredNodes = function (){ + return filteredNodes; + }; + + filter.filteredProperties = function (){ + return filteredProperties; + }; + + + return filter; + }; + + +/***/ }), +/* 76 */ +/***/ (function(module, exports, __webpack_require__) { + + var elementTools = __webpack_require__(63)(); + + module.exports = (function (){ + + var tools = {}; + + /** + * Filters the passed nodes and removes dangling properties. + * @param nodes + * @param properties + * @param shouldKeepNode function that returns true if the node should be kept + * @returns {{nodes: Array, properties: Array}} the filtered nodes and properties + */ + tools.filterNodesAndTidy = function ( nodes, properties, shouldKeepNode ){ + var removedNodes = __webpack_require__(62)(), + cleanedNodes = [], + cleanedProperties = []; + + nodes.forEach(function ( node ){ + if ( shouldKeepNode(node) ) { + cleanedNodes.push(node); + } else { + removedNodes.add(node); + } + }); + + properties.forEach(function ( property ){ + if ( propertyHasVisibleNodes(removedNodes, property) ) { + cleanedProperties.push(property); + } else if ( elementTools.isDatatypeProperty(property) ) { + // Remove floating datatypes/literals, because they belong to their datatype property + var index = cleanedNodes.indexOf(property.range()); + if ( index >= 0 ) { + cleanedNodes.splice(index, 1); + } + } + }); + + return { + nodes: cleanedNodes, + properties: cleanedProperties + }; + }; + + /** + * Returns true, if the domain and the range of this property have not been removed. + * @param removedNodes + * @param property + * @returns {boolean} true if property isn't dangling + */ + function propertyHasVisibleNodes( removedNodes, property ){ + return !removedNodes.has(property.domain()) && !removedNodes.has(property.range()); + } + + + return function (){ + return tools; + }; + })(); + + +/***/ }), +/* 77 */ +/***/ (function(module, exports, __webpack_require__) { + + var OwlDisjointWith = __webpack_require__(46); + + module.exports = function (){ + + var filter = {}, + nodes, + properties, + // According to the specification enabled by default + enabled = true, + filteredNodes, + filteredProperties; + + + /** + * If enabled, all disjoint with properties are filtered. + * @param untouchedNodes + * @param untouchedProperties + */ + filter.filter = function ( untouchedNodes, untouchedProperties ){ + nodes = untouchedNodes; + properties = untouchedProperties; + + if ( this.enabled() ) { + removeDisjointWithProperties(); + } + + filteredNodes = nodes; + filteredProperties = properties; + }; + + function removeDisjointWithProperties(){ + var cleanedProperties = [], + i, l, property; + + for ( i = 0, l = properties.length; i < l; i++ ) { + property = properties[i]; + + if ( !(property instanceof OwlDisjointWith) ) { + cleanedProperties.push(property); + } + } + + properties = cleanedProperties; + } + + filter.enabled = function ( p ){ + if ( !arguments.length ) return enabled; + enabled = p; + return filter; + }; + + + // Functions a filter must have + filter.filteredNodes = function (){ + return filteredNodes; + }; + + filter.filteredProperties = function (){ + return filteredProperties; + }; + + + return filter; + }; + + +/***/ }), +/* 78 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {module.exports = function ( graph ){ + var focuser = {}, + focusedElement; + var elementTools = webvowl.util.elementTools(); + focuser.handle = function ( selectedElement, forced ){ + // Don't display details on a drag event, which will be prevented + if ( d3.event && d3.event.defaultPrevented && forced === undefined ) { + return; + } + + if ( focusedElement !== undefined ) { + focusedElement.toggleFocus(); + } + + if ( focusedElement !== selectedElement && selectedElement ) { + selectedElement.toggleFocus(); + focusedElement = selectedElement; + } else { + focusedElement = undefined; + } + if ( focusedElement && focusedElement.focused() ) { + graph.options().editSidebar().updateSelectionInformation(focusedElement); + if ( elementTools.isProperty(selectedElement) === true ) { + var inversed = false; + if ( selectedElement.inverse() ) { + inversed = true; + } + graph.activateHoverElementsForProperties(true, selectedElement, inversed, graph.isTouchDevice()); + } + else { + graph.activateHoverElements(true, selectedElement, graph.isTouchDevice()); + } + } + else { + graph.options().editSidebar().updateSelectionInformation(undefined); + graph.removeEditElements(); + } + }; + + /** + * Removes the focus if an element is focussed. + */ + focuser.reset = function (){ + if ( focusedElement ) { + focusedElement.toggleFocus(); + focusedElement = undefined; + } + }; + + return focuser; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 79 */ +/***/ (function(module, exports) { + + /** @WORKAROUND CODE: + * clears empty literals that are provided by owl2vowl: 0.2.2x*/ + + + module.exports = function (){ + + var filter = {}, + enabled = true, + filteredNodes, + removedNodes, + filteredProperties; + + filter.enabled = function ( val ){ + if ( !arguments.length ) { + return enabled; + } + enabled = val; + }; + + filter.filter = function ( nodes, properties ){ + if ( enabled === false ) { + filteredNodes = nodes; + filteredProperties = properties; + removedNodes = []; + return; + } + var literalUsageMap = []; + var thingUsageMap = []; + var node; + for ( var i = 0; i < properties.length; i++ ) { + // get property range; + var prop = properties[i]; + + // checking for literals + if ( prop.range() ) { + node = prop.range(); + if ( node.type() === "rdfs:Literal" ) { + literalUsageMap[node.id()] = 1; + } + } + // checking for thing + if ( prop.range() ) { + node = prop.range(); + if ( node.type() === "owl:Thing" ) { + thingUsageMap[node.id()] = 1; + } + } + if ( prop.domain() ) { + node = prop.domain(); + if ( node.type() === "owl:Thing" ) { + thingUsageMap[node.id()] = 1; + } + } + + } + var nodesToRemove = []; + var newNodes = []; + // todo: test and make it faster + for ( i = 0; i < nodes.length; i++ ) { + var nodeId = nodes[i].id(); + if ( nodes[i].type() === "rdfs:Literal" ) { + if ( literalUsageMap[nodeId] === undefined ) { + nodesToRemove.push(nodeId); + } + else { + newNodes.push(nodes[i]); + } + // check for node type == OWL:THING + } else if ( nodes[i].type() === "owl:Thing" ) { + if ( thingUsageMap[nodeId] === undefined ) { + nodesToRemove.push(nodeId); + } + else { + newNodes.push(nodes[i]); + } + } else { + newNodes.push(nodes[i]); + } + } + + filteredNodes = newNodes; + filteredProperties = properties; + removedNodes = nodesToRemove; + }; + + + // Functions a filter must have + filter.filteredNodes = function (){ + return filteredNodes; + }; + + filter.removedNodes = function (){ + return removedNodes; + }; + + filter.filteredProperties = function (){ + return filteredProperties; + }; + + + return filter; + }; + + +/***/ }), +/* 80 */ +/***/ (function(module, exports, __webpack_require__) { + + var elementTools = __webpack_require__(63)(); + var filterTools = __webpack_require__(76)(); + + module.exports = function ( menu ){ + + var filter = {}, + nodes, + properties, + enabled = true, + filteredNodes, + filteredProperties, + maxDegreeSetter, + degreeGetter, + lastFiltedDegree, + degreeSetter; + + + var NODE_COUNT_LIMIT_FOR_AUTO_ENABLING = 50; + + + filter.initialize = function ( nodes, properties ){ + lastFiltedDegree = -1; + var maxLinkCount = findMaxLinkCount(nodes); + if ( maxDegreeSetter instanceof Function ) { + maxDegreeSetter(maxLinkCount); + } + + menu.setDefaultDegreeValue(findAutoDefaultDegree(nodes, properties, maxLinkCount)); + var defaultDegree = findDefaultDegree(maxLinkCount); + if ( degreeSetter instanceof Function ) { + degreeSetter(defaultDegree); + if ( defaultDegree > 0 ) { + menu.highlightForDegreeSlider(true); + menu.getGraphObject().setFilterWarning(true); + + } + } else { + console.error("No degree setter function set."); + } + }; + + function findAutoDefaultDegree( nodes, properties, maxDegree ){ + for ( var degree = 0; degree < maxDegree; degree++ ) { + var filteredData = filterByNodeDegree(nodes, properties, degree); + + if ( filteredData.nodes.length <= NODE_COUNT_LIMIT_FOR_AUTO_ENABLING ) { + return degree; + } + } + return 0; + } + + function findDefaultDegree( maxDegree ){ + var globalDegOfFilter = menu.getGraphObject().getGlobalDOF(); + if ( globalDegOfFilter >= 0 ) { + if ( globalDegOfFilter <= maxDegree ) { + return globalDegOfFilter; + } else { + menu.getGraphObject().setGlobalDOF(maxDegree); + return maxDegree; + } + } + return menu.getDefaultDegreeValue(); + } + + /** + * If enabled, all nodes are filter by their node degree. + * @param untouchedNodes + * @param untouchedProperties + */ + filter.filter = function ( untouchedNodes, untouchedProperties ){ + nodes = untouchedNodes; + properties = untouchedProperties; + + if ( this.enabled() ) { + if ( degreeGetter instanceof Function ) { + filterByNodeDegreeAndApply(degreeGetter()); + } else { + console.error("No degree query function set."); + } + } + + filteredNodes = nodes; + filteredProperties = properties; + + if ( filteredNodes.length === 0 ) { + degreeSetter(0); + filteredNodes = untouchedNodes; + filteredProperties = untouchedProperties; + } + lastFiltedDegree = degreeGetter(); + }; + + function findMaxLinkCount( nodes ){ + var maxLinkCount = 0; + for ( var i = 0, l = nodes.length; i < l; i++ ) { + var linksWithoutDatatypes = filterOutDatatypes(nodes[i].links()); + + maxLinkCount = Math.max(maxLinkCount, linksWithoutDatatypes.length); + } + return maxLinkCount; + } + + function filterOutDatatypes( links ){ + return links.filter(function ( link ){ + return !elementTools.isDatatypeProperty(link.property()); + }); + } + + function filterByNodeDegreeAndApply( minDegree ){ + var filteredData = filterByNodeDegree(nodes, properties, minDegree); + nodes = filteredData.nodes; + properties = filteredData.properties; + } + + function filterByNodeDegree( nodes, properties, minDegree ){ + return filterTools.filterNodesAndTidy(nodes, properties, hasRequiredDegree(minDegree)); + } + + function hasRequiredDegree( minDegree ){ + return function ( node ){ + return filterOutDatatypes(node.links()).length >= minDegree; + }; + } + + filter.setMaxDegreeSetter = function ( _maxDegreeSetter ){ + maxDegreeSetter = _maxDegreeSetter; + }; + + filter.setDegreeGetter = function ( _degreeGetter ){ + degreeGetter = _degreeGetter; + }; + + filter.setDegreeSetter = function ( _degreeSetter ){ + degreeSetter = _degreeSetter; + }; + + filter.enabled = function ( p ){ + if ( !arguments.length ) return enabled; + enabled = p; + return filter; + }; + + + // Functions a filter must have + filter.filteredNodes = function (){ + return filteredNodes; + }; + + filter.filteredProperties = function (){ + return filteredProperties; + }; + + + return filter; + }; + + +/***/ }), +/* 81 */ +/***/ (function(module, exports) { + + /** + * This module abuses the filter function a bit like the statistics module. Nothing is filtered. + * + * @returns {{}} + */ + module.exports = function ( graph ){ + + var DEFAULT_STATE = true; + + var filter = {}, + nodes, + properties, + enabled = DEFAULT_STATE, + filteredNodes, + filteredProperties; + + + /** + * If enabled, the scaling of nodes according to individuals will be enabled. + * @param untouchedNodes + * @param untouchedProperties + */ + filter.filter = function ( untouchedNodes, untouchedProperties ){ + nodes = untouchedNodes; + properties = untouchedProperties; + + graph.options().scaleNodesByIndividuals(enabled); + + filteredNodes = nodes; + filteredProperties = properties; + }; + + filter.enabled = function ( p ){ + if ( !arguments.length ) return enabled; + enabled = p; + return filter; + }; + + filter.reset = function (){ + enabled = DEFAULT_STATE; + }; + + + // Functions a filter must have + filter.filteredNodes = function (){ + return filteredNodes; + }; + + filter.filteredProperties = function (){ + return filteredProperties; + }; + + + return filter; + }; + + +/***/ }), +/* 82 */ +/***/ (function(module, exports, __webpack_require__) { + + var elementTools = __webpack_require__(63)(); + + + module.exports = function (){ + + var filter = {}, + nodes, + properties, + enabled = false, + filteredNodes, + filteredProperties; + + + /** + * If enabled, all object properties and things without any other property are filtered. + * @param untouchedNodes + * @param untouchedProperties + */ + filter.filter = function ( untouchedNodes, untouchedProperties ){ + nodes = untouchedNodes; + properties = untouchedProperties; + + if ( this.enabled() ) { + removeObjectProperties(); + } + + filteredNodes = nodes; + filteredProperties = properties; + }; + + function removeObjectProperties(){ + properties = properties.filter(isNoObjectProperty); + nodes = nodes.filter(isNoFloatingThing); + } + + function isNoObjectProperty( property ){ + return !elementTools.isObjectProperty(property); + } + + function isNoFloatingThing( node ){ + var isNoThing = !elementTools.isThing(node); + var hasNonFilteredProperties = hasPropertiesOtherThanObjectProperties(node, properties); + return isNoThing || hasNonFilteredProperties; + } + + function hasPropertiesOtherThanObjectProperties( node, properties ){ + for ( var i = 0; i < properties.length; i++ ) { + var property = properties[i]; + if ( property.domain() !== node && property.range() !== node ) { + continue; + } + + if ( isNoObjectProperty(property) ) { + return true; + } + } + + return false; + } + + filter.enabled = function ( p ){ + if ( !arguments.length ) return enabled; + enabled = p; + return filter; + }; + + + // Functions a filter must have + filter.filteredNodes = function (){ + return filteredNodes; + }; + + filter.filteredProperties = function (){ + return filteredProperties; + }; + + + return filter; + }; + + +/***/ }), +/* 83 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var _ = __webpack_require__(84); + var elementTools = __webpack_require__(63)(); + + module.exports = function (){ + var pap = {}, + enabled = false, + pinnedElements = []; + + pap.addPinnedElement = function ( element ){ + // check if element is already in list + var indexInArray = pinnedElements.indexOf(element); + if ( indexInArray === -1 ) { + pinnedElements.push(element); + } + }; + + pap.handle = function ( selection, forced ){ + if ( !enabled ) { + return; + } + + if ( !forced ) { + if ( wasNotDragged() ) { + return; + } + } + if ( elementTools.isProperty(selection) ) { + if ( selection.inverse() && selection.inverse().pinned() ) { + return; + } else if ( hasNoParallelProperties(selection) ) { + return; + } + } + + if ( !selection.pinned() ) { + selection.drawPin(); + pap.addPinnedElement(selection); + } + }; + + function wasNotDragged(){ + return !d3.event.defaultPrevented; + } + + function hasNoParallelProperties( property ){ + return _.intersection(property.domain().links(), property.range().links()).length === 1; + } + + pap.enabled = function ( p ){ + if ( !arguments.length ) return enabled; + enabled = p; + return pap; + }; + + pap.reset = function (){ + pinnedElements.forEach(function ( element ){ + element.removePin(); + }); + // Clear the array of stored nodes + pinnedElements.length = 0; + }; + + return pap; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 84 */ +/***/ (function(module, exports, __webpack_require__) { + + module.exports = { + 'chunk': __webpack_require__(85), + 'compact': __webpack_require__(105), + 'concat': __webpack_require__(106), + 'difference': __webpack_require__(114), + 'differenceBy': __webpack_require__(167), + 'differenceWith': __webpack_require__(229), + 'drop': __webpack_require__(230), + 'dropRight': __webpack_require__(231), + 'dropRightWhile': __webpack_require__(232), + 'dropWhile': __webpack_require__(234), + 'fill': __webpack_require__(235), + 'findIndex': __webpack_require__(239), + 'findLastIndex': __webpack_require__(240), + 'first': __webpack_require__(241), + 'flatten': __webpack_require__(243), + 'flattenDeep': __webpack_require__(244), + 'flattenDepth': __webpack_require__(245), + 'fromPairs': __webpack_require__(246), + 'head': __webpack_require__(242), + 'indexOf': __webpack_require__(247), + 'initial': __webpack_require__(248), + 'intersection': __webpack_require__(249), + 'intersectionBy': __webpack_require__(252), + 'intersectionWith': __webpack_require__(253), + 'join': __webpack_require__(254), + 'last': __webpack_require__(228), + 'lastIndexOf': __webpack_require__(255), + 'nth': __webpack_require__(257), + 'pull': __webpack_require__(259), + 'pullAll': __webpack_require__(260), + 'pullAllBy': __webpack_require__(263), + 'pullAllWith': __webpack_require__(264), + 'pullAt': __webpack_require__(265), + 'remove': __webpack_require__(272), + 'reverse': __webpack_require__(273), + 'slice': __webpack_require__(274), + 'sortedIndex': __webpack_require__(275), + 'sortedIndexBy': __webpack_require__(278), + 'sortedIndexOf': __webpack_require__(279), + 'sortedLastIndex': __webpack_require__(280), + 'sortedLastIndexBy': __webpack_require__(281), + 'sortedLastIndexOf': __webpack_require__(282), + 'sortedUniq': __webpack_require__(283), + 'sortedUniqBy': __webpack_require__(285), + 'tail': __webpack_require__(286), + 'take': __webpack_require__(287), + 'takeRight': __webpack_require__(288), + 'takeRightWhile': __webpack_require__(289), + 'takeWhile': __webpack_require__(290), + 'union': __webpack_require__(291), + 'unionBy': __webpack_require__(295), + 'unionWith': __webpack_require__(296), + 'uniq': __webpack_require__(297), + 'uniqBy': __webpack_require__(298), + 'uniqWith': __webpack_require__(299), + 'unzip': __webpack_require__(300), + 'unzipWith': __webpack_require__(301), + 'without': __webpack_require__(302), + 'xor': __webpack_require__(303), + 'xorBy': __webpack_require__(305), + 'xorWith': __webpack_require__(306), + 'zip': __webpack_require__(307), + 'zipObject': __webpack_require__(308), + 'zipObjectDeep': __webpack_require__(312), + 'zipWith': __webpack_require__(314) + }; + + +/***/ }), +/* 85 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSlice = __webpack_require__(86), + isIterateeCall = __webpack_require__(87), + toInteger = __webpack_require__(100); + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeCeil = Math.ceil, + nativeMax = Math.max; + + /** + * Creates an array of elements split into groups the length of `size`. + * If `array` can't be split evenly, the final chunk will be the remaining + * elements. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to process. + * @param {number} [size=1] The length of each chunk + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the new array of chunks. + * @example + * + * _.chunk(['a', 'b', 'c', 'd'], 2); + * // => [['a', 'b'], ['c', 'd']] + * + * _.chunk(['a', 'b', 'c', 'd'], 3); + * // => [['a', 'b', 'c'], ['d']] + */ + function chunk(array, size, guard) { + if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) { + size = 1; + } else { + size = nativeMax(toInteger(size), 0); + } + var length = array == null ? 0 : array.length; + if (!length || size < 1) { + return []; + } + var index = 0, + resIndex = 0, + result = Array(nativeCeil(length / size)); + + while (index < length) { + result[resIndex++] = baseSlice(array, index, (index += size)); + } + return result; + } + + module.exports = chunk; + + +/***/ }), +/* 86 */ +/***/ (function(module, exports) { + + /** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = end > length ? length : end; + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; + } + + module.exports = baseSlice; + + +/***/ }), +/* 87 */ +/***/ (function(module, exports, __webpack_require__) { + + var eq = __webpack_require__(88), + isArrayLike = __webpack_require__(89), + isIndex = __webpack_require__(99), + isObject = __webpack_require__(97); + + /** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ + function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object) + ) { + return eq(object[index], value); + } + return false; + } + + module.exports = isIterateeCall; + + +/***/ }), +/* 88 */ +/***/ (function(module, exports) { + + /** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ + function eq(value, other) { + return value === other || (value !== value && other !== other); + } + + module.exports = eq; + + +/***/ }), +/* 89 */ +/***/ (function(module, exports, __webpack_require__) { + + var isFunction = __webpack_require__(90), + isLength = __webpack_require__(98); + + /** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ + function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); + } + + module.exports = isArrayLike; + + +/***/ }), +/* 90 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseGetTag = __webpack_require__(91), + isObject = __webpack_require__(97); + + /** `Object#toString` result references. */ + var asyncTag = '[object AsyncFunction]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + proxyTag = '[object Proxy]'; + + /** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ + function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; + } + + module.exports = isFunction; + + +/***/ }), +/* 91 */ +/***/ (function(module, exports, __webpack_require__) { + + var Symbol = __webpack_require__(92), + getRawTag = __webpack_require__(95), + objectToString = __webpack_require__(96); + + /** `Object#toString` result references. */ + var nullTag = '[object Null]', + undefinedTag = '[object Undefined]'; + + /** Built-in value references. */ + var symToStringTag = Symbol ? Symbol.toStringTag : undefined; + + /** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag && symToStringTag in Object(value)) + ? getRawTag(value) + : objectToString(value); + } + + module.exports = baseGetTag; + + +/***/ }), +/* 92 */ +/***/ (function(module, exports, __webpack_require__) { + + var root = __webpack_require__(93); + + /** Built-in value references. */ + var Symbol = root.Symbol; + + module.exports = Symbol; + + +/***/ }), +/* 93 */ +/***/ (function(module, exports, __webpack_require__) { + + var freeGlobal = __webpack_require__(94); + + /** Detect free variable `self`. */ + var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + + /** Used as a reference to the global object. */ + var root = freeGlobal || freeSelf || Function('return this')(); + + module.exports = root; + + +/***/ }), +/* 94 */ +/***/ (function(module, exports) { + + /* WEBPACK VAR INJECTION */(function(global) {/** Detect free variable `global` from Node.js. */ + var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + + module.exports = freeGlobal; + + /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()))) + +/***/ }), +/* 95 */ +/***/ (function(module, exports, __webpack_require__) { + + var Symbol = __webpack_require__(92); + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString = objectProto.toString; + + /** Built-in value references. */ + var symToStringTag = Symbol ? Symbol.toStringTag : undefined; + + /** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ + function getRawTag(value) { + var isOwn = hasOwnProperty.call(value, symToStringTag), + tag = value[symToStringTag]; + + try { + value[symToStringTag] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; + } + } + return result; + } + + module.exports = getRawTag; + + +/***/ }), +/* 96 */ +/***/ (function(module, exports) { + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString = objectProto.toString; + + /** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ + function objectToString(value) { + return nativeObjectToString.call(value); + } + + module.exports = objectToString; + + +/***/ }), +/* 97 */ +/***/ (function(module, exports) { + + /** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ + function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); + } + + module.exports = isObject; + + +/***/ }), +/* 98 */ +/***/ (function(module, exports) { + + /** Used as references for various `Number` constants. */ + var MAX_SAFE_INTEGER = 9007199254740991; + + /** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ + function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; + } + + module.exports = isLength; + + +/***/ }), +/* 99 */ +/***/ (function(module, exports) { + + /** Used as references for various `Number` constants. */ + var MAX_SAFE_INTEGER = 9007199254740991; + + /** Used to detect unsigned integer values. */ + var reIsUint = /^(?:0|[1-9]\d*)$/; + + /** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ + function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); + } + + module.exports = isIndex; + + +/***/ }), +/* 100 */ +/***/ (function(module, exports, __webpack_require__) { + + var toFinite = __webpack_require__(101); + + /** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ + function toInteger(value) { + var result = toFinite(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; + } + + module.exports = toInteger; + + +/***/ }), +/* 101 */ +/***/ (function(module, exports, __webpack_require__) { + + var toNumber = __webpack_require__(102); + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0, + MAX_INTEGER = 1.7976931348623157e+308; + + /** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ + function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; + } + + module.exports = toFinite; + + +/***/ }), +/* 102 */ +/***/ (function(module, exports, __webpack_require__) { + + var isObject = __webpack_require__(97), + isSymbol = __webpack_require__(103); + + /** Used as references for various `Number` constants. */ + var NAN = 0 / 0; + + /** Used to match leading and trailing whitespace. */ + var reTrim = /^\s+|\s+$/g; + + /** Used to detect bad signed hexadecimal string values. */ + var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + + /** Used to detect binary string values. */ + var reIsBinary = /^0b[01]+$/i; + + /** Used to detect octal string values. */ + var reIsOctal = /^0o[0-7]+$/i; + + /** Built-in method references without a dependency on `root`. */ + var freeParseInt = parseInt; + + /** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ + function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + if (isObject(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = isObject(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = value.replace(reTrim, ''); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); + } + + module.exports = toNumber; + + +/***/ }), +/* 103 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseGetTag = __webpack_require__(91), + isObjectLike = __webpack_require__(104); + + /** `Object#toString` result references. */ + var symbolTag = '[object Symbol]'; + + /** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ + function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && baseGetTag(value) == symbolTag); + } + + module.exports = isSymbol; + + +/***/ }), +/* 104 */ +/***/ (function(module, exports) { + + /** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ + function isObjectLike(value) { + return value != null && typeof value == 'object'; + } + + module.exports = isObjectLike; + + +/***/ }), +/* 105 */ +/***/ (function(module, exports) { + + /** + * Creates an array with all falsey values removed. The values `false`, `null`, + * `0`, `""`, `undefined`, and `NaN` are falsey. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to compact. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.compact([0, 1, false, 2, '', 3]); + * // => [1, 2, 3] + */ + function compact(array) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (value) { + result[resIndex++] = value; + } + } + return result; + } + + module.exports = compact; + + +/***/ }), +/* 106 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayPush = __webpack_require__(107), + baseFlatten = __webpack_require__(108), + copyArray = __webpack_require__(113), + isArray = __webpack_require__(112); + + /** + * Creates a new array concatenating `array` with any additional arrays + * and/or values. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to concatenate. + * @param {...*} [values] The values to concatenate. + * @returns {Array} Returns the new concatenated array. + * @example + * + * var array = [1]; + * var other = _.concat(array, 2, [3], [[4]]); + * + * console.log(other); + * // => [1, 2, 3, [4]] + * + * console.log(array); + * // => [1] + */ + function concat() { + var length = arguments.length; + if (!length) { + return []; + } + var args = Array(length - 1), + array = arguments[0], + index = length; + + while (index--) { + args[index - 1] = arguments[index]; + } + return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); + } + + module.exports = concat; + + +/***/ }), +/* 107 */ +/***/ (function(module, exports) { + + /** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ + function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; + } + + module.exports = arrayPush; + + +/***/ }), +/* 108 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayPush = __webpack_require__(107), + isFlattenable = __webpack_require__(109); + + /** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ + function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + arrayPush(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; + } + + module.exports = baseFlatten; + + +/***/ }), +/* 109 */ +/***/ (function(module, exports, __webpack_require__) { + + var Symbol = __webpack_require__(92), + isArguments = __webpack_require__(110), + isArray = __webpack_require__(112); + + /** Built-in value references. */ + var spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined; + + /** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ + function isFlattenable(value) { + return isArray(value) || isArguments(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); + } + + module.exports = isFlattenable; + + +/***/ }), +/* 110 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIsArguments = __webpack_require__(111), + isObjectLike = __webpack_require__(104); + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** Built-in value references. */ + var propertyIsEnumerable = objectProto.propertyIsEnumerable; + + /** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ + var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { + return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); + }; + + module.exports = isArguments; + + +/***/ }), +/* 111 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseGetTag = __webpack_require__(91), + isObjectLike = __webpack_require__(104); + + /** `Object#toString` result references. */ + var argsTag = '[object Arguments]'; + + /** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ + function baseIsArguments(value) { + return isObjectLike(value) && baseGetTag(value) == argsTag; + } + + module.exports = baseIsArguments; + + +/***/ }), +/* 112 */ +/***/ (function(module, exports) { + + /** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ + var isArray = Array.isArray; + + module.exports = isArray; + + +/***/ }), +/* 113 */ +/***/ (function(module, exports) { + + /** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ + function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; + } + + module.exports = copyArray; + + +/***/ }), +/* 114 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseDifference = __webpack_require__(115), + baseFlatten = __webpack_require__(108), + baseRest = __webpack_require__(157), + isArrayLikeObject = __webpack_require__(166); + + /** + * Creates an array of `array` values not included in the other given arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. The order and references of result values are + * determined by the first array. + * + * **Note:** Unlike `_.pullAll`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @see _.without, _.xor + * @example + * + * _.difference([2, 1], [2, 3]); + * // => [1] + */ + var difference = baseRest(function(array, values) { + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) + : []; + }); + + module.exports = difference; + + +/***/ }), +/* 115 */ +/***/ (function(module, exports, __webpack_require__) { + + var SetCache = __webpack_require__(116), + arrayIncludes = __webpack_require__(148), + arrayIncludesWith = __webpack_require__(153), + arrayMap = __webpack_require__(154), + baseUnary = __webpack_require__(155), + cacheHas = __webpack_require__(156); + + /** Used as the size to enable large array optimizations. */ + var LARGE_ARRAY_SIZE = 200; + + /** + * The base implementation of methods like `_.difference` without support + * for excluding multiple arrays or iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Array} values The values to exclude. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + */ + function baseDifference(array, values, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + isCommon = true, + length = array.length, + result = [], + valuesLength = values.length; + + if (!length) { + return result; + } + if (iteratee) { + values = arrayMap(values, baseUnary(iteratee)); + } + if (comparator) { + includes = arrayIncludesWith; + isCommon = false; + } + else if (values.length >= LARGE_ARRAY_SIZE) { + includes = cacheHas; + isCommon = false; + values = new SetCache(values); + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee == null ? value : iteratee(value); + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var valuesIndex = valuesLength; + while (valuesIndex--) { + if (values[valuesIndex] === computed) { + continue outer; + } + } + result.push(value); + } + else if (!includes(values, computed, comparator)) { + result.push(value); + } + } + return result; + } + + module.exports = baseDifference; + + +/***/ }), +/* 116 */ +/***/ (function(module, exports, __webpack_require__) { + + var MapCache = __webpack_require__(117), + setCacheAdd = __webpack_require__(146), + setCacheHas = __webpack_require__(147); + + /** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ + function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new MapCache; + while (++index < length) { + this.add(values[index]); + } + } + + // Add methods to `SetCache`. + SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; + SetCache.prototype.has = setCacheHas; + + module.exports = SetCache; + + +/***/ }), +/* 117 */ +/***/ (function(module, exports, __webpack_require__) { + + var mapCacheClear = __webpack_require__(118), + mapCacheDelete = __webpack_require__(140), + mapCacheGet = __webpack_require__(143), + mapCacheHas = __webpack_require__(144), + mapCacheSet = __webpack_require__(145); + + /** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function MapCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + // Add methods to `MapCache`. + MapCache.prototype.clear = mapCacheClear; + MapCache.prototype['delete'] = mapCacheDelete; + MapCache.prototype.get = mapCacheGet; + MapCache.prototype.has = mapCacheHas; + MapCache.prototype.set = mapCacheSet; + + module.exports = MapCache; + + +/***/ }), +/* 118 */ +/***/ (function(module, exports, __webpack_require__) { + + var Hash = __webpack_require__(119), + ListCache = __webpack_require__(132), + Map = __webpack_require__(139); + + /** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ + function mapCacheClear() { + this.size = 0; + this.__data__ = { + 'hash': new Hash, + 'map': new (Map || ListCache), + 'string': new Hash + }; + } + + module.exports = mapCacheClear; + + +/***/ }), +/* 119 */ +/***/ (function(module, exports, __webpack_require__) { + + var hashClear = __webpack_require__(120), + hashDelete = __webpack_require__(128), + hashGet = __webpack_require__(129), + hashHas = __webpack_require__(130), + hashSet = __webpack_require__(131); + + /** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function Hash(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + // Add methods to `Hash`. + Hash.prototype.clear = hashClear; + Hash.prototype['delete'] = hashDelete; + Hash.prototype.get = hashGet; + Hash.prototype.has = hashHas; + Hash.prototype.set = hashSet; + + module.exports = Hash; + + +/***/ }), +/* 120 */ +/***/ (function(module, exports, __webpack_require__) { + + var nativeCreate = __webpack_require__(121); + + /** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ + function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; + this.size = 0; + } + + module.exports = hashClear; + + +/***/ }), +/* 121 */ +/***/ (function(module, exports, __webpack_require__) { + + var getNative = __webpack_require__(122); + + /* Built-in method references that are verified to be native. */ + var nativeCreate = getNative(Object, 'create'); + + module.exports = nativeCreate; + + +/***/ }), +/* 122 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIsNative = __webpack_require__(123), + getValue = __webpack_require__(127); + + /** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ + function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; + } + + module.exports = getNative; + + +/***/ }), +/* 123 */ +/***/ (function(module, exports, __webpack_require__) { + + var isFunction = __webpack_require__(90), + isMasked = __webpack_require__(124), + isObject = __webpack_require__(97), + toSource = __webpack_require__(126); + + /** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ + var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + + /** Used to detect host constructors (Safari). */ + var reIsHostCtor = /^\[object .+?Constructor\]$/; + + /** Used for built-in method references. */ + var funcProto = Function.prototype, + objectProto = Object.prototype; + + /** Used to resolve the decompiled source of functions. */ + var funcToString = funcProto.toString; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** Used to detect if a method is native. */ + var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' + ); + + /** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ + function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = isFunction(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); + } + + module.exports = baseIsNative; + + +/***/ }), +/* 124 */ +/***/ (function(module, exports, __webpack_require__) { + + var coreJsData = __webpack_require__(125); + + /** Used to detect methods masquerading as native. */ + var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; + }()); + + /** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ + function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); + } + + module.exports = isMasked; + + +/***/ }), +/* 125 */ +/***/ (function(module, exports, __webpack_require__) { + + var root = __webpack_require__(93); + + /** Used to detect overreaching core-js shims. */ + var coreJsData = root['__core-js_shared__']; + + module.exports = coreJsData; + + +/***/ }), +/* 126 */ +/***/ (function(module, exports) { + + /** Used for built-in method references. */ + var funcProto = Function.prototype; + + /** Used to resolve the decompiled source of functions. */ + var funcToString = funcProto.toString; + + /** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ + function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; + } + + module.exports = toSource; + + +/***/ }), +/* 127 */ +/***/ (function(module, exports) { + + /** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ + function getValue(object, key) { + return object == null ? undefined : object[key]; + } + + module.exports = getValue; + + +/***/ }), +/* 128 */ +/***/ (function(module, exports) { + + /** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function hashDelete(key) { + var result = this.has(key) && delete this.__data__[key]; + this.size -= result ? 1 : 0; + return result; + } + + module.exports = hashDelete; + + +/***/ }), +/* 129 */ +/***/ (function(module, exports, __webpack_require__) { + + var nativeCreate = __webpack_require__(121); + + /** Used to stand-in for `undefined` hash values. */ + var HASH_UNDEFINED = '__lodash_hash_undefined__'; + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty.call(data, key) ? data[key] : undefined; + } + + module.exports = hashGet; + + +/***/ }), +/* 130 */ +/***/ (function(module, exports, __webpack_require__) { + + var nativeCreate = __webpack_require__(121); + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function hashHas(key) { + var data = this.__data__; + return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); + } + + module.exports = hashHas; + + +/***/ }), +/* 131 */ +/***/ (function(module, exports, __webpack_require__) { + + var nativeCreate = __webpack_require__(121); + + /** Used to stand-in for `undefined` hash values. */ + var HASH_UNDEFINED = '__lodash_hash_undefined__'; + + /** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ + function hashSet(key, value) { + var data = this.__data__; + this.size += this.has(key) ? 0 : 1; + data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + return this; + } + + module.exports = hashSet; + + +/***/ }), +/* 132 */ +/***/ (function(module, exports, __webpack_require__) { + + var listCacheClear = __webpack_require__(133), + listCacheDelete = __webpack_require__(134), + listCacheGet = __webpack_require__(136), + listCacheHas = __webpack_require__(137), + listCacheSet = __webpack_require__(138); + + /** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function ListCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + // Add methods to `ListCache`. + ListCache.prototype.clear = listCacheClear; + ListCache.prototype['delete'] = listCacheDelete; + ListCache.prototype.get = listCacheGet; + ListCache.prototype.has = listCacheHas; + ListCache.prototype.set = listCacheSet; + + module.exports = ListCache; + + +/***/ }), +/* 133 */ +/***/ (function(module, exports) { + + /** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ + function listCacheClear() { + this.__data__ = []; + this.size = 0; + } + + module.exports = listCacheClear; + + +/***/ }), +/* 134 */ +/***/ (function(module, exports, __webpack_require__) { + + var assocIndexOf = __webpack_require__(135); + + /** Used for built-in method references. */ + var arrayProto = Array.prototype; + + /** Built-in value references. */ + var splice = arrayProto.splice; + + /** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + --this.size; + return true; + } + + module.exports = listCacheDelete; + + +/***/ }), +/* 135 */ +/***/ (function(module, exports, __webpack_require__) { + + var eq = __webpack_require__(88); + + /** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; + } + + module.exports = assocIndexOf; + + +/***/ }), +/* 136 */ +/***/ (function(module, exports, __webpack_require__) { + + var assocIndexOf = __webpack_require__(135); + + /** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + return index < 0 ? undefined : data[index][1]; + } + + module.exports = listCacheGet; + + +/***/ }), +/* 137 */ +/***/ (function(module, exports, __webpack_require__) { + + var assocIndexOf = __webpack_require__(135); + + /** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; + } + + module.exports = listCacheHas; + + +/***/ }), +/* 138 */ +/***/ (function(module, exports, __webpack_require__) { + + var assocIndexOf = __webpack_require__(135); + + /** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ + function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + ++this.size; + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; + } + + module.exports = listCacheSet; + + +/***/ }), +/* 139 */ +/***/ (function(module, exports, __webpack_require__) { + + var getNative = __webpack_require__(122), + root = __webpack_require__(93); + + /* Built-in method references that are verified to be native. */ + var Map = getNative(root, 'Map'); + + module.exports = Map; + + +/***/ }), +/* 140 */ +/***/ (function(module, exports, __webpack_require__) { + + var getMapData = __webpack_require__(141); + + /** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function mapCacheDelete(key) { + var result = getMapData(this, key)['delete'](key); + this.size -= result ? 1 : 0; + return result; + } + + module.exports = mapCacheDelete; + + +/***/ }), +/* 141 */ +/***/ (function(module, exports, __webpack_require__) { + + var isKeyable = __webpack_require__(142); + + /** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ + function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; + } + + module.exports = getMapData; + + +/***/ }), +/* 142 */ +/***/ (function(module, exports) { + + /** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ + function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); + } + + module.exports = isKeyable; + + +/***/ }), +/* 143 */ +/***/ (function(module, exports, __webpack_require__) { + + var getMapData = __webpack_require__(141); + + /** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function mapCacheGet(key) { + return getMapData(this, key).get(key); + } + + module.exports = mapCacheGet; + + +/***/ }), +/* 144 */ +/***/ (function(module, exports, __webpack_require__) { + + var getMapData = __webpack_require__(141); + + /** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function mapCacheHas(key) { + return getMapData(this, key).has(key); + } + + module.exports = mapCacheHas; + + +/***/ }), +/* 145 */ +/***/ (function(module, exports, __webpack_require__) { + + var getMapData = __webpack_require__(141); + + /** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ + function mapCacheSet(key, value) { + var data = getMapData(this, key), + size = data.size; + + data.set(key, value); + this.size += data.size == size ? 0 : 1; + return this; + } + + module.exports = mapCacheSet; + + +/***/ }), +/* 146 */ +/***/ (function(module, exports) { + + /** Used to stand-in for `undefined` hash values. */ + var HASH_UNDEFINED = '__lodash_hash_undefined__'; + + /** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ + function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; + } + + module.exports = setCacheAdd; + + +/***/ }), +/* 147 */ +/***/ (function(module, exports) { + + /** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ + function setCacheHas(value) { + return this.__data__.has(value); + } + + module.exports = setCacheHas; + + +/***/ }), +/* 148 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIndexOf = __webpack_require__(149); + + /** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ + function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && baseIndexOf(array, value, 0) > -1; + } + + module.exports = arrayIncludes; + + +/***/ }), +/* 149 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseFindIndex = __webpack_require__(150), + baseIsNaN = __webpack_require__(151), + strictIndexOf = __webpack_require__(152); + + /** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseIndexOf(array, value, fromIndex) { + return value === value + ? strictIndexOf(array, value, fromIndex) + : baseFindIndex(array, baseIsNaN, fromIndex); + } + + module.exports = baseIndexOf; + + +/***/ }), +/* 150 */ +/***/ (function(module, exports) { + + /** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; + } + + module.exports = baseFindIndex; + + +/***/ }), +/* 151 */ +/***/ (function(module, exports) { + + /** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ + function baseIsNaN(value) { + return value !== value; + } + + module.exports = baseIsNaN; + + +/***/ }), +/* 152 */ +/***/ (function(module, exports) { + + /** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; + } + + module.exports = strictIndexOf; + + +/***/ }), +/* 153 */ +/***/ (function(module, exports) { + + /** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ + function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; + } + + module.exports = arrayIncludesWith; + + +/***/ }), +/* 154 */ +/***/ (function(module, exports) { + + /** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; + } + + module.exports = arrayMap; + + +/***/ }), +/* 155 */ +/***/ (function(module, exports) { + + /** + * The base implementation of `_.unary` without support for storing metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + */ + function baseUnary(func) { + return function(value) { + return func(value); + }; + } + + module.exports = baseUnary; + + +/***/ }), +/* 156 */ +/***/ (function(module, exports) { + + /** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function cacheHas(cache, key) { + return cache.has(key); + } + + module.exports = cacheHas; + + +/***/ }), +/* 157 */ +/***/ (function(module, exports, __webpack_require__) { + + var identity = __webpack_require__(158), + overRest = __webpack_require__(159), + setToString = __webpack_require__(161); + + /** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ + function baseRest(func, start) { + return setToString(overRest(func, start, identity), func + ''); + } + + module.exports = baseRest; + + +/***/ }), +/* 158 */ +/***/ (function(module, exports) { + + /** + * This method returns the first argument it receives. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'a': 1 }; + * + * console.log(_.identity(object) === object); + * // => true + */ + function identity(value) { + return value; + } + + module.exports = identity; + + +/***/ }), +/* 159 */ +/***/ (function(module, exports, __webpack_require__) { + + var apply = __webpack_require__(160); + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMax = Math.max; + + /** + * A specialized version of `baseRest` which transforms the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @param {Function} transform The rest array transform. + * @returns {Function} Returns the new function. + */ + function overRest(func, start, transform) { + start = nativeMax(start === undefined ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = transform(array); + return apply(func, this, otherArgs); + }; + } + + module.exports = overRest; + + +/***/ }), +/* 160 */ +/***/ (function(module, exports) { + + /** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ + function apply(func, thisArg, args) { + switch (args.length) { + case 0: return func.call(thisArg); + case 1: return func.call(thisArg, args[0]); + case 2: return func.call(thisArg, args[0], args[1]); + case 3: return func.call(thisArg, args[0], args[1], args[2]); + } + return func.apply(thisArg, args); + } + + module.exports = apply; + + +/***/ }), +/* 161 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSetToString = __webpack_require__(162), + shortOut = __webpack_require__(165); + + /** + * Sets the `toString` method of `func` to return `string`. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ + var setToString = shortOut(baseSetToString); + + module.exports = setToString; + + +/***/ }), +/* 162 */ +/***/ (function(module, exports, __webpack_require__) { + + var constant = __webpack_require__(163), + defineProperty = __webpack_require__(164), + identity = __webpack_require__(158); + + /** + * The base implementation of `setToString` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ + var baseSetToString = !defineProperty ? identity : function(func, string) { + return defineProperty(func, 'toString', { + 'configurable': true, + 'enumerable': false, + 'value': constant(string), + 'writable': true + }); + }; + + module.exports = baseSetToString; + + +/***/ }), +/* 163 */ +/***/ (function(module, exports) { + + /** + * Creates a function that returns `value`. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {*} value The value to return from the new function. + * @returns {Function} Returns the new constant function. + * @example + * + * var objects = _.times(2, _.constant({ 'a': 1 })); + * + * console.log(objects); + * // => [{ 'a': 1 }, { 'a': 1 }] + * + * console.log(objects[0] === objects[1]); + * // => true + */ + function constant(value) { + return function() { + return value; + }; + } + + module.exports = constant; + + +/***/ }), +/* 164 */ +/***/ (function(module, exports, __webpack_require__) { + + var getNative = __webpack_require__(122); + + var defineProperty = (function() { + try { + var func = getNative(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} + }()); + + module.exports = defineProperty; + + +/***/ }), +/* 165 */ +/***/ (function(module, exports) { + + /** Used to detect hot functions by number of calls within a span of milliseconds. */ + var HOT_COUNT = 800, + HOT_SPAN = 16; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeNow = Date.now; + + /** + * Creates a function that'll short out and invoke `identity` instead + * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` + * milliseconds. + * + * @private + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new shortable function. + */ + function shortOut(func) { + var count = 0, + lastCalled = 0; + + return function() { + var stamp = nativeNow(), + remaining = HOT_SPAN - (stamp - lastCalled); + + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return arguments[0]; + } + } else { + count = 0; + } + return func.apply(undefined, arguments); + }; + } + + module.exports = shortOut; + + +/***/ }), +/* 166 */ +/***/ (function(module, exports, __webpack_require__) { + + var isArrayLike = __webpack_require__(89), + isObjectLike = __webpack_require__(104); + + /** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, + * else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ + function isArrayLikeObject(value) { + return isObjectLike(value) && isArrayLike(value); + } + + module.exports = isArrayLikeObject; + + +/***/ }), +/* 167 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseDifference = __webpack_require__(115), + baseFlatten = __webpack_require__(108), + baseIteratee = __webpack_require__(168), + baseRest = __webpack_require__(157), + isArrayLikeObject = __webpack_require__(166), + last = __webpack_require__(228); + + /** + * This method is like `_.difference` except that it accepts `iteratee` which + * is invoked for each element of `array` and `values` to generate the criterion + * by which they're compared. The order and references of result values are + * determined by the first array. The iteratee is invoked with one argument: + * (value). + * + * **Note:** Unlike `_.pullAllBy`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [1.2] + * + * // The `_.property` iteratee shorthand. + * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'); + * // => [{ 'x': 2 }] + */ + var differenceBy = baseRest(function(array, values) { + var iteratee = last(values); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; + } + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), baseIteratee(iteratee, 2)) + : []; + }); + + module.exports = differenceBy; + + +/***/ }), +/* 168 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseMatches = __webpack_require__(169), + baseMatchesProperty = __webpack_require__(211), + identity = __webpack_require__(158), + isArray = __webpack_require__(112), + property = __webpack_require__(225); + + /** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ + function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity; + } + if (typeof value == 'object') { + return isArray(value) + ? baseMatchesProperty(value[0], value[1]) + : baseMatches(value); + } + return property(value); + } + + module.exports = baseIteratee; + + +/***/ }), +/* 169 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIsMatch = __webpack_require__(170), + getMatchData = __webpack_require__(208), + matchesStrictComparable = __webpack_require__(210); + + /** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ + function baseMatches(source) { + var matchData = getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || baseIsMatch(object, source, matchData); + }; + } + + module.exports = baseMatches; + + +/***/ }), +/* 170 */ +/***/ (function(module, exports, __webpack_require__) { + + var Stack = __webpack_require__(171), + baseIsEqual = __webpack_require__(177); + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + + /** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ + function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new Stack; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; + } + + module.exports = baseIsMatch; + + +/***/ }), +/* 171 */ +/***/ (function(module, exports, __webpack_require__) { + + var ListCache = __webpack_require__(132), + stackClear = __webpack_require__(172), + stackDelete = __webpack_require__(173), + stackGet = __webpack_require__(174), + stackHas = __webpack_require__(175), + stackSet = __webpack_require__(176); + + /** + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function Stack(entries) { + var data = this.__data__ = new ListCache(entries); + this.size = data.size; + } + + // Add methods to `Stack`. + Stack.prototype.clear = stackClear; + Stack.prototype['delete'] = stackDelete; + Stack.prototype.get = stackGet; + Stack.prototype.has = stackHas; + Stack.prototype.set = stackSet; + + module.exports = Stack; + + +/***/ }), +/* 172 */ +/***/ (function(module, exports, __webpack_require__) { + + var ListCache = __webpack_require__(132); + + /** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ + function stackClear() { + this.__data__ = new ListCache; + this.size = 0; + } + + module.exports = stackClear; + + +/***/ }), +/* 173 */ +/***/ (function(module, exports) { + + /** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function stackDelete(key) { + var data = this.__data__, + result = data['delete'](key); + + this.size = data.size; + return result; + } + + module.exports = stackDelete; + + +/***/ }), +/* 174 */ +/***/ (function(module, exports) { + + /** + * Gets the stack value for `key`. + * + * @private + * @name get + * @memberOf Stack + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function stackGet(key) { + return this.__data__.get(key); + } + + module.exports = stackGet; + + +/***/ }), +/* 175 */ +/***/ (function(module, exports) { + + /** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function stackHas(key) { + return this.__data__.has(key); + } + + module.exports = stackHas; + + +/***/ }), +/* 176 */ +/***/ (function(module, exports, __webpack_require__) { + + var ListCache = __webpack_require__(132), + Map = __webpack_require__(139), + MapCache = __webpack_require__(117); + + /** Used as the size to enable large array optimizations. */ + var LARGE_ARRAY_SIZE = 200; + + /** + * Sets the stack `key` to `value`. + * + * @private + * @name set + * @memberOf Stack + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the stack cache instance. + */ + function stackSet(key, value) { + var data = this.__data__; + if (data instanceof ListCache) { + var pairs = data.__data__; + if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { + pairs.push([key, value]); + this.size = ++data.size; + return this; + } + data = this.__data__ = new MapCache(pairs); + } + data.set(key, value); + this.size = data.size; + return this; + } + + module.exports = stackSet; + + +/***/ }), +/* 177 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIsEqualDeep = __webpack_require__(178), + isObjectLike = __webpack_require__(104); + + /** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ + function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); + } + + module.exports = baseIsEqual; + + +/***/ }), +/* 178 */ +/***/ (function(module, exports, __webpack_require__) { + + var Stack = __webpack_require__(171), + equalArrays = __webpack_require__(179), + equalByTag = __webpack_require__(181), + equalObjects = __webpack_require__(185), + getTag = __webpack_require__(203), + isArray = __webpack_require__(112), + isBuffer = __webpack_require__(194), + isTypedArray = __webpack_require__(196); + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG = 1; + + /** `Object#toString` result references. */ + var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + objectTag = '[object Object]'; + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = objIsArr ? arrayTag : getTag(object), + othTag = othIsArr ? arrayTag : getTag(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && isBuffer(object)) { + if (!isBuffer(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new Stack); + return (objIsArr || isTypedArray(object)) + ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new Stack); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new Stack); + return equalObjects(object, other, bitmask, customizer, equalFunc, stack); + } + + module.exports = baseIsEqualDeep; + + +/***/ }), +/* 179 */ +/***/ (function(module, exports, __webpack_require__) { + + var SetCache = __webpack_require__(116), + arraySome = __webpack_require__(180), + cacheHas = __webpack_require__(156); + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + + /** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ + function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(array); + if (stacked && stack.get(other)) { + return stacked == other; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!arraySome(other, function(othValue, othIndex) { + if (!cacheHas(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; + } + + module.exports = equalArrays; + + +/***/ }), +/* 180 */ +/***/ (function(module, exports) { + + /** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ + function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; + } + + module.exports = arraySome; + + +/***/ }), +/* 181 */ +/***/ (function(module, exports, __webpack_require__) { + + var Symbol = __webpack_require__(92), + Uint8Array = __webpack_require__(182), + eq = __webpack_require__(88), + equalArrays = __webpack_require__(179), + mapToArray = __webpack_require__(183), + setToArray = __webpack_require__(184); + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + + /** `Object#toString` result references. */ + var boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + + var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]'; + + /** Used to convert symbols to primitives and strings. */ + var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + + /** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new Uint8Array(object), new Uint8Array(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return eq(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = mapToArray; + + case setTag: + var isPartial = bitmask & COMPARE_PARTIAL_FLAG; + convert || (convert = setToArray); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; + } + + module.exports = equalByTag; + + +/***/ }), +/* 182 */ +/***/ (function(module, exports, __webpack_require__) { + + var root = __webpack_require__(93); + + /** Built-in value references. */ + var Uint8Array = root.Uint8Array; + + module.exports = Uint8Array; + + +/***/ }), +/* 183 */ +/***/ (function(module, exports) { + + /** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ + function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; + } + + module.exports = mapToArray; + + +/***/ }), +/* 184 */ +/***/ (function(module, exports) { + + /** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ + function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; + } + + module.exports = setToArray; + + +/***/ }), +/* 185 */ +/***/ (function(module, exports, __webpack_require__) { + + var getAllKeys = __webpack_require__(186); + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG = 1; + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + objProps = getAllKeys(object), + objLength = objProps.length, + othProps = getAllKeys(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { + return false; + } + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked && stack.get(other)) { + return stacked == other; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; + } + + module.exports = equalObjects; + + +/***/ }), +/* 186 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseGetAllKeys = __webpack_require__(187), + getSymbols = __webpack_require__(188), + keys = __webpack_require__(191); + + /** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ + function getAllKeys(object) { + return baseGetAllKeys(object, keys, getSymbols); + } + + module.exports = getAllKeys; + + +/***/ }), +/* 187 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayPush = __webpack_require__(107), + isArray = __webpack_require__(112); + + /** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ + function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); + } + + module.exports = baseGetAllKeys; + + +/***/ }), +/* 188 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayFilter = __webpack_require__(189), + stubArray = __webpack_require__(190); + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Built-in value references. */ + var propertyIsEnumerable = objectProto.propertyIsEnumerable; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeGetSymbols = Object.getOwnPropertySymbols; + + /** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ + var getSymbols = !nativeGetSymbols ? stubArray : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return arrayFilter(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); + }; + + module.exports = getSymbols; + + +/***/ }), +/* 189 */ +/***/ (function(module, exports) { + + /** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; + } + + module.exports = arrayFilter; + + +/***/ }), +/* 190 */ +/***/ (function(module, exports) { + + /** + * This method returns a new empty array. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {Array} Returns the new empty array. + * @example + * + * var arrays = _.times(2, _.stubArray); + * + * console.log(arrays); + * // => [[], []] + * + * console.log(arrays[0] === arrays[1]); + * // => false + */ + function stubArray() { + return []; + } + + module.exports = stubArray; + + +/***/ }), +/* 191 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayLikeKeys = __webpack_require__(192), + baseKeys = __webpack_require__(199), + isArrayLike = __webpack_require__(89); + + /** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ + function keys(object) { + return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); + } + + module.exports = keys; + + +/***/ }), +/* 192 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseTimes = __webpack_require__(193), + isArguments = __webpack_require__(110), + isArray = __webpack_require__(112), + isBuffer = __webpack_require__(194), + isIndex = __webpack_require__(99), + isTypedArray = __webpack_require__(196); + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ + function arrayLikeKeys(value, inherited) { + var isArr = isArray(value), + isArg = !isArr && isArguments(value), + isBuff = !isArr && !isArg && isBuffer(value), + isType = !isArr && !isArg && !isBuff && isTypedArray(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? baseTimes(value.length, String) : [], + length = result.length; + + for (var key in value) { + if ((inherited || hasOwnProperty.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + isIndex(key, length) + ))) { + result.push(key); + } + } + return result; + } + + module.exports = arrayLikeKeys; + + +/***/ }), +/* 193 */ +/***/ (function(module, exports) { + + /** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ + function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; + } + + module.exports = baseTimes; + + +/***/ }), +/* 194 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(module) {var root = __webpack_require__(93), + stubFalse = __webpack_require__(195); + + /** Detect free variable `exports`. */ + var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + + /** Detect free variable `module`. */ + var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + + /** Detect the popular CommonJS extension `module.exports`. */ + var moduleExports = freeModule && freeModule.exports === freeExports; + + /** Built-in value references. */ + var Buffer = moduleExports ? root.Buffer : undefined; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; + + /** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */ + var isBuffer = nativeIsBuffer || stubFalse; + + module.exports = isBuffer; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(59)(module))) + +/***/ }), +/* 195 */ +/***/ (function(module, exports) { + + /** + * This method returns `false`. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {boolean} Returns `false`. + * @example + * + * _.times(2, _.stubFalse); + * // => [false, false] + */ + function stubFalse() { + return false; + } + + module.exports = stubFalse; + + +/***/ }), +/* 196 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIsTypedArray = __webpack_require__(197), + baseUnary = __webpack_require__(155), + nodeUtil = __webpack_require__(198); + + /* Node.js helper references. */ + var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; + + /** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ + var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; + + module.exports = isTypedArray; + + +/***/ }), +/* 197 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseGetTag = __webpack_require__(91), + isLength = __webpack_require__(98), + isObjectLike = __webpack_require__(104); + + /** `Object#toString` result references. */ + var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + mapTag = '[object Map]', + numberTag = '[object Number]', + objectTag = '[object Object]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + weakMapTag = '[object WeakMap]'; + + var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + + /** Used to identify `toStringTag` values of typed arrays. */ + var typedArrayTags = {}; + typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = + typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = + typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = + typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = + typedArrayTags[uint32Tag] = true; + typedArrayTags[argsTag] = typedArrayTags[arrayTag] = + typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = + typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = + typedArrayTags[errorTag] = typedArrayTags[funcTag] = + typedArrayTags[mapTag] = typedArrayTags[numberTag] = + typedArrayTags[objectTag] = typedArrayTags[regexpTag] = + typedArrayTags[setTag] = typedArrayTags[stringTag] = + typedArrayTags[weakMapTag] = false; + + /** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ + function baseIsTypedArray(value) { + return isObjectLike(value) && + isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; + } + + module.exports = baseIsTypedArray; + + +/***/ }), +/* 198 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(module) {var freeGlobal = __webpack_require__(94); + + /** Detect free variable `exports`. */ + var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + + /** Detect free variable `module`. */ + var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + + /** Detect the popular CommonJS extension `module.exports`. */ + var moduleExports = freeModule && freeModule.exports === freeExports; + + /** Detect free variable `process` from Node.js. */ + var freeProcess = moduleExports && freeGlobal.process; + + /** Used to access faster Node.js helpers. */ + var nodeUtil = (function() { + try { + // Use `util.types` for Node.js 10+. + var types = freeModule && freeModule.require && freeModule.require('util').types; + + if (types) { + return types; + } + + // Legacy `process.binding('util')` for Node.js < 10. + return freeProcess && freeProcess.binding && freeProcess.binding('util'); + } catch (e) {} + }()); + + module.exports = nodeUtil; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(59)(module))) + +/***/ }), +/* 199 */ +/***/ (function(module, exports, __webpack_require__) { + + var isPrototype = __webpack_require__(200), + nativeKeys = __webpack_require__(201); + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeys(object) { + if (!isPrototype(object)) { + return nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; + } + + module.exports = baseKeys; + + +/***/ }), +/* 200 */ +/***/ (function(module, exports) { + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ + function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; + + return value === proto; + } + + module.exports = isPrototype; + + +/***/ }), +/* 201 */ +/***/ (function(module, exports, __webpack_require__) { + + var overArg = __webpack_require__(202); + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeKeys = overArg(Object.keys, Object); + + module.exports = nativeKeys; + + +/***/ }), +/* 202 */ +/***/ (function(module, exports) { + + /** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ + function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; + } + + module.exports = overArg; + + +/***/ }), +/* 203 */ +/***/ (function(module, exports, __webpack_require__) { + + var DataView = __webpack_require__(204), + Map = __webpack_require__(139), + Promise = __webpack_require__(205), + Set = __webpack_require__(206), + WeakMap = __webpack_require__(207), + baseGetTag = __webpack_require__(91), + toSource = __webpack_require__(126); + + /** `Object#toString` result references. */ + var mapTag = '[object Map]', + objectTag = '[object Object]', + promiseTag = '[object Promise]', + setTag = '[object Set]', + weakMapTag = '[object WeakMap]'; + + var dataViewTag = '[object DataView]'; + + /** Used to detect maps, sets, and weakmaps. */ + var dataViewCtorString = toSource(DataView), + mapCtorString = toSource(Map), + promiseCtorString = toSource(Promise), + setCtorString = toSource(Set), + weakMapCtorString = toSource(WeakMap); + + /** + * Gets the `toStringTag` of `value`. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + var getTag = baseGetTag; + + // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. + if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || + (Map && getTag(new Map) != mapTag) || + (Promise && getTag(Promise.resolve()) != promiseTag) || + (Set && getTag(new Set) != setTag) || + (WeakMap && getTag(new WeakMap) != weakMapTag)) { + getTag = function(value) { + var result = baseGetTag(value), + Ctor = result == objectTag ? value.constructor : undefined, + ctorString = Ctor ? toSource(Ctor) : ''; + + if (ctorString) { + switch (ctorString) { + case dataViewCtorString: return dataViewTag; + case mapCtorString: return mapTag; + case promiseCtorString: return promiseTag; + case setCtorString: return setTag; + case weakMapCtorString: return weakMapTag; + } + } + return result; + }; + } + + module.exports = getTag; + + +/***/ }), +/* 204 */ +/***/ (function(module, exports, __webpack_require__) { + + var getNative = __webpack_require__(122), + root = __webpack_require__(93); + + /* Built-in method references that are verified to be native. */ + var DataView = getNative(root, 'DataView'); + + module.exports = DataView; + + +/***/ }), +/* 205 */ +/***/ (function(module, exports, __webpack_require__) { + + var getNative = __webpack_require__(122), + root = __webpack_require__(93); + + /* Built-in method references that are verified to be native. */ + var Promise = getNative(root, 'Promise'); + + module.exports = Promise; + + +/***/ }), +/* 206 */ +/***/ (function(module, exports, __webpack_require__) { + + var getNative = __webpack_require__(122), + root = __webpack_require__(93); + + /* Built-in method references that are verified to be native. */ + var Set = getNative(root, 'Set'); + + module.exports = Set; + + +/***/ }), +/* 207 */ +/***/ (function(module, exports, __webpack_require__) { + + var getNative = __webpack_require__(122), + root = __webpack_require__(93); + + /* Built-in method references that are verified to be native. */ + var WeakMap = getNative(root, 'WeakMap'); + + module.exports = WeakMap; + + +/***/ }), +/* 208 */ +/***/ (function(module, exports, __webpack_require__) { + + var isStrictComparable = __webpack_require__(209), + keys = __webpack_require__(191); + + /** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ + function getMatchData(object) { + var result = keys(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, isStrictComparable(value)]; + } + return result; + } + + module.exports = getMatchData; + + +/***/ }), +/* 209 */ +/***/ (function(module, exports, __webpack_require__) { + + var isObject = __webpack_require__(97); + + /** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ + function isStrictComparable(value) { + return value === value && !isObject(value); + } + + module.exports = isStrictComparable; + + +/***/ }), +/* 210 */ +/***/ (function(module, exports) { + + /** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ + function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; + } + + module.exports = matchesStrictComparable; + + +/***/ }), +/* 211 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIsEqual = __webpack_require__(177), + get = __webpack_require__(212), + hasIn = __webpack_require__(222), + isKey = __webpack_require__(215), + isStrictComparable = __webpack_require__(209), + matchesStrictComparable = __webpack_require__(210), + toKey = __webpack_require__(221); + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + + /** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ + function baseMatchesProperty(path, srcValue) { + if (isKey(path) && isStrictComparable(srcValue)) { + return matchesStrictComparable(toKey(path), srcValue); + } + return function(object) { + var objValue = get(object, path); + return (objValue === undefined && objValue === srcValue) + ? hasIn(object, path) + : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); + }; + } + + module.exports = baseMatchesProperty; + + +/***/ }), +/* 212 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseGet = __webpack_require__(213); + + /** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ + function get(object, path, defaultValue) { + var result = object == null ? undefined : baseGet(object, path); + return result === undefined ? defaultValue : result; + } + + module.exports = get; + + +/***/ }), +/* 213 */ +/***/ (function(module, exports, __webpack_require__) { + + var castPath = __webpack_require__(214), + toKey = __webpack_require__(221); + + /** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ + function baseGet(object, path) { + path = castPath(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[toKey(path[index++])]; + } + return (index && index == length) ? object : undefined; + } + + module.exports = baseGet; + + +/***/ }), +/* 214 */ +/***/ (function(module, exports, __webpack_require__) { + + var isArray = __webpack_require__(112), + isKey = __webpack_require__(215), + stringToPath = __webpack_require__(216), + toString = __webpack_require__(219); + + /** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ + function castPath(value, object) { + if (isArray(value)) { + return value; + } + return isKey(value, object) ? [value] : stringToPath(toString(value)); + } + + module.exports = castPath; + + +/***/ }), +/* 215 */ +/***/ (function(module, exports, __webpack_require__) { + + var isArray = __webpack_require__(112), + isSymbol = __webpack_require__(103); + + /** Used to match property names within property paths. */ + var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + + /** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ + function isKey(value, object) { + if (isArray(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || isSymbol(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); + } + + module.exports = isKey; + + +/***/ }), +/* 216 */ +/***/ (function(module, exports, __webpack_require__) { + + var memoizeCapped = __webpack_require__(217); + + /** Used to match property names within property paths. */ + var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + + /** Used to match backslashes in property paths. */ + var reEscapeChar = /\\(\\)?/g; + + /** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ + var stringToPath = memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; + }); + + module.exports = stringToPath; + + +/***/ }), +/* 217 */ +/***/ (function(module, exports, __webpack_require__) { + + var memoize = __webpack_require__(218); + + /** Used as the maximum memoize cache size. */ + var MAX_MEMOIZE_SIZE = 500; + + /** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ + function memoizeCapped(func) { + var result = memoize(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; + } + + module.exports = memoizeCapped; + + +/***/ }), +/* 218 */ +/***/ (function(module, exports, __webpack_require__) { + + var MapCache = __webpack_require__(117); + + /** Error message constants. */ + var FUNC_ERROR_TEXT = 'Expected a function'; + + /** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided, it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is used as the map cache key. The `func` + * is invoked with the `this` binding of the memoized function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the + * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) + * method interface of `clear`, `delete`, `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoized function. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * var other = { 'c': 3, 'd': 4 }; + * + * var values = _.memoize(_.values); + * values(object); + * // => [1, 2] + * + * values(other); + * // => [3, 4] + * + * object.a = 2; + * values(object); + * // => [1, 2] + * + * // Modify the result cache. + * values.cache.set(object, ['a', 'b']); + * values(object); + * // => ['a', 'b'] + * + * // Replace `_.memoize.Cache`. + * _.memoize.Cache = WeakMap; + */ + function memoize(func, resolver) { + if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function() { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; + + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result) || cache; + return result; + }; + memoized.cache = new (memoize.Cache || MapCache); + return memoized; + } + + // Expose `MapCache`. + memoize.Cache = MapCache; + + module.exports = memoize; + + +/***/ }), +/* 219 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseToString = __webpack_require__(220); + + /** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ + function toString(value) { + return value == null ? '' : baseToString(value); + } + + module.exports = toString; + + +/***/ }), +/* 220 */ +/***/ (function(module, exports, __webpack_require__) { + + var Symbol = __webpack_require__(92), + arrayMap = __webpack_require__(154), + isArray = __webpack_require__(112), + isSymbol = __webpack_require__(103); + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0; + + /** Used to convert symbols to primitives and strings. */ + var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + + /** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ + function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isArray(value)) { + // Recursively convert values (susceptible to call stack limits). + return arrayMap(value, baseToString) + ''; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + } + + module.exports = baseToString; + + +/***/ }), +/* 221 */ +/***/ (function(module, exports, __webpack_require__) { + + var isSymbol = __webpack_require__(103); + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0; + + /** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ + function toKey(value) { + if (typeof value == 'string' || isSymbol(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + } + + module.exports = toKey; + + +/***/ }), +/* 222 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseHasIn = __webpack_require__(223), + hasPath = __webpack_require__(224); + + /** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ + function hasIn(object, path) { + return object != null && hasPath(object, path, baseHasIn); + } + + module.exports = hasIn; + + +/***/ }), +/* 223 */ +/***/ (function(module, exports) { + + /** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ + function baseHasIn(object, key) { + return object != null && key in Object(object); + } + + module.exports = baseHasIn; + + +/***/ }), +/* 224 */ +/***/ (function(module, exports, __webpack_require__) { + + var castPath = __webpack_require__(214), + isArguments = __webpack_require__(110), + isArray = __webpack_require__(112), + isIndex = __webpack_require__(99), + isLength = __webpack_require__(98), + toKey = __webpack_require__(221); + + /** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ + function hasPath(object, path, hasFunc) { + path = castPath(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = toKey(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && isLength(length) && isIndex(key, length) && + (isArray(object) || isArguments(object)); + } + + module.exports = hasPath; + + +/***/ }), +/* 225 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseProperty = __webpack_require__(226), + basePropertyDeep = __webpack_require__(227), + isKey = __webpack_require__(215), + toKey = __webpack_require__(221); + + /** + * Creates a function that returns the value at `path` of a given object. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + * @example + * + * var objects = [ + * { 'a': { 'b': 2 } }, + * { 'a': { 'b': 1 } } + * ]; + * + * _.map(objects, _.property('a.b')); + * // => [2, 1] + * + * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); + * // => [1, 2] + */ + function property(path) { + return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path); + } + + module.exports = property; + + +/***/ }), +/* 226 */ +/***/ (function(module, exports) { + + /** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ + function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; + } + + module.exports = baseProperty; + + +/***/ }), +/* 227 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseGet = __webpack_require__(213); + + /** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ + function basePropertyDeep(path) { + return function(object) { + return baseGet(object, path); + }; + } + + module.exports = basePropertyDeep; + + +/***/ }), +/* 228 */ +/***/ (function(module, exports) { + + /** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ + function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; + } + + module.exports = last; + + +/***/ }), +/* 229 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseDifference = __webpack_require__(115), + baseFlatten = __webpack_require__(108), + baseRest = __webpack_require__(157), + isArrayLikeObject = __webpack_require__(166), + last = __webpack_require__(228); + + /** + * This method is like `_.difference` except that it accepts `comparator` + * which is invoked to compare elements of `array` to `values`. The order and + * references of result values are determined by the first array. The comparator + * is invoked with two arguments: (arrVal, othVal). + * + * **Note:** Unlike `_.pullAllWith`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * + * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual); + * // => [{ 'x': 2, 'y': 1 }] + */ + var differenceWith = baseRest(function(array, values) { + var comparator = last(values); + if (isArrayLikeObject(comparator)) { + comparator = undefined; + } + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator) + : []; + }); + + module.exports = differenceWith; + + +/***/ }), +/* 230 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSlice = __webpack_require__(86), + toInteger = __webpack_require__(100); + + /** + * Creates a slice of `array` with `n` elements dropped from the beginning. + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.drop([1, 2, 3]); + * // => [2, 3] + * + * _.drop([1, 2, 3], 2); + * // => [3] + * + * _.drop([1, 2, 3], 5); + * // => [] + * + * _.drop([1, 2, 3], 0); + * // => [1, 2, 3] + */ + function drop(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + return baseSlice(array, n < 0 ? 0 : n, length); + } + + module.exports = drop; + + +/***/ }), +/* 231 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSlice = __webpack_require__(86), + toInteger = __webpack_require__(100); + + /** + * Creates a slice of `array` with `n` elements dropped from the end. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.dropRight([1, 2, 3]); + * // => [1, 2] + * + * _.dropRight([1, 2, 3], 2); + * // => [1] + * + * _.dropRight([1, 2, 3], 5); + * // => [] + * + * _.dropRight([1, 2, 3], 0); + * // => [1, 2, 3] + */ + function dropRight(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + n = length - n; + return baseSlice(array, 0, n < 0 ? 0 : n); + } + + module.exports = dropRight; + + +/***/ }), +/* 232 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIteratee = __webpack_require__(168), + baseWhile = __webpack_require__(233); + + /** + * Creates a slice of `array` excluding elements dropped from the end. + * Elements are dropped until `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.dropRightWhile(users, function(o) { return !o.active; }); + * // => objects for ['barney'] + * + * // The `_.matches` iteratee shorthand. + * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false }); + * // => objects for ['barney', 'fred'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.dropRightWhile(users, ['active', false]); + * // => objects for ['barney'] + * + * // The `_.property` iteratee shorthand. + * _.dropRightWhile(users, 'active'); + * // => objects for ['barney', 'fred', 'pebbles'] + */ + function dropRightWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, baseIteratee(predicate, 3), true, true) + : []; + } + + module.exports = dropRightWhile; + + +/***/ }), +/* 233 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSlice = __webpack_require__(86); + + /** + * The base implementation of methods like `_.dropWhile` and `_.takeWhile` + * without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to query. + * @param {Function} predicate The function invoked per iteration. + * @param {boolean} [isDrop] Specify dropping elements instead of taking them. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the slice of `array`. + */ + function baseWhile(array, predicate, isDrop, fromRight) { + var length = array.length, + index = fromRight ? length : -1; + + while ((fromRight ? index-- : ++index < length) && + predicate(array[index], index, array)) {} + + return isDrop + ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) + : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); + } + + module.exports = baseWhile; + + +/***/ }), +/* 234 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIteratee = __webpack_require__(168), + baseWhile = __webpack_require__(233); + + /** + * Creates a slice of `array` excluding elements dropped from the beginning. + * Elements are dropped until `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.dropWhile(users, function(o) { return !o.active; }); + * // => objects for ['pebbles'] + * + * // The `_.matches` iteratee shorthand. + * _.dropWhile(users, { 'user': 'barney', 'active': false }); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.dropWhile(users, ['active', false]); + * // => objects for ['pebbles'] + * + * // The `_.property` iteratee shorthand. + * _.dropWhile(users, 'active'); + * // => objects for ['barney', 'fred', 'pebbles'] + */ + function dropWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, baseIteratee(predicate, 3), true) + : []; + } + + module.exports = dropWhile; + + +/***/ }), +/* 235 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseFill = __webpack_require__(236), + isIterateeCall = __webpack_require__(87); + + /** + * Fills elements of `array` with `value` from `start` up to, but not + * including, `end`. + * + * **Note:** This method mutates `array`. + * + * @static + * @memberOf _ + * @since 3.2.0 + * @category Array + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3]; + * + * _.fill(array, 'a'); + * console.log(array); + * // => ['a', 'a', 'a'] + * + * _.fill(Array(3), 2); + * // => [2, 2, 2] + * + * _.fill([4, 6, 8, 10], '*', 1, 3); + * // => [4, '*', '*', 10] + */ + function fill(array, value, start, end) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { + start = 0; + end = length; + } + return baseFill(array, value, start, end); + } + + module.exports = fill; + + +/***/ }), +/* 236 */ +/***/ (function(module, exports, __webpack_require__) { + + var toInteger = __webpack_require__(100), + toLength = __webpack_require__(237); + + /** + * The base implementation of `_.fill` without an iteratee call guard. + * + * @private + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + */ + function baseFill(array, value, start, end) { + var length = array.length; + + start = toInteger(start); + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = (end === undefined || end > length) ? length : toInteger(end); + if (end < 0) { + end += length; + } + end = start > end ? 0 : toLength(end); + while (start < end) { + array[start++] = value; + } + return array; + } + + module.exports = baseFill; + + +/***/ }), +/* 237 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseClamp = __webpack_require__(238), + toInteger = __webpack_require__(100); + + /** Used as references for the maximum length and index of an array. */ + var MAX_ARRAY_LENGTH = 4294967295; + + /** + * Converts `value` to an integer suitable for use as the length of an + * array-like object. + * + * **Note:** This method is based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toLength(3.2); + * // => 3 + * + * _.toLength(Number.MIN_VALUE); + * // => 0 + * + * _.toLength(Infinity); + * // => 4294967295 + * + * _.toLength('3.2'); + * // => 3 + */ + function toLength(value) { + return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0; + } + + module.exports = toLength; + + +/***/ }), +/* 238 */ +/***/ (function(module, exports) { + + /** + * The base implementation of `_.clamp` which doesn't coerce arguments. + * + * @private + * @param {number} number The number to clamp. + * @param {number} [lower] The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the clamped number. + */ + function baseClamp(number, lower, upper) { + if (number === number) { + if (upper !== undefined) { + number = number <= upper ? number : upper; + } + if (lower !== undefined) { + number = number >= lower ? number : lower; + } + } + return number; + } + + module.exports = baseClamp; + + +/***/ }), +/* 239 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseFindIndex = __webpack_require__(150), + baseIteratee = __webpack_require__(168), + toInteger = __webpack_require__(100); + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMax = Math.max; + + /** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ + function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return baseFindIndex(array, baseIteratee(predicate, 3), index); + } + + module.exports = findIndex; + + +/***/ }), +/* 240 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseFindIndex = __webpack_require__(150), + baseIteratee = __webpack_require__(168), + toInteger = __webpack_require__(100); + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMax = Math.max, + nativeMin = Math.min; + + /** + * This method is like `_.findIndex` except that it iterates over elements + * of `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=array.length-1] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); + * // => 2 + * + * // The `_.matches` iteratee shorthand. + * _.findLastIndex(users, { 'user': 'barney', 'active': true }); + * // => 0 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findLastIndex(users, ['active', false]); + * // => 2 + * + * // The `_.property` iteratee shorthand. + * _.findLastIndex(users, 'active'); + * // => 0 + */ + function findLastIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = length - 1; + if (fromIndex !== undefined) { + index = toInteger(fromIndex); + index = fromIndex < 0 + ? nativeMax(length + index, 0) + : nativeMin(index, length - 1); + } + return baseFindIndex(array, baseIteratee(predicate, 3), index, true); + } + + module.exports = findLastIndex; + + +/***/ }), +/* 241 */ +/***/ (function(module, exports, __webpack_require__) { + + module.exports = __webpack_require__(242); + + +/***/ }), +/* 242 */ +/***/ (function(module, exports) { + + /** + * Gets the first element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias first + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the first element of `array`. + * @example + * + * _.head([1, 2, 3]); + * // => 1 + * + * _.head([]); + * // => undefined + */ + function head(array) { + return (array && array.length) ? array[0] : undefined; + } + + module.exports = head; + + +/***/ }), +/* 243 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseFlatten = __webpack_require__(108); + + /** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ + function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, 1) : []; + } + + module.exports = flatten; + + +/***/ }), +/* 244 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseFlatten = __webpack_require__(108); + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0; + + /** + * Recursively flattens `array`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flattenDeep([1, [2, [3, [4]], 5]]); + * // => [1, 2, 3, 4, 5] + */ + function flattenDeep(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, INFINITY) : []; + } + + module.exports = flattenDeep; + + +/***/ }), +/* 245 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseFlatten = __webpack_require__(108), + toInteger = __webpack_require__(100); + + /** + * Recursively flatten `array` up to `depth` times. + * + * @static + * @memberOf _ + * @since 4.4.0 + * @category Array + * @param {Array} array The array to flatten. + * @param {number} [depth=1] The maximum recursion depth. + * @returns {Array} Returns the new flattened array. + * @example + * + * var array = [1, [2, [3, [4]], 5]]; + * + * _.flattenDepth(array, 1); + * // => [1, 2, [3, [4]], 5] + * + * _.flattenDepth(array, 2); + * // => [1, 2, 3, [4], 5] + */ + function flattenDepth(array, depth) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + depth = depth === undefined ? 1 : toInteger(depth); + return baseFlatten(array, depth); + } + + module.exports = flattenDepth; + + +/***/ }), +/* 246 */ +/***/ (function(module, exports) { + + /** + * The inverse of `_.toPairs`; this method returns an object composed + * from key-value `pairs`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} pairs The key-value pairs. + * @returns {Object} Returns the new object. + * @example + * + * _.fromPairs([['a', 1], ['b', 2]]); + * // => { 'a': 1, 'b': 2 } + */ + function fromPairs(pairs) { + var index = -1, + length = pairs == null ? 0 : pairs.length, + result = {}; + + while (++index < length) { + var pair = pairs[index]; + result[pair[0]] = pair[1]; + } + return result; + } + + module.exports = fromPairs; + + +/***/ }), +/* 247 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIndexOf = __webpack_require__(149), + toInteger = __webpack_require__(100); + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMax = Math.max; + + /** + * Gets the index at which the first occurrence of `value` is found in `array` + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. If `fromIndex` is negative, it's used as the + * offset from the end of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.indexOf([1, 2, 1, 2], 2); + * // => 1 + * + * // Search from the `fromIndex`. + * _.indexOf([1, 2, 1, 2], 2, 2); + * // => 3 + */ + function indexOf(array, value, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return baseIndexOf(array, value, index); + } + + module.exports = indexOf; + + +/***/ }), +/* 248 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSlice = __webpack_require__(86); + + /** + * Gets all but the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.initial([1, 2, 3]); + * // => [1, 2] + */ + function initial(array) { + var length = array == null ? 0 : array.length; + return length ? baseSlice(array, 0, -1) : []; + } + + module.exports = initial; + + +/***/ }), +/* 249 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayMap = __webpack_require__(154), + baseIntersection = __webpack_require__(250), + baseRest = __webpack_require__(157), + castArrayLikeObject = __webpack_require__(251); + + /** + * Creates an array of unique values that are included in all given arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. The order and references of result values are + * determined by the first array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersection([2, 1], [2, 3]); + * // => [2] + */ + var intersection = baseRest(function(arrays) { + var mapped = arrayMap(arrays, castArrayLikeObject); + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped) + : []; + }); + + module.exports = intersection; + + +/***/ }), +/* 250 */ +/***/ (function(module, exports, __webpack_require__) { + + var SetCache = __webpack_require__(116), + arrayIncludes = __webpack_require__(148), + arrayIncludesWith = __webpack_require__(153), + arrayMap = __webpack_require__(154), + baseUnary = __webpack_require__(155), + cacheHas = __webpack_require__(156); + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMin = Math.min; + + /** + * The base implementation of methods like `_.intersection`, without support + * for iteratee shorthands, that accepts an array of arrays to inspect. + * + * @private + * @param {Array} arrays The arrays to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of shared values. + */ + function baseIntersection(arrays, iteratee, comparator) { + var includes = comparator ? arrayIncludesWith : arrayIncludes, + length = arrays[0].length, + othLength = arrays.length, + othIndex = othLength, + caches = Array(othLength), + maxLength = Infinity, + result = []; + + while (othIndex--) { + var array = arrays[othIndex]; + if (othIndex && iteratee) { + array = arrayMap(array, baseUnary(iteratee)); + } + maxLength = nativeMin(array.length, maxLength); + caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120)) + ? new SetCache(othIndex && array) + : undefined; + } + array = arrays[0]; + + var index = -1, + seen = caches[0]; + + outer: + while (++index < length && result.length < maxLength) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (!(seen + ? cacheHas(seen, computed) + : includes(result, computed, comparator) + )) { + othIndex = othLength; + while (--othIndex) { + var cache = caches[othIndex]; + if (!(cache + ? cacheHas(cache, computed) + : includes(arrays[othIndex], computed, comparator)) + ) { + continue outer; + } + } + if (seen) { + seen.push(computed); + } + result.push(value); + } + } + return result; + } + + module.exports = baseIntersection; + + +/***/ }), +/* 251 */ +/***/ (function(module, exports, __webpack_require__) { + + var isArrayLikeObject = __webpack_require__(166); + + /** + * Casts `value` to an empty array if it's not an array like object. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array|Object} Returns the cast array-like object. + */ + function castArrayLikeObject(value) { + return isArrayLikeObject(value) ? value : []; + } + + module.exports = castArrayLikeObject; + + +/***/ }), +/* 252 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayMap = __webpack_require__(154), + baseIntersection = __webpack_require__(250), + baseIteratee = __webpack_require__(168), + baseRest = __webpack_require__(157), + castArrayLikeObject = __webpack_require__(251), + last = __webpack_require__(228); + + /** + * This method is like `_.intersection` except that it accepts `iteratee` + * which is invoked for each element of each `arrays` to generate the criterion + * by which they're compared. The order and references of result values are + * determined by the first array. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [2.1] + * + * // The `_.property` iteratee shorthand. + * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }] + */ + var intersectionBy = baseRest(function(arrays) { + var iteratee = last(arrays), + mapped = arrayMap(arrays, castArrayLikeObject); + + if (iteratee === last(mapped)) { + iteratee = undefined; + } else { + mapped.pop(); + } + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped, baseIteratee(iteratee, 2)) + : []; + }); + + module.exports = intersectionBy; + + +/***/ }), +/* 253 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayMap = __webpack_require__(154), + baseIntersection = __webpack_require__(250), + baseRest = __webpack_require__(157), + castArrayLikeObject = __webpack_require__(251), + last = __webpack_require__(228); + + /** + * This method is like `_.intersection` except that it accepts `comparator` + * which is invoked to compare elements of `arrays`. The order and references + * of result values are determined by the first array. The comparator is + * invoked with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.intersectionWith(objects, others, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }] + */ + var intersectionWith = baseRest(function(arrays) { + var comparator = last(arrays), + mapped = arrayMap(arrays, castArrayLikeObject); + + comparator = typeof comparator == 'function' ? comparator : undefined; + if (comparator) { + mapped.pop(); + } + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped, undefined, comparator) + : []; + }); + + module.exports = intersectionWith; + + +/***/ }), +/* 254 */ +/***/ (function(module, exports) { + + /** Used for built-in method references. */ + var arrayProto = Array.prototype; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeJoin = arrayProto.join; + + /** + * Converts all elements in `array` into a string separated by `separator`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to convert. + * @param {string} [separator=','] The element separator. + * @returns {string} Returns the joined string. + * @example + * + * _.join(['a', 'b', 'c'], '~'); + * // => 'a~b~c' + */ + function join(array, separator) { + return array == null ? '' : nativeJoin.call(array, separator); + } + + module.exports = join; + + +/***/ }), +/* 255 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseFindIndex = __webpack_require__(150), + baseIsNaN = __webpack_require__(151), + strictLastIndexOf = __webpack_require__(256), + toInteger = __webpack_require__(100); + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMax = Math.max, + nativeMin = Math.min; + + /** + * This method is like `_.indexOf` except that it iterates over elements of + * `array` from right to left. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=array.length-1] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.lastIndexOf([1, 2, 1, 2], 2); + * // => 3 + * + * // Search from the `fromIndex`. + * _.lastIndexOf([1, 2, 1, 2], 2, 2); + * // => 1 + */ + function lastIndexOf(array, value, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = length; + if (fromIndex !== undefined) { + index = toInteger(fromIndex); + index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1); + } + return value === value + ? strictLastIndexOf(array, value, index) + : baseFindIndex(array, baseIsNaN, index, true); + } + + module.exports = lastIndexOf; + + +/***/ }), +/* 256 */ +/***/ (function(module, exports) { + + /** + * A specialized version of `_.lastIndexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function strictLastIndexOf(array, value, fromIndex) { + var index = fromIndex + 1; + while (index--) { + if (array[index] === value) { + return index; + } + } + return index; + } + + module.exports = strictLastIndexOf; + + +/***/ }), +/* 257 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseNth = __webpack_require__(258), + toInteger = __webpack_require__(100); + + /** + * Gets the element at index `n` of `array`. If `n` is negative, the nth + * element from the end is returned. + * + * @static + * @memberOf _ + * @since 4.11.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=0] The index of the element to return. + * @returns {*} Returns the nth element of `array`. + * @example + * + * var array = ['a', 'b', 'c', 'd']; + * + * _.nth(array, 1); + * // => 'b' + * + * _.nth(array, -2); + * // => 'c'; + */ + function nth(array, n) { + return (array && array.length) ? baseNth(array, toInteger(n)) : undefined; + } + + module.exports = nth; + + +/***/ }), +/* 258 */ +/***/ (function(module, exports, __webpack_require__) { + + var isIndex = __webpack_require__(99); + + /** + * The base implementation of `_.nth` which doesn't coerce arguments. + * + * @private + * @param {Array} array The array to query. + * @param {number} n The index of the element to return. + * @returns {*} Returns the nth element of `array`. + */ + function baseNth(array, n) { + var length = array.length; + if (!length) { + return; + } + n += n < 0 ? length : 0; + return isIndex(n, length) ? array[n] : undefined; + } + + module.exports = baseNth; + + +/***/ }), +/* 259 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseRest = __webpack_require__(157), + pullAll = __webpack_require__(260); + + /** + * Removes all given values from `array` using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove` + * to remove elements from an array by predicate. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {...*} [values] The values to remove. + * @returns {Array} Returns `array`. + * @example + * + * var array = ['a', 'b', 'c', 'a', 'b', 'c']; + * + * _.pull(array, 'a', 'c'); + * console.log(array); + * // => ['b', 'b'] + */ + var pull = baseRest(pullAll); + + module.exports = pull; + + +/***/ }), +/* 260 */ +/***/ (function(module, exports, __webpack_require__) { + + var basePullAll = __webpack_require__(261); + + /** + * This method is like `_.pull` except that it accepts an array of values to remove. + * + * **Note:** Unlike `_.difference`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @returns {Array} Returns `array`. + * @example + * + * var array = ['a', 'b', 'c', 'a', 'b', 'c']; + * + * _.pullAll(array, ['a', 'c']); + * console.log(array); + * // => ['b', 'b'] + */ + function pullAll(array, values) { + return (array && array.length && values && values.length) + ? basePullAll(array, values) + : array; + } + + module.exports = pullAll; + + +/***/ }), +/* 261 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayMap = __webpack_require__(154), + baseIndexOf = __webpack_require__(149), + baseIndexOfWith = __webpack_require__(262), + baseUnary = __webpack_require__(155), + copyArray = __webpack_require__(113); + + /** Used for built-in method references. */ + var arrayProto = Array.prototype; + + /** Built-in value references. */ + var splice = arrayProto.splice; + + /** + * The base implementation of `_.pullAllBy` without support for iteratee + * shorthands. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns `array`. + */ + function basePullAll(array, values, iteratee, comparator) { + var indexOf = comparator ? baseIndexOfWith : baseIndexOf, + index = -1, + length = values.length, + seen = array; + + if (array === values) { + values = copyArray(values); + } + if (iteratee) { + seen = arrayMap(array, baseUnary(iteratee)); + } + while (++index < length) { + var fromIndex = 0, + value = values[index], + computed = iteratee ? iteratee(value) : value; + + while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) { + if (seen !== array) { + splice.call(seen, fromIndex, 1); + } + splice.call(array, fromIndex, 1); + } + } + return array; + } + + module.exports = basePullAll; + + +/***/ }), +/* 262 */ +/***/ (function(module, exports) { + + /** + * This function is like `baseIndexOf` except that it accepts a comparator. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @param {Function} comparator The comparator invoked per element. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseIndexOfWith(array, value, fromIndex, comparator) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (comparator(array[index], value)) { + return index; + } + } + return -1; + } + + module.exports = baseIndexOfWith; + + +/***/ }), +/* 263 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIteratee = __webpack_require__(168), + basePullAll = __webpack_require__(261); + + /** + * This method is like `_.pullAll` except that it accepts `iteratee` which is + * invoked for each element of `array` and `values` to generate the criterion + * by which they're compared. The iteratee is invoked with one argument: (value). + * + * **Note:** Unlike `_.differenceBy`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns `array`. + * @example + * + * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }]; + * + * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x'); + * console.log(array); + * // => [{ 'x': 2 }] + */ + function pullAllBy(array, values, iteratee) { + return (array && array.length && values && values.length) + ? basePullAll(array, values, baseIteratee(iteratee, 2)) + : array; + } + + module.exports = pullAllBy; + + +/***/ }), +/* 264 */ +/***/ (function(module, exports, __webpack_require__) { + + var basePullAll = __webpack_require__(261); + + /** + * This method is like `_.pullAll` except that it accepts `comparator` which + * is invoked to compare elements of `array` to `values`. The comparator is + * invoked with two arguments: (arrVal, othVal). + * + * **Note:** Unlike `_.differenceWith`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.6.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns `array`. + * @example + * + * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }]; + * + * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual); + * console.log(array); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }] + */ + function pullAllWith(array, values, comparator) { + return (array && array.length && values && values.length) + ? basePullAll(array, values, undefined, comparator) + : array; + } + + module.exports = pullAllWith; + + +/***/ }), +/* 265 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayMap = __webpack_require__(154), + baseAt = __webpack_require__(266), + basePullAt = __webpack_require__(267), + compareAscending = __webpack_require__(270), + flatRest = __webpack_require__(271), + isIndex = __webpack_require__(99); + + /** + * Removes elements from `array` corresponding to `indexes` and returns an + * array of removed elements. + * + * **Note:** Unlike `_.at`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {...(number|number[])} [indexes] The indexes of elements to remove. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = ['a', 'b', 'c', 'd']; + * var pulled = _.pullAt(array, [1, 3]); + * + * console.log(array); + * // => ['a', 'c'] + * + * console.log(pulled); + * // => ['b', 'd'] + */ + var pullAt = flatRest(function(array, indexes) { + var length = array == null ? 0 : array.length, + result = baseAt(array, indexes); + + basePullAt(array, arrayMap(indexes, function(index) { + return isIndex(index, length) ? +index : index; + }).sort(compareAscending)); + + return result; + }); + + module.exports = pullAt; + + +/***/ }), +/* 266 */ +/***/ (function(module, exports, __webpack_require__) { + + var get = __webpack_require__(212); + + /** + * The base implementation of `_.at` without support for individual paths. + * + * @private + * @param {Object} object The object to iterate over. + * @param {string[]} paths The property paths to pick. + * @returns {Array} Returns the picked elements. + */ + function baseAt(object, paths) { + var index = -1, + length = paths.length, + result = Array(length), + skip = object == null; + + while (++index < length) { + result[index] = skip ? undefined : get(object, paths[index]); + } + return result; + } + + module.exports = baseAt; + + +/***/ }), +/* 267 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseUnset = __webpack_require__(268), + isIndex = __webpack_require__(99); + + /** Used for built-in method references. */ + var arrayProto = Array.prototype; + + /** Built-in value references. */ + var splice = arrayProto.splice; + + /** + * The base implementation of `_.pullAt` without support for individual + * indexes or capturing the removed elements. + * + * @private + * @param {Array} array The array to modify. + * @param {number[]} indexes The indexes of elements to remove. + * @returns {Array} Returns `array`. + */ + function basePullAt(array, indexes) { + var length = array ? indexes.length : 0, + lastIndex = length - 1; + + while (length--) { + var index = indexes[length]; + if (length == lastIndex || index !== previous) { + var previous = index; + if (isIndex(index)) { + splice.call(array, index, 1); + } else { + baseUnset(array, index); + } + } + } + return array; + } + + module.exports = basePullAt; + + +/***/ }), +/* 268 */ +/***/ (function(module, exports, __webpack_require__) { + + var castPath = __webpack_require__(214), + last = __webpack_require__(228), + parent = __webpack_require__(269), + toKey = __webpack_require__(221); + + /** + * The base implementation of `_.unset`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The property path to unset. + * @returns {boolean} Returns `true` if the property is deleted, else `false`. + */ + function baseUnset(object, path) { + path = castPath(path, object); + object = parent(object, path); + return object == null || delete object[toKey(last(path))]; + } + + module.exports = baseUnset; + + +/***/ }), +/* 269 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseGet = __webpack_require__(213), + baseSlice = __webpack_require__(86); + + /** + * Gets the parent value at `path` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} path The path to get the parent value of. + * @returns {*} Returns the parent value. + */ + function parent(object, path) { + return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1)); + } + + module.exports = parent; + + +/***/ }), +/* 270 */ +/***/ (function(module, exports, __webpack_require__) { + + var isSymbol = __webpack_require__(103); + + /** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ + function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = isSymbol(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = isSymbol(other); + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; + } + + module.exports = compareAscending; + + +/***/ }), +/* 271 */ +/***/ (function(module, exports, __webpack_require__) { + + var flatten = __webpack_require__(243), + overRest = __webpack_require__(159), + setToString = __webpack_require__(161); + + /** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ + function flatRest(func) { + return setToString(overRest(func, undefined, flatten), func + ''); + } + + module.exports = flatRest; + + +/***/ }), +/* 272 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIteratee = __webpack_require__(168), + basePullAt = __webpack_require__(267); + + /** + * Removes all elements from `array` that `predicate` returns truthy for + * and returns an array of the removed elements. The predicate is invoked + * with three arguments: (value, index, array). + * + * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull` + * to pull elements from an array by value. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = [1, 2, 3, 4]; + * var evens = _.remove(array, function(n) { + * return n % 2 == 0; + * }); + * + * console.log(array); + * // => [1, 3] + * + * console.log(evens); + * // => [2, 4] + */ + function remove(array, predicate) { + var result = []; + if (!(array && array.length)) { + return result; + } + var index = -1, + indexes = [], + length = array.length; + + predicate = baseIteratee(predicate, 3); + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result.push(value); + indexes.push(index); + } + } + basePullAt(array, indexes); + return result; + } + + module.exports = remove; + + +/***/ }), +/* 273 */ +/***/ (function(module, exports) { + + /** Used for built-in method references. */ + var arrayProto = Array.prototype; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeReverse = arrayProto.reverse; + + /** + * Reverses `array` so that the first element becomes the last, the second + * element becomes the second to last, and so on. + * + * **Note:** This method mutates `array` and is based on + * [`Array#reverse`](https://mdn.io/Array/reverse). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3]; + * + * _.reverse(array); + * // => [3, 2, 1] + * + * console.log(array); + * // => [3, 2, 1] + */ + function reverse(array) { + return array == null ? array : nativeReverse.call(array); + } + + module.exports = reverse; + + +/***/ }), +/* 274 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSlice = __webpack_require__(86), + isIterateeCall = __webpack_require__(87), + toInteger = __webpack_require__(100); + + /** + * Creates a slice of `array` from `start` up to, but not including, `end`. + * + * **Note:** This method is used instead of + * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are + * returned. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function slice(array, start, end) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + if (end && typeof end != 'number' && isIterateeCall(array, start, end)) { + start = 0; + end = length; + } + else { + start = start == null ? 0 : toInteger(start); + end = end === undefined ? length : toInteger(end); + } + return baseSlice(array, start, end); + } + + module.exports = slice; + + +/***/ }), +/* 275 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSortedIndex = __webpack_require__(276); + + /** + * Uses a binary search to determine the lowest index at which `value` + * should be inserted into `array` in order to maintain its sort order. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * _.sortedIndex([30, 50], 40); + * // => 1 + */ + function sortedIndex(array, value) { + return baseSortedIndex(array, value); + } + + module.exports = sortedIndex; + + +/***/ }), +/* 276 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSortedIndexBy = __webpack_require__(277), + identity = __webpack_require__(158), + isSymbol = __webpack_require__(103); + + /** Used as references for the maximum length and index of an array. */ + var MAX_ARRAY_LENGTH = 4294967295, + HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; + + /** + * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which + * performs a binary search of `array` to determine the index at which `value` + * should be inserted into `array` in order to maintain its sort order. + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + */ + function baseSortedIndex(array, value, retHighest) { + var low = 0, + high = array == null ? low : array.length; + + if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { + while (low < high) { + var mid = (low + high) >>> 1, + computed = array[mid]; + + if (computed !== null && !isSymbol(computed) && + (retHighest ? (computed <= value) : (computed < value))) { + low = mid + 1; + } else { + high = mid; + } + } + return high; + } + return baseSortedIndexBy(array, value, identity, retHighest); + } + + module.exports = baseSortedIndex; + + +/***/ }), +/* 277 */ +/***/ (function(module, exports, __webpack_require__) { + + var isSymbol = __webpack_require__(103); + + /** Used as references for the maximum length and index of an array. */ + var MAX_ARRAY_LENGTH = 4294967295, + MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeFloor = Math.floor, + nativeMin = Math.min; + + /** + * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy` + * which invokes `iteratee` for `value` and each element of `array` to compute + * their sort ranking. The iteratee is invoked with one argument; (value). + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} iteratee The iteratee invoked per element. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + */ + function baseSortedIndexBy(array, value, iteratee, retHighest) { + value = iteratee(value); + + var low = 0, + high = array == null ? 0 : array.length, + valIsNaN = value !== value, + valIsNull = value === null, + valIsSymbol = isSymbol(value), + valIsUndefined = value === undefined; + + while (low < high) { + var mid = nativeFloor((low + high) / 2), + computed = iteratee(array[mid]), + othIsDefined = computed !== undefined, + othIsNull = computed === null, + othIsReflexive = computed === computed, + othIsSymbol = isSymbol(computed); + + if (valIsNaN) { + var setLow = retHighest || othIsReflexive; + } else if (valIsUndefined) { + setLow = othIsReflexive && (retHighest || othIsDefined); + } else if (valIsNull) { + setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull); + } else if (valIsSymbol) { + setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol); + } else if (othIsNull || othIsSymbol) { + setLow = false; + } else { + setLow = retHighest ? (computed <= value) : (computed < value); + } + if (setLow) { + low = mid + 1; + } else { + high = mid; + } + } + return nativeMin(high, MAX_ARRAY_INDEX); + } + + module.exports = baseSortedIndexBy; + + +/***/ }), +/* 278 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIteratee = __webpack_require__(168), + baseSortedIndexBy = __webpack_require__(277); + + /** + * This method is like `_.sortedIndex` except that it accepts `iteratee` + * which is invoked for `value` and each element of `array` to compute their + * sort ranking. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * var objects = [{ 'x': 4 }, { 'x': 5 }]; + * + * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.sortedIndexBy(objects, { 'x': 4 }, 'x'); + * // => 0 + */ + function sortedIndexBy(array, value, iteratee) { + return baseSortedIndexBy(array, value, baseIteratee(iteratee, 2)); + } + + module.exports = sortedIndexBy; + + +/***/ }), +/* 279 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSortedIndex = __webpack_require__(276), + eq = __webpack_require__(88); + + /** + * This method is like `_.indexOf` except that it performs a binary + * search on a sorted `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.sortedIndexOf([4, 5, 5, 5, 6], 5); + * // => 1 + */ + function sortedIndexOf(array, value) { + var length = array == null ? 0 : array.length; + if (length) { + var index = baseSortedIndex(array, value); + if (index < length && eq(array[index], value)) { + return index; + } + } + return -1; + } + + module.exports = sortedIndexOf; + + +/***/ }), +/* 280 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSortedIndex = __webpack_require__(276); + + /** + * This method is like `_.sortedIndex` except that it returns the highest + * index at which `value` should be inserted into `array` in order to + * maintain its sort order. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * _.sortedLastIndex([4, 5, 5, 5, 6], 5); + * // => 4 + */ + function sortedLastIndex(array, value) { + return baseSortedIndex(array, value, true); + } + + module.exports = sortedLastIndex; + + +/***/ }), +/* 281 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIteratee = __webpack_require__(168), + baseSortedIndexBy = __webpack_require__(277); + + /** + * This method is like `_.sortedLastIndex` except that it accepts `iteratee` + * which is invoked for `value` and each element of `array` to compute their + * sort ranking. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * var objects = [{ 'x': 4 }, { 'x': 5 }]; + * + * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); + * // => 1 + * + * // The `_.property` iteratee shorthand. + * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x'); + * // => 1 + */ + function sortedLastIndexBy(array, value, iteratee) { + return baseSortedIndexBy(array, value, baseIteratee(iteratee, 2), true); + } + + module.exports = sortedLastIndexBy; + + +/***/ }), +/* 282 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSortedIndex = __webpack_require__(276), + eq = __webpack_require__(88); + + /** + * This method is like `_.lastIndexOf` except that it performs a binary + * search on a sorted `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5); + * // => 3 + */ + function sortedLastIndexOf(array, value) { + var length = array == null ? 0 : array.length; + if (length) { + var index = baseSortedIndex(array, value, true) - 1; + if (eq(array[index], value)) { + return index; + } + } + return -1; + } + + module.exports = sortedLastIndexOf; + + +/***/ }), +/* 283 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSortedUniq = __webpack_require__(284); + + /** + * This method is like `_.uniq` except that it's designed and optimized + * for sorted arrays. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.sortedUniq([1, 1, 2]); + * // => [1, 2] + */ + function sortedUniq(array) { + return (array && array.length) + ? baseSortedUniq(array) + : []; + } + + module.exports = sortedUniq; + + +/***/ }), +/* 284 */ +/***/ (function(module, exports, __webpack_require__) { + + var eq = __webpack_require__(88); + + /** + * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ + function baseSortedUniq(array, iteratee) { + var index = -1, + length = array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + if (!index || !eq(computed, seen)) { + var seen = computed; + result[resIndex++] = value === 0 ? 0 : value; + } + } + return result; + } + + module.exports = baseSortedUniq; + + +/***/ }), +/* 285 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIteratee = __webpack_require__(168), + baseSortedUniq = __webpack_require__(284); + + /** + * This method is like `_.uniqBy` except that it's designed and optimized + * for sorted arrays. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor); + * // => [1.1, 2.3] + */ + function sortedUniqBy(array, iteratee) { + return (array && array.length) + ? baseSortedUniq(array, baseIteratee(iteratee, 2)) + : []; + } + + module.exports = sortedUniqBy; + + +/***/ }), +/* 286 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSlice = __webpack_require__(86); + + /** + * Gets all but the first element of `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.tail([1, 2, 3]); + * // => [2, 3] + */ + function tail(array) { + var length = array == null ? 0 : array.length; + return length ? baseSlice(array, 1, length) : []; + } + + module.exports = tail; + + +/***/ }), +/* 287 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSlice = __webpack_require__(86), + toInteger = __webpack_require__(100); + + /** + * Creates a slice of `array` with `n` elements taken from the beginning. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.take([1, 2, 3]); + * // => [1] + * + * _.take([1, 2, 3], 2); + * // => [1, 2] + * + * _.take([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.take([1, 2, 3], 0); + * // => [] + */ + function take(array, n, guard) { + if (!(array && array.length)) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + return baseSlice(array, 0, n < 0 ? 0 : n); + } + + module.exports = take; + + +/***/ }), +/* 288 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSlice = __webpack_require__(86), + toInteger = __webpack_require__(100); + + /** + * Creates a slice of `array` with `n` elements taken from the end. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.takeRight([1, 2, 3]); + * // => [3] + * + * _.takeRight([1, 2, 3], 2); + * // => [2, 3] + * + * _.takeRight([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.takeRight([1, 2, 3], 0); + * // => [] + */ + function takeRight(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + n = length - n; + return baseSlice(array, n < 0 ? 0 : n, length); + } + + module.exports = takeRight; + + +/***/ }), +/* 289 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIteratee = __webpack_require__(168), + baseWhile = __webpack_require__(233); + + /** + * Creates a slice of `array` with elements taken from the end. Elements are + * taken until `predicate` returns falsey. The predicate is invoked with + * three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.takeRightWhile(users, function(o) { return !o.active; }); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.matches` iteratee shorthand. + * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false }); + * // => objects for ['pebbles'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.takeRightWhile(users, ['active', false]); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.property` iteratee shorthand. + * _.takeRightWhile(users, 'active'); + * // => [] + */ + function takeRightWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, baseIteratee(predicate, 3), false, true) + : []; + } + + module.exports = takeRightWhile; + + +/***/ }), +/* 290 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIteratee = __webpack_require__(168), + baseWhile = __webpack_require__(233); + + /** + * Creates a slice of `array` with elements taken from the beginning. Elements + * are taken until `predicate` returns falsey. The predicate is invoked with + * three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.takeWhile(users, function(o) { return !o.active; }); + * // => objects for ['barney', 'fred'] + * + * // The `_.matches` iteratee shorthand. + * _.takeWhile(users, { 'user': 'barney', 'active': false }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.takeWhile(users, ['active', false]); + * // => objects for ['barney', 'fred'] + * + * // The `_.property` iteratee shorthand. + * _.takeWhile(users, 'active'); + * // => [] + */ + function takeWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, baseIteratee(predicate, 3)) + : []; + } + + module.exports = takeWhile; + + +/***/ }), +/* 291 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseFlatten = __webpack_require__(108), + baseRest = __webpack_require__(157), + baseUniq = __webpack_require__(292), + isArrayLikeObject = __webpack_require__(166); + + /** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2], [1, 2]); + * // => [2, 1] + */ + var union = baseRest(function(arrays) { + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true)); + }); + + module.exports = union; + + +/***/ }), +/* 292 */ +/***/ (function(module, exports, __webpack_require__) { + + var SetCache = __webpack_require__(116), + arrayIncludes = __webpack_require__(148), + arrayIncludesWith = __webpack_require__(153), + cacheHas = __webpack_require__(156), + createSet = __webpack_require__(293), + setToArray = __webpack_require__(184); + + /** Used as the size to enable large array optimizations. */ + var LARGE_ARRAY_SIZE = 200; + + /** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ + function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : createSet(array); + if (set) { + return setToArray(set); + } + isCommon = false; + includes = cacheHas; + seen = new SetCache; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; + } + + module.exports = baseUniq; + + +/***/ }), +/* 293 */ +/***/ (function(module, exports, __webpack_require__) { + + var Set = __webpack_require__(206), + noop = __webpack_require__(294), + setToArray = __webpack_require__(184); + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0; + + /** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ + var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) { + return new Set(values); + }; + + module.exports = createSet; + + +/***/ }), +/* 294 */ +/***/ (function(module, exports) { + + /** + * This method returns `undefined`. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example + * + * _.times(2, _.noop); + * // => [undefined, undefined] + */ + function noop() { + // No operation performed. + } + + module.exports = noop; + + +/***/ }), +/* 295 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseFlatten = __webpack_require__(108), + baseIteratee = __webpack_require__(168), + baseRest = __webpack_require__(157), + baseUniq = __webpack_require__(292), + isArrayLikeObject = __webpack_require__(166), + last = __webpack_require__(228); + + /** + * This method is like `_.union` except that it accepts `iteratee` which is + * invoked for each element of each `arrays` to generate the criterion by + * which uniqueness is computed. Result values are chosen from the first + * array in which the value occurs. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.unionBy([2.1], [1.2, 2.3], Math.floor); + * // => [2.1, 1.2] + * + * // The `_.property` iteratee shorthand. + * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */ + var unionBy = baseRest(function(arrays) { + var iteratee = last(arrays); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; + } + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), baseIteratee(iteratee, 2)); + }); + + module.exports = unionBy; + + +/***/ }), +/* 296 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseFlatten = __webpack_require__(108), + baseRest = __webpack_require__(157), + baseUniq = __webpack_require__(292), + isArrayLikeObject = __webpack_require__(166), + last = __webpack_require__(228); + + /** + * This method is like `_.union` except that it accepts `comparator` which + * is invoked to compare elements of `arrays`. Result values are chosen from + * the first array in which the value occurs. The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of combined values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.unionWith(objects, others, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] + */ + var unionWith = baseRest(function(arrays) { + var comparator = last(arrays); + comparator = typeof comparator == 'function' ? comparator : undefined; + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator); + }); + + module.exports = unionWith; + + +/***/ }), +/* 297 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseUniq = __webpack_require__(292); + + /** + * Creates a duplicate-free version of an array, using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons, in which only the first occurrence of each element + * is kept. The order of result values is determined by the order they occur + * in the array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.uniq([2, 1, 2]); + * // => [2, 1] + */ + function uniq(array) { + return (array && array.length) ? baseUniq(array) : []; + } + + module.exports = uniq; + + +/***/ }), +/* 298 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIteratee = __webpack_require__(168), + baseUniq = __webpack_require__(292); + + /** + * This method is like `_.uniq` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * uniqueness is computed. The order of result values is determined by the + * order they occur in the array. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.uniqBy([2.1, 1.2, 2.3], Math.floor); + * // => [2.1, 1.2] + * + * // The `_.property` iteratee shorthand. + * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */ + function uniqBy(array, iteratee) { + return (array && array.length) ? baseUniq(array, baseIteratee(iteratee, 2)) : []; + } + + module.exports = uniqBy; + + +/***/ }), +/* 299 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseUniq = __webpack_require__(292); + + /** + * This method is like `_.uniq` except that it accepts `comparator` which + * is invoked to compare elements of `array`. The order of result values is + * determined by the order they occur in the array.The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.uniqWith(objects, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }] + */ + function uniqWith(array, comparator) { + comparator = typeof comparator == 'function' ? comparator : undefined; + return (array && array.length) ? baseUniq(array, undefined, comparator) : []; + } + + module.exports = uniqWith; + + +/***/ }), +/* 300 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayFilter = __webpack_require__(189), + arrayMap = __webpack_require__(154), + baseProperty = __webpack_require__(226), + baseTimes = __webpack_require__(193), + isArrayLikeObject = __webpack_require__(166); + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMax = Math.max; + + /** + * This method is like `_.zip` except that it accepts an array of grouped + * elements and creates an array regrouping the elements to their pre-zip + * configuration. + * + * @static + * @memberOf _ + * @since 1.2.0 + * @category Array + * @param {Array} array The array of grouped elements to process. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]); + * // => [['a', 1, true], ['b', 2, false]] + * + * _.unzip(zipped); + * // => [['a', 'b'], [1, 2], [true, false]] + */ + function unzip(array) { + if (!(array && array.length)) { + return []; + } + var length = 0; + array = arrayFilter(array, function(group) { + if (isArrayLikeObject(group)) { + length = nativeMax(group.length, length); + return true; + } + }); + return baseTimes(length, function(index) { + return arrayMap(array, baseProperty(index)); + }); + } + + module.exports = unzip; + + +/***/ }), +/* 301 */ +/***/ (function(module, exports, __webpack_require__) { + + var apply = __webpack_require__(160), + arrayMap = __webpack_require__(154), + unzip = __webpack_require__(300); + + /** + * This method is like `_.unzip` except that it accepts `iteratee` to specify + * how regrouped values should be combined. The iteratee is invoked with the + * elements of each group: (...group). + * + * @static + * @memberOf _ + * @since 3.8.0 + * @category Array + * @param {Array} array The array of grouped elements to process. + * @param {Function} [iteratee=_.identity] The function to combine + * regrouped values. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip([1, 2], [10, 20], [100, 200]); + * // => [[1, 10, 100], [2, 20, 200]] + * + * _.unzipWith(zipped, _.add); + * // => [3, 30, 300] + */ + function unzipWith(array, iteratee) { + if (!(array && array.length)) { + return []; + } + var result = unzip(array); + if (iteratee == null) { + return result; + } + return arrayMap(result, function(group) { + return apply(iteratee, undefined, group); + }); + } + + module.exports = unzipWith; + + +/***/ }), +/* 302 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseDifference = __webpack_require__(115), + baseRest = __webpack_require__(157), + isArrayLikeObject = __webpack_require__(166); + + /** + * Creates an array excluding all given values using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * **Note:** Unlike `_.pull`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...*} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @see _.difference, _.xor + * @example + * + * _.without([2, 1, 2, 3], 1, 2); + * // => [3] + */ + var without = baseRest(function(array, values) { + return isArrayLikeObject(array) + ? baseDifference(array, values) + : []; + }); + + module.exports = without; + + +/***/ }), +/* 303 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayFilter = __webpack_require__(189), + baseRest = __webpack_require__(157), + baseXor = __webpack_require__(304), + isArrayLikeObject = __webpack_require__(166); + + /** + * Creates an array of unique values that is the + * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference) + * of the given arrays. The order of result values is determined by the order + * they occur in the arrays. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of filtered values. + * @see _.difference, _.without + * @example + * + * _.xor([2, 1], [2, 3]); + * // => [1, 3] + */ + var xor = baseRest(function(arrays) { + return baseXor(arrayFilter(arrays, isArrayLikeObject)); + }); + + module.exports = xor; + + +/***/ }), +/* 304 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseDifference = __webpack_require__(115), + baseFlatten = __webpack_require__(108), + baseUniq = __webpack_require__(292); + + /** + * The base implementation of methods like `_.xor`, without support for + * iteratee shorthands, that accepts an array of arrays to inspect. + * + * @private + * @param {Array} arrays The arrays to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of values. + */ + function baseXor(arrays, iteratee, comparator) { + var length = arrays.length; + if (length < 2) { + return length ? baseUniq(arrays[0]) : []; + } + var index = -1, + result = Array(length); + + while (++index < length) { + var array = arrays[index], + othIndex = -1; + + while (++othIndex < length) { + if (othIndex != index) { + result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator); + } + } + } + return baseUniq(baseFlatten(result, 1), iteratee, comparator); + } + + module.exports = baseXor; + + +/***/ }), +/* 305 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayFilter = __webpack_require__(189), + baseIteratee = __webpack_require__(168), + baseRest = __webpack_require__(157), + baseXor = __webpack_require__(304), + isArrayLikeObject = __webpack_require__(166), + last = __webpack_require__(228); + + /** + * This method is like `_.xor` except that it accepts `iteratee` which is + * invoked for each element of each `arrays` to generate the criterion by + * which by which they're compared. The order of result values is determined + * by the order they occur in the arrays. The iteratee is invoked with one + * argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [1.2, 3.4] + * + * // The `_.property` iteratee shorthand. + * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 2 }] + */ + var xorBy = baseRest(function(arrays) { + var iteratee = last(arrays); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; + } + return baseXor(arrayFilter(arrays, isArrayLikeObject), baseIteratee(iteratee, 2)); + }); + + module.exports = xorBy; + + +/***/ }), +/* 306 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayFilter = __webpack_require__(189), + baseRest = __webpack_require__(157), + baseXor = __webpack_require__(304), + isArrayLikeObject = __webpack_require__(166), + last = __webpack_require__(228); + + /** + * This method is like `_.xor` except that it accepts `comparator` which is + * invoked to compare elements of `arrays`. The order of result values is + * determined by the order they occur in the arrays. The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.xorWith(objects, others, _.isEqual); + * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] + */ + var xorWith = baseRest(function(arrays) { + var comparator = last(arrays); + comparator = typeof comparator == 'function' ? comparator : undefined; + return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator); + }); + + module.exports = xorWith; + + +/***/ }), +/* 307 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseRest = __webpack_require__(157), + unzip = __webpack_require__(300); + + /** + * Creates an array of grouped elements, the first of which contains the + * first elements of the given arrays, the second of which contains the + * second elements of the given arrays, and so on. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zip(['a', 'b'], [1, 2], [true, false]); + * // => [['a', 1, true], ['b', 2, false]] + */ + var zip = baseRest(unzip); + + module.exports = zip; + + +/***/ }), +/* 308 */ +/***/ (function(module, exports, __webpack_require__) { + + var assignValue = __webpack_require__(309), + baseZipObject = __webpack_require__(311); + + /** + * This method is like `_.fromPairs` except that it accepts two arrays, + * one of property identifiers and one of corresponding values. + * + * @static + * @memberOf _ + * @since 0.4.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject(['a', 'b'], [1, 2]); + * // => { 'a': 1, 'b': 2 } + */ + function zipObject(props, values) { + return baseZipObject(props || [], values || [], assignValue); + } + + module.exports = zipObject; + + +/***/ }), +/* 309 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseAssignValue = __webpack_require__(310), + eq = __webpack_require__(88); + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } + } + + module.exports = assignValue; + + +/***/ }), +/* 310 */ +/***/ (function(module, exports, __webpack_require__) { + + var defineProperty = __webpack_require__(164); + + /** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function baseAssignValue(object, key, value) { + if (key == '__proto__' && defineProperty) { + defineProperty(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } + } + + module.exports = baseAssignValue; + + +/***/ }), +/* 311 */ +/***/ (function(module, exports) { + + /** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property identifiers. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ + function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; + + while (++index < length) { + var value = index < valsLength ? values[index] : undefined; + assignFunc(result, props[index], value); + } + return result; + } + + module.exports = baseZipObject; + + +/***/ }), +/* 312 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSet = __webpack_require__(313), + baseZipObject = __webpack_require__(311); + + /** + * This method is like `_.zipObject` except that it supports property paths. + * + * @static + * @memberOf _ + * @since 4.1.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]); + * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } } + */ + function zipObjectDeep(props, values) { + return baseZipObject(props || [], values || [], baseSet); + } + + module.exports = zipObjectDeep; + + +/***/ }), +/* 313 */ +/***/ (function(module, exports, __webpack_require__) { + + var assignValue = __webpack_require__(309), + castPath = __webpack_require__(214), + isIndex = __webpack_require__(99), + isObject = __webpack_require__(97), + toKey = __webpack_require__(221); + + /** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ + function baseSet(object, path, value, customizer) { + if (!isObject(object)) { + return object; + } + path = castPath(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = toKey(path[index]), + newValue = value; + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = isObject(objValue) + ? objValue + : (isIndex(path[index + 1]) ? [] : {}); + } + } + assignValue(nested, key, newValue); + nested = nested[key]; + } + return object; + } + + module.exports = baseSet; + + +/***/ }), +/* 314 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseRest = __webpack_require__(157), + unzipWith = __webpack_require__(301); + + /** + * This method is like `_.zip` except that it accepts `iteratee` to specify + * how grouped values should be combined. The iteratee is invoked with the + * elements of each group: (...group). + * + * @static + * @memberOf _ + * @since 3.8.0 + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @param {Function} [iteratee=_.identity] The function to combine + * grouped values. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) { + * return a + b + c; + * }); + * // => [111, 222] + */ + var zipWith = baseRest(function(arrays) { + var length = arrays.length, + iteratee = length > 1 ? arrays[length - 1] : undefined; + + iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined; + return unzipWith(arrays, iteratee); + }); + + module.exports = zipWith; + + +/***/ }), +/* 315 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {module.exports = function ( handlerFunction ){ + var viewer = {}, + lastSelectedElement; + + viewer.handle = function ( selectedElement ){ + // Don't display details on a drag event, which will be prevented + if ( d3.event.defaultPrevented ) { + return; + } + + var isSelection = true; + + // Deselection of the focused element + if ( lastSelectedElement === selectedElement ) { + isSelection = false; + } + + if ( handlerFunction instanceof Function ) { + if ( isSelection ) { + handlerFunction(selectedElement); + } else { + handlerFunction(undefined); + } + } + + if ( isSelection ) { + lastSelectedElement = selectedElement; + } else { + lastSelectedElement = undefined; + } + }; + + /** + * Resets the displayed information to its default. + */ + viewer.reset = function (){ + if ( lastSelectedElement ) { + handlerFunction(undefined); + lastSelectedElement = undefined; + } + }; + + return viewer; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 316 */ +/***/ (function(module, exports, __webpack_require__) { + + var SetOperatorNode = __webpack_require__(20); + + module.exports = function (){ + + var filter = {}, + nodes, + properties, + enabled = false, + filteredNodes, + filteredProperties, + filterTools = __webpack_require__(76)(); + + + /** + * If enabled, all set operators including connected properties are filtered. + * @param untouchedNodes + * @param untouchedProperties + */ + filter.filter = function ( untouchedNodes, untouchedProperties ){ + nodes = untouchedNodes; + properties = untouchedProperties; + + if ( this.enabled() ) { + removeSetOperators(); + } + + filteredNodes = nodes; + filteredProperties = properties; + }; + + function removeSetOperators(){ + var filteredData = filterTools.filterNodesAndTidy(nodes, properties, isNoSetOperator); + + nodes = filteredData.nodes; + properties = filteredData.properties; + } + + function isNoSetOperator( node ){ + return !(node instanceof SetOperatorNode); + } + + filter.enabled = function ( p ){ + if ( !arguments.length ) return enabled; + enabled = p; + return filter; + }; + + + // Functions a filter must have + filter.filteredNodes = function (){ + return filteredNodes; + }; + + filter.filteredProperties = function (){ + return filteredProperties; + }; + + + return filter; + }; + + +/***/ }), +/* 317 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var SetOperatorNode = __webpack_require__(20); + var OwlThing = __webpack_require__(31); + var OwlNothing = __webpack_require__(30); + var elementTools = __webpack_require__(63)(); + + module.exports = function (){ + + var statistics = {}, + nodeCount, + occurencesOfClassAndDatatypeTypes = {}, + edgeCount, + occurencesOfPropertyTypes = {}, + classCount, + datatypeCount, + datatypePropertyCount, + objectPropertyCount, + propertyCount, + totalIndividualCount, + filteredNodes, + filteredProperties; + + + statistics.filter = function ( classesAndDatatypes, properties ){ + resetStoredData(); + + storeTotalCounts(classesAndDatatypes, properties); + storeClassAndDatatypeCount(classesAndDatatypes); + storePropertyCount(properties); + + storeOccurencesOfTypes(classesAndDatatypes, occurencesOfClassAndDatatypeTypes); + storeOccurencesOfTypes(properties, occurencesOfPropertyTypes); + + storeTotalIndividualCount(classesAndDatatypes); + + filteredNodes = classesAndDatatypes; + filteredProperties = properties; + }; + + function resetStoredData(){ + nodeCount = 0; + edgeCount = 0; + classCount = 0; + datatypeCount = 0; + datatypePropertyCount = 0; + objectPropertyCount = 0; + propertyCount = 0; + totalIndividualCount = 0; + } + + function storeTotalCounts( classesAndDatatypes, properties ){ + nodeCount = classesAndDatatypes.length; + + var seenProperties = __webpack_require__(62)(), i, l, property; + for ( i = 0, l = properties.length; i < l; i++ ) { + property = properties[i]; + if ( !seenProperties.has(property) ) { + edgeCount += 1; + } + + seenProperties.add(property); + if ( property.inverse() ) { + seenProperties.add(property.inverse()); + } + } + } + + function storeClassAndDatatypeCount( classesAndDatatypes ){ + // Each datatype should be counted just a single time + var datatypeSet = d3.set(), + hasThing = false, + hasNothing = false; + classCount = 0; + var old = 0, newcc = 0; + classesAndDatatypes.forEach(function ( node ){ + if ( elementTools.isDatatype(node) ) { + datatypeSet.add(node.defaultLabel()); + } else if ( !(node instanceof SetOperatorNode) ) { + if ( node instanceof OwlThing ) { + hasThing = true; + } else if ( node instanceof OwlNothing ) { + hasNothing = true; + } else { + old = classCount; + var adds = 1 + countElementArray(node.equivalents()); + classCount += adds; + newcc = classCount; + } + } else if ( node instanceof SetOperatorNode ) { + old = classCount; + classCount += 1; + newcc = classCount; + } + }); + + // count things and nothings just a single time + // classCount += hasThing ? 1 : 0; + // classCount += hasNothing ? 1 : 0; + + datatypeCount = datatypeSet.size(); + } + + function storePropertyCount( properties ){ + for ( var i = 0, l = properties.length; i < l; i++ ) { + var property = properties[i]; + var attr; + var result = false; + if ( property.attributes ) { + attr = property.attributes(); + if ( attr && attr.indexOf("datatype") !== -1 ) { + result = true; + } + } + if ( result === true ) { + datatypePropertyCount += getExtendedPropertyCount(property); + } else if ( elementTools.isObjectProperty(property) ) { + objectPropertyCount += getExtendedPropertyCount(property); + } + } + propertyCount = objectPropertyCount + datatypePropertyCount; + } + + function getExtendedPropertyCount( property ){ + // count the property itself + var count = 1; + + // and count properties this property represents + count += countElementArray(property.equivalents()); + count += countElementArray(property.redundantProperties()); + + return count; + } + + function countElementArray( properties ){ + if ( properties ) { + return properties.length; + } + return 0; + } + + function storeOccurencesOfTypes( elements, storage ){ + elements.forEach(function ( element ){ + var type = element.type(), + typeCount = storage[type]; + + if ( typeof typeCount === "undefined" ) { + typeCount = 0; + } else { + typeCount += 1; + } + storage[type] = typeCount; + }); + } + + function storeTotalIndividualCount( nodes ){ + var sawIndividuals = {}; + var totalCount = 0; + for ( var i = 0, l = nodes.length; i < l; i++ ) { + var individuals = nodes[i].individuals(); + + var tempCount = 0; + for ( var iA = 0; iA < individuals.length; iA++ ) { + if ( sawIndividuals[individuals[iA].iri()] === undefined ) { + sawIndividuals[individuals[iA].iri()] = 1; // this iri for that individual is now set to 1 >> seen it + tempCount++; + } + } + totalCount += tempCount; + } + totalIndividualCount = totalCount; + sawIndividuals = {}; // clear the object + + } + + + statistics.nodeCount = function (){ + return nodeCount; + }; + + statistics.occurencesOfClassAndDatatypeTypes = function (){ + return occurencesOfClassAndDatatypeTypes; + }; + + statistics.edgeCount = function (){ + return edgeCount; + }; + + statistics.occurencesOfPropertyTypes = function (){ + return occurencesOfPropertyTypes; + }; + + statistics.classCount = function (){ + return classCount; + }; + + statistics.datatypeCount = function (){ + return datatypeCount; + }; + + statistics.datatypePropertyCount = function (){ + return datatypePropertyCount; + }; + + statistics.objectPropertyCount = function (){ + return objectPropertyCount; + }; + + statistics.propertyCount = function (){ + return propertyCount; + }; + + statistics.totalIndividualCount = function (){ + return totalIndividualCount; + }; + + + // Functions a filter must have + statistics.filteredNodes = function (){ + return filteredNodes; + }; + + statistics.filteredProperties = function (){ + return filteredProperties; + }; + + + return statistics; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 318 */ +/***/ (function(module, exports, __webpack_require__) { + + var elementTools = __webpack_require__(63)(); + + module.exports = function (){ + + var filter = {}, + nodes, + properties, + enabled = false, + filteredNodes, + filteredProperties; + + + /** + * If enabled subclasses that have only subclass properties are filtered. + * @param untouchedNodes + * @param untouchedProperties + */ + filter.filter = function ( untouchedNodes, untouchedProperties ){ + nodes = untouchedNodes; + properties = untouchedProperties; + + if ( this.enabled() ) { + hideSubclassesWithoutOwnProperties(); + } + + filteredNodes = nodes; + filteredProperties = properties; + }; + + function hideSubclassesWithoutOwnProperties(){ + var unneededProperties = [], + unneededClasses = [], + subclasses = [], + connectedProperties, + subclass, + property, + i, // index, + l; // length + + + for ( i = 0, l = properties.length; i < l; i++ ) { + property = properties[i]; + if ( elementTools.isRdfsSubClassOf(property) ) { + subclasses.push(property.domain()); + } + } + + for ( i = 0, l = subclasses.length; i < l; i++ ) { + subclass = subclasses[i]; + connectedProperties = findRelevantConnectedProperties(subclass, properties); + + // Only remove the node and its properties, if they're all subclassOf properties + if ( areOnlySubclassProperties(connectedProperties) && + doesNotInheritFromMultipleClasses(subclass, connectedProperties) ) { + + unneededProperties = unneededProperties.concat(connectedProperties); + unneededClasses.push(subclass); + } + } + + nodes = removeUnneededElements(nodes, unneededClasses); + properties = removeUnneededElements(properties, unneededProperties); + } + + /** + * Looks recursively for connected properties. Because just subclasses are relevant, + * we just look recursively for their properties. + * + * @param node + * @param allProperties + * @param visitedNodes a visited nodes which is used on recursive invocation + * @returns {Array} + */ + function findRelevantConnectedProperties( node, allProperties, visitedNodes ){ + var connectedProperties = [], + property, + i, + l; + + for ( i = 0, l = allProperties.length; i < l; i++ ) { + property = allProperties[i]; + if ( property.domain() === node || + property.range() === node ) { + + connectedProperties.push(property); + + + /* Special case: SuperClass <-(1) Subclass <-(2) Subclass ->(3) e.g. Datatype + * We need to find the last property recursively. Otherwise, we would remove the subClassOf + * property (1) because we didn't see the datatype property (3). + */ + + // Look only for subclass properties, because these are the relevant properties + if ( elementTools.isRdfsSubClassOf(property) ) { + var domain = property.domain(); + visitedNodes = visitedNodes || __webpack_require__(62)(); + + // If we have the range, there might be a nested property on the domain + if ( node === property.range() && !visitedNodes.has(domain) ) { + visitedNodes.add(domain); + var nestedConnectedProperties = findRelevantConnectedProperties(domain, allProperties, visitedNodes); + connectedProperties = connectedProperties.concat(nestedConnectedProperties); + } + } + } + } + + return connectedProperties; + } + + function areOnlySubclassProperties( connectedProperties ){ + var onlySubclassProperties = true, + property, + i, + l; + + for ( i = 0, l = connectedProperties.length; i < l; i++ ) { + property = connectedProperties[i]; + + if ( !elementTools.isRdfsSubClassOf(property) ) { + onlySubclassProperties = false; + break; + } + } + + return onlySubclassProperties; + } + + function doesNotInheritFromMultipleClasses( subclass, connectedProperties ){ + var superClassCount = 0; + + for ( var i = 0, l = connectedProperties.length; i < l; i++ ) { + var property = connectedProperties[i]; + + if ( property.domain() === subclass ) { + superClassCount += 1; + } + + if ( superClassCount > 1 ) { + return false; + } + } + + return true; + } + + function removeUnneededElements( array, removableElements ){ + var disjoint = [], + element, + i, + l; + + for ( i = 0, l = array.length; i < l; i++ ) { + element = array[i]; + if ( removableElements.indexOf(element) === -1 ) { + disjoint.push(element); + } + } + return disjoint; + } + + filter.enabled = function ( p ){ + if ( !arguments.length ) return enabled; + enabled = p; + return filter; + }; + + + // Functions a filter must have + filter.filteredNodes = function (){ + return filteredNodes; + }; + + filter.filteredProperties = function (){ + return filteredProperties; + }; + + + return filter; + }; + + +/***/ }) +/******/ ]); \ No newline at end of file diff --git a/pgo/webvowl/license.txt b/pgo/webvowl/license.txt new file mode 100644 index 0000000..6df36db --- /dev/null +++ b/pgo/webvowl/license.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-2019 Vincent Link, Steffen Lohmann, Eduard Marbach, Stefan Negru, Vitalis Wiens + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/tto/.htaccess b/tto/.htaccess new file mode 100644 index 0000000..d3f6286 --- /dev/null +++ b/tto/.htaccess @@ -0,0 +1,47 @@ +# Turn off MultiViews +Options -MultiViews + +# Directive to ensure *.rdf files served as appropriate content type, +# if not present in main apache config +AddType application/rdf+xml .rdf +AddType application/rdf+xml .owl +AddType text/turtle .ttl +AddType application/n-triples .n3 +AddType application/ld+json .jsonld +# Rewrite engine setup +RewriteEngine On +#Change the path to the folder here +RewriteBase /tto + +# Rewrite rule to serve HTML content from the vocabulary URI if requested +RewriteCond %{HTTP_ACCEPT} !application/rdf\+xml.*(text/html|application/xhtml\+xml) +RewriteCond %{HTTP_ACCEPT} text/html [OR] +RewriteCond %{HTTP_ACCEPT} application/xhtml\+xml [OR] +RewriteCond %{HTTP_USER_AGENT} ^Mozilla/.* +RewriteRule ^$ index-de.html [R=303,L] + +# Rewrite rule to serve JSON-LD content from the vocabulary URI if requested +RewriteCond %{HTTP_ACCEPT} application/ld\+json +RewriteRule ^$ ontology.jsonld [R=303,L] + +# Rewrite rule to serve RDF/XML content from the vocabulary URI if requested +RewriteCond %{HTTP_ACCEPT} \*/\* [OR] +RewriteCond %{HTTP_ACCEPT} application/rdf\+xml +RewriteRule ^$ ontology.rdf [R=303,L] + +# Rewrite rule to serve N-Triples content from the vocabulary URI if requested +RewriteCond %{HTTP_ACCEPT} application/n-triples +RewriteRule ^$ ontology.nt [R=303,L] + +# Rewrite rule to serve TTL content from the vocabulary URI if requested +RewriteCond %{HTTP_ACCEPT} text/turtle [OR] +RewriteCond %{HTTP_ACCEPT} text/\* [OR] +RewriteCond %{HTTP_ACCEPT} \*/turtle +RewriteRule ^$ ontology.ttl [R=303,L] + +RewriteCond %{HTTP_ACCEPT} .+ +RewriteRule ^$ 406.html [R=406,L] +# Default response +# --------------------------- +# Rewrite rule to serve the RDF/XML content from the vocabulary URI by default +RewriteRule ^$ ontology.rdf [R=303,L] \ No newline at end of file diff --git a/tto/406.html b/tto/406.html new file mode 100644 index 0000000..1a2f4b5 --- /dev/null +++ b/tto/406.html @@ -0,0 +1,10 @@ + + +406 Not Acceptable + + +

    Not Acceptable

    +

    An appropriate representation of the requested resource could not be found on this server.

    + Available variants: + + \ No newline at end of file diff --git a/tto/index-de.html b/tto/index-de.html new file mode 100644 index 0000000..5583984 --- /dev/null +++ b/tto/index-de.html @@ -0,0 +1,2110 @@ + + + + + Tensile Test Ontology (TTO) + + + + + + + + + + + +
    +
    +
    language de en
    +

    Tensile Test Ontology (TTO)

    +

    Release 2023-07-14

    + + +
    +
    Revision:
    +
    2.0.1
    +
    Autoren:
    +
    https://orcid.org/0000-0001-7192-7143
    https://orcid.org/0000-0002-3717-7104
    https://orcid.org/0000-0002-7094-5371
    https://orcid.org/0000-0002-9014-2920
    https://orcid.org/0000-0003-4971-3645
    + +
    Importierte Ontologien:
    +
    prov-o#
    prov-o-inverses#
    co
    + +
    Download Serialisierung:
    JSON-LD RDF/XML N-Triples TTL
    Lizenz:
    http://insertlicenseURIhere.org +
    Visualisierung:
    Visualize with WebVowl
    +
    Zitieren als:
    +
    Markus Schilling, Bernd Bayerlein, Henk Birkholz, Philipp von Hartrott, Jörg Waitelonis. (July 14th, 2023) TTO: Tensile Test Ontology. Version 2.0.0, https://w3id.org/pmd/tto
    +
    + +Ursprung dieser Seite
    +
    +
    +
    +Ontology Specification Draft +
    +

    Zusammenfassung

    +This is the stable version of the PMD ontology of the tensile test (Tensile Test Ontology - TTO) as developed on the basis of the standard ISO 6892-1: Metallic materials - Tensile Testing - Part 1: Method of test at room temperature. + +The TTO was developed in the frame of the PMD project. The TTO provides conceptualizations valid for the description of tensile tests and corresponding data in accordance with the respective standard. By using TTO for storing tensile test data, all data will be well structured and based on a common vocabulary agreed on by an expert group (generation of FAIR data) which will lead to enhanced data interoperability. This comprises several data categories such as primary data, secondary data and metadata. Data will be human and machine readable. The usage of TTO facilitates data retrieval and downstream usage. Due to a close connection to the PMD core ontology (PMDco), the interoperability of tensile test data is enhanced and querying in combination with other aspects and data within the broad field of material science and engineering (MSE) is facilitated. + +The TTO class structure forms a comprehensible and semantic layer for unified storage of data generated in a tensile test including the possibility to record data from analysis, re-evaluation and re-use. Furthermore, extensive metadata allows to assess data quality and reproduce experiments. Following the open world assumption, object properties are deliberately low restrictive and sparse. + +TTO of PMD at GitHub: https://github.com/materialdigital/application-ontologies/tree/main/tensile_test_ontology_TTO +
    +
    + + +

    Tensile Test Ontology (TTO): überblick zurück zum Inhaltsverzeichnis

    + +Diese Ontologie beinhaltet die folgenden Klassen und Eigenschaften. +

    Klassen

    +

    Object Properties

    Annotation Properties

    +
    + + + +

    Querverweis für... Tensile Test Ontology (TTO) Klassen, Object Properties und Data Properties zurück zum Inhaltsverzeichnis

    +Dieser Abschnitt enthält Details für jede Klasse und jedes definierte Property, die definiert wurden durch Tensile Test Ontology (TTO). +
    +

    Klassen

    + +
    +

    Abgeschätzte Dehngeschwindigkeit Über Die Parallele Längec + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/tto/EstimatedStrainRateOverTheParallelLength

    +
    + Zunahme der Dehnung über die parallele Länge der Probe je Zeiteinheit, basierend auf der Traversengeschwindigkeit und der parallelen Länge der Probe +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    hat Super-Klassen
    +
    + testing rate + c +
    +
    +
    +
    +

    Anfangs-Breitec + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/tto/OriginalWidth

    +
    + Diese Entität beschreibt eine horizontale Messung eines Objekts (Prüfkörpers) im rechten Winkel zur Länge des Objekts (Prüfkörpers), wie sie vor einer Prüfung gemessen wird. +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    hat Super-Klassen
    +
    + width + c +
    +
    +
    +
    +

    Anfangs-Dickec + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/tto/OriginalThickness

    +
    + Diese Entität beschreibt die gemessene Dimension in einer Richtung eines Prüfstücks, wie sie vor der Prüfung gemessen wurde. +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    hat Super-Klassen
    +
    + thickness + c +
    +
    +
    +
    +

    Anfangs-Probendurchmesserc + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/tto/OriginalDiameter

    +
    + Die Länge einer geraden Linie durch den Mittelpunkt eines Objekts (Zugprüfkörpers), die vor einer Prüfung gemessen wird. +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    hat Super-Klassen
    +
    + diameter + c +
    +
    +
    +
    +

    Anfangsmesslängec + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/tto/OriginalGaugeLength

    +
    + Länge zwischen den Marken zur Kennzeichnung der Messlänge auf der Probe, die vor dem Versuch bei Raumtemperatur gemessen wird +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    hat Super-Klassen
    +
    + Messlänge + c +
    +
    +
    +
    +

    Anfangsquerschnitt innerhalb der parallelen Längec + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/tto/OriginalCrossSectionalArea

    +
    + Symbol: S_o +
    +
    + Dieses Konzept beschreibt die initiale Querschnittsfläche des Zugprüfkörpers entlang seiner parallelen Länge, bevor eine Verformung auftritt. +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    ist äquvivalent zu
    +
    ((relates to + op + some + Anfangs-Dicke + c) and (relates to + op + some + Anfangs-Breite + c)) or (relates to + op + some + Anfangs-Probendurchmesser + c)
    +
    hat Super-Klassen
    +
    + cross section area +
    +
    +
    +
    +

    Bleibende Dehnungc + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/tto/PercentagePermanentElongation

    +
    + Zunahme der Anfangsmesslänge einer Probe nach Entfernen einer festgelegten Zugspannung, angegeben in Prozent, bezogen auf die Anfangsmesslänge +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    ist äquvivalent zu
    +
    + relates to + op + some + Anfangsmesslänge + c +
    +
    hat Super-Klassen
    +
    + Verlängerung + c +
    +
    +
    +
    +

    Bleibende Extensometer-Dehnungc + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/tto/PercentagePermanentExtension

    +
    + Vergrößerung der Extensometer-Messlänge nach Entfernen einer festgelegten, auf die Probe aufgebrachten Zugspannung, angegeben in Prozent, bezogen auf die Extensometer-Messlänge +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    ist äquvivalent zu
    +
    + relates to + op + some + Extensometer-Messlänge + c +
    +
    hat Super-Klassen
    +
    + extension + c +
    +
    +
    +
    +

    Bruchdehnungc + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/tto/PercentageElongationAfterFracture

    +
    + bleibende Verlängerung der Messlänge nach dem Bruch (L_u − L_o), angegeben in Prozent, bezogen auf die Anfangsmesslänge +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    ist äquvivalent zu
    +
    + relates to + op + some + Anfangsmesslänge + c +
    +
    hat Super-Klassen
    +
    + Verlängerung + c +
    +
    +
    +
    +

    Brucheinschnürungc + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/tto/PercentageReductionOfArea

    +
    + größte während des Versuchs aufgetretene Änderung des Querschnitts (S_o − S_u), angegeben in Prozent, bezogen auf den Anfangsquerschnitt S_o +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    ist äquvivalent zu
    +
    (relates to + op + some + Kleinster Querschnitt nach dem Bruch + c) and (relates to + op + some + Anfangsquerschnitt innerhalb der parallelen Länge + c)
    +
    hat Super-Klassen
    +
    + value object + c +
    +
    +
    +
    +

    Dehngeschwindigkeitc + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/tto/StrainRate

    +
    + Zunahme der mit einem Extensometer in der Extensometer-Messlänge gemessenen Dehnung je Zeiteinheit +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    hat Super-Klassen
    +
    + testing rate + c +
    +
    +
    +
    +

    Dehngrenzec + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/tto/ProofStrength

    +
    + Spannung, bei der ein bestimmter Dehnungswert gleich einem bestimmten Prozentsatz der Messlänge des Dehnungsmessers ist +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    hat Super-Klassen
    +
    + value object + c +
    +
    hat Sub-Klassen
    +
    + Dehngrenze bei gesamter Extensometer-Dehnung + c, Dehngrenze bei plastischer Extensometer-Dehnung + c +
    +
    +
    +
    +

    Dehngrenze bei gesamter Extensometer-Dehnungc + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/tto/ProofStrengthTotalExtension

    +
    + Spannung, bei der die gesamte Extensometer-Dehnung (elastische und plastische Extensometer-Dehnung) einem vorgegebenen Prozentanteil der Extensometer-Messlänge entspricht + +Anmerkung: Der Index wird durch den Zahlenwert ergänzt, der den vorgegebenen Zahlenwert der gesamten Extensometer-Dehnung in Prozent angibt, z. B. R_t_0,5. +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    ist äquvivalent zu
    +
    + relates to + op + some + Extensometer-Messlänge + c +
    +
    hat Super-Klassen
    +
    + Dehngrenze + c +
    +
    +
    +
    +

    Dehngrenze bei plastischer Extensometer-Dehnungc + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/tto/ProofStrengthPlasticExtension

    +
    + Spannung, bei der die plastische Extensometer-Dehnung einem vorgegebenen Prozentanteil der Extensometer-Messlänge entspricht + +Anmerkung: Der Index wird durch den Zahlenwert ergänzt, der den vorgegebenen Zahlenwert der plastischen Extensometer-Dehnung in Prozent angibt, z. B. R_p_0,2. +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    ist äquvivalent zu
    +
    + relates to extension + op + some + value + some + float +
    +
    hat Super-Klassen
    +
    + Dehngrenze + c +
    +
    hat Sub-Klassen
    +
    + Dehngrenze bei plastischer Extensometer-Dehnung Rp01 + c, Dehngrenze bei plastischer Extensometer-Dehnung Rp02 + c +
    +
    ist in der Domäne von
    +
    + relates to extension + op +
    +
    +
    +
    +

    Dehngrenze bei plastischer Extensometer-Dehnung Rp01c + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/tto/Rp01

    +
    + Spannung bei einer plastischen Extensometer-Dehnung, die 0,1 Prozent der Extensometer-Messlänge entspricht +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    ist äquvivalent zu
    +
    + relates to extension + op + some + value + value 0.1
    +
    hat Super-Klassen
    +
    + Dehngrenze bei plastischer Extensometer-Dehnung + c +
    +
    +
    +
    +

    Dehngrenze bei plastischer Extensometer-Dehnung Rp02c + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/tto/Rp02

    +
    + Spannung bei einer plastischen Extensometer-Dehnung, die 0,2 Prozent der Extensometer-Messlänge entspricht +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    ist äquvivalent zu
    +
    + relates to extension + op + some + value + value 0.2
    +
    hat Super-Klassen
    +
    + Dehngrenze bei plastischer Extensometer-Dehnung + c +
    +
    +
    +
    +

    Dehnungc + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/tto/PercentageElongation

    +
    + Verlängerung, angegeben in Prozent, bezogen auf die Anfangsmesslänge +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    ist äquvivalent zu
    +
    + relates to + op + some + Anfangsmesslänge + c +
    +
    hat Super-Klassen
    +
    + Verlängerung + c +
    +
    +
    +
    +

    End-Breitec + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/tto/WidthAfterFracture

    +
    + Diese Entität beschreibt eine horizontale Messung eines Objekts (Prüfkörpers) im rechten Winkel zur Länge des Objekts (Prüfkörpers), wie sie nach einer Prüfung gemessen wird. +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    hat Super-Klassen
    +
    + width + c +
    +
    +
    +
    +

    End-Dickec + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/tto/ThicknessAfterFracture

    +
    + Diese Entität beschreibt die gemessene Dimension in einer Richtung eines Prüfstücks, wie sie vor der Prüfung gemessen wurde. +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    hat Super-Klassen
    +
    + thickness + c +
    +
    +
    +
    +

    End-Probendurchmesserc + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/tto/DiameterAfterFracture

    +
    + Die Länge einer geraden Linie durch den Mittelpunkt eines Objekts (Zugprüfstücks), gemessen nach einem Bruch, der während einer Prüfung aufgetreten ist. +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    hat Super-Klassen
    +
    + diameter + c +
    +
    +
    +
    +

    Extensometer-Messlängec + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/tto/ExtensometerGaugeLength

    +
    + Anfangsmesslänge des Dehnungsaufnehmers (Extensometer), die zum Messen der Verlängerung benutzt wird + +Anmerkung: Für die Bestimmung mehrerer Eigenschaften, die (teilweise oder vollständig) von der Verlängerung abhängig sind, z. B. R_p, A_e oder A_g, ist die Verwendung eines Extensometers zwingend erforderlich. +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    hat Super-Klassen
    +
    + Messlänge + c +
    +
    +
    +
    +

    Geometrische Formc + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/tto/GeometryShape

    +
    + Diese Eigenschaft beschreibt die geometrischen Abmessungen und das Erscheinungsbild (Form und Abmaße) einer Probe, eines Prüfkörpers oder eines Prüfstücks, wie sie üblicherweise durch eine entsprechende Norm definiert sind. Dementsprechend ist der angegebene Formwert in Übereinstimmung mit der definierenden Norm anzugeben, z. B. "Zugprüfstück Form 1 gemäß Anhang B". +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    hat Super-Klassen
    +
    + test piece info + c +
    +
    +
    +
    +

    Gesamte Extensometer-Dehnung bei Höchstkraftc + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/tto/PercentageTotalExtensionAtMaximumForce

    +
    + gesamte Verlängerung (elastische plus plastische Verlängerung) der Extensometer-Messlänge bei Höchstkraft, angegeben in Prozent, bezogen auf die Extensometer-Messlänge +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    ist äquvivalent zu
    +
    (relates to + op + some + Extensometer-Messlänge + c) and (relates to + op + some + Höchstkraft + c)
    +
    hat Super-Klassen
    +
    + extension + c +
    +
    +
    +
    +

    Gesamte Extensometer-Dehnung beim Bruchc + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/tto/PercentageTotalExtensionAtFracture

    +
    + gesamte Verlängerung (elastische plus plastische Verlängerung) der Extensometer-Messlänge beim Bruch, angegeben in Prozent, bezogen auf die Extensometer-Messlänge +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    ist äquvivalent zu
    +
    + relates to + op + some + Extensometer-Messlänge + c +
    +
    hat Super-Klassen
    +
    + extension + c +
    +
    +
    +
    +

    Höchstkraftc + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/tto/MaximumForce

    +
    + Bei Werkstoffen, die kein diskontinuierliches Fließen zeigen: größte Kraft, der die Probe während des Versuchs standhält + +Bei Werkstoffen, die ein diskontinuierliches Fließen zeigen: größte Kraft, der die Probe während des Versuchs nach dem Beginn der Verfestigung standhält + +Anmerkung: Für Werkstoffe, die ein diskontinuierliches Fließen zeigen, aber keine Verfestigung erzielt werden kann, ist die Höchstkraft nicht definiert +. +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    hat Super-Klassen
    +
    + force + c +
    +
    +
    +
    +

    Kleinster Querschnitt nach dem Bruchc + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/tto/MinimumCrossSectionalAreaAfterFracture

    +
    + Symbol: S_u +
    +
    + Dieses Konzept beschreibt die kleinste Querschnittsfläche des Zugprüfkörers, die nach dem Bruch infolge der aufgebrachten Zugkraft erhalten wird. + +Anmerkung: Sie wird in der Regel senkrecht zur Richtung der aufgebrachten Kraft gemessen und dient zur Berechnung der technischen Spannung während der Prüfung. + +Anmerkung: Es wird empfohlen, den Anfangsquerschnitt innerhalb der parallelen Länge mit einer Genauigkeit von ±2 % zu messen. Bei runden Prüfkörpern mit kleinem Durchmesser oder Prüfkörpern mit anderen Querschnittsgeometrien ist es jedoch möglicherweise nicht möglich, den Anfangsquerschnitt innerhalb der parallelen Länge mit einer Genauigkeit von ±2 % zu messen. +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    ist äquvivalent zu
    +
    ((relates to + op + some + End-Dicke + c) and (relates to + op + some + End-Breite + c)) or (relates to + op + some + End-Probendurchmesser + c)
    +
    hat Super-Klassen
    +
    + cross section area +
    +
    +
    +
    +

    Messlängec + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/tto/GaugeLength

    +
    + Länge des parallelen Teils der Probe, an dem zu einem beliebigen Zeitpunkt während des Versuchs die Verlängerung gemessen wird +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    hat Super-Klassen
    +
    + length + c +
    +
    hat Sub-Klassen
    +
    + Anfangsmesslänge + c, Extensometer-Messlänge + c, Messlänge nach dem Bruch + c +
    +
    +
    +
    +

    Messlänge nach dem Bruchc + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/tto/FinalGaugeLengthAfterFracture

    +
    + Länge zwischen den Marken zur Kennzeichnung der Messlänge auf der Probe, die nach dem Bruch bei Raumtemperatur gemessen wird, nachdem die beiden Probenbruchstücke sorgfältig so zusammengefügt wurden, dass ihre Achsen in einer Geraden liegen +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    hat Super-Klassen
    +
    + Messlänge + c +
    +
    +
    +
    +

    Obere Streckgrenzec + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/tto/UpperYieldStrength

    +
    + höchste Spannung, bevor der erste Kraftabfall auftritt +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    ist äquvivalent zu
    +
    + relates to + op + some + stress + c +
    +
    hat Super-Klassen
    +
    + Streckgrenze + c +
    +
    +
    +
    +

    Parallele Längec + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/tto/ParallelLength

    +
    + Länge des parallelen reduzierten Querschnitts der Probe + +Anmerkung: Bei unbearbeiteten Proben tritt an die Stelle der parallelen Länge der Abstand zwischen den Einspannungen. +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    hat Super-Klassen
    +
    + length + c +
    +
    +
    +
    +

    percentage extensionc + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/co/PercentageExtension

    +
    +
    ist äquvivalent zu
    +
    + relates to + op + some + Extensometer-Messlänge + c +
    +
    ist in Range von
    +
    + relates to extension + op +
    +
    +
    +
    +

    Plastische Extensometer-Dehnung bei Höchstkraftc + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/tto/PercentagePlasticExtensionAtMaximumForce

    +
    + plastische Verlängerung der Extensometer-Messlänge bei Höchstkraft, angegeben in Prozent, bezogen auf die Extensometer-Messlänge +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    ist äquvivalent zu
    +
    (relates to + op + some + Extensometer-Messlänge + c) and (relates to + op + some + Höchstkraft + c)
    +
    hat Super-Klassen
    +
    + extension + c +
    +
    +
    +
    +

    Querhaupttrennungc + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/tto/CrossheadSeparation

    +
    + Diese Eigenschaft beschreibt die Verschiebung der Traverse einer Zugprüfmaschine. +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    hat Super-Klassen
    +
    + value object + c +
    +
    +
    +
    +

    Spannungsgeschwindigkeitc + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/tto/StressRate

    +
    + Zunahme der Spannung je Zeiteinheit + +Anmerkung: Die Spannungsgeschwindigkeit wird nur im elastischen Bereich des Versuchs verwendet. +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    hat Super-Klassen
    +
    + testing rate + c +
    +
    +
    +
    +

    Steigung des elastischen Bereichsc + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/tto/SlopeOfTheElasticPart

    +
    + Diese Eigenschaft beschreibt den Wert der Steigung des ersten linear ansteigenden Teils ("elastischer Teil") in der bei einem Zugversuch erhaltenen Spannungs-Dehnungs-Kurve. Im elastischen Teil der Spannungs-Dehnungs-Kurve muss der Wert der Steigung nicht unbedingt dem Elastizitätsmodul entsprechen. Dieser Wert kann mit dem Wert des Elastizitätsmoduls (nur) sehr gut übereinstimmen, wenn optimale Bedingungen herrschten. +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    hat Super-Klassen
    +
    + value object + c +
    +
    +
    +
    +

    Streckgrenzec + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/tto/YieldStrength

    +
    + Wenn der metallische Werkstoff diese Eigenschaft aufweist: die Spannung zu einem bestimmten Zeitpunkt während des Versuchs bei dem eine plastische Verformung ohne Zunahme der Kraft auftritt +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    ist äquvivalent zu
    +
    + relates to + op + some + stress + c +
    +
    hat Super-Klassen
    +
    + value object + c +
    +
    hat Sub-Klassen
    +
    + Obere Streckgrenze + c, untere Streckgrenze + c +
    +
    +
    +
    +

    Streckgrenzen-Extensometer-Dehnungc + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/tto/PercentageYieldPointExtension

    +
    + Bei Werkstoffen, die ein diskontinuierliches Fließen zeigen: Verlängerung der Extensometer-Messlänge zwischen dem Beginn örtlichen Fließens und dem Einsetzen gleichmäßiger Verfestigung, angegeben in Prozent, bezogen auf die Extensometer-Messlänge +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    hat Super-Klassen
    +
    + extension + c +
    +
    +
    +
    +

    Traversengeschwindigkeitc + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/tto/CrossheadSeparationRate

    +
    + Traversenweg je Zeiteinheit +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    hat Super-Klassen
    +
    + testing rate + c +
    +
    +
    +
    +

    Typ Der Messlängenmarkierungenc + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/tto/TypeGaugeLengthMarks

    +
    + Diese Eigenschaft wird verwendet, um die sichtbaren Markierungen zu beschreiben, die in der Regel während eines Zugversuchs zur Messung der Dehnung an den Prüfkörpern angebracht werden. +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    hat Super-Klassen
    +
    + test piece info + c +
    +
    +
    +
    +

    Umschaltpunktc + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/tto/TransitionPoint

    +
    + Diese Entität beschreibt einen einzelnen Punkt, an dem ein Übergang von einer Bedingung oder einem Zustand in einen anderen erfolgt, z. B. der Punkt, an dem verschiedene Phasen von Materie im Gleichgewicht miteinander existieren können (auch Inversionspunkt genannt) oder wenn Prozessparameter geändert werden, die zu einem Übergang des Prozesses während seiner Ausführung führen. +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    hat Super-Klassen
    +
    + value object + c +
    +
    hat Sub-Klassen
    +
    + Umschaltpunkt der Prüfgeschwindigkeit + c +
    +
    +
    +
    +

    Umschaltpunkt der Prüfgeschwindigkeitc + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/tto/TransitionPointTestingRate

    +
    + Diese Entität beschreibt den Umschaltpunkt der Prüfgeschwindigkeit während eines Analyse- / Testprozesses, z.B. den Punkt bezogen auf die Dehnung oder Spannung, an welchem die Prüfgeschwindigkeit während eines Zugversuchs geändert wird. Typischerweise ist dieser Punkt mit einer Abnahme des Extensometers (Dehnungsaufnehmers) vom Prüfkörper während eines dehnungsgeregelten Zugversuchs verbunden. +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    ist äquvivalent zu
    +
    + relates to + op + some + testing rate + c +
    +
    hat Super-Klassen
    +
    + Umschaltpunkt + c +
    +
    +
    +
    +

    untere Streckgrenzec + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/tto/LowerYieldStrength

    +
    + kleinste Spannung während des plastischen Fließens, wobei Einschwingerscheinungen nicht berücksichtigt werden +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    ist äquvivalent zu
    +
    + relates to + op + some + stress + c +
    +
    hat Super-Klassen
    +
    + Streckgrenze + c +
    +
    +
    +
    +

    Verlängerungc + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/tto/Elongation

    +
    + Zunahme der Anfangsmesslänge zu einem beliebigen Zeitpunkt während des Versuchs +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    ist äquvivalent zu
    +
    + relates to + op + some + Anfangsmesslänge + c +
    +
    hat Super-Klassen
    +
    + value object + c +
    +
    hat Sub-Klassen
    +
    + Bleibende Dehnung + c, Bruchdehnung + c, Dehnung + c +
    +
    +
    +
    +

    Zugfestigkeitc + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/tto/TensileStrength

    +
    + Spannung, die der Höchstkraft entspricht +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    ist äquvivalent zu
    +
    (relates to + op + some + stress + c) and (relates to + op + some + Höchstkraft + c)
    +
    hat Super-Klassen
    +
    + value object + c +
    +
    +
    +
    +

    Zugprüfmaschinec + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/tto/TensileTestingMachine

    +
    + Maschine zur Durchführung eines Zugversuches; die Regelung und Überwachung des Versuches, die Messungen und die Datenverarbeitung werden üblicherweise mithilfe eines Computers durchgeführt. +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    hat Super-Klassen
    +
    + Zugversuchsprozessknoten + c, testing machine + c +
    +
    +
    +
    +

    Zugversuchc + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/tto/TensileTest

    +
    + Zugversuche (Zugprüfungen) an Werkstoffen geben Auskunft über deren Festigkeit, Duktilität sowie weitere Kennwerte unter einachsiger Zugbeanspruchung. + +Beim Zugversuch wird ein Prüfkörper durch Zugkraft belastet, im Allgemeinen bis zum Bruch, um eine oder mehrere mechanische Eigenschaften zu bestimmen, die durch die semantisch verknüpften und definierten Begriffe festgelegt sind. +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    ist äquvivalent zu
    +
    + participant + op + exactly 1 test piece + c +
    +
    + participant + op + exactly 1 Zugprüfmaschine + c +
    +
    hat Super-Klassen
    +
    + mechanical testing process + c +
    +
    +
    +
    +

    Zugversuchsprozessknotenc + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/tto/TensileTestNode

    +
    + Diese Entität beschreibt einen Workflow-Bestandteil, der Werkzeuge und Geräte beinhaltet, die für die Durchführung eines Zugversuchs verwendet werden, z. B. eine Zugprüfmaschine. +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    hat Super-Klassen
    +
    + processing node + c +
    +
    hat Sub-Klassen
    +
    + Zugprüfmaschine + c +
    +
    +
    +
    +

    Änderung der transversalen Dimensionc + zurück zur Übersicht oder Klassenübersicht + +

    +

    + IRI: https://w3id.org/pmd/tto/ChangeOfTransverseDimension

    +
    + Dieses Wertobjekt beschreibt eine Variation der Abmessungen eines Prüfkörpers in Bezug auf seine Querachse, die sich auf seine Querschnittsfläche auswirkt und möglicherweise während eines Zugversuchs auftritt. Das Verhältnis der wahren plastischen Breitendehnung und der wahren plastischen Dickendehnung in einem in uniaxialem Zug beanspruchten Prüfkörper (vertikale Anisotropie) kann anhand dieser Information berechnet werden. +
    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    hat Super-Klassen
    +
    + length + c +
    +
    +
    +
    +

    Objekt Eigenschaften

    + +
    +

    relates to extensionop + zurück zur Übersicht oder Übersicht der Objekteigenschaften + +

    +

    + IRI: https://w3id.org/pmd/tto/relatesToExtension

    +
    +
    ist definiert durch
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    +
    hat Super-Eigenschaften
    +
    + relates to + op +
    +
    hat Domäne
    +
    + Dehngrenze bei plastischer Extensometer-Dehnung + c +
    +
    hat Range
    +
    + percentage extension + c +
    +
    +
    +
    +
    +

    Anmerkungseigenschaften

    + +
    +

    definition sourceap + zurück zur Übersicht oder Übersicht der Anmerkungseigenschaften + +

    +

    + IRI: https://w3id.org/pmd/co/definitionSource

    +
    +
    +

    symbolap + zurück zur Übersicht oder Übersicht der Anmerkungseigenschaften + +

    +

    + IRI: https://w3id.org/pmd/co/symbol

    +
    +
    +

    Legende zurück zu ToC

    +
    +c: Klassen
    +op: Object Properties
    +
    +
    +
    +
    +

    Danksagung zurück zum Inhaltsverzeichnis

    +

    +Die Autoren bedanken sich beiSilvio Peroni für die Entwicklung von LODE, einer Umgebung zur Live-OWL-Dokumentation, die im Abschnitt Querverweise für die Darstellung verwendet wird, bei Daniel Garijo für die Entwicklung von Widoco, welches für die Templates in dieser Anwendung verwendet wird.

    +
    + + +
    + + \ No newline at end of file diff --git a/tto/index-en.html b/tto/index-en.html new file mode 100644 index 0000000..52cc37d --- /dev/null +++ b/tto/index-en.html @@ -0,0 +1,2100 @@ + + + + + Tensile Test Ontology (TTO) + + + + + + + + + + + +
    +
    +
    language de en
    +

    Tensile Test Ontology (TTO)

    +

    Release 2023-07-14

    + + +
    +
    Revision:
    +
    2.0.1
    +
    Authors:
    +
    https://orcid.org/0000-0001-7192-7143
    https://orcid.org/0000-0002-3717-7104
    https://orcid.org/0000-0002-7094-5371
    https://orcid.org/0000-0002-9014-2920
    https://orcid.org/0000-0003-4971-3645
    + +
    Imported Ontologies:
    +
    prov-o#
    prov-o-inverses#
    co
    + +
    Download serialization:
    JSON-LD RDF/XML N-Triples TTL
    License:
    http://insertlicenseURIhere.org +
    Visualization:
    Visualize with WebVowl
    +
    Cite as:
    +
    Markus Schilling, Bernd Bayerlein, Henk Birkholz, Philipp von Hartrott, Jörg Waitelonis. (July 14th, 2023) TTO: Tensile Test Ontology. Version 2.0.0, https://w3id.org/pmd/tto
    +
    + +Provenance of this page
    +
    +
    +
    +Ontology Specification Draft +
    +

    Abstract

    +This is the stable version of the PMD ontology of the tensile test (Tensile Test Ontology - TTO) as developed on the basis of the standard ISO 6892-1: Metallic materials - Tensile Testing - Part 1: Method of test at room temperature. + +The TTO was developed in the frame of the PMD project. The TTO provides conceptualizations valid for the description of tensile tests and corresponding data in accordance with the respective standard. By using TTO for storing tensile test data, all data will be well structured and based on a common vocabulary agreed on by an expert group (generation of FAIR data) which will lead to enhanced data interoperability. This comprises several data categories such as primary data, secondary data and metadata. Data will be human and machine readable. The usage of TTO facilitates data retrieval and downstream usage. Due to a close connection to the PMD core ontology (PMDco), the interoperability of tensile test data is enhanced and querying in combination with other aspects and data within the broad field of material science and engineering (MSE) is facilitated. + +The TTO class structure forms a comprehensible and semantic layer for unified storage of data generated in a tensile test including the possibility to record data from analysis, re-evaluation and re-use. Furthermore, extensive metadata allows to assess data quality and reproduce experiments. Following the open world assumption, object properties are deliberately low restrictive and sparse. + +TTO of PMD at GitHub: https://github.com/materialdigital/application-ontologies/tree/main/tensile_test_ontology_TTO +
    +
    + + +

    Tensile Test Ontology (TTO): Overview back to ToC

    + +This ontology has the following classes and properties. +

    Classes

    +

    Object Properties

    Annotation Properties

    +
    + + + +

    Cross-reference for Tensile Test Ontology (TTO) classes, object properties and data properties back to ToC

    +This section provides details for each class and property defined by Tensile Test Ontology (TTO). +
    +

    Classes

    + +
    +

    Change Of Transverse Dimensionc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/ChangeOfTransverseDimension

    +
    + This value object describes a variation in the dimension of a test piece referring to its transversal axis affecting its cross-sectional area that may potentially occur during a tensile test. The ratio of the true plastic strain in width and the true plastic strain in thickness in a test piece loaded in uniaxial tension (vertical anisotropy) may be calculated using this information. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + length + c +
    +
    +
    +
    +

    Crosshead Separationc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/CrossheadSeparation

    +
    + Dimensional analysis: L +Unit (e.g. SI): mm +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + value object + c +
    +
    +
    +
    +

    Crosshead Separation Ratec + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/CrossheadSeparationRate

    +
    + Symbol: v_c +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + testing rate + c +
    +
    +
    +
    +

    Diameter After Fracturec + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/DiameterAfterFracture

    +
    + The length of a straight line through the center of an object (tensile test piece) as measured after a fracture occured during a test. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + diameter + c +
    +
    +
    +
    +

    Elongationc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/Elongation

    +
    + increase in the original gauge length at any moment during the test +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    is equivalent to
    +
    + relates to + op + some + Original Gauge Length + c +
    +
    has super-classes
    +
    + value object + c +
    +
    has sub-classes
    +
    + Percentage Elongation + c, Percentage Elongation After Fracture + c, Percentage Permanent Elongation + c +
    +
    +
    +
    +

    Estimated Strain Rate Over The Parallel Lengthc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/EstimatedStrainRateOverTheParallelLength

    +
    + Symbol: e^._L_c +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + testing rate + c +
    +
    +
    +
    +

    Extensometer Gauge Lengthc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/ExtensometerGaugeLength

    +
    + Symbol: L_e +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + Gauge Length + c +
    +
    +
    +
    +

    Final Gauge Length After Fracturec + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/FinalGaugeLengthAfterFracture

    +
    + length between gauge length marks on the test piece measured after rupture, at room temperature, the two pieces having been carefully fitted back together so that their axes lie in a straight line +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + Gauge Length + c +
    +
    +
    +
    +

    Gauge Lengthc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/GaugeLength

    +
    + Symbol: L +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + length + c +
    +
    has sub-classes
    +
    + Extensometer Gauge Length + c, Final Gauge Length After Fracture + c, Original Gauge Length + c +
    +
    +
    +
    +

    Geometry Shapec + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/GeometryShape

    +
    + This property describes the geometric dimensions and appearance (shape and dimensions) of a sample, specimen, or test piece as usually defined by a corresponding standard. Accordingly, the shape value given is in accordance with the defining standard, e.g., ‘tensile test piece shape 1 in accordance with annex B’. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + test piece info + c +
    +
    +
    +
    +

    Lower Yield Strengthc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/LowerYieldStrength

    +
    + Symbol: R_eL +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    is equivalent to
    +
    + relates to + op + some + stress + c +
    +
    has super-classes
    +
    + Yield Strength + c +
    +
    +
    +
    +

    Maximum Forcec + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/MaximumForce

    +
    + For materials displaying no discontinuous yielding: highest force that the test piece withstands during the test + +For materials displaying discontinuous yielding: highest force that the test piece withstands during the test after the beginning of work-hardening + +Note: For materials which display discontinuous yielding, but where no work-hardening can be established, the maximum force is not defined. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + force + c +
    +
    +
    +
    +

    Minimum cross-sectional area after fracturec + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/MinimumCrossSectionalAreaAfterFracture

    +
    + Symbol: S_u +
    +
    + This concept describes the smallest cross-sectional area of the tensile test piece observed after it has fractured under the applied tensile force. + +Note: It is typically measured perpendicular to the direction of the applied force and is used to calculate engineering stress during the test. + +Note: It is recommended to measure the original cross-sectional area of the parallel length to an accuracy of ±2 %. However, measuring the original cross-sectional area of the parallel length with an accuracy of ±2 % on small diameter round test pieces, or test pieces with other cross-sectional geometries, may not be possible. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    is equivalent to
    +
    ((relates to + op + some + Thickness After Fracture + c) and (relates to + op + some + Width After Fracture + c)) or (relates to + op + some + Diameter After Fracture + c)
    +
    has super-classes
    +
    + cross section area +
    +
    +
    +
    +

    Original cross-sectional area of the parallel lengthc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/OriginalCrossSectionalArea

    +
    + Symbol: S_o +
    +
    + This concept describes the initial area of the tensile test piece before any deformation occurs. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    is equivalent to
    +
    ((relates to + op + some + Original Thickness + c) and (relates to + op + some + Original Width + c)) or (relates to + op + some + Original Diameter + c)
    +
    has super-classes
    +
    + cross section area +
    +
    +
    +
    +

    Original Diameterc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/OriginalDiameter

    +
    + The length of a straight line through the center of an object (tensile test piece) as measured prior to a tensile test. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + diameter + c +
    +
    +
    +
    +

    Original Gauge Lengthc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/OriginalGaugeLength

    +
    + Symbol: L_o +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + Gauge Length + c +
    +
    +
    +
    +

    Original Thicknessc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/OriginalThickness

    +
    + This entity describes the measured dimension in one direction of a test piece, as measured before the test. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + thickness + c +
    +
    +
    +
    +

    Original Widthc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/OriginalWidth

    +
    + This entity describes a horizontal measurement of an object (test piece) taken at right angles to the length of the object (test piece), as measured before a test. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + width + c +
    +
    +
    +
    +

    Parallel Lengthc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/ParallelLength

    +
    + Symbol: L_c +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + length + c +
    +
    +
    +
    +

    Percentage Elongationc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/PercentageElongation

    +
    + elongation expressed as a percentage of the original gauge length +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    is equivalent to
    +
    + relates to + op + some + Original Gauge Length + c +
    +
    has super-classes
    +
    + Elongation + c +
    +
    +
    +
    +

    Percentage Elongation After Fracturec + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/PercentageElongationAfterFracture

    +
    + Symbol: A +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    is equivalent to
    +
    + relates to + op + some + Original Gauge Length + c +
    +
    has super-classes
    +
    + Elongation + c +
    +
    +
    +
    +

    percentage extensionc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/co/PercentageExtension

    +
    +
    is equivalent to
    +
    + relates to + op + some + Extensometer Gauge Length + c +
    +
    is in range of
    +
    + relates to extension + op +
    +
    +
    +
    +

    Percentage Permanent Elongationc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/PercentagePermanentElongation

    +
    + increase in the original gauge length of a test piece after removal of a specified stress, expressed as a percentage of the original gauge length +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    is equivalent to
    +
    + relates to + op + some + Original Gauge Length + c +
    +
    has super-classes
    +
    + Elongation + c +
    +
    +
    +
    +

    Percentage Permanent Extensionc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/PercentagePermanentExtension

    +
    + increase in the extensometer gauge length, after removal of a specified stress from the test piece, expressed as a percentage of the extensometer gauge length +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    is equivalent to
    +
    + relates to + op + some + Extensometer Gauge Length + c +
    +
    has super-classes
    +
    + extension + c +
    +
    +
    +
    +

    Percentage Plastic Extension At Maximum Forcec + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/PercentagePlasticExtensionAtMaximumForce

    +
    + Symbol: A_g +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    is equivalent to
    +
    (relates to + op + some + Extensometer Gauge Length + c) and (relates to + op + some + Maximum Force + c)
    +
    has super-classes
    +
    + extension + c +
    +
    +
    +
    +

    Percentage Reduction Of Areac + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/PercentageReductionOfArea

    +
    + maximum change in cross-sectional area which has occurred during the test (S_o − S_u), expressed as a percentage of the original cross-sectional area, S_o +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    is equivalent to
    +
    (relates to + op + some + Minimum cross-sectional area after fracture + c) and (relates to + op + some + Original cross-sectional area of the parallel length + c)
    +
    has super-classes
    +
    + value object + c +
    +
    +
    +
    +

    Percentage Total Extension At Fracturec + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/PercentageTotalExtensionAtFracture

    +
    + Symbol: A_t +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    is equivalent to
    +
    + relates to + op + some + Extensometer Gauge Length + c +
    +
    has super-classes
    +
    + extension + c +
    +
    +
    +
    +

    Percentage Total Extension At Maximum Forcec + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/PercentageTotalExtensionAtMaximumForce

    +
    + Symbol: A_gt +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    is equivalent to
    +
    (relates to + op + some + Extensometer Gauge Length + c) and (relates to + op + some + Maximum Force + c)
    +
    has super-classes
    +
    + extension + c +
    +
    +
    +
    +

    Percentage Yield Point Extensionc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/PercentageYieldPointExtension

    +
    + For discontinuous yielding materials: extension between the start of yielding and the start of uniform work-hardening, expressed as a percentage of the extensometer gauge length +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + extension + c +
    +
    +
    +
    +

    Proof Strengthc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/ProofStrength

    +
    + stress at which the a specific extension value is equal to a specified percentage of the extensometer gauge length +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + value object + c +
    +
    has sub-classes
    +
    + Proof Strength Plastic Extension + c, Proof Strength Total Extension + c +
    +
    +
    +
    +

    Proof Strength Plastic Extensionc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/ProofStrengthPlasticExtension

    +
    + Symbol: R_p +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    is equivalent to
    +
    + relates to extension + op + some + value + some + float +
    +
    has super-classes
    +
    + Proof Strength + c +
    +
    has sub-classes
    +
    + Proof Strength Plastic Extension Rp01 + c, Proof Strength Plastic Extension Rp02 + c +
    +
    is in domain of
    +
    + relates to extension + op +
    +
    +
    +
    +

    Proof Strength Plastic Extension Rp01c + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/Rp01

    +
    + Symbol: R_p_0.1 +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    is equivalent to
    +
    + relates to extension + op + some + value + value 0.1
    +
    has super-classes
    +
    + Proof Strength Plastic Extension + c +
    +
    +
    +
    +

    Proof Strength Plastic Extension Rp02c + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/Rp02

    +
    + Symbol: R_p_0.2 +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    is equivalent to
    +
    + relates to extension + op + some + value + value 0.2
    +
    has super-classes
    +
    + Proof Strength Plastic Extension + c +
    +
    +
    +
    +

    Proof Strength Total Extensionc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/ProofStrengthTotalExtension

    +
    + Symbol: R_t +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    is equivalent to
    +
    + relates to + op + some + Extensometer Gauge Length + c +
    +
    has super-classes
    +
    + Proof Strength + c +
    +
    +
    +
    +

    Slope Of The Elastic Partc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/SlopeOfTheElasticPart

    +
    + This property describes the value of the slope of the first linear increasing part (‘elastic part’) in the stress-percentage extension curve obtained during a tensile test. In the elastic part of the stress‐percentage extension curve, the value of the slope may not necessarily represent the modulus of elasticity. This value may closely agree with the value of the modulus of elasticity if optimal conditions were used. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + value object + c +
    +
    +
    +
    +

    Strain Ratec + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/StrainRate

    +
    + Symbol: e^._L_e +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + testing rate + c +
    +
    +
    +
    +

    Stress Ratec + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/StressRate

    +
    + Symbol: R +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + testing rate + c +
    +
    +
    +
    +

    Tensile Strengthc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/TensileStrength

    +
    + Symbol: R_m +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    is equivalent to
    +
    (relates to + op + some + stress + c) and (relates to + op + some + Maximum Force + c)
    +
    has super-classes
    +
    + value object + c +
    +
    +
    +
    +

    Tensile Testc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/TensileTest

    +
    + Tensile tests (tension tests) on materials provide information on their strength, ductility as well as other characteristic values under uniaxial tensile stress. + +The tensile test involves straining a test piece by tensile force, generally to fracture, for the determination of one or more mechanical properties specified by the semantically related and defined terms. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    is equivalent to
    +
    + participant + op + exactly 1 test piece + c +
    +
    + participant + op + exactly 1 Tensile Testing Machine + c +
    +
    has super-classes
    +
    + mechanical testing process + c +
    +
    +
    +
    +

    Tensile Test Nodec + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/TensileTestNode

    +
    + This entity describes a workflow constituent that hosts tools and equipment that is used for the performance of a tensile test, e.g., a tensile test machine. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + processing node + c +
    +
    has sub-classes
    +
    + Tensile Testing Machine + c +
    +
    +
    +
    +

    Tensile Testing Machinec + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/TensileTestingMachine

    +
    + machine to conduct a tensile test; the control and monitoring of the test, the measurements, and the data processing are usually undertaken by computer +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + Tensile Test Node + c, testing machine + c +
    +
    +
    +
    +

    Thickness After Fracturec + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/ThicknessAfterFracture

    +
    + This entity describes the measured dimension in one direction of a test piece, as measured after the test. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + thickness + c +
    +
    +
    +
    +

    Transition Pointc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/TransitionPoint

    +
    + This entity describes a single point at which a transition from one condition or state to another occurs, e.g. the point at which different phases of matter are capable of existing together in equilibrium (also called inversion point) or if process parameters are changed that will lead to a transition of the process during its execution. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + value object + c +
    +
    has sub-classes
    +
    + Transition Point Testing Rate + c +
    +
    +
    +
    +

    Transition Point Testing Ratec + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/TransitionPointTestingRate

    +
    + This entity describes the the transition point of the testing rate during an analysis / test process, e.g. the point referring to the strain or the stress at which the testing rate is changed during a tensile test. Typically, this transition point is associated with a removal of the extensometer from the test piece during a strain-controlled tensile test. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    is equivalent to
    +
    + relates to + op + some + testing rate + c +
    +
    has super-classes
    +
    + Transition Point + c +
    +
    +
    +
    +

    Type Gauge Length Marksc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/TypeGaugeLengthMarks

    +
    + This property is used to describe the visible markers usually attached to test pieces during a tensile test for elongation / extension measurements. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + test piece info + c +
    +
    +
    +
    +

    Upper Yield Strengthc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/UpperYieldStrength

    +
    + Symbol: R_eH +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    is equivalent to
    +
    + relates to + op + some + stress + c +
    +
    has super-classes
    +
    + Yield Strength + c +
    +
    +
    +
    +

    Width After Fracturec + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/WidthAfterFracture

    +
    + This entity describes a horizontal measurement of an object (test piece) taken at right angles to the length of the object (test piece), as measured after a test. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + width + c +
    +
    +
    +
    +

    Yield Strengthc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/YieldStrength

    +
    + when the metallic material exhibits a yield phenomenon, stress corresponding to the point reached during the test at which plastic deformation occurs without any increase in the force +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    is equivalent to
    +
    + relates to + op + some + stress + c +
    +
    has super-classes
    +
    + value object + c +
    +
    has sub-classes
    +
    + Lower Yield Strength + c, Upper Yield Strength + c +
    +
    +
    +
    +

    Object Properties

    + +
    +

    relates to extensionop + back to ToC or Object Property ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/relatesToExtension

    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    +
    has super-properties
    +
    + relates to + op +
    +
    has domain
    +
    + Proof Strength Plastic Extension + c +
    +
    has range
    +
    + percentage extension + c +
    +
    +
    +
    +
    +

    Annotation Properties

    + +
    +

    definition sourceap + back to ToC or Annotation Property ToC + +

    +

    + IRI: https://w3id.org/pmd/co/definitionSource

    +
    +
    +

    symbolap + back to ToC or Annotation Property ToC + +

    +

    + IRI: https://w3id.org/pmd/co/symbol

    +
    +
    +

    Legend back to ToC

    +
    +c: Classes
    +op: Object Properties
    +
    +
    +
    +
    +

    Acknowledgments back to ToC

    +

    +The authors would like to thank Silvio Peroni for developing LODE, a Live OWL Documentation Environment, which is used for representing the Cross Referencing Section of this document and Daniel Garijo for developing Widoco, the program used to create the template used in this documentation.

    +
    + + +
    + + \ No newline at end of file diff --git a/tto/index.html b/tto/index.html new file mode 100644 index 0000000..52cc37d --- /dev/null +++ b/tto/index.html @@ -0,0 +1,2100 @@ + + + + + Tensile Test Ontology (TTO) + + + + + + + + + + + +
    +
    +
    language de en
    +

    Tensile Test Ontology (TTO)

    +

    Release 2023-07-14

    + + +
    +
    Revision:
    +
    2.0.1
    +
    Authors:
    +
    https://orcid.org/0000-0001-7192-7143
    https://orcid.org/0000-0002-3717-7104
    https://orcid.org/0000-0002-7094-5371
    https://orcid.org/0000-0002-9014-2920
    https://orcid.org/0000-0003-4971-3645
    + +
    Imported Ontologies:
    +
    prov-o#
    prov-o-inverses#
    co
    + +
    Download serialization:
    JSON-LD RDF/XML N-Triples TTL
    License:
    http://insertlicenseURIhere.org +
    Visualization:
    Visualize with WebVowl
    +
    Cite as:
    +
    Markus Schilling, Bernd Bayerlein, Henk Birkholz, Philipp von Hartrott, Jörg Waitelonis. (July 14th, 2023) TTO: Tensile Test Ontology. Version 2.0.0, https://w3id.org/pmd/tto
    +
    + +Provenance of this page
    +
    +
    +
    +Ontology Specification Draft +
    +

    Abstract

    +This is the stable version of the PMD ontology of the tensile test (Tensile Test Ontology - TTO) as developed on the basis of the standard ISO 6892-1: Metallic materials - Tensile Testing - Part 1: Method of test at room temperature. + +The TTO was developed in the frame of the PMD project. The TTO provides conceptualizations valid for the description of tensile tests and corresponding data in accordance with the respective standard. By using TTO for storing tensile test data, all data will be well structured and based on a common vocabulary agreed on by an expert group (generation of FAIR data) which will lead to enhanced data interoperability. This comprises several data categories such as primary data, secondary data and metadata. Data will be human and machine readable. The usage of TTO facilitates data retrieval and downstream usage. Due to a close connection to the PMD core ontology (PMDco), the interoperability of tensile test data is enhanced and querying in combination with other aspects and data within the broad field of material science and engineering (MSE) is facilitated. + +The TTO class structure forms a comprehensible and semantic layer for unified storage of data generated in a tensile test including the possibility to record data from analysis, re-evaluation and re-use. Furthermore, extensive metadata allows to assess data quality and reproduce experiments. Following the open world assumption, object properties are deliberately low restrictive and sparse. + +TTO of PMD at GitHub: https://github.com/materialdigital/application-ontologies/tree/main/tensile_test_ontology_TTO +
    +
    + + +

    Tensile Test Ontology (TTO): Overview back to ToC

    + +This ontology has the following classes and properties. +

    Classes

    +

    Object Properties

    Annotation Properties

    +
    + + + +

    Cross-reference for Tensile Test Ontology (TTO) classes, object properties and data properties back to ToC

    +This section provides details for each class and property defined by Tensile Test Ontology (TTO). +
    +

    Classes

    + +
    +

    Change Of Transverse Dimensionc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/ChangeOfTransverseDimension

    +
    + This value object describes a variation in the dimension of a test piece referring to its transversal axis affecting its cross-sectional area that may potentially occur during a tensile test. The ratio of the true plastic strain in width and the true plastic strain in thickness in a test piece loaded in uniaxial tension (vertical anisotropy) may be calculated using this information. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + length + c +
    +
    +
    +
    +

    Crosshead Separationc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/CrossheadSeparation

    +
    + Dimensional analysis: L +Unit (e.g. SI): mm +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + value object + c +
    +
    +
    +
    +

    Crosshead Separation Ratec + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/CrossheadSeparationRate

    +
    + Symbol: v_c +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + testing rate + c +
    +
    +
    +
    +

    Diameter After Fracturec + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/DiameterAfterFracture

    +
    + The length of a straight line through the center of an object (tensile test piece) as measured after a fracture occured during a test. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + diameter + c +
    +
    +
    +
    +

    Elongationc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/Elongation

    +
    + increase in the original gauge length at any moment during the test +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    is equivalent to
    +
    + relates to + op + some + Original Gauge Length + c +
    +
    has super-classes
    +
    + value object + c +
    +
    has sub-classes
    +
    + Percentage Elongation + c, Percentage Elongation After Fracture + c, Percentage Permanent Elongation + c +
    +
    +
    +
    +

    Estimated Strain Rate Over The Parallel Lengthc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/EstimatedStrainRateOverTheParallelLength

    +
    + Symbol: e^._L_c +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + testing rate + c +
    +
    +
    +
    +

    Extensometer Gauge Lengthc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/ExtensometerGaugeLength

    +
    + Symbol: L_e +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + Gauge Length + c +
    +
    +
    +
    +

    Final Gauge Length After Fracturec + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/FinalGaugeLengthAfterFracture

    +
    + length between gauge length marks on the test piece measured after rupture, at room temperature, the two pieces having been carefully fitted back together so that their axes lie in a straight line +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + Gauge Length + c +
    +
    +
    +
    +

    Gauge Lengthc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/GaugeLength

    +
    + Symbol: L +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + length + c +
    +
    has sub-classes
    +
    + Extensometer Gauge Length + c, Final Gauge Length After Fracture + c, Original Gauge Length + c +
    +
    +
    +
    +

    Geometry Shapec + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/GeometryShape

    +
    + This property describes the geometric dimensions and appearance (shape and dimensions) of a sample, specimen, or test piece as usually defined by a corresponding standard. Accordingly, the shape value given is in accordance with the defining standard, e.g., ‘tensile test piece shape 1 in accordance with annex B’. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + test piece info + c +
    +
    +
    +
    +

    Lower Yield Strengthc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/LowerYieldStrength

    +
    + Symbol: R_eL +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    is equivalent to
    +
    + relates to + op + some + stress + c +
    +
    has super-classes
    +
    + Yield Strength + c +
    +
    +
    +
    +

    Maximum Forcec + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/MaximumForce

    +
    + For materials displaying no discontinuous yielding: highest force that the test piece withstands during the test + +For materials displaying discontinuous yielding: highest force that the test piece withstands during the test after the beginning of work-hardening + +Note: For materials which display discontinuous yielding, but where no work-hardening can be established, the maximum force is not defined. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + force + c +
    +
    +
    +
    +

    Minimum cross-sectional area after fracturec + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/MinimumCrossSectionalAreaAfterFracture

    +
    + Symbol: S_u +
    +
    + This concept describes the smallest cross-sectional area of the tensile test piece observed after it has fractured under the applied tensile force. + +Note: It is typically measured perpendicular to the direction of the applied force and is used to calculate engineering stress during the test. + +Note: It is recommended to measure the original cross-sectional area of the parallel length to an accuracy of ±2 %. However, measuring the original cross-sectional area of the parallel length with an accuracy of ±2 % on small diameter round test pieces, or test pieces with other cross-sectional geometries, may not be possible. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    is equivalent to
    +
    ((relates to + op + some + Thickness After Fracture + c) and (relates to + op + some + Width After Fracture + c)) or (relates to + op + some + Diameter After Fracture + c)
    +
    has super-classes
    +
    + cross section area +
    +
    +
    +
    +

    Original cross-sectional area of the parallel lengthc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/OriginalCrossSectionalArea

    +
    + Symbol: S_o +
    +
    + This concept describes the initial area of the tensile test piece before any deformation occurs. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    is equivalent to
    +
    ((relates to + op + some + Original Thickness + c) and (relates to + op + some + Original Width + c)) or (relates to + op + some + Original Diameter + c)
    +
    has super-classes
    +
    + cross section area +
    +
    +
    +
    +

    Original Diameterc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/OriginalDiameter

    +
    + The length of a straight line through the center of an object (tensile test piece) as measured prior to a tensile test. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + diameter + c +
    +
    +
    +
    +

    Original Gauge Lengthc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/OriginalGaugeLength

    +
    + Symbol: L_o +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + Gauge Length + c +
    +
    +
    +
    +

    Original Thicknessc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/OriginalThickness

    +
    + This entity describes the measured dimension in one direction of a test piece, as measured before the test. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + thickness + c +
    +
    +
    +
    +

    Original Widthc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/OriginalWidth

    +
    + This entity describes a horizontal measurement of an object (test piece) taken at right angles to the length of the object (test piece), as measured before a test. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + width + c +
    +
    +
    +
    +

    Parallel Lengthc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/ParallelLength

    +
    + Symbol: L_c +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + length + c +
    +
    +
    +
    +

    Percentage Elongationc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/PercentageElongation

    +
    + elongation expressed as a percentage of the original gauge length +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    is equivalent to
    +
    + relates to + op + some + Original Gauge Length + c +
    +
    has super-classes
    +
    + Elongation + c +
    +
    +
    +
    +

    Percentage Elongation After Fracturec + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/PercentageElongationAfterFracture

    +
    + Symbol: A +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    is equivalent to
    +
    + relates to + op + some + Original Gauge Length + c +
    +
    has super-classes
    +
    + Elongation + c +
    +
    +
    +
    +

    percentage extensionc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/co/PercentageExtension

    +
    +
    is equivalent to
    +
    + relates to + op + some + Extensometer Gauge Length + c +
    +
    is in range of
    +
    + relates to extension + op +
    +
    +
    +
    +

    Percentage Permanent Elongationc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/PercentagePermanentElongation

    +
    + increase in the original gauge length of a test piece after removal of a specified stress, expressed as a percentage of the original gauge length +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    is equivalent to
    +
    + relates to + op + some + Original Gauge Length + c +
    +
    has super-classes
    +
    + Elongation + c +
    +
    +
    +
    +

    Percentage Permanent Extensionc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/PercentagePermanentExtension

    +
    + increase in the extensometer gauge length, after removal of a specified stress from the test piece, expressed as a percentage of the extensometer gauge length +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    is equivalent to
    +
    + relates to + op + some + Extensometer Gauge Length + c +
    +
    has super-classes
    +
    + extension + c +
    +
    +
    +
    +

    Percentage Plastic Extension At Maximum Forcec + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/PercentagePlasticExtensionAtMaximumForce

    +
    + Symbol: A_g +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    is equivalent to
    +
    (relates to + op + some + Extensometer Gauge Length + c) and (relates to + op + some + Maximum Force + c)
    +
    has super-classes
    +
    + extension + c +
    +
    +
    +
    +

    Percentage Reduction Of Areac + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/PercentageReductionOfArea

    +
    + maximum change in cross-sectional area which has occurred during the test (S_o − S_u), expressed as a percentage of the original cross-sectional area, S_o +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    is equivalent to
    +
    (relates to + op + some + Minimum cross-sectional area after fracture + c) and (relates to + op + some + Original cross-sectional area of the parallel length + c)
    +
    has super-classes
    +
    + value object + c +
    +
    +
    +
    +

    Percentage Total Extension At Fracturec + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/PercentageTotalExtensionAtFracture

    +
    + Symbol: A_t +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    is equivalent to
    +
    + relates to + op + some + Extensometer Gauge Length + c +
    +
    has super-classes
    +
    + extension + c +
    +
    +
    +
    +

    Percentage Total Extension At Maximum Forcec + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/PercentageTotalExtensionAtMaximumForce

    +
    + Symbol: A_gt +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    is equivalent to
    +
    (relates to + op + some + Extensometer Gauge Length + c) and (relates to + op + some + Maximum Force + c)
    +
    has super-classes
    +
    + extension + c +
    +
    +
    +
    +

    Percentage Yield Point Extensionc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/PercentageYieldPointExtension

    +
    + For discontinuous yielding materials: extension between the start of yielding and the start of uniform work-hardening, expressed as a percentage of the extensometer gauge length +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + extension + c +
    +
    +
    +
    +

    Proof Strengthc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/ProofStrength

    +
    + stress at which the a specific extension value is equal to a specified percentage of the extensometer gauge length +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + value object + c +
    +
    has sub-classes
    +
    + Proof Strength Plastic Extension + c, Proof Strength Total Extension + c +
    +
    +
    +
    +

    Proof Strength Plastic Extensionc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/ProofStrengthPlasticExtension

    +
    + Symbol: R_p +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    is equivalent to
    +
    + relates to extension + op + some + value + some + float +
    +
    has super-classes
    +
    + Proof Strength + c +
    +
    has sub-classes
    +
    + Proof Strength Plastic Extension Rp01 + c, Proof Strength Plastic Extension Rp02 + c +
    +
    is in domain of
    +
    + relates to extension + op +
    +
    +
    +
    +

    Proof Strength Plastic Extension Rp01c + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/Rp01

    +
    + Symbol: R_p_0.1 +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    is equivalent to
    +
    + relates to extension + op + some + value + value 0.1
    +
    has super-classes
    +
    + Proof Strength Plastic Extension + c +
    +
    +
    +
    +

    Proof Strength Plastic Extension Rp02c + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/Rp02

    +
    + Symbol: R_p_0.2 +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    is equivalent to
    +
    + relates to extension + op + some + value + value 0.2
    +
    has super-classes
    +
    + Proof Strength Plastic Extension + c +
    +
    +
    +
    +

    Proof Strength Total Extensionc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/ProofStrengthTotalExtension

    +
    + Symbol: R_t +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    is equivalent to
    +
    + relates to + op + some + Extensometer Gauge Length + c +
    +
    has super-classes
    +
    + Proof Strength + c +
    +
    +
    +
    +

    Slope Of The Elastic Partc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/SlopeOfTheElasticPart

    +
    + This property describes the value of the slope of the first linear increasing part (‘elastic part’) in the stress-percentage extension curve obtained during a tensile test. In the elastic part of the stress‐percentage extension curve, the value of the slope may not necessarily represent the modulus of elasticity. This value may closely agree with the value of the modulus of elasticity if optimal conditions were used. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + value object + c +
    +
    +
    +
    +

    Strain Ratec + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/StrainRate

    +
    + Symbol: e^._L_e +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + testing rate + c +
    +
    +
    +
    +

    Stress Ratec + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/StressRate

    +
    + Symbol: R +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + testing rate + c +
    +
    +
    +
    +

    Tensile Strengthc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/TensileStrength

    +
    + Symbol: R_m +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    is equivalent to
    +
    (relates to + op + some + stress + c) and (relates to + op + some + Maximum Force + c)
    +
    has super-classes
    +
    + value object + c +
    +
    +
    +
    +

    Tensile Testc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/TensileTest

    +
    + Tensile tests (tension tests) on materials provide information on their strength, ductility as well as other characteristic values under uniaxial tensile stress. + +The tensile test involves straining a test piece by tensile force, generally to fracture, for the determination of one or more mechanical properties specified by the semantically related and defined terms. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    is equivalent to
    +
    + participant + op + exactly 1 test piece + c +
    +
    + participant + op + exactly 1 Tensile Testing Machine + c +
    +
    has super-classes
    +
    + mechanical testing process + c +
    +
    +
    +
    +

    Tensile Test Nodec + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/TensileTestNode

    +
    + This entity describes a workflow constituent that hosts tools and equipment that is used for the performance of a tensile test, e.g., a tensile test machine. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + processing node + c +
    +
    has sub-classes
    +
    + Tensile Testing Machine + c +
    +
    +
    +
    +

    Tensile Testing Machinec + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/TensileTestingMachine

    +
    + machine to conduct a tensile test; the control and monitoring of the test, the measurements, and the data processing are usually undertaken by computer +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + Tensile Test Node + c, testing machine + c +
    +
    +
    +
    +

    Thickness After Fracturec + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/ThicknessAfterFracture

    +
    + This entity describes the measured dimension in one direction of a test piece, as measured after the test. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + thickness + c +
    +
    +
    +
    +

    Transition Pointc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/TransitionPoint

    +
    + This entity describes a single point at which a transition from one condition or state to another occurs, e.g. the point at which different phases of matter are capable of existing together in equilibrium (also called inversion point) or if process parameters are changed that will lead to a transition of the process during its execution. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + value object + c +
    +
    has sub-classes
    +
    + Transition Point Testing Rate + c +
    +
    +
    +
    +

    Transition Point Testing Ratec + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/TransitionPointTestingRate

    +
    + This entity describes the the transition point of the testing rate during an analysis / test process, e.g. the point referring to the strain or the stress at which the testing rate is changed during a tensile test. Typically, this transition point is associated with a removal of the extensometer from the test piece during a strain-controlled tensile test. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    is equivalent to
    +
    + relates to + op + some + testing rate + c +
    +
    has super-classes
    +
    + Transition Point + c +
    +
    +
    +
    +

    Type Gauge Length Marksc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/TypeGaugeLengthMarks

    +
    + This property is used to describe the visible markers usually attached to test pieces during a tensile test for elongation / extension measurements. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + test piece info + c +
    +
    +
    +
    +

    Upper Yield Strengthc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/UpperYieldStrength

    +
    + Symbol: R_eH +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    is equivalent to
    +
    + relates to + op + some + stress + c +
    +
    has super-classes
    +
    + Yield Strength + c +
    +
    +
    +
    +

    Width After Fracturec + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/WidthAfterFracture

    +
    + This entity describes a horizontal measurement of an object (test piece) taken at right angles to the length of the object (test piece), as measured after a test. +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    has super-classes
    +
    + width + c +
    +
    +
    +
    +

    Yield Strengthc + back to ToC or Class ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/YieldStrength

    +
    + when the metallic material exhibits a yield phenomenon, stress corresponding to the point reached during the test at which plastic deformation occurs without any increase in the force +
    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    is equivalent to
    +
    + relates to + op + some + stress + c +
    +
    has super-classes
    +
    + value object + c +
    +
    has sub-classes
    +
    + Lower Yield Strength + c, Upper Yield Strength + c +
    +
    +
    +
    +

    Object Properties

    + +
    +

    relates to extensionop + back to ToC or Object Property ToC + +

    +

    + IRI: https://w3id.org/pmd/tto/relatesToExtension

    +
    +
    Is defined by
    +
    + https://w3id.org/pmd/tto +
    +
    +
    +
    +
    has super-properties
    +
    + relates to + op +
    +
    has domain
    +
    + Proof Strength Plastic Extension + c +
    +
    has range
    +
    + percentage extension + c +
    +
    +
    +
    +
    +

    Annotation Properties

    + +
    +

    definition sourceap + back to ToC or Annotation Property ToC + +

    +

    + IRI: https://w3id.org/pmd/co/definitionSource

    +
    +
    +

    symbolap + back to ToC or Annotation Property ToC + +

    +

    + IRI: https://w3id.org/pmd/co/symbol

    +
    +
    +

    Legend back to ToC

    +
    +c: Classes
    +op: Object Properties
    +
    +
    +
    +
    +

    Acknowledgments back to ToC

    +

    +The authors would like to thank Silvio Peroni for developing LODE, a Live OWL Documentation Environment, which is used for representing the Cross Referencing Section of this document and Daniel Garijo for developing Widoco, the program used to create the template used in this documentation.

    +
    + + +
    + + \ No newline at end of file diff --git a/tto/ontology.jsonld b/tto/ontology.jsonld new file mode 100644 index 0000000..7cc57c4 --- /dev/null +++ b/tto/ontology.jsonld @@ -0,0 +1,1889 @@ +[ { + "@id" : "_:genid1", + "@type" : [ "http://www.w3.org/2002/07/owl#Restriction" ], + "http://www.w3.org/2002/07/owl#onProperty" : [ { + "@id" : "https://w3id.org/pmd/co/relatesTo" + } ], + "http://www.w3.org/2002/07/owl#someValuesFrom" : [ { + "@id" : "https://w3id.org/pmd/tto/ExtensometerGaugeLength" + } ] +}, { + "@id" : "_:genid10", + "@type" : [ "http://www.w3.org/2002/07/owl#Restriction" ], + "http://www.w3.org/2002/07/owl#onProperty" : [ { + "@id" : "https://w3id.org/pmd/co/relatesTo" + } ], + "http://www.w3.org/2002/07/owl#someValuesFrom" : [ { + "@id" : "https://w3id.org/pmd/tto/WidthAfterFracture" + } ] +}, { + "@id" : "_:genid12", + "@type" : [ "http://www.w3.org/2002/07/owl#Restriction" ], + "http://www.w3.org/2002/07/owl#onProperty" : [ { + "@id" : "https://w3id.org/pmd/co/relatesTo" + } ], + "http://www.w3.org/2002/07/owl#someValuesFrom" : [ { + "@id" : "https://w3id.org/pmd/tto/ThicknessAfterFracture" + } ] +}, { + "@id" : "_:genid13", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2002/07/owl#unionOf" : [ { + "@list" : [ { + "@id" : "_:genid17" + }, { + "@id" : "_:genid15" + } ] + } ] +}, { + "@id" : "_:genid15", + "@type" : [ "http://www.w3.org/2002/07/owl#Restriction" ], + "http://www.w3.org/2002/07/owl#onProperty" : [ { + "@id" : "https://w3id.org/pmd/co/relatesTo" + } ], + "http://www.w3.org/2002/07/owl#someValuesFrom" : [ { + "@id" : "https://w3id.org/pmd/tto/OriginalDiameter" + } ] +}, { + "@id" : "_:genid17", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2002/07/owl#intersectionOf" : [ { + "@list" : [ { + "@id" : "_:genid21" + }, { + "@id" : "_:genid19" + } ] + } ] +}, { + "@id" : "_:genid19", + "@type" : [ "http://www.w3.org/2002/07/owl#Restriction" ], + "http://www.w3.org/2002/07/owl#onProperty" : [ { + "@id" : "https://w3id.org/pmd/co/relatesTo" + } ], + "http://www.w3.org/2002/07/owl#someValuesFrom" : [ { + "@id" : "https://w3id.org/pmd/tto/OriginalWidth" + } ] +}, { + "@id" : "_:genid2", + "@type" : [ "http://www.w3.org/2002/07/owl#Restriction" ], + "http://www.w3.org/2002/07/owl#onProperty" : [ { + "@id" : "https://w3id.org/pmd/co/relatesTo" + } ], + "http://www.w3.org/2002/07/owl#someValuesFrom" : [ { + "@id" : "https://w3id.org/pmd/tto/OriginalGaugeLength" + } ] +}, { + "@id" : "_:genid21", + "@type" : [ "http://www.w3.org/2002/07/owl#Restriction" ], + "http://www.w3.org/2002/07/owl#onProperty" : [ { + "@id" : "https://w3id.org/pmd/co/relatesTo" + } ], + "http://www.w3.org/2002/07/owl#someValuesFrom" : [ { + "@id" : "https://w3id.org/pmd/tto/OriginalThickness" + } ] +}, { + "@id" : "_:genid22", + "@type" : [ "http://www.w3.org/2002/07/owl#Restriction" ], + "http://www.w3.org/2002/07/owl#onProperty" : [ { + "@id" : "https://w3id.org/pmd/co/relatesTo" + } ], + "http://www.w3.org/2002/07/owl#someValuesFrom" : [ { + "@id" : "https://w3id.org/pmd/tto/OriginalGaugeLength" + } ] +}, { + "@id" : "_:genid23", + "@type" : [ "http://www.w3.org/2002/07/owl#Restriction" ], + "http://www.w3.org/2002/07/owl#onProperty" : [ { + "@id" : "https://w3id.org/pmd/co/relatesTo" + } ], + "http://www.w3.org/2002/07/owl#someValuesFrom" : [ { + "@id" : "https://w3id.org/pmd/tto/OriginalGaugeLength" + } ] +}, { + "@id" : "_:genid24", + "@type" : [ "http://www.w3.org/2002/07/owl#Restriction" ], + "http://www.w3.org/2002/07/owl#onProperty" : [ { + "@id" : "https://w3id.org/pmd/co/relatesTo" + } ], + "http://www.w3.org/2002/07/owl#someValuesFrom" : [ { + "@id" : "https://w3id.org/pmd/tto/OriginalGaugeLength" + } ] +}, { + "@id" : "_:genid25", + "@type" : [ "http://www.w3.org/2002/07/owl#Restriction" ], + "http://www.w3.org/2002/07/owl#onProperty" : [ { + "@id" : "https://w3id.org/pmd/co/relatesTo" + } ], + "http://www.w3.org/2002/07/owl#someValuesFrom" : [ { + "@id" : "https://w3id.org/pmd/tto/ExtensometerGaugeLength" + } ] +}, { + "@id" : "_:genid26", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2002/07/owl#intersectionOf" : [ { + "@list" : [ { + "@id" : "_:genid30" + }, { + "@id" : "_:genid28" + } ] + } ] +}, { + "@id" : "_:genid28", + "@type" : [ "http://www.w3.org/2002/07/owl#Restriction" ], + "http://www.w3.org/2002/07/owl#onProperty" : [ { + "@id" : "https://w3id.org/pmd/co/relatesTo" + } ], + "http://www.w3.org/2002/07/owl#someValuesFrom" : [ { + "@id" : "https://w3id.org/pmd/tto/MaximumForce" + } ] +}, { + "@id" : "_:genid3", + "@type" : [ "http://www.w3.org/2002/07/owl#Restriction" ], + "http://www.w3.org/2002/07/owl#onProperty" : [ { + "@id" : "https://w3id.org/pmd/co/relatesTo" + } ], + "http://www.w3.org/2002/07/owl#someValuesFrom" : [ { + "@id" : "https://w3id.org/pmd/co/Stress" + } ] +}, { + "@id" : "_:genid30", + "@type" : [ "http://www.w3.org/2002/07/owl#Restriction" ], + "http://www.w3.org/2002/07/owl#onProperty" : [ { + "@id" : "https://w3id.org/pmd/co/relatesTo" + } ], + "http://www.w3.org/2002/07/owl#someValuesFrom" : [ { + "@id" : "https://w3id.org/pmd/tto/ExtensometerGaugeLength" + } ] +}, { + "@id" : "_:genid31", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2002/07/owl#intersectionOf" : [ { + "@list" : [ { + "@id" : "_:genid35" + }, { + "@id" : "_:genid33" + } ] + } ] +}, { + "@id" : "_:genid33", + "@type" : [ "http://www.w3.org/2002/07/owl#Restriction" ], + "http://www.w3.org/2002/07/owl#onProperty" : [ { + "@id" : "https://w3id.org/pmd/co/relatesTo" + } ], + "http://www.w3.org/2002/07/owl#someValuesFrom" : [ { + "@id" : "https://w3id.org/pmd/tto/OriginalCrossSectionalArea" + } ] +}, { + "@id" : "_:genid35", + "@type" : [ "http://www.w3.org/2002/07/owl#Restriction" ], + "http://www.w3.org/2002/07/owl#onProperty" : [ { + "@id" : "https://w3id.org/pmd/co/relatesTo" + } ], + "http://www.w3.org/2002/07/owl#someValuesFrom" : [ { + "@id" : "https://w3id.org/pmd/tto/MinimumCrossSectionalAreaAfterFracture" + } ] +}, { + "@id" : "_:genid36", + "@type" : [ "http://www.w3.org/2002/07/owl#Restriction" ], + "http://www.w3.org/2002/07/owl#onProperty" : [ { + "@id" : "https://w3id.org/pmd/co/relatesTo" + } ], + "http://www.w3.org/2002/07/owl#someValuesFrom" : [ { + "@id" : "https://w3id.org/pmd/tto/ExtensometerGaugeLength" + } ] +}, { + "@id" : "_:genid37", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2002/07/owl#intersectionOf" : [ { + "@list" : [ { + "@id" : "_:genid41" + }, { + "@id" : "_:genid39" + } ] + } ] +}, { + "@id" : "_:genid39", + "@type" : [ "http://www.w3.org/2002/07/owl#Restriction" ], + "http://www.w3.org/2002/07/owl#onProperty" : [ { + "@id" : "https://w3id.org/pmd/co/relatesTo" + } ], + "http://www.w3.org/2002/07/owl#someValuesFrom" : [ { + "@id" : "https://w3id.org/pmd/tto/MaximumForce" + } ] +}, { + "@id" : "_:genid4", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2002/07/owl#unionOf" : [ { + "@list" : [ { + "@id" : "_:genid8" + }, { + "@id" : "_:genid6" + } ] + } ] +}, { + "@id" : "_:genid41", + "@type" : [ "http://www.w3.org/2002/07/owl#Restriction" ], + "http://www.w3.org/2002/07/owl#onProperty" : [ { + "@id" : "https://w3id.org/pmd/co/relatesTo" + } ], + "http://www.w3.org/2002/07/owl#someValuesFrom" : [ { + "@id" : "https://w3id.org/pmd/tto/ExtensometerGaugeLength" + } ] +}, { + "@id" : "_:genid42", + "@type" : [ "http://www.w3.org/2002/07/owl#Restriction" ], + "http://www.w3.org/2002/07/owl#onProperty" : [ { + "@id" : "https://w3id.org/pmd/tto/relatesToExtension" + } ], + "http://www.w3.org/2002/07/owl#someValuesFrom" : [ { + "@id" : "_:genid43" + } ] +}, { + "@id" : "_:genid43", + "@type" : [ "http://www.w3.org/2002/07/owl#Restriction" ], + "http://www.w3.org/2002/07/owl#onProperty" : [ { + "@id" : "http://www.w3.org/ns/prov#value" + } ], + "http://www.w3.org/2002/07/owl#someValuesFrom" : [ { + "@id" : "http://www.w3.org/2001/XMLSchema#float" + } ] +}, { + "@id" : "_:genid44", + "@type" : [ "http://www.w3.org/2002/07/owl#Restriction" ], + "http://www.w3.org/2002/07/owl#onProperty" : [ { + "@id" : "https://w3id.org/pmd/co/relatesTo" + } ], + "http://www.w3.org/2002/07/owl#someValuesFrom" : [ { + "@id" : "https://w3id.org/pmd/tto/ExtensometerGaugeLength" + } ] +}, { + "@id" : "_:genid45", + "@type" : [ "http://www.w3.org/2002/07/owl#Restriction" ], + "http://www.w3.org/2002/07/owl#onProperty" : [ { + "@id" : "https://w3id.org/pmd/tto/relatesToExtension" + } ], + "http://www.w3.org/2002/07/owl#someValuesFrom" : [ { + "@id" : "_:genid46" + } ] +}, { + "@id" : "_:genid46", + "@type" : [ "http://www.w3.org/2002/07/owl#Restriction" ], + "http://www.w3.org/2002/07/owl#hasValue" : [ { + "@type" : "http://www.w3.org/2001/XMLSchema#float", + "@value" : "0.1" + } ], + "http://www.w3.org/2002/07/owl#onProperty" : [ { + "@id" : "http://www.w3.org/ns/prov#value" + } ] +}, { + "@id" : "_:genid47", + "@type" : [ "http://www.w3.org/2002/07/owl#Restriction" ], + "http://www.w3.org/2002/07/owl#onProperty" : [ { + "@id" : "https://w3id.org/pmd/tto/relatesToExtension" + } ], + "http://www.w3.org/2002/07/owl#someValuesFrom" : [ { + "@id" : "_:genid48" + } ] +}, { + "@id" : "_:genid48", + "@type" : [ "http://www.w3.org/2002/07/owl#Restriction" ], + "http://www.w3.org/2002/07/owl#hasValue" : [ { + "@type" : "http://www.w3.org/2001/XMLSchema#float", + "@value" : "0.2" + } ], + "http://www.w3.org/2002/07/owl#onProperty" : [ { + "@id" : "http://www.w3.org/ns/prov#value" + } ] +}, { + "@id" : "_:genid49", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2002/07/owl#intersectionOf" : [ { + "@list" : [ { + "@id" : "_:genid53" + }, { + "@id" : "_:genid51" + } ] + } ] +}, { + "@id" : "_:genid51", + "@type" : [ "http://www.w3.org/2002/07/owl#Restriction" ], + "http://www.w3.org/2002/07/owl#onProperty" : [ { + "@id" : "https://w3id.org/pmd/co/relatesTo" + } ], + "http://www.w3.org/2002/07/owl#someValuesFrom" : [ { + "@id" : "https://w3id.org/pmd/tto/MaximumForce" + } ] +}, { + "@id" : "_:genid53", + "@type" : [ "http://www.w3.org/2002/07/owl#Restriction" ], + "http://www.w3.org/2002/07/owl#onProperty" : [ { + "@id" : "https://w3id.org/pmd/co/relatesTo" + } ], + "http://www.w3.org/2002/07/owl#someValuesFrom" : [ { + "@id" : "https://w3id.org/pmd/co/Stress" + } ] +}, { + "@id" : "_:genid54", + "@type" : [ "http://www.w3.org/2002/07/owl#Restriction" ], + "http://www.w3.org/2002/07/owl#onClass" : [ { + "@id" : "https://w3id.org/pmd/co/TestPiece" + } ], + "http://www.w3.org/2002/07/owl#onProperty" : [ { + "@id" : "https://w3id.org/pmd/co/participant" + } ], + "http://www.w3.org/2002/07/owl#qualifiedCardinality" : [ { + "@type" : "http://www.w3.org/2001/XMLSchema#nonNegativeInteger", + "@value" : "1" + } ] +}, { + "@id" : "_:genid55", + "@type" : [ "http://www.w3.org/2002/07/owl#Restriction" ], + "http://www.w3.org/2002/07/owl#onClass" : [ { + "@id" : "https://w3id.org/pmd/tto/TensileTestingMachine" + } ], + "http://www.w3.org/2002/07/owl#onProperty" : [ { + "@id" : "https://w3id.org/pmd/co/participant" + } ], + "http://www.w3.org/2002/07/owl#qualifiedCardinality" : [ { + "@type" : "http://www.w3.org/2001/XMLSchema#nonNegativeInteger", + "@value" : "1" + } ] +}, { + "@id" : "_:genid56", + "@type" : [ "http://www.w3.org/2002/07/owl#Restriction" ], + "http://www.w3.org/2002/07/owl#onProperty" : [ { + "@id" : "https://w3id.org/pmd/co/relatesTo" + } ], + "http://www.w3.org/2002/07/owl#someValuesFrom" : [ { + "@id" : "https://w3id.org/pmd/co/TestingRate" + } ] +}, { + "@id" : "_:genid57", + "@type" : [ "http://www.w3.org/2002/07/owl#Restriction" ], + "http://www.w3.org/2002/07/owl#onProperty" : [ { + "@id" : "https://w3id.org/pmd/co/relatesTo" + } ], + "http://www.w3.org/2002/07/owl#someValuesFrom" : [ { + "@id" : "https://w3id.org/pmd/co/Stress" + } ] +}, { + "@id" : "_:genid58", + "@type" : [ "http://www.w3.org/2002/07/owl#Restriction" ], + "http://www.w3.org/2002/07/owl#onProperty" : [ { + "@id" : "https://w3id.org/pmd/co/relatesTo" + } ], + "http://www.w3.org/2002/07/owl#someValuesFrom" : [ { + "@id" : "https://w3id.org/pmd/co/Stress" + } ] +}, { + "@id" : "_:genid6", + "@type" : [ "http://www.w3.org/2002/07/owl#Restriction" ], + "http://www.w3.org/2002/07/owl#onProperty" : [ { + "@id" : "https://w3id.org/pmd/co/relatesTo" + } ], + "http://www.w3.org/2002/07/owl#someValuesFrom" : [ { + "@id" : "https://w3id.org/pmd/tto/DiameterAfterFracture" + } ] +}, { + "@id" : "_:genid8", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2002/07/owl#intersectionOf" : [ { + "@list" : [ { + "@id" : "_:genid12" + }, { + "@id" : "_:genid10" + } ] + } ] +}, { + "@id" : "https://w3id.org/pmd/co/Diameter", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ] +}, { + "@id" : "https://w3id.org/pmd/co/Extension", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ] +}, { + "@id" : "https://w3id.org/pmd/co/Extensometer", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ] +}, { + "@id" : "https://w3id.org/pmd/co/Force", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ] +}, { + "@id" : "https://w3id.org/pmd/co/Length", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ] +}, { + "@id" : "https://w3id.org/pmd/co/LoadCell", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ] +}, { + "@id" : "https://w3id.org/pmd/co/MechanicalTestingProcess", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ] +}, { + "@id" : "https://w3id.org/pmd/co/PercentageExtension", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2002/07/owl#equivalentClass" : [ { + "@id" : "_:genid1" + } ] +}, { + "@id" : "https://w3id.org/pmd/co/ProcessingNode", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ] +}, { + "@id" : "https://w3id.org/pmd/co/Stress", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ] +}, { + "@id" : "https://w3id.org/pmd/co/TestPiece", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ] +}, { + "@id" : "https://w3id.org/pmd/co/TestPieceInfo", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ] +}, { + "@id" : "https://w3id.org/pmd/co/TestingMachine", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ] +}, { + "@id" : "https://w3id.org/pmd/co/TestingRate", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ] +}, { + "@id" : "https://w3id.org/pmd/co/Thickness", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ] +}, { + "@id" : "https://w3id.org/pmd/co/ValueObject", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ] +}, { + "@id" : "https://w3id.org/pmd/co/Width", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ] +}, { + "@id" : "https://w3id.org/pmd/co/definitionSource", + "@type" : [ "http://www.w3.org/2002/07/owl#AnnotationProperty" ] +}, { + "@id" : "https://w3id.org/pmd/co/participant", + "@type" : [ "http://www.w3.org/2002/07/owl#ObjectProperty" ] +}, { + "@id" : "https://w3id.org/pmd/co/relatesTo", + "@type" : [ "http://www.w3.org/2002/07/owl#ObjectProperty" ] +}, { + "@id" : "https://w3id.org/pmd/co/symbol", + "@type" : [ "http://www.w3.org/2002/07/owl#AnnotationProperty" ] +}, { + "@id" : "https://w3id.org/pmd/tto", + "@type" : [ "http://www.w3.org/2002/07/owl#Ontology" ], + "http://purl.org/dc/elements/1.1/creator" : [ { + "@id" : "https://orcid.org/0000-0001-7192-7143" + }, { + "@id" : "https://orcid.org/0000-0002-3717-7104" + }, { + "@id" : "https://orcid.org/0000-0002-7094-5371" + }, { + "@id" : "https://orcid.org/0000-0002-9014-2920" + }, { + "@id" : "https://orcid.org/0000-0003-4971-3645" + } ], + "http://purl.org/dc/elements/1.1/license" : [ { + "@id" : "http://creativecommons.org/licenses/by/4.0/" + } ], + "http://purl.org/dc/terms/bibliographicCitation" : [ { + "@language" : "en", + "@value" : "Markus Schilling, Bernd Bayerlein, Henk Birkholz, Philipp von Hartrott, Jörg Waitelonis. (July 14th, 2023) TTO: Tensile Test Ontology. Version 2.0.0, https://w3id.org/pmd/tto" + } ], + "http://purl.org/dc/terms/created" : [ { + "@language" : "en", + "@value" : "2023-07-14" + } ], + "http://purl.org/dc/terms/title" : [ { + "@language" : "en", + "@value" : "Tensile Test Ontology (TTO)" + } ], + "http://www.w3.org/2000/01/rdf-schema#comment" : [ { + "@language" : "en", + "@value" : "This is the stable version of the PMD ontology of the tensile test (Tensile Test Ontology - TTO) as developed on the basis of the standard ISO 6892-1: Metallic materials - Tensile Testing - Part 1: Method of test at room temperature.\n\nThe TTO was developed in the frame of the PMD project. The TTO provides conceptualizations valid for the description of tensile tests and corresponding data in accordance with the respective standard. By using TTO for storing tensile test data, all data will be well structured and based on a common vocabulary agreed on by an expert group (generation of FAIR data) which will lead to enhanced data interoperability. This comprises several data categories such as primary data, secondary data and metadata. Data will be human and machine readable. The usage of TTO facilitates data retrieval and downstream usage. Due to a close connection to the PMD core ontology (PMDco), the interoperability of tensile test data is enhanced and querying in combination with other aspects and data within the broad field of material science and engineering (MSE) is facilitated.\n\nThe TTO class structure forms a comprehensible and semantic layer for unified storage of data generated in a tensile test including the possibility to record data from analysis, re-evaluation and re-use. Furthermore, extensive metadata allows to assess data quality and reproduce experiments. Following the open world assumption, object properties are deliberately low restrictive and sparse.\n\nTTO of PMD at GitHub: https://github.com/materialdigital/application-ontologies/tree/main/tensile_test_ontology_TTO" + } ], + "http://www.w3.org/2002/07/owl#imports" : [ { + "@id" : "https://w3id.org/pmd/co" + } ], + "http://www.w3.org/2002/07/owl#versionInfo" : [ { + "@value" : "2.0.1" + } ] +}, { + "@id" : "https://w3id.org/pmd/tto/ChangeOfTransverseDimension", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/tto" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Change Of Transverse Dimension" + }, { + "@language" : "de", + "@value" : "Änderung der transversalen Dimension" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/Length" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Dieses Wertobjekt beschreibt eine Variation der Abmessungen eines Prüfkörpers in Bezug auf seine Querachse, die sich auf seine Querschnittsfläche auswirkt und möglicherweise während eines Zugversuchs auftritt. Das Verhältnis der wahren plastischen Breitendehnung und der wahren plastischen Dickendehnung in einem in uniaxialem Zug beanspruchten Prüfkörper (vertikale Anisotropie) kann anhand dieser Information berechnet werden." + }, { + "@language" : "en", + "@value" : "This value object describes a variation in the dimension of a test piece referring to its transversal axis affecting its cross-sectional area that may potentially occur during a tensile test. The ratio of the true plastic strain in width and the true plastic strain in thickness in a test piece loaded in uniaxial tension (vertical anisotropy) may be calculated using this information." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@value" : "DIN EN ISO 10113:2021-06" + } ] +}, { + "@id" : "https://w3id.org/pmd/tto/CrossheadSeparation", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/tto" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Crosshead Separation" + }, { + "@language" : "de", + "@value" : "Querhaupttrennung" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/ValueObject" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Diese Eigenschaft beschreibt die Verschiebung der Traverse einer Zugprüfmaschine." + }, { + "@language" : "en", + "@value" : "Dimensional analysis: L\nUnit (e.g. SI): mm" + }, { + "@language" : "en", + "@value" : "This property describes the displacement of the crossheads of a tensile testing machine." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "DIN EN ISO 6892-1:2019" + } ] +}, { + "@id" : "https://w3id.org/pmd/tto/CrossheadSeparationRate", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/tto" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Crosshead Separation Rate" + }, { + "@language" : "de", + "@value" : "Traversengeschwindigkeit" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/TestingRate" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "Symbol: v_c" + }, { + "@language" : "de", + "@value" : "Traversenweg je Zeiteinheit" + }, { + "@language" : "en", + "@value" : "displacement of the crossheads per time" + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "DIN EN ISO 6892-1:2019" + } ] +}, { + "@id" : "https://w3id.org/pmd/tto/DiameterAfterFracture", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/tto" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Diameter After Fracture" + }, { + "@language" : "de", + "@value" : "End-Probendurchmesser" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/Diameter" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Die Länge einer geraden Linie durch den Mittelpunkt eines Objekts (Zugprüfstücks), gemessen nach einem Bruch, der während einer Prüfung aufgetreten ist." + }, { + "@language" : "en", + "@value" : "The length of a straight line through the center of an object (tensile test piece) as measured after a fracture occured during a test." + } ] +}, { + "@id" : "https://w3id.org/pmd/tto/Elongation", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/tto" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Elongation" + }, { + "@language" : "de", + "@value" : "Verlängerung" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/ValueObject" + } ], + "http://www.w3.org/2002/07/owl#equivalentClass" : [ { + "@id" : "_:genid2" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Zunahme der Anfangsmesslänge zu einem beliebigen Zeitpunkt während des Versuchs" + }, { + "@language" : "en", + "@value" : "increase in the original gauge length at any moment during the test" + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "DIN EN ISO 6892-1:2019" + } ] +}, { + "@id" : "https://w3id.org/pmd/tto/EstimatedStrainRateOverTheParallelLength", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/tto" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Abgeschätzte Dehngeschwindigkeit Über Die Parallele Länge" + }, { + "@language" : "en", + "@value" : "Estimated Strain Rate Over The Parallel Length" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/TestingRate" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "Symbol: e^._L_c" + }, { + "@language" : "de", + "@value" : "Zunahme der Dehnung über die parallele Länge der Probe je Zeiteinheit, basierend auf der Traversengeschwindigkeit und der parallelen Länge der Probe" + }, { + "@language" : "en", + "@value" : "value of the increase of strain over the parallel length of the test piece per time based on the crosshead separation rate and the parallel length of the test piece" + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "DIN EN ISO 6892-1:2019" + } ] +}, { + "@id" : "https://w3id.org/pmd/tto/ExtensometerGaugeLength", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/tto" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Extensometer Gauge Length" + }, { + "@language" : "de", + "@value" : "Extensometer-Messlänge" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/tto/GaugeLength" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Anfangsmesslänge des Dehnungsaufnehmers (Extensometer), die zum Messen der Verlängerung benutzt wird\n\nAnmerkung: Für die Bestimmung mehrerer Eigenschaften, die (teilweise oder vollständig) von der Verlängerung abhängig sind, z. B. R_p, A_e oder A_g, ist die Verwendung eines Extensometers zwingend erforderlich." + }, { + "@language" : "en", + "@value" : "Symbol: L_e" + }, { + "@language" : "en", + "@value" : "initial gauge length of the extensometer used for measurement of extension\n\nNote: For the determination of several properties which are based (partly or complete) on extension, e. g. R_p, A_e or A_g, the use of an extensometer is mandatory." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "DIN EN ISO 6892-1:2019" + } ] +}, { + "@id" : "https://w3id.org/pmd/tto/FinalGaugeLengthAfterFracture", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/tto" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Final Gauge Length After Fracture" + }, { + "@language" : "de", + "@value" : "Messlänge nach dem Bruch" + }, { + "@language" : "en", + "@value" : "Symbol: L_u" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/tto/GaugeLength" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Länge zwischen den Marken zur Kennzeichnung der Messlänge auf der Probe, die nach dem Bruch bei Raumtemperatur gemessen wird, nachdem die beiden Probenbruchstücke sorgfältig so zusammengefügt wurden, dass ihre Achsen in einer Geraden liegen" + }, { + "@language" : "en", + "@value" : "length between gauge length marks on the test piece measured after rupture, at room temperature, the two pieces having been carefully fitted back together so that their axes lie in a straight line" + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "DIN EN ISO 6892-1:2019" + } ] +}, { + "@id" : "https://w3id.org/pmd/tto/GaugeLength", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/tto" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Gauge Length" + }, { + "@language" : "de", + "@value" : "Messlänge" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/Length" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Länge des parallelen Teils der Probe, an dem zu einem beliebigen Zeitpunkt während des Versuchs die Verlängerung gemessen wird" + }, { + "@language" : "en", + "@value" : "Symbol: L" + }, { + "@language" : "en", + "@value" : "length of the parallel portion of the test piece on which elongation is measured at any moment during the test" + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "DIN EN ISO 6892-1:2019" + } ] +}, { + "@id" : "https://w3id.org/pmd/tto/GeometryShape", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/tto" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Geometrische Form" + }, { + "@language" : "en", + "@value" : "Geometry Shape" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/TestPieceInfo" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Diese Eigenschaft beschreibt die geometrischen Abmessungen und das Erscheinungsbild (Form und Abmaße) einer Probe, eines Prüfkörpers oder eines Prüfstücks, wie sie üblicherweise durch eine entsprechende Norm definiert sind. Dementsprechend ist der angegebene Formwert in Übereinstimmung mit der definierenden Norm anzugeben, z. B. \"Zugprüfstück Form 1 gemäß Anhang B\"." + }, { + "@language" : "en", + "@value" : "This property describes the geometric dimensions and appearance (shape and dimensions) of a sample, specimen, or test piece as usually defined by a corresponding standard. Accordingly, the shape value given is in accordance with the defining standard, e.g., ‘tensile test piece shape 1 in accordance with annex B’." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "DIN EN ISO 6892-1:2019" + } ] +}, { + "@id" : "https://w3id.org/pmd/tto/LowerYieldStrength", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/tto" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Lower Yield Strength" + }, { + "@language" : "de", + "@value" : "untere Streckgrenze" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/tto/YieldStrength" + } ], + "http://www.w3.org/2002/07/owl#equivalentClass" : [ { + "@id" : "_:genid3" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "Symbol: R_eL" + }, { + "@language" : "de", + "@value" : "kleinste Spannung während des plastischen Fließens, wobei Einschwingerscheinungen nicht berücksichtigt werden" + }, { + "@language" : "en", + "@value" : "lowest value of stress during plastic yielding, ignoring any initial transient effects" + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "DIN EN ISO 6892-1:2019" + } ] +}, { + "@id" : "https://w3id.org/pmd/tto/MaximumForce", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/tto" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Höchstkraft" + }, { + "@language" : "en", + "@value" : "Maximum Force" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/Force" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Bei Werkstoffen, die kein diskontinuierliches Fließen zeigen: größte Kraft, der die Probe während des Versuchs standhält\n\nBei Werkstoffen, die ein diskontinuierliches Fließen zeigen: größte Kraft, der die Probe während des Versuchs nach dem Beginn der Verfestigung standhält\n\nAnmerkung: Für Werkstoffe, die ein diskontinuierliches Fließen zeigen, aber keine Verfestigung erzielt werden kann, ist die Höchstkraft nicht definiert\n." + }, { + "@language" : "en", + "@value" : "For materials displaying no discontinuous yielding: highest force that the test piece withstands during the test\n\nFor materials displaying discontinuous yielding: highest force that the test piece withstands during the test after the beginning of work-hardening\n\nNote: For materials which display discontinuous yielding, but where no work-hardening can be established, the maximum force is not defined." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "DIN EN ISO 6892-1:2019" + } ] +}, { + "@id" : "https://w3id.org/pmd/tto/MinimumCrossSectionalAreaAfterFracture", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#comment" : [ { + "@value" : "Symbol: S_u" + } ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/tto" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Kleinster Querschnitt nach dem Bruch" + }, { + "@language" : "en", + "@value" : "Minimum cross-sectional area after fracture" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/CrossSectionArea" + } ], + "http://www.w3.org/2002/07/owl#equivalentClass" : [ { + "@id" : "_:genid4" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Dieses Konzept beschreibt die kleinste Querschnittsfläche des Zugprüfkörers, die nach dem Bruch infolge der aufgebrachten Zugkraft erhalten wird.\n\nAnmerkung: Sie wird in der Regel senkrecht zur Richtung der aufgebrachten Kraft gemessen und dient zur Berechnung der technischen Spannung während der Prüfung.\n\nAnmerkung: Es wird empfohlen, den Anfangsquerschnitt innerhalb der parallelen Länge mit einer Genauigkeit von ±2 % zu messen. Bei runden Prüfkörpern mit kleinem Durchmesser oder Prüfkörpern mit anderen Querschnittsgeometrien ist es jedoch möglicherweise nicht möglich, den Anfangsquerschnitt innerhalb der parallelen Länge mit einer Genauigkeit von ±2 % zu messen." + }, { + "@language" : "en", + "@value" : "This concept describes the smallest cross-sectional area of the tensile test piece observed after it has fractured under the applied tensile force.\n\nNote: It is typically measured perpendicular to the direction of the applied force and is used to calculate engineering stress during the test.\n\nNote: It is recommended to measure the original cross-sectional area of the parallel length to an accuracy of ±2 %. However, measuring the original cross-sectional area of the parallel length with an accuracy of ±2 % on small diameter round test pieces, or test pieces with other cross-sectional geometries, may not be possible." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@value" : "DIN EN ISO 6892-1:2019" + } ] +}, { + "@id" : "https://w3id.org/pmd/tto/OriginalCrossSectionalArea", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#comment" : [ { + "@value" : "Symbol: S_o" + } ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/tto" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Anfangsquerschnitt innerhalb der parallelen Länge" + }, { + "@language" : "en", + "@value" : "Original cross-sectional area of the parallel length" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/CrossSectionArea" + } ], + "http://www.w3.org/2002/07/owl#equivalentClass" : [ { + "@id" : "_:genid13" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Dieses Konzept beschreibt die initiale Querschnittsfläche des Zugprüfkörpers entlang seiner parallelen Länge, bevor eine Verformung auftritt." + }, { + "@language" : "en", + "@value" : "This concept describes the initial area of the tensile test piece before any deformation occurs." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@value" : "DIN EN ISO 6892-1:2019" + } ] +}, { + "@id" : "https://w3id.org/pmd/tto/OriginalDiameter", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/tto" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Anfangs-Probendurchmesser" + }, { + "@language" : "en", + "@value" : "Original Diameter" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/Diameter" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Die Länge einer geraden Linie durch den Mittelpunkt eines Objekts (Zugprüfkörpers), die vor einer Prüfung gemessen wird." + }, { + "@language" : "en", + "@value" : "The length of a straight line through the center of an object (tensile test piece) as measured prior to a tensile test." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "DIN EN ISO 6892-1:2019" + } ] +}, { + "@id" : "https://w3id.org/pmd/tto/OriginalGaugeLength", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/tto" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Anfangsmesslänge" + }, { + "@language" : "en", + "@value" : "Original Gauge Length" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/tto/GaugeLength" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Länge zwischen den Marken zur Kennzeichnung der Messlänge auf der Probe, die vor dem Versuch bei Raumtemperatur gemessen wird" + }, { + "@language" : "en", + "@value" : "Symbol: L_o" + }, { + "@language" : "en", + "@value" : "length between gauge length marks on the test piece measured at room temperature before the test" + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "DIN EN ISO 6892-1:2019" + } ] +}, { + "@id" : "https://w3id.org/pmd/tto/OriginalThickness", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/tto" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Anfangs-Dicke" + }, { + "@language" : "en", + "@value" : "Original Thickness" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/Thickness" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Diese Entität beschreibt die gemessene Dimension in einer Richtung eines Prüfstücks, wie sie vor der Prüfung gemessen wurde." + }, { + "@language" : "en", + "@value" : "This entity describes the measured dimension in one direction of a test piece, as measured before the test." + } ] +}, { + "@id" : "https://w3id.org/pmd/tto/OriginalWidth", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/tto" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Anfangs-Breite" + }, { + "@language" : "en", + "@value" : "Original Width" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/Width" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Diese Entität beschreibt eine horizontale Messung eines Objekts (Prüfkörpers) im rechten Winkel zur Länge des Objekts (Prüfkörpers), wie sie vor einer Prüfung gemessen wird." + }, { + "@language" : "en", + "@value" : "This entity describes a horizontal measurement of an object (test piece) taken at right angles to the length of the object (test piece), as measured before a test." + } ] +}, { + "@id" : "https://w3id.org/pmd/tto/ParallelLength", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/tto" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Parallel Length" + }, { + "@language" : "de", + "@value" : "Parallele Länge" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/Length" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Länge des parallelen reduzierten Querschnitts der Probe\n\nAnmerkung: Bei unbearbeiteten Proben tritt an die Stelle der parallelen Länge der Abstand zwischen den Einspannungen." + }, { + "@language" : "en", + "@value" : "Symbol: L_c" + }, { + "@language" : "en", + "@value" : "length of the parallel reduced section of the test piece\n\nNote: The concept of parallel length is replaced by the concept of distance between grips for unmachined test pieces." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "DIN EN ISO 6892-1:2019" + } ] +}, { + "@id" : "https://w3id.org/pmd/tto/PercentageElongation", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/tto" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Dehnung" + }, { + "@language" : "en", + "@value" : "Percentage Elongation" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/tto/Elongation" + } ], + "http://www.w3.org/2002/07/owl#equivalentClass" : [ { + "@id" : "_:genid22" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Verlängerung, angegeben in Prozent, bezogen auf die Anfangsmesslänge" + }, { + "@language" : "en", + "@value" : "elongation expressed as a percentage of the original gauge length" + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "DIN EN ISO 6892-1:2019" + } ] +}, { + "@id" : "https://w3id.org/pmd/tto/PercentageElongationAfterFracture", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/tto" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Bruchdehnung" + }, { + "@language" : "en", + "@value" : "Percentage Elongation After Fracture" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/tto/Elongation" + } ], + "http://www.w3.org/2002/07/owl#equivalentClass" : [ { + "@id" : "_:genid23" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "Symbol: A" + }, { + "@language" : "de", + "@value" : "bleibende Verlängerung der Messlänge nach dem Bruch (L_u − L_o), angegeben in Prozent, bezogen auf die Anfangsmesslänge" + }, { + "@language" : "en", + "@value" : "permanent elongation of the gauge length after fracture (L_u − L_o), expressed as a percentage of the original gauge length" + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "DIN EN ISO 6892-1:2019" + } ] +}, { + "@id" : "https://w3id.org/pmd/tto/PercentagePermanentElongation", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/tto" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Bleibende Dehnung" + }, { + "@language" : "en", + "@value" : "Percentage Permanent Elongation" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/tto/Elongation" + } ], + "http://www.w3.org/2002/07/owl#equivalentClass" : [ { + "@id" : "_:genid24" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Zunahme der Anfangsmesslänge einer Probe nach Entfernen einer festgelegten Zugspannung, angegeben in Prozent, bezogen auf die Anfangsmesslänge" + }, { + "@language" : "en", + "@value" : "increase in the original gauge length of a test piece after removal of a specified stress, expressed as a percentage of the original gauge length" + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "DIN EN ISO 6892-1:2019" + } ] +}, { + "@id" : "https://w3id.org/pmd/tto/PercentagePermanentExtension", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/tto" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Bleibende Extensometer-Dehnung" + }, { + "@language" : "en", + "@value" : "Percentage Permanent Extension" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/Extension" + } ], + "http://www.w3.org/2002/07/owl#equivalentClass" : [ { + "@id" : "_:genid25" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Vergrößerung der Extensometer-Messlänge nach Entfernen einer festgelegten, auf die Probe aufgebrachten Zugspannung, angegeben in Prozent, bezogen auf die Extensometer-Messlänge" + }, { + "@language" : "en", + "@value" : "increase in the extensometer gauge length, after removal of a specified stress from the test piece, expressed as a percentage of the extensometer gauge length" + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "DIN EN ISO 6892-1:2019" + } ] +}, { + "@id" : "https://w3id.org/pmd/tto/PercentagePlasticExtensionAtMaximumForce", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/tto" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Percentage Plastic Extension At Maximum Force" + }, { + "@language" : "de", + "@value" : "Plastische Extensometer-Dehnung bei Höchstkraft" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/Extension" + } ], + "http://www.w3.org/2002/07/owl#equivalentClass" : [ { + "@id" : "_:genid26" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "Symbol: A_g" + }, { + "@language" : "en", + "@value" : "plastic extension at maximum force, expressed as a percentage of the extensometer gauge length" + }, { + "@language" : "de", + "@value" : "plastische Verlängerung der Extensometer-Messlänge bei Höchstkraft, angegeben in Prozent, bezogen auf die Extensometer-Messlänge" + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "DIN EN ISO 6892-1:2019" + } ] +}, { + "@id" : "https://w3id.org/pmd/tto/PercentageReductionOfArea", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/tto" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Brucheinschnürung" + }, { + "@language" : "en", + "@value" : "Percentage Reduction Of Area" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/ValueObject" + } ], + "http://www.w3.org/2002/07/owl#equivalentClass" : [ { + "@id" : "_:genid31" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "größte während des Versuchs aufgetretene Änderung des Querschnitts (S_o − S_u), angegeben in Prozent, bezogen auf den Anfangsquerschnitt S_o" + }, { + "@language" : "en", + "@value" : "maximum change in cross-sectional area which has occurred during the test (S_o − S_u), expressed as a percentage of the original cross-sectional area, S_o" + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "DIN EN ISO 6892-1:2019" + } ], + "https://w3id.org/pmd/co/symbol" : [ { + "@value" : "Z" + } ] +}, { + "@id" : "https://w3id.org/pmd/tto/PercentageTotalExtensionAtFracture", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/tto" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Gesamte Extensometer-Dehnung beim Bruch" + }, { + "@language" : "en", + "@value" : "Percentage Total Extension At Fracture" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/Extension" + } ], + "http://www.w3.org/2002/07/owl#equivalentClass" : [ { + "@id" : "_:genid36" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "Symbol: A_t" + }, { + "@language" : "de", + "@value" : "gesamte Verlängerung (elastische plus plastische Verlängerung) der Extensometer-Messlänge beim Bruch, angegeben in Prozent, bezogen auf die Extensometer-Messlänge" + }, { + "@language" : "en", + "@value" : "total extension (elastic extension plus plastic extension) at the moment of fracture, expressed as a percentage of the extensometer gauge length" + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "DIN EN ISO 6892-1:2019" + } ] +}, { + "@id" : "https://w3id.org/pmd/tto/PercentageTotalExtensionAtMaximumForce", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/tto" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Gesamte Extensometer-Dehnung bei Höchstkraft" + }, { + "@language" : "en", + "@value" : "Percentage Total Extension At Maximum Force" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/Extension" + } ], + "http://www.w3.org/2002/07/owl#equivalentClass" : [ { + "@id" : "_:genid37" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "Symbol: A_gt" + }, { + "@language" : "de", + "@value" : "gesamte Verlängerung (elastische plus plastische Verlängerung) der Extensometer-Messlänge bei Höchstkraft, angegeben in Prozent, bezogen auf die Extensometer-Messlänge" + }, { + "@language" : "en", + "@value" : "total extension (elastic extension plus plastic extension) at maximum force, expressed as a percentage of the extensometer gauge length" + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "DIN EN ISO 6892-1:2019" + } ] +}, { + "@id" : "https://w3id.org/pmd/tto/PercentageYieldPointExtension", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/tto" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Percentage Yield Point Extension" + }, { + "@language" : "de", + "@value" : "Streckgrenzen-Extensometer-Dehnung" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/Extension" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Bei Werkstoffen, die ein diskontinuierliches Fließen zeigen: Verlängerung der Extensometer-Messlänge zwischen dem Beginn örtlichen Fließens und dem Einsetzen gleichmäßiger Verfestigung, angegeben in Prozent, bezogen auf die Extensometer-Messlänge" + }, { + "@language" : "en", + "@value" : "For discontinuous yielding materials: extension between the start of yielding and the start of uniform work-hardening, expressed as a percentage of the extensometer gauge length" + }, { + "@language" : "en", + "@value" : "Symbol: A_e" + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "DIN EN ISO 6892-1:2019" + } ] +}, { + "@id" : "https://w3id.org/pmd/tto/ProofStrength", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/tto" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Dehngrenze" + }, { + "@language" : "en", + "@value" : "Proof Strength" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/ValueObject" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Spannung, bei der ein bestimmter Dehnungswert gleich einem bestimmten Prozentsatz der Messlänge des Dehnungsmessers ist" + }, { + "@language" : "en", + "@value" : "stress at which the a specific extension value is equal to a specified percentage of the extensometer gauge length" + } ] +}, { + "@id" : "https://w3id.org/pmd/tto/ProofStrengthPlasticExtension", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/tto" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Dehngrenze bei plastischer Extensometer-Dehnung" + }, { + "@language" : "en", + "@value" : "Proof Strength Plastic Extension" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/tto/ProofStrength" + } ], + "http://www.w3.org/2002/07/owl#equivalentClass" : [ { + "@id" : "_:genid42" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Spannung, bei der die plastische Extensometer-Dehnung einem vorgegebenen Prozentanteil der Extensometer-Messlänge entspricht\n\nAnmerkung: Der Index wird durch den Zahlenwert ergänzt, der den vorgegebenen Zahlenwert der plastischen Extensometer-Dehnung in Prozent angibt, z. B. R_p_0,2." + }, { + "@language" : "en", + "@value" : "Symbol: R_p" + }, { + "@language" : "en", + "@value" : "stress at which the plastic extension is equal to a specified percentage of the extensometer gauge length\n\nNote: A suffix is added to the subscript to indicate the prescribed percentage, e.g. R_p_0.2.\n\nSource: ISO 6892-1:2019" + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "DIN EN ISO 6892-1:2019" + } ] +}, { + "@id" : "https://w3id.org/pmd/tto/ProofStrengthTotalExtension", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/tto" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Dehngrenze bei gesamter Extensometer-Dehnung" + }, { + "@language" : "en", + "@value" : "Proof Strength Total Extension" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/tto/ProofStrength" + } ], + "http://www.w3.org/2002/07/owl#equivalentClass" : [ { + "@id" : "_:genid44" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Spannung, bei der die gesamte Extensometer-Dehnung (elastische und plastische Extensometer-Dehnung) einem vorgegebenen Prozentanteil der Extensometer-Messlänge entspricht\n\nAnmerkung: Der Index wird durch den Zahlenwert ergänzt, der den vorgegebenen Zahlenwert der gesamten Extensometer-Dehnung in Prozent angibt, z. B. R_t_0,5." + }, { + "@language" : "en", + "@value" : "Symbol: R_t" + }, { + "@language" : "en", + "@value" : "stress at which total extension (elastic extension plus plastic extension) is equal to a specified percentage of the extensometer gauge length\n\nNote: A suffix is added to the subscript to indicate the prescribed percentage, e.g. R_t_0.5." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "DIN EN ISO 6892-1:2019" + } ] +}, { + "@id" : "https://w3id.org/pmd/tto/Rp01", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/tto" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Dehngrenze bei plastischer Extensometer-Dehnung Rp01" + }, { + "@language" : "en", + "@value" : "Proof Strength Plastic Extension Rp01" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/tto/ProofStrengthPlasticExtension" + } ], + "http://www.w3.org/2002/07/owl#equivalentClass" : [ { + "@id" : "_:genid45" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Spannung bei einer plastischen Extensometer-Dehnung, die 0,1 Prozent der Extensometer-Messlänge entspricht" + }, { + "@language" : "en", + "@value" : "Symbol: R_p_0.1" + }, { + "@language" : "en", + "@value" : "stress at which the plastic extension is equal to 0.1 percent of the extensometer gauge length" + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "DIN EN ISO 6892-1:2019" + } ] +}, { + "@id" : "https://w3id.org/pmd/tto/Rp02", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/tto" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Dehngrenze bei plastischer Extensometer-Dehnung Rp02" + }, { + "@language" : "en", + "@value" : "Proof Strength Plastic Extension Rp02" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/tto/ProofStrengthPlasticExtension" + } ], + "http://www.w3.org/2002/07/owl#equivalentClass" : [ { + "@id" : "_:genid47" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Spannung bei einer plastischen Extensometer-Dehnung, die 0,2 Prozent der Extensometer-Messlänge entspricht" + }, { + "@language" : "en", + "@value" : "Symbol: R_p_0.2" + }, { + "@language" : "en", + "@value" : "stress at which the plastic extension is equal to 0.2 percent of the extensometer gauge length" + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "DIN EN ISO 6892-1:2019" + } ] +}, { + "@id" : "https://w3id.org/pmd/tto/SlopeOfTheElasticPart", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/tto" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Slope Of The Elastic Part" + }, { + "@language" : "de", + "@value" : "Steigung des elastischen Bereichs" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/ValueObject" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Diese Eigenschaft beschreibt den Wert der Steigung des ersten linear ansteigenden Teils (\"elastischer Teil\") in der bei einem Zugversuch erhaltenen Spannungs-Dehnungs-Kurve. Im elastischen Teil der Spannungs-Dehnungs-Kurve muss der Wert der Steigung nicht unbedingt dem Elastizitätsmodul entsprechen. Dieser Wert kann mit dem Wert des Elastizitätsmoduls (nur) sehr gut übereinstimmen, wenn optimale Bedingungen herrschten." + }, { + "@language" : "en", + "@value" : "This property describes the value of the slope of the first linear increasing part (‘elastic part’) in the stress-percentage extension curve obtained during a tensile test. In the elastic part of the stress‐percentage extension curve, the value of the slope may not necessarily represent the modulus of elasticity. This value may closely agree with the value of the modulus of elasticity if optimal conditions were used." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "DIN EN ISO 6892-1:2019" + } ] +}, { + "@id" : "https://w3id.org/pmd/tto/StrainRate", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/tto" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Dehngeschwindigkeit" + }, { + "@language" : "en", + "@value" : "Strain Rate" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/TestingRate" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "Symbol: e^._L_e" + }, { + "@language" : "de", + "@value" : "Zunahme der mit einem Extensometer in der Extensometer-Messlänge gemessenen Dehnung je Zeiteinheit" + }, { + "@language" : "en", + "@value" : "increase of strain, measured with an extensometer, in extensometer gauge length, per time" + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "DIN EN ISO 6892-1:2019" + } ] +}, { + "@id" : "https://w3id.org/pmd/tto/StressRate", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/tto" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Spannungsgeschwindigkeit" + }, { + "@language" : "en", + "@value" : "Stress Rate" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/TestingRate" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "Symbol: R" + }, { + "@language" : "de", + "@value" : "Zunahme der Spannung je Zeiteinheit\n\nAnmerkung: Die Spannungsgeschwindigkeit wird nur im elastischen Bereich des Versuchs verwendet." + }, { + "@language" : "en", + "@value" : "increase of stress per time\n\nNote: Stress rate is only used in the elastic part of the test." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "DIN EN ISO 6892-1:2019" + } ] +}, { + "@id" : "https://w3id.org/pmd/tto/TensileStrength", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/tto" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Tensile Strength" + }, { + "@language" : "de", + "@value" : "Zugfestigkeit" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/ValueObject" + } ], + "http://www.w3.org/2002/07/owl#equivalentClass" : [ { + "@id" : "_:genid49" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Spannung, die der Höchstkraft entspricht" + }, { + "@language" : "en", + "@value" : "Symbol: R_m" + }, { + "@language" : "en", + "@value" : "stress corresponding to the maximum force" + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "DIN EN ISO 6892-1:2019" + } ] +}, { + "@id" : "https://w3id.org/pmd/tto/TensileTest", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/tto" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Tensile Test" + }, { + "@language" : "de", + "@value" : "Zugversuch" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/MechanicalTestingProcess" + } ], + "http://www.w3.org/2002/07/owl#equivalentClass" : [ { + "@id" : "_:genid54" + }, { + "@id" : "_:genid55" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "Tensile tests (tension tests) on materials provide information on their strength, ductility as well as other characteristic values under uniaxial tensile stress.\n\nThe tensile test involves straining a test piece by tensile force, generally to fracture, for the determination of one or more mechanical properties specified by the semantically related and defined terms." + }, { + "@language" : "de", + "@value" : "Zugversuche (Zugprüfungen) an Werkstoffen geben Auskunft über deren Festigkeit, Duktilität sowie weitere Kennwerte unter einachsiger Zugbeanspruchung.\n\nBeim Zugversuch wird ein Prüfkörper durch Zugkraft belastet, im Allgemeinen bis zum Bruch, um eine oder mehrere mechanische Eigenschaften zu bestimmen, die durch die semantisch verknüpften und definierten Begriffe festgelegt sind." + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "DIN EN ISO 6892-1:2019" + } ] +}, { + "@id" : "https://w3id.org/pmd/tto/TensileTestNode", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/tto" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Tensile Test Node" + }, { + "@language" : "de", + "@value" : "Zugversuchsprozessknoten" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/ProcessingNode" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Diese Entität beschreibt einen Workflow-Bestandteil, der Werkzeuge und Geräte beinhaltet, die für die Durchführung eines Zugversuchs verwendet werden, z. B. eine Zugprüfmaschine." + }, { + "@language" : "en", + "@value" : "This entity describes a workflow constituent that hosts tools and equipment that is used for the performance of a tensile test, e.g., a tensile test machine." + } ] +}, { + "@id" : "https://w3id.org/pmd/tto/TensileTestingMachine", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/tto" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Tensile Testing Machine" + }, { + "@language" : "de", + "@value" : "Zugprüfmaschine" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/TestingMachine" + }, { + "@id" : "https://w3id.org/pmd/tto/TensileTestNode" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Maschine zur Durchführung eines Zugversuches; die Regelung und Überwachung des Versuches, die Messungen und die Datenverarbeitung werden üblicherweise mithilfe eines Computers durchgeführt." + }, { + "@language" : "en", + "@value" : "machine to conduct a tensile test; the control and monitoring of the test, the measurements, and the data processing are usually undertaken by computer" + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "DIN EN ISO 6892-1:2019" + } ] +}, { + "@id" : "https://w3id.org/pmd/tto/ThicknessAfterFracture", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/tto" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "End-Dicke" + }, { + "@language" : "en", + "@value" : "Thickness After Fracture" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/Thickness" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Diese Entität beschreibt die gemessene Dimension in einer Richtung eines Prüfstücks, wie sie vor der Prüfung gemessen wurde." + }, { + "@language" : "en", + "@value" : "This entity describes the measured dimension in one direction of a test piece, as measured after the test." + } ] +}, { + "@id" : "https://w3id.org/pmd/tto/TransitionPoint", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/tto" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Transition Point" + }, { + "@language" : "de", + "@value" : "Umschaltpunkt" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/ValueObject" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Diese Entität beschreibt einen einzelnen Punkt, an dem ein Übergang von einer Bedingung oder einem Zustand in einen anderen erfolgt, z. B. der Punkt, an dem verschiedene Phasen von Materie im Gleichgewicht miteinander existieren können (auch Inversionspunkt genannt) oder wenn Prozessparameter geändert werden, die zu einem Übergang des Prozesses während seiner Ausführung führen." + }, { + "@language" : "en", + "@value" : "This entity describes a single point at which a transition from one condition or state to another occurs, e.g. the point at which different phases of matter are capable of existing together in equilibrium (also called inversion point) or if process parameters are changed that will lead to a transition of the process during its execution." + } ] +}, { + "@id" : "https://w3id.org/pmd/tto/TransitionPointTestingRate", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/tto" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "Transition Point Testing Rate" + }, { + "@language" : "de", + "@value" : "Umschaltpunkt der Prüfgeschwindigkeit" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/tto/TransitionPoint" + } ], + "http://www.w3.org/2002/07/owl#equivalentClass" : [ { + "@id" : "_:genid56" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Diese Entität beschreibt den Umschaltpunkt der Prüfgeschwindigkeit während eines Analyse- / Testprozesses, z.B. den Punkt bezogen auf die Dehnung oder Spannung, an welchem die Prüfgeschwindigkeit während eines Zugversuchs geändert wird. Typischerweise ist dieser Punkt mit einer Abnahme des Extensometers (Dehnungsaufnehmers) vom Prüfkörper während eines dehnungsgeregelten Zugversuchs verbunden." + }, { + "@language" : "en", + "@value" : "This entity describes the the transition point of the testing rate during an analysis / test process, e.g. the point referring to the strain or the stress at which the testing rate is changed during a tensile test. Typically, this transition point is associated with a removal of the extensometer from the test piece during a strain-controlled tensile test." + } ] +}, { + "@id" : "https://w3id.org/pmd/tto/TypeGaugeLengthMarks", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/tto" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Typ Der Messlängenmarkierungen" + }, { + "@language" : "en", + "@value" : "Type Gauge Length Marks" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/TestPieceInfo" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Diese Eigenschaft wird verwendet, um die sichtbaren Markierungen zu beschreiben, die in der Regel während eines Zugversuchs zur Messung der Dehnung an den Prüfkörpern angebracht werden." + }, { + "@language" : "en", + "@value" : "This property is used to describe the visible markers usually attached to test pieces during a tensile test for elongation / extension measurements." + } ] +}, { + "@id" : "https://w3id.org/pmd/tto/UpperYieldStrength", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/tto" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Obere Streckgrenze" + }, { + "@language" : "en", + "@value" : "Upper Yield Strength" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/tto/YieldStrength" + } ], + "http://www.w3.org/2002/07/owl#equivalentClass" : [ { + "@id" : "_:genid57" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "en", + "@value" : "Symbol: R_eH" + }, { + "@language" : "de", + "@value" : "höchste Spannung, bevor der erste Kraftabfall auftritt" + }, { + "@language" : "en", + "@value" : "maximum value of stress prior to the first decrease in force" + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "DIN EN ISO 6892-1:2019" + } ] +}, { + "@id" : "https://w3id.org/pmd/tto/WidthAfterFracture", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/tto" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "End-Breite" + }, { + "@language" : "en", + "@value" : "Width After Fracture" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/Width" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Diese Entität beschreibt eine horizontale Messung eines Objekts (Prüfkörpers) im rechten Winkel zur Länge des Objekts (Prüfkörpers), wie sie nach einer Prüfung gemessen wird." + }, { + "@language" : "en", + "@value" : "This entity describes a horizontal measurement of an object (test piece) taken at right angles to the length of the object (test piece), as measured after a test." + } ] +}, { + "@id" : "https://w3id.org/pmd/tto/YieldStrength", + "@type" : [ "http://www.w3.org/2002/07/owl#Class" ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/tto" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "de", + "@value" : "Streckgrenze" + }, { + "@language" : "en", + "@value" : "Yield Strength" + } ], + "http://www.w3.org/2000/01/rdf-schema#subClassOf" : [ { + "@id" : "https://w3id.org/pmd/co/ValueObject" + } ], + "http://www.w3.org/2002/07/owl#equivalentClass" : [ { + "@id" : "_:genid58" + } ], + "http://www.w3.org/2004/02/skos/core#definition" : [ { + "@language" : "de", + "@value" : "Wenn der metallische Werkstoff diese Eigenschaft aufweist: die Spannung zu einem bestimmten Zeitpunkt während des Versuchs bei dem eine plastische Verformung ohne Zunahme der Kraft auftritt" + }, { + "@language" : "en", + "@value" : "when the metallic material exhibits a yield phenomenon, stress corresponding to the point reached during the test at which plastic deformation occurs without any increase in the force" + } ], + "https://w3id.org/pmd/co/definitionSource" : [ { + "@language" : "en", + "@value" : "DIN EN ISO 6892-1:2019" + } ] +}, { + "@id" : "https://w3id.org/pmd/tto/relatesToExtension", + "@type" : [ "http://www.w3.org/2002/07/owl#ObjectProperty" ], + "http://www.w3.org/2000/01/rdf-schema#domain" : [ { + "@id" : "https://w3id.org/pmd/tto/ProofStrengthPlasticExtension" + } ], + "http://www.w3.org/2000/01/rdf-schema#isDefinedBy" : [ { + "@id" : "https://w3id.org/pmd/tto" + } ], + "http://www.w3.org/2000/01/rdf-schema#label" : [ { + "@language" : "en", + "@value" : "relates to extension" + } ], + "http://www.w3.org/2000/01/rdf-schema#range" : [ { + "@id" : "https://w3id.org/pmd/co/PercentageExtension" + } ], + "http://www.w3.org/2000/01/rdf-schema#subPropertyOf" : [ { + "@id" : "https://w3id.org/pmd/co/relatesTo" + } ] +} ] \ No newline at end of file diff --git a/tto/ontology.nt b/tto/ontology.nt new file mode 100644 index 0000000..fcfd257 --- /dev/null +++ b/tto/ontology.nt @@ -0,0 +1,789 @@ + . + . + . + . + . + . + . + . + "Markus Schilling, Bernd Bayerlein, Henk Birkholz, Philipp von Hartrott, Jörg Waitelonis. (July 14th, 2023) TTO: Tensile Test Ontology. Version 2.0.0, https://w3id.org/pmd/tto"@en . + "2023-07-14"@en . + "Tensile Test Ontology (TTO)"@en . + "This is the stable version of the PMD ontology of the tensile test (Tensile Test Ontology - TTO) as developed on the basis of the standard ISO 6892-1: Metallic materials - Tensile Testing - Part 1: Method of test at room temperature.\n\nThe TTO was developed in the frame of the PMD project. The TTO provides conceptualizations valid for the description of tensile tests and corresponding data in accordance with the respective standard. By using TTO for storing tensile test data, all data will be well structured and based on a common vocabulary agreed on by an expert group (generation of FAIR data) which will lead to enhanced data interoperability. This comprises several data categories such as primary data, secondary data and metadata. Data will be human and machine readable. The usage of TTO facilitates data retrieval and downstream usage. Due to a close connection to the PMD core ontology (PMDco), the interoperability of tensile test data is enhanced and querying in combination with other aspects and data within the broad field of material science and engineering (MSE) is facilitated.\n\nThe TTO class structure forms a comprehensible and semantic layer for unified storage of data generated in a tensile test including the possibility to record data from analysis, re-evaluation and re-use. Furthermore, extensive metadata allows to assess data quality and reproduce experiments. Following the open world assumption, object properties are deliberately low restrictive and sparse.\n\nTTO of PMD at GitHub: https://github.com/materialdigital/application-ontologies/tree/main/tensile_test_ontology_TTO"@en . + "2.0.1" . +# +# +# ################################################################# +# # +# # Annotation properties +# # +# ################################################################# +# +# +# https://w3id.org/pmd/co/definitionSource + . +# +# https://w3id.org/pmd/co/symbol + . +# +# +# +# ################################################################# +# # +# # Object Properties +# # +# ################################################################# +# +# +# https://w3id.org/pmd/co/participant + . +# +# https://w3id.org/pmd/co/relatesTo + . +# +# https://w3id.org/pmd/tto/relatesToExtension + . + . + . + . + . + "relates to extension"@en . +# +# +# +# ################################################################# +# # +# # Classes +# # +# ################################################################# +# +# +# https://w3id.org/pmd/co/Diameter + . +# +# https://w3id.org/pmd/co/Extension + . +# +# https://w3id.org/pmd/co/Extensometer + . +# +# https://w3id.org/pmd/co/Force + . +# +# https://w3id.org/pmd/co/Length + . +# +# https://w3id.org/pmd/co/LoadCell + . +# +# https://w3id.org/pmd/co/MechanicalTestingProcess + . +# +# https://w3id.org/pmd/co/PercentageExtension + . + _:genid1 . +_:genid1 . +_:genid1 . +_:genid1 . +# +# https://w3id.org/pmd/co/ProcessingNode + . +# +# https://w3id.org/pmd/co/Stress + . +# +# https://w3id.org/pmd/co/TestPiece + . +# +# https://w3id.org/pmd/co/TestPieceInfo + . +# +# https://w3id.org/pmd/co/TestingMachine + . +# +# https://w3id.org/pmd/co/TestingRate + . +# +# https://w3id.org/pmd/co/Thickness + . +# +# https://w3id.org/pmd/co/ValueObject + . +# +# https://w3id.org/pmd/co/Width + . +# +# https://w3id.org/pmd/tto/ChangeOfTransverseDimension + . + . + . + "Change Of Transverse Dimension"@en . + "Änderung der transversalen Dimension"@de . + "Dieses Wertobjekt beschreibt eine Variation der Abmessungen eines Prüfkörpers in Bezug auf seine Querachse, die sich auf seine Querschnittsfläche auswirkt und möglicherweise während eines Zugversuchs auftritt. Das Verhältnis der wahren plastischen Breitendehnung und der wahren plastischen Dickendehnung in einem in uniaxialem Zug beanspruchten Prüfkörper (vertikale Anisotropie) kann anhand dieser Information berechnet werden."@de . + "This value object describes a variation in the dimension of a test piece referring to its transversal axis affecting its cross-sectional area that may potentially occur during a tensile test. The ratio of the true plastic strain in width and the true plastic strain in thickness in a test piece loaded in uniaxial tension (vertical anisotropy) may be calculated using this information."@en . + "DIN EN ISO 10113:2021-06" . +# +# https://w3id.org/pmd/tto/CrossheadSeparation + . + . + . + "Crosshead Separation"@en . + "Querhaupttrennung"@de . + "Diese Eigenschaft beschreibt die Verschiebung der Traverse einer Zugprüfmaschine."@de . + "Dimensional analysis: L\nUnit (e.g. SI): mm"@en . + "This property describes the displacement of the crossheads of a tensile testing machine."@en . + "DIN EN ISO 6892-1:2019"@en . +# +# https://w3id.org/pmd/tto/CrossheadSeparationRate + . + . + . + "Crosshead Separation Rate"@en . + "Traversengeschwindigkeit"@de . + "Symbol: v_c"@en . + "Traversenweg je Zeiteinheit"@de . + "displacement of the crossheads per time"@en . + "DIN EN ISO 6892-1:2019"@en . +# +# https://w3id.org/pmd/tto/DiameterAfterFracture + . + . + . + "Diameter After Fracture"@en . + "End-Probendurchmesser"@de . + "Die Länge einer geraden Linie durch den Mittelpunkt eines Objekts (Zugprüfstücks), gemessen nach einem Bruch, der während einer Prüfung aufgetreten ist."@de . + "The length of a straight line through the center of an object (tensile test piece) as measured after a fracture occured during a test."@en . +# +# https://w3id.org/pmd/tto/Elongation + . + _:genid2 . +_:genid2 . +_:genid2 . +_:genid2 . + . + . + "Elongation"@en . + "Verlängerung"@de . + "Zunahme der Anfangsmesslänge zu einem beliebigen Zeitpunkt während des Versuchs"@de . + "increase in the original gauge length at any moment during the test"@en . + "DIN EN ISO 6892-1:2019"@en . +# +# https://w3id.org/pmd/tto/EstimatedStrainRateOverTheParallelLength + . + . + . + "Abgeschätzte Dehngeschwindigkeit Über Die Parallele Länge"@de . + "Estimated Strain Rate Over The Parallel Length"@en . + "Symbol: e^._L_c"@en . + "Zunahme der Dehnung über die parallele Länge der Probe je Zeiteinheit, basierend auf der Traversengeschwindigkeit und der parallelen Länge der Probe"@de . + "value of the increase of strain over the parallel length of the test piece per time based on the crosshead separation rate and the parallel length of the test piece"@en . + "DIN EN ISO 6892-1:2019"@en . +# +# https://w3id.org/pmd/tto/ExtensometerGaugeLength + . + . + . + "Extensometer Gauge Length"@en . + "Extensometer-Messlänge"@de . + "Anfangsmesslänge des Dehnungsaufnehmers (Extensometer), die zum Messen der Verlängerung benutzt wird\n\nAnmerkung: Für die Bestimmung mehrerer Eigenschaften, die (teilweise oder vollständig) von der Verlängerung abhängig sind, z. B. R_p, A_e oder A_g, ist die Verwendung eines Extensometers zwingend erforderlich."@de . + "Symbol: L_e"@en . + "initial gauge length of the extensometer used for measurement of extension\n\nNote: For the determination of several properties which are based (partly or complete) on extension, e. g. R_p, A_e or A_g, the use of an extensometer is mandatory."@en . + "DIN EN ISO 6892-1:2019"@en . +# +# https://w3id.org/pmd/tto/FinalGaugeLengthAfterFracture + . + . + . + "Final Gauge Length After Fracture"@en . + "Messlänge nach dem Bruch"@de . + "Symbol: L_u"@en . + "Länge zwischen den Marken zur Kennzeichnung der Messlänge auf der Probe, die nach dem Bruch bei Raumtemperatur gemessen wird, nachdem die beiden Probenbruchstücke sorgfältig so zusammengefügt wurden, dass ihre Achsen in einer Geraden liegen"@de . + "length between gauge length marks on the test piece measured after rupture, at room temperature, the two pieces having been carefully fitted back together so that their axes lie in a straight line"@en . + "DIN EN ISO 6892-1:2019"@en . +# +# https://w3id.org/pmd/tto/GaugeLength + . + . + . + "Gauge Length"@en . + "Messlänge"@de . + "Länge des parallelen Teils der Probe, an dem zu einem beliebigen Zeitpunkt während des Versuchs die Verlängerung gemessen wird"@de . + "Symbol: L"@en . + "length of the parallel portion of the test piece on which elongation is measured at any moment during the test"@en . + "DIN EN ISO 6892-1:2019"@en . +# +# https://w3id.org/pmd/tto/GeometryShape + . + . + . + "Geometrische Form"@de . + "Geometry Shape"@en . + "Diese Eigenschaft beschreibt die geometrischen Abmessungen und das Erscheinungsbild (Form und Abmaße) einer Probe, eines Prüfkörpers oder eines Prüfstücks, wie sie üblicherweise durch eine entsprechende Norm definiert sind. Dementsprechend ist der angegebene Formwert in Übereinstimmung mit der definierenden Norm anzugeben, z. B. \"Zugprüfstück Form 1 gemäß Anhang B\"."@de . + "This property describes the geometric dimensions and appearance (shape and dimensions) of a sample, specimen, or test piece as usually defined by a corresponding standard. Accordingly, the shape value given is in accordance with the defining standard, e.g., ‘tensile test piece shape 1 in accordance with annex B’."@en . + "DIN EN ISO 6892-1:2019"@en . +# +# https://w3id.org/pmd/tto/LowerYieldStrength + . + _:genid3 . +_:genid3 . +_:genid3 . +_:genid3 . + . + . + "Lower Yield Strength"@en . + "untere Streckgrenze"@de . + "Symbol: R_eL"@en . + "kleinste Spannung während des plastischen Fließens, wobei Einschwingerscheinungen nicht berücksichtigt werden"@de . + "lowest value of stress during plastic yielding, ignoring any initial transient effects"@en . + "DIN EN ISO 6892-1:2019"@en . +# +# https://w3id.org/pmd/tto/MaximumForce + . + . + . + "Höchstkraft"@de . + "Maximum Force"@en . + "Bei Werkstoffen, die kein diskontinuierliches Fließen zeigen: größte Kraft, der die Probe während des Versuchs standhält\n\nBei Werkstoffen, die ein diskontinuierliches Fließen zeigen: größte Kraft, der die Probe während des Versuchs nach dem Beginn der Verfestigung standhält\n\nAnmerkung: Für Werkstoffe, die ein diskontinuierliches Fließen zeigen, aber keine Verfestigung erzielt werden kann, ist die Höchstkraft nicht definiert\n."@de . + "For materials displaying no discontinuous yielding: highest force that the test piece withstands during the test\n\nFor materials displaying discontinuous yielding: highest force that the test piece withstands during the test after the beginning of work-hardening\n\nNote: For materials which display discontinuous yielding, but where no work-hardening can be established, the maximum force is not defined."@en . + "DIN EN ISO 6892-1:2019"@en . +# +# https://w3id.org/pmd/tto/MinimumCrossSectionalAreaAfterFracture + . + _:genid4 . +_:genid4 _:genid7 . +_:genid7 _:genid5 . +_:genid5 . +_:genid5 _:genid6 . +_:genid6 . +_:genid6 . +_:genid6 . +_:genid5 . +_:genid7 _:genid8 . +_:genid8 . +_:genid8 _:genid11 . +_:genid11 _:genid9 . +_:genid9 . +_:genid9 _:genid10 . +_:genid10 . +_:genid10 . +_:genid10 . +_:genid9 . +_:genid11 _:genid12 . +_:genid12 . +_:genid12 . +_:genid12 . +_:genid11 . +_:genid7 . +_:genid4 . + . + "Symbol: S_u" . + . + "Kleinster Querschnitt nach dem Bruch"@de . + "Minimum cross-sectional area after fracture"@en . + "Dieses Konzept beschreibt die kleinste Querschnittsfläche des Zugprüfkörers, die nach dem Bruch infolge der aufgebrachten Zugkraft erhalten wird.\n\nAnmerkung: Sie wird in der Regel senkrecht zur Richtung der aufgebrachten Kraft gemessen und dient zur Berechnung der technischen Spannung während der Prüfung.\n\nAnmerkung: Es wird empfohlen, den Anfangsquerschnitt innerhalb der parallelen Länge mit einer Genauigkeit von ±2 % zu messen. Bei runden Prüfkörpern mit kleinem Durchmesser oder Prüfkörpern mit anderen Querschnittsgeometrien ist es jedoch möglicherweise nicht möglich, den Anfangsquerschnitt innerhalb der parallelen Länge mit einer Genauigkeit von ±2 % zu messen."@de . + "This concept describes the smallest cross-sectional area of the tensile test piece observed after it has fractured under the applied tensile force.\n\nNote: It is typically measured perpendicular to the direction of the applied force and is used to calculate engineering stress during the test.\n\nNote: It is recommended to measure the original cross-sectional area of the parallel length to an accuracy of ±2 %. However, measuring the original cross-sectional area of the parallel length with an accuracy of ±2 % on small diameter round test pieces, or test pieces with other cross-sectional geometries, may not be possible."@en . + "DIN EN ISO 6892-1:2019" . +# +# https://w3id.org/pmd/tto/OriginalCrossSectionalArea + . + _:genid13 . +_:genid13 _:genid16 . +_:genid16 _:genid14 . +_:genid14 . +_:genid14 _:genid15 . +_:genid15 . +_:genid15 . +_:genid15 . +_:genid14 . +_:genid16 _:genid17 . +_:genid17 . +_:genid17 _:genid20 . +_:genid20 _:genid18 . +_:genid18 . +_:genid18 _:genid19 . +_:genid19 . +_:genid19 . +_:genid19 . +_:genid18 . +_:genid20 _:genid21 . +_:genid21 . +_:genid21 . +_:genid21 . +_:genid20 . +_:genid16 . +_:genid13 . + . + "Symbol: S_o" . + . + "Anfangsquerschnitt innerhalb der parallelen Länge"@de . + "Original cross-sectional area of the parallel length"@en . + "Dieses Konzept beschreibt die initiale Querschnittsfläche des Zugprüfkörpers entlang seiner parallelen Länge, bevor eine Verformung auftritt."@de . + "This concept describes the initial area of the tensile test piece before any deformation occurs."@en . + "DIN EN ISO 6892-1:2019" . +# +# https://w3id.org/pmd/tto/OriginalDiameter + . + . + . + "Anfangs-Probendurchmesser"@de . + "Original Diameter"@en . + "Die Länge einer geraden Linie durch den Mittelpunkt eines Objekts (Zugprüfkörpers), die vor einer Prüfung gemessen wird."@de . + "The length of a straight line through the center of an object (tensile test piece) as measured prior to a tensile test."@en . + "DIN EN ISO 6892-1:2019"@en . +# +# https://w3id.org/pmd/tto/OriginalGaugeLength + . + . + . + "Anfangsmesslänge"@de . + "Original Gauge Length"@en . + "Länge zwischen den Marken zur Kennzeichnung der Messlänge auf der Probe, die vor dem Versuch bei Raumtemperatur gemessen wird"@de . + "Symbol: L_o"@en . + "length between gauge length marks on the test piece measured at room temperature before the test"@en . + "DIN EN ISO 6892-1:2019"@en . +# +# https://w3id.org/pmd/tto/OriginalThickness + . + . + . + "Anfangs-Dicke"@de . + "Original Thickness"@en . + "Diese Entität beschreibt die gemessene Dimension in einer Richtung eines Prüfstücks, wie sie vor der Prüfung gemessen wurde."@de . + "This entity describes the measured dimension in one direction of a test piece, as measured before the test."@en . +# +# https://w3id.org/pmd/tto/OriginalWidth + . + . + . + "Anfangs-Breite"@de . + "Original Width"@en . + "Diese Entität beschreibt eine horizontale Messung eines Objekts (Prüfkörpers) im rechten Winkel zur Länge des Objekts (Prüfkörpers), wie sie vor einer Prüfung gemessen wird."@de . + "This entity describes a horizontal measurement of an object (test piece) taken at right angles to the length of the object (test piece), as measured before a test."@en . +# +# https://w3id.org/pmd/tto/ParallelLength + . + . + . + "Parallel Length"@en . + "Parallele Länge"@de . + "Länge des parallelen reduzierten Querschnitts der Probe\n\nAnmerkung: Bei unbearbeiteten Proben tritt an die Stelle der parallelen Länge der Abstand zwischen den Einspannungen."@de . + "Symbol: L_c"@en . + "length of the parallel reduced section of the test piece\n\nNote: The concept of parallel length is replaced by the concept of distance between grips for unmachined test pieces."@en . + "DIN EN ISO 6892-1:2019"@en . +# +# https://w3id.org/pmd/tto/PercentageElongation + . + _:genid22 . +_:genid22 . +_:genid22 . +_:genid22 . + . + . + "Dehnung"@de . + "Percentage Elongation"@en . + "Verlängerung, angegeben in Prozent, bezogen auf die Anfangsmesslänge"@de . + "elongation expressed as a percentage of the original gauge length"@en . + "DIN EN ISO 6892-1:2019"@en . +# +# https://w3id.org/pmd/tto/PercentageElongationAfterFracture + . + _:genid23 . +_:genid23 . +_:genid23 . +_:genid23 . + . + . + "Bruchdehnung"@de . + "Percentage Elongation After Fracture"@en . + "Symbol: A"@en . + "bleibende Verlängerung der Messlänge nach dem Bruch (L_u − L_o), angegeben in Prozent, bezogen auf die Anfangsmesslänge"@de . + "permanent elongation of the gauge length after fracture (L_u − L_o), expressed as a percentage of the original gauge length"@en . + "DIN EN ISO 6892-1:2019"@en . +# +# https://w3id.org/pmd/tto/PercentagePermanentElongation + . + _:genid24 . +_:genid24 . +_:genid24 . +_:genid24 . + . + . + "Bleibende Dehnung"@de . + "Percentage Permanent Elongation"@en . + "Zunahme der Anfangsmesslänge einer Probe nach Entfernen einer festgelegten Zugspannung, angegeben in Prozent, bezogen auf die Anfangsmesslänge"@de . + "increase in the original gauge length of a test piece after removal of a specified stress, expressed as a percentage of the original gauge length"@en . + "DIN EN ISO 6892-1:2019"@en . +# +# https://w3id.org/pmd/tto/PercentagePermanentExtension + . + _:genid25 . +_:genid25 . +_:genid25 . +_:genid25 . + . + . + "Bleibende Extensometer-Dehnung"@de . + "Percentage Permanent Extension"@en . + "Vergrößerung der Extensometer-Messlänge nach Entfernen einer festgelegten, auf die Probe aufgebrachten Zugspannung, angegeben in Prozent, bezogen auf die Extensometer-Messlänge"@de . + "increase in the extensometer gauge length, after removal of a specified stress from the test piece, expressed as a percentage of the extensometer gauge length"@en . + "DIN EN ISO 6892-1:2019"@en . +# +# https://w3id.org/pmd/tto/PercentagePlasticExtensionAtMaximumForce + . + _:genid26 . +_:genid26 . +_:genid26 _:genid29 . +_:genid29 _:genid27 . +_:genid27 . +_:genid27 _:genid28 . +_:genid28 . +_:genid28 . +_:genid28 . +_:genid27 . +_:genid29 _:genid30 . +_:genid30 . +_:genid30 . +_:genid30 . +_:genid29 . + . + . + "Percentage Plastic Extension At Maximum Force"@en . + "Plastische Extensometer-Dehnung bei Höchstkraft"@de . + "Symbol: A_g"@en . + "plastic extension at maximum force, expressed as a percentage of the extensometer gauge length"@en . + "plastische Verlängerung der Extensometer-Messlänge bei Höchstkraft, angegeben in Prozent, bezogen auf die Extensometer-Messlänge"@de . + "DIN EN ISO 6892-1:2019"@en . +# +# https://w3id.org/pmd/tto/PercentageReductionOfArea + . + _:genid31 . +_:genid31 . +_:genid31 _:genid34 . +_:genid34 _:genid32 . +_:genid32 . +_:genid32 _:genid33 . +_:genid33 . +_:genid33 . +_:genid33 . +_:genid32 . +_:genid34 _:genid35 . +_:genid35 . +_:genid35 . +_:genid35 . +_:genid34 . + . + . + "Brucheinschnürung"@de . + "Percentage Reduction Of Area"@en . + "größte während des Versuchs aufgetretene Änderung des Querschnitts (S_o − S_u), angegeben in Prozent, bezogen auf den Anfangsquerschnitt S_o"@de . + "maximum change in cross-sectional area which has occurred during the test (S_o − S_u), expressed as a percentage of the original cross-sectional area, S_o"@en . + "DIN EN ISO 6892-1:2019"@en . + "Z" . +# +# https://w3id.org/pmd/tto/PercentageTotalExtensionAtFracture + . + _:genid36 . +_:genid36 . +_:genid36 . +_:genid36 . + . + . + "Gesamte Extensometer-Dehnung beim Bruch"@de . + "Percentage Total Extension At Fracture"@en . + "Symbol: A_t"@en . + "gesamte Verlängerung (elastische plus plastische Verlängerung) der Extensometer-Messlänge beim Bruch, angegeben in Prozent, bezogen auf die Extensometer-Messlänge"@de . + "total extension (elastic extension plus plastic extension) at the moment of fracture, expressed as a percentage of the extensometer gauge length"@en . + "DIN EN ISO 6892-1:2019"@en . +# +# https://w3id.org/pmd/tto/PercentageTotalExtensionAtMaximumForce + . + _:genid37 . +_:genid37 . +_:genid37 _:genid40 . +_:genid40 _:genid38 . +_:genid38 . +_:genid38 _:genid39 . +_:genid39 . +_:genid39 . +_:genid39 . +_:genid38 . +_:genid40 _:genid41 . +_:genid41 . +_:genid41 . +_:genid41 . +_:genid40 . + . + . + "Gesamte Extensometer-Dehnung bei Höchstkraft"@de . + "Percentage Total Extension At Maximum Force"@en . + "Symbol: A_gt"@en . + "gesamte Verlängerung (elastische plus plastische Verlängerung) der Extensometer-Messlänge bei Höchstkraft, angegeben in Prozent, bezogen auf die Extensometer-Messlänge"@de . + "total extension (elastic extension plus plastic extension) at maximum force, expressed as a percentage of the extensometer gauge length"@en . + "DIN EN ISO 6892-1:2019"@en . +# +# https://w3id.org/pmd/tto/PercentageYieldPointExtension + . + . + . + "Percentage Yield Point Extension"@en . + "Streckgrenzen-Extensometer-Dehnung"@de . + "Bei Werkstoffen, die ein diskontinuierliches Fließen zeigen: Verlängerung der Extensometer-Messlänge zwischen dem Beginn örtlichen Fließens und dem Einsetzen gleichmäßiger Verfestigung, angegeben in Prozent, bezogen auf die Extensometer-Messlänge"@de . + "For discontinuous yielding materials: extension between the start of yielding and the start of uniform work-hardening, expressed as a percentage of the extensometer gauge length"@en . + "Symbol: A_e"@en . + "DIN EN ISO 6892-1:2019"@en . +# +# https://w3id.org/pmd/tto/ProofStrength + . + . + . + "Dehngrenze"@de . + "Proof Strength"@en . + "Spannung, bei der ein bestimmter Dehnungswert gleich einem bestimmten Prozentsatz der Messlänge des Dehnungsmessers ist"@de . + "stress at which the a specific extension value is equal to a specified percentage of the extensometer gauge length"@en . +# +# https://w3id.org/pmd/tto/ProofStrengthPlasticExtension + . + _:genid42 . +_:genid42 _:genid43 . +_:genid43 . +_:genid43 . +_:genid43 . +_:genid42 . +_:genid42 . + . + . + "Dehngrenze bei plastischer Extensometer-Dehnung"@de . + "Proof Strength Plastic Extension"@en . + "Spannung, bei der die plastische Extensometer-Dehnung einem vorgegebenen Prozentanteil der Extensometer-Messlänge entspricht\n\nAnmerkung: Der Index wird durch den Zahlenwert ergänzt, der den vorgegebenen Zahlenwert der plastischen Extensometer-Dehnung in Prozent angibt, z. B. R_p_0,2."@de . + "Symbol: R_p"@en . + "stress at which the plastic extension is equal to a specified percentage of the extensometer gauge length\n\nNote: A suffix is added to the subscript to indicate the prescribed percentage, e.g. R_p_0.2.\n\nSource: ISO 6892-1:2019"@en . + "DIN EN ISO 6892-1:2019"@en . +# +# https://w3id.org/pmd/tto/ProofStrengthTotalExtension + . + _:genid44 . +_:genid44 . +_:genid44 . +_:genid44 . + . + . + "Dehngrenze bei gesamter Extensometer-Dehnung"@de . + "Proof Strength Total Extension"@en . + "Spannung, bei der die gesamte Extensometer-Dehnung (elastische und plastische Extensometer-Dehnung) einem vorgegebenen Prozentanteil der Extensometer-Messlänge entspricht\n\nAnmerkung: Der Index wird durch den Zahlenwert ergänzt, der den vorgegebenen Zahlenwert der gesamten Extensometer-Dehnung in Prozent angibt, z. B. R_t_0,5."@de . + "Symbol: R_t"@en . + "stress at which total extension (elastic extension plus plastic extension) is equal to a specified percentage of the extensometer gauge length\n\nNote: A suffix is added to the subscript to indicate the prescribed percentage, e.g. R_t_0.5."@en . + "DIN EN ISO 6892-1:2019"@en . +# +# https://w3id.org/pmd/tto/Rp01 + . + _:genid45 . +_:genid45 _:genid46 . +_:genid46 "0.1"^^ . +_:genid46 . +_:genid46 . +_:genid45 . +_:genid45 . + . + . + "Dehngrenze bei plastischer Extensometer-Dehnung Rp01"@de . + "Proof Strength Plastic Extension Rp01"@en . + "Spannung bei einer plastischen Extensometer-Dehnung, die 0,1 Prozent der Extensometer-Messlänge entspricht"@de . + "Symbol: R_p_0.1"@en . + "stress at which the plastic extension is equal to 0.1 percent of the extensometer gauge length"@en . + "DIN EN ISO 6892-1:2019"@en . +# +# https://w3id.org/pmd/tto/Rp02 + . + _:genid47 . +_:genid47 _:genid48 . +_:genid48 "0.2"^^ . +_:genid48 . +_:genid48 . +_:genid47 . +_:genid47 . + . + . + "Dehngrenze bei plastischer Extensometer-Dehnung Rp02"@de . + "Proof Strength Plastic Extension Rp02"@en . + "Spannung bei einer plastischen Extensometer-Dehnung, die 0,2 Prozent der Extensometer-Messlänge entspricht"@de . + "Symbol: R_p_0.2"@en . + "stress at which the plastic extension is equal to 0.2 percent of the extensometer gauge length"@en . + "DIN EN ISO 6892-1:2019"@en . +# +# https://w3id.org/pmd/tto/SlopeOfTheElasticPart + . + . + . + "Slope Of The Elastic Part"@en . + "Steigung des elastischen Bereichs"@de . + "Diese Eigenschaft beschreibt den Wert der Steigung des ersten linear ansteigenden Teils (\"elastischer Teil\") in der bei einem Zugversuch erhaltenen Spannungs-Dehnungs-Kurve. Im elastischen Teil der Spannungs-Dehnungs-Kurve muss der Wert der Steigung nicht unbedingt dem Elastizitätsmodul entsprechen. Dieser Wert kann mit dem Wert des Elastizitätsmoduls (nur) sehr gut übereinstimmen, wenn optimale Bedingungen herrschten."@de . + "This property describes the value of the slope of the first linear increasing part (‘elastic part’) in the stress-percentage extension curve obtained during a tensile test. In the elastic part of the stress‐percentage extension curve, the value of the slope may not necessarily represent the modulus of elasticity. This value may closely agree with the value of the modulus of elasticity if optimal conditions were used."@en . + "DIN EN ISO 6892-1:2019"@en . +# +# https://w3id.org/pmd/tto/StrainRate + . + . + . + "Dehngeschwindigkeit"@de . + "Strain Rate"@en . + "Symbol: e^._L_e"@en . + "Zunahme der mit einem Extensometer in der Extensometer-Messlänge gemessenen Dehnung je Zeiteinheit"@de . + "increase of strain, measured with an extensometer, in extensometer gauge length, per time"@en . + "DIN EN ISO 6892-1:2019"@en . +# +# https://w3id.org/pmd/tto/StressRate + . + . + . + "Spannungsgeschwindigkeit"@de . + "Stress Rate"@en . + "Symbol: R"@en . + "Zunahme der Spannung je Zeiteinheit\n\nAnmerkung: Die Spannungsgeschwindigkeit wird nur im elastischen Bereich des Versuchs verwendet."@de . + "increase of stress per time\n\nNote: Stress rate is only used in the elastic part of the test."@en . + "DIN EN ISO 6892-1:2019"@en . +# +# https://w3id.org/pmd/tto/TensileStrength + . + _:genid49 . +_:genid49 . +_:genid49 _:genid52 . +_:genid52 _:genid50 . +_:genid50 . +_:genid50 _:genid51 . +_:genid51 . +_:genid51 . +_:genid51 . +_:genid50 . +_:genid52 _:genid53 . +_:genid53 . +_:genid53 . +_:genid53 . +_:genid52 . + . + . + "Tensile Strength"@en . + "Zugfestigkeit"@de . + "Spannung, die der Höchstkraft entspricht"@de . + "Symbol: R_m"@en . + "stress corresponding to the maximum force"@en . + "DIN EN ISO 6892-1:2019"@en . +# +# https://w3id.org/pmd/tto/TensileTest + . + _:genid54 . +_:genid54 . +_:genid54 "1"^^ . +_:genid54 . +_:genid54 . + _:genid55 . +_:genid55 . +_:genid55 "1"^^ . +_:genid55 . +_:genid55 . + . + . + "Tensile Test"@en . + "Zugversuch"@de . + "Tensile tests (tension tests) on materials provide information on their strength, ductility as well as other characteristic values under uniaxial tensile stress.\n\nThe tensile test involves straining a test piece by tensile force, generally to fracture, for the determination of one or more mechanical properties specified by the semantically related and defined terms."@en . + "Zugversuche (Zugprüfungen) an Werkstoffen geben Auskunft über deren Festigkeit, Duktilität sowie weitere Kennwerte unter einachsiger Zugbeanspruchung.\n\nBeim Zugversuch wird ein Prüfkörper durch Zugkraft belastet, im Allgemeinen bis zum Bruch, um eine oder mehrere mechanische Eigenschaften zu bestimmen, die durch die semantisch verknüpften und definierten Begriffe festgelegt sind."@de . + "DIN EN ISO 6892-1:2019"@en . +# +# https://w3id.org/pmd/tto/TensileTestNode + . + . + . + "Tensile Test Node"@en . + "Zugversuchsprozessknoten"@de . + "Diese Entität beschreibt einen Workflow-Bestandteil, der Werkzeuge und Geräte beinhaltet, die für die Durchführung eines Zugversuchs verwendet werden, z. B. eine Zugprüfmaschine."@de . + "This entity describes a workflow constituent that hosts tools and equipment that is used for the performance of a tensile test, e.g., a tensile test machine."@en . +# +# https://w3id.org/pmd/tto/TensileTestingMachine + . + . + . + . + "Tensile Testing Machine"@en . + "Zugprüfmaschine"@de . + "Maschine zur Durchführung eines Zugversuches; die Regelung und Überwachung des Versuches, die Messungen und die Datenverarbeitung werden üblicherweise mithilfe eines Computers durchgeführt."@de . + "machine to conduct a tensile test; the control and monitoring of the test, the measurements, and the data processing are usually undertaken by computer"@en . + "DIN EN ISO 6892-1:2019"@en . +# +# https://w3id.org/pmd/tto/ThicknessAfterFracture + . + . + . + "End-Dicke"@de . + "Thickness After Fracture"@en . + "Diese Entität beschreibt die gemessene Dimension in einer Richtung eines Prüfstücks, wie sie vor der Prüfung gemessen wurde."@de . + "This entity describes the measured dimension in one direction of a test piece, as measured after the test."@en . +# +# https://w3id.org/pmd/tto/TransitionPoint + . + . + . + "Transition Point"@en . + "Umschaltpunkt"@de . + "Diese Entität beschreibt einen einzelnen Punkt, an dem ein Übergang von einer Bedingung oder einem Zustand in einen anderen erfolgt, z. B. der Punkt, an dem verschiedene Phasen von Materie im Gleichgewicht miteinander existieren können (auch Inversionspunkt genannt) oder wenn Prozessparameter geändert werden, die zu einem Übergang des Prozesses während seiner Ausführung führen."@de . + "This entity describes a single point at which a transition from one condition or state to another occurs, e.g. the point at which different phases of matter are capable of existing together in equilibrium (also called inversion point) or if process parameters are changed that will lead to a transition of the process during its execution."@en . +# +# https://w3id.org/pmd/tto/TransitionPointTestingRate + . + _:genid56 . +_:genid56 . +_:genid56 . +_:genid56 . + . + . + "Transition Point Testing Rate"@en . + "Umschaltpunkt der Prüfgeschwindigkeit"@de . + "Diese Entität beschreibt den Umschaltpunkt der Prüfgeschwindigkeit während eines Analyse- / Testprozesses, z.B. den Punkt bezogen auf die Dehnung oder Spannung, an welchem die Prüfgeschwindigkeit während eines Zugversuchs geändert wird. Typischerweise ist dieser Punkt mit einer Abnahme des Extensometers (Dehnungsaufnehmers) vom Prüfkörper während eines dehnungsgeregelten Zugversuchs verbunden."@de . + "This entity describes the the transition point of the testing rate during an analysis / test process, e.g. the point referring to the strain or the stress at which the testing rate is changed during a tensile test. Typically, this transition point is associated with a removal of the extensometer from the test piece during a strain-controlled tensile test."@en . +# +# https://w3id.org/pmd/tto/TypeGaugeLengthMarks + . + . + . + "Typ Der Messlängenmarkierungen"@de . + "Type Gauge Length Marks"@en . + "Diese Eigenschaft wird verwendet, um die sichtbaren Markierungen zu beschreiben, die in der Regel während eines Zugversuchs zur Messung der Dehnung an den Prüfkörpern angebracht werden."@de . + "This property is used to describe the visible markers usually attached to test pieces during a tensile test for elongation / extension measurements."@en . +# +# https://w3id.org/pmd/tto/UpperYieldStrength + . + _:genid57 . +_:genid57 . +_:genid57 . +_:genid57 . + . + . + "Obere Streckgrenze"@de . + "Upper Yield Strength"@en . + "Symbol: R_eH"@en . + "höchste Spannung, bevor der erste Kraftabfall auftritt"@de . + "maximum value of stress prior to the first decrease in force"@en . + "DIN EN ISO 6892-1:2019"@en . +# +# https://w3id.org/pmd/tto/WidthAfterFracture + . + . + . + "End-Breite"@de . + "Width After Fracture"@en . + "Diese Entität beschreibt eine horizontale Messung eines Objekts (Prüfkörpers) im rechten Winkel zur Länge des Objekts (Prüfkörpers), wie sie nach einer Prüfung gemessen wird."@de . + "This entity describes a horizontal measurement of an object (test piece) taken at right angles to the length of the object (test piece), as measured after a test."@en . +# +# https://w3id.org/pmd/tto/YieldStrength + . + _:genid58 . +_:genid58 . +_:genid58 . +_:genid58 . + . + . + "Streckgrenze"@de . + "Yield Strength"@en . + "Wenn der metallische Werkstoff diese Eigenschaft aufweist: die Spannung zu einem bestimmten Zeitpunkt während des Versuchs bei dem eine plastische Verformung ohne Zunahme der Kraft auftritt"@de . + "when the metallic material exhibits a yield phenomenon, stress corresponding to the point reached during the test at which plastic deformation occurs without any increase in the force"@en . + "DIN EN ISO 6892-1:2019"@en . +# +# Generated by the OWL API (version 5.1.18) https://github.com/owlcs/owlapi/ diff --git a/tto/ontology.rdf b/tto/ontology.rdf new file mode 100644 index 0000000..24a1729 --- /dev/null +++ b/tto/ontology.rdf @@ -0,0 +1,1223 @@ + + + + + + + + + + + Markus Schilling, Bernd Bayerlein, Henk Birkholz, Philipp von Hartrott, Jörg Waitelonis. (July 14th, 2023) TTO: Tensile Test Ontology. Version 2.0.0, https://w3id.org/pmd/tto + 2023-07-14 + Tensile Test Ontology (TTO) + This is the stable version of the PMD ontology of the tensile test (Tensile Test Ontology - TTO) as developed on the basis of the standard ISO 6892-1: Metallic materials - Tensile Testing - Part 1: Method of test at room temperature. + +The TTO was developed in the frame of the PMD project. The TTO provides conceptualizations valid for the description of tensile tests and corresponding data in accordance with the respective standard. By using TTO for storing tensile test data, all data will be well structured and based on a common vocabulary agreed on by an expert group (generation of FAIR data) which will lead to enhanced data interoperability. This comprises several data categories such as primary data, secondary data and metadata. Data will be human and machine readable. The usage of TTO facilitates data retrieval and downstream usage. Due to a close connection to the PMD core ontology (PMDco), the interoperability of tensile test data is enhanced and querying in combination with other aspects and data within the broad field of material science and engineering (MSE) is facilitated. + +The TTO class structure forms a comprehensible and semantic layer for unified storage of data generated in a tensile test including the possibility to record data from analysis, re-evaluation and re-use. Furthermore, extensive metadata allows to assess data quality and reproduce experiments. Following the open world assumption, object properties are deliberately low restrictive and sparse. + +TTO of PMD at GitHub: https://github.com/materialdigital/application-ontologies/tree/main/tensile_test_ontology_TTO + 2.0.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + relates to extension + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Change Of Transverse Dimension + Änderung der transversalen Dimension + Dieses Wertobjekt beschreibt eine Variation der Abmessungen eines Prüfkörpers in Bezug auf seine Querachse, die sich auf seine Querschnittsfläche auswirkt und möglicherweise während eines Zugversuchs auftritt. Das Verhältnis der wahren plastischen Breitendehnung und der wahren plastischen Dickendehnung in einem in uniaxialem Zug beanspruchten Prüfkörper (vertikale Anisotropie) kann anhand dieser Information berechnet werden. + This value object describes a variation in the dimension of a test piece referring to its transversal axis affecting its cross-sectional area that may potentially occur during a tensile test. The ratio of the true plastic strain in width and the true plastic strain in thickness in a test piece loaded in uniaxial tension (vertical anisotropy) may be calculated using this information. + DIN EN ISO 10113:2021-06 + + + + + + + + + + + Crosshead Separation + Querhaupttrennung + Diese Eigenschaft beschreibt die Verschiebung der Traverse einer Zugprüfmaschine. + Dimensional analysis: L +Unit (e.g. SI): mm + This property describes the displacement of the crossheads of a tensile testing machine. + DIN EN ISO 6892-1:2019 + + + + + + + + + + + Crosshead Separation Rate + Traversengeschwindigkeit + Symbol: v_c + Traversenweg je Zeiteinheit + displacement of the crossheads per time + DIN EN ISO 6892-1:2019 + + + + + + + + + + + Diameter After Fracture + End-Probendurchmesser + Die Länge einer geraden Linie durch den Mittelpunkt eines Objekts (Zugprüfstücks), gemessen nach einem Bruch, der während einer Prüfung aufgetreten ist. + The length of a straight line through the center of an object (tensile test piece) as measured after a fracture occured during a test. + + + + + + + + + + + + + + + + + Elongation + Verlängerung + Zunahme der Anfangsmesslänge zu einem beliebigen Zeitpunkt während des Versuchs + increase in the original gauge length at any moment during the test + DIN EN ISO 6892-1:2019 + + + + + + + + + + + Abgeschätzte Dehngeschwindigkeit Über Die Parallele Länge + Estimated Strain Rate Over The Parallel Length + Symbol: e^._L_c + Zunahme der Dehnung über die parallele Länge der Probe je Zeiteinheit, basierend auf der Traversengeschwindigkeit und der parallelen Länge der Probe + value of the increase of strain over the parallel length of the test piece per time based on the crosshead separation rate and the parallel length of the test piece + DIN EN ISO 6892-1:2019 + + + + + + + + + + + Extensometer Gauge Length + Extensometer-Messlänge + Anfangsmesslänge des Dehnungsaufnehmers (Extensometer), die zum Messen der Verlängerung benutzt wird + +Anmerkung: Für die Bestimmung mehrerer Eigenschaften, die (teilweise oder vollständig) von der Verlängerung abhängig sind, z. B. R_p, A_e oder A_g, ist die Verwendung eines Extensometers zwingend erforderlich. + Symbol: L_e + initial gauge length of the extensometer used for measurement of extension + +Note: For the determination of several properties which are based (partly or complete) on extension, e. g. R_p, A_e or A_g, the use of an extensometer is mandatory. + DIN EN ISO 6892-1:2019 + + + + + + + + + + + Final Gauge Length After Fracture + Messlänge nach dem Bruch + Symbol: L_u + Länge zwischen den Marken zur Kennzeichnung der Messlänge auf der Probe, die nach dem Bruch bei Raumtemperatur gemessen wird, nachdem die beiden Probenbruchstücke sorgfältig so zusammengefügt wurden, dass ihre Achsen in einer Geraden liegen + length between gauge length marks on the test piece measured after rupture, at room temperature, the two pieces having been carefully fitted back together so that their axes lie in a straight line + DIN EN ISO 6892-1:2019 + + + + + + + + + + + Gauge Length + Messlänge + Länge des parallelen Teils der Probe, an dem zu einem beliebigen Zeitpunkt während des Versuchs die Verlängerung gemessen wird + Symbol: L + length of the parallel portion of the test piece on which elongation is measured at any moment during the test + DIN EN ISO 6892-1:2019 + + + + + + + + + + + Geometrische Form + Geometry Shape + Diese Eigenschaft beschreibt die geometrischen Abmessungen und das Erscheinungsbild (Form und Abmaße) einer Probe, eines Prüfkörpers oder eines Prüfstücks, wie sie üblicherweise durch eine entsprechende Norm definiert sind. Dementsprechend ist der angegebene Formwert in Übereinstimmung mit der definierenden Norm anzugeben, z. B. "Zugprüfstück Form 1 gemäß Anhang B". + This property describes the geometric dimensions and appearance (shape and dimensions) of a sample, specimen, or test piece as usually defined by a corresponding standard. Accordingly, the shape value given is in accordance with the defining standard, e.g., ‘tensile test piece shape 1 in accordance with annex B’. + DIN EN ISO 6892-1:2019 + + + + + + + + + + + + + + + + + Lower Yield Strength + untere Streckgrenze + Symbol: R_eL + kleinste Spannung während des plastischen Fließens, wobei Einschwingerscheinungen nicht berücksichtigt werden + lowest value of stress during plastic yielding, ignoring any initial transient effects + DIN EN ISO 6892-1:2019 + + + + + + + + + + + Höchstkraft + Maximum Force + Bei Werkstoffen, die kein diskontinuierliches Fließen zeigen: größte Kraft, der die Probe während des Versuchs standhält + +Bei Werkstoffen, die ein diskontinuierliches Fließen zeigen: größte Kraft, der die Probe während des Versuchs nach dem Beginn der Verfestigung standhält + +Anmerkung: Für Werkstoffe, die ein diskontinuierliches Fließen zeigen, aber keine Verfestigung erzielt werden kann, ist die Höchstkraft nicht definiert +. + For materials displaying no discontinuous yielding: highest force that the test piece withstands during the test + +For materials displaying discontinuous yielding: highest force that the test piece withstands during the test after the beginning of work-hardening + +Note: For materials which display discontinuous yielding, but where no work-hardening can be established, the maximum force is not defined. + DIN EN ISO 6892-1:2019 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Symbol: S_u + + Kleinster Querschnitt nach dem Bruch + Minimum cross-sectional area after fracture + Dieses Konzept beschreibt die kleinste Querschnittsfläche des Zugprüfkörers, die nach dem Bruch infolge der aufgebrachten Zugkraft erhalten wird. + +Anmerkung: Sie wird in der Regel senkrecht zur Richtung der aufgebrachten Kraft gemessen und dient zur Berechnung der technischen Spannung während der Prüfung. + +Anmerkung: Es wird empfohlen, den Anfangsquerschnitt innerhalb der parallelen Länge mit einer Genauigkeit von ±2 % zu messen. Bei runden Prüfkörpern mit kleinem Durchmesser oder Prüfkörpern mit anderen Querschnittsgeometrien ist es jedoch möglicherweise nicht möglich, den Anfangsquerschnitt innerhalb der parallelen Länge mit einer Genauigkeit von ±2 % zu messen. + This concept describes the smallest cross-sectional area of the tensile test piece observed after it has fractured under the applied tensile force. + +Note: It is typically measured perpendicular to the direction of the applied force and is used to calculate engineering stress during the test. + +Note: It is recommended to measure the original cross-sectional area of the parallel length to an accuracy of ±2 %. However, measuring the original cross-sectional area of the parallel length with an accuracy of ±2 % on small diameter round test pieces, or test pieces with other cross-sectional geometries, may not be possible. + DIN EN ISO 6892-1:2019 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Symbol: S_o + + Anfangsquerschnitt innerhalb der parallelen Länge + Original cross-sectional area of the parallel length + Dieses Konzept beschreibt die initiale Querschnittsfläche des Zugprüfkörpers entlang seiner parallelen Länge, bevor eine Verformung auftritt. + This concept describes the initial area of the tensile test piece before any deformation occurs. + DIN EN ISO 6892-1:2019 + + + + + + + + + + + Anfangs-Probendurchmesser + Original Diameter + Die Länge einer geraden Linie durch den Mittelpunkt eines Objekts (Zugprüfkörpers), die vor einer Prüfung gemessen wird. + The length of a straight line through the center of an object (tensile test piece) as measured prior to a tensile test. + DIN EN ISO 6892-1:2019 + + + + + + + + + + + Anfangsmesslänge + Original Gauge Length + Länge zwischen den Marken zur Kennzeichnung der Messlänge auf der Probe, die vor dem Versuch bei Raumtemperatur gemessen wird + Symbol: L_o + length between gauge length marks on the test piece measured at room temperature before the test + DIN EN ISO 6892-1:2019 + + + + + + + + + + + Anfangs-Dicke + Original Thickness + Diese Entität beschreibt die gemessene Dimension in einer Richtung eines Prüfstücks, wie sie vor der Prüfung gemessen wurde. + This entity describes the measured dimension in one direction of a test piece, as measured before the test. + + + + + + + + + + + Anfangs-Breite + Original Width + Diese Entität beschreibt eine horizontale Messung eines Objekts (Prüfkörpers) im rechten Winkel zur Länge des Objekts (Prüfkörpers), wie sie vor einer Prüfung gemessen wird. + This entity describes a horizontal measurement of an object (test piece) taken at right angles to the length of the object (test piece), as measured before a test. + + + + + + + + + + + Parallel Length + Parallele Länge + Länge des parallelen reduzierten Querschnitts der Probe + +Anmerkung: Bei unbearbeiteten Proben tritt an die Stelle der parallelen Länge der Abstand zwischen den Einspannungen. + Symbol: L_c + length of the parallel reduced section of the test piece + +Note: The concept of parallel length is replaced by the concept of distance between grips for unmachined test pieces. + DIN EN ISO 6892-1:2019 + + + + + + + + + + + + + + + + + Dehnung + Percentage Elongation + Verlängerung, angegeben in Prozent, bezogen auf die Anfangsmesslänge + elongation expressed as a percentage of the original gauge length + DIN EN ISO 6892-1:2019 + + + + + + + + + + + + + + + + + Bruchdehnung + Percentage Elongation After Fracture + Symbol: A + bleibende Verlängerung der Messlänge nach dem Bruch (L_u − L_o), angegeben in Prozent, bezogen auf die Anfangsmesslänge + permanent elongation of the gauge length after fracture (L_u − L_o), expressed as a percentage of the original gauge length + DIN EN ISO 6892-1:2019 + + + + + + + + + + + + + + + + + Bleibende Dehnung + Percentage Permanent Elongation + Zunahme der Anfangsmesslänge einer Probe nach Entfernen einer festgelegten Zugspannung, angegeben in Prozent, bezogen auf die Anfangsmesslänge + increase in the original gauge length of a test piece after removal of a specified stress, expressed as a percentage of the original gauge length + DIN EN ISO 6892-1:2019 + + + + + + + + + + + + + + + + + Bleibende Extensometer-Dehnung + Percentage Permanent Extension + Vergrößerung der Extensometer-Messlänge nach Entfernen einer festgelegten, auf die Probe aufgebrachten Zugspannung, angegeben in Prozent, bezogen auf die Extensometer-Messlänge + increase in the extensometer gauge length, after removal of a specified stress from the test piece, expressed as a percentage of the extensometer gauge length + DIN EN ISO 6892-1:2019 + + + + + + + + + + + + + + + + + + + + + + + + + Percentage Plastic Extension At Maximum Force + Plastische Extensometer-Dehnung bei Höchstkraft + Symbol: A_g + plastic extension at maximum force, expressed as a percentage of the extensometer gauge length + plastische Verlängerung der Extensometer-Messlänge bei Höchstkraft, angegeben in Prozent, bezogen auf die Extensometer-Messlänge + DIN EN ISO 6892-1:2019 + + + + + + + + + + + + + + + + + + + + + + + + + Brucheinschnürung + Percentage Reduction Of Area + größte während des Versuchs aufgetretene Änderung des Querschnitts (S_o − S_u), angegeben in Prozent, bezogen auf den Anfangsquerschnitt S_o + maximum change in cross-sectional area which has occurred during the test (S_o − S_u), expressed as a percentage of the original cross-sectional area, S_o + DIN EN ISO 6892-1:2019 + Z + + + + + + + + + + + + + + + + + Gesamte Extensometer-Dehnung beim Bruch + Percentage Total Extension At Fracture + Symbol: A_t + gesamte Verlängerung (elastische plus plastische Verlängerung) der Extensometer-Messlänge beim Bruch, angegeben in Prozent, bezogen auf die Extensometer-Messlänge + total extension (elastic extension plus plastic extension) at the moment of fracture, expressed as a percentage of the extensometer gauge length + DIN EN ISO 6892-1:2019 + + + + + + + + + + + + + + + + + + + + + + + + + Gesamte Extensometer-Dehnung bei Höchstkraft + Percentage Total Extension At Maximum Force + Symbol: A_gt + gesamte Verlängerung (elastische plus plastische Verlängerung) der Extensometer-Messlänge bei Höchstkraft, angegeben in Prozent, bezogen auf die Extensometer-Messlänge + total extension (elastic extension plus plastic extension) at maximum force, expressed as a percentage of the extensometer gauge length + DIN EN ISO 6892-1:2019 + + + + + + + + + + + Percentage Yield Point Extension + Streckgrenzen-Extensometer-Dehnung + Bei Werkstoffen, die ein diskontinuierliches Fließen zeigen: Verlängerung der Extensometer-Messlänge zwischen dem Beginn örtlichen Fließens und dem Einsetzen gleichmäßiger Verfestigung, angegeben in Prozent, bezogen auf die Extensometer-Messlänge + For discontinuous yielding materials: extension between the start of yielding and the start of uniform work-hardening, expressed as a percentage of the extensometer gauge length + Symbol: A_e + DIN EN ISO 6892-1:2019 + + + + + + + + + + + Dehngrenze + Proof Strength + Spannung, bei der ein bestimmter Dehnungswert gleich einem bestimmten Prozentsatz der Messlänge des Dehnungsmessers ist + stress at which the a specific extension value is equal to a specified percentage of the extensometer gauge length + + + + + + + + + + + + + + + + + + + + + + Dehngrenze bei plastischer Extensometer-Dehnung + Proof Strength Plastic Extension + Spannung, bei der die plastische Extensometer-Dehnung einem vorgegebenen Prozentanteil der Extensometer-Messlänge entspricht + +Anmerkung: Der Index wird durch den Zahlenwert ergänzt, der den vorgegebenen Zahlenwert der plastischen Extensometer-Dehnung in Prozent angibt, z. B. R_p_0,2. + Symbol: R_p + stress at which the plastic extension is equal to a specified percentage of the extensometer gauge length + +Note: A suffix is added to the subscript to indicate the prescribed percentage, e.g. R_p_0.2. + +Source: ISO 6892-1:2019 + DIN EN ISO 6892-1:2019 + + + + + + + + + + + + + + + + + Dehngrenze bei gesamter Extensometer-Dehnung + Proof Strength Total Extension + Spannung, bei der die gesamte Extensometer-Dehnung (elastische und plastische Extensometer-Dehnung) einem vorgegebenen Prozentanteil der Extensometer-Messlänge entspricht + +Anmerkung: Der Index wird durch den Zahlenwert ergänzt, der den vorgegebenen Zahlenwert der gesamten Extensometer-Dehnung in Prozent angibt, z. B. R_t_0,5. + Symbol: R_t + stress at which total extension (elastic extension plus plastic extension) is equal to a specified percentage of the extensometer gauge length + +Note: A suffix is added to the subscript to indicate the prescribed percentage, e.g. R_t_0.5. + DIN EN ISO 6892-1:2019 + + + + + + + + + + + + + + + 0.1 + + + + + + + Dehngrenze bei plastischer Extensometer-Dehnung Rp01 + Proof Strength Plastic Extension Rp01 + Spannung bei einer plastischen Extensometer-Dehnung, die 0,1 Prozent der Extensometer-Messlänge entspricht + Symbol: R_p_0.1 + stress at which the plastic extension is equal to 0.1 percent of the extensometer gauge length + DIN EN ISO 6892-1:2019 + + + + + + + + + + + + + + + 0.2 + + + + + + + Dehngrenze bei plastischer Extensometer-Dehnung Rp02 + Proof Strength Plastic Extension Rp02 + Spannung bei einer plastischen Extensometer-Dehnung, die 0,2 Prozent der Extensometer-Messlänge entspricht + Symbol: R_p_0.2 + stress at which the plastic extension is equal to 0.2 percent of the extensometer gauge length + DIN EN ISO 6892-1:2019 + + + + + + + + + + + Slope Of The Elastic Part + Steigung des elastischen Bereichs + Diese Eigenschaft beschreibt den Wert der Steigung des ersten linear ansteigenden Teils ("elastischer Teil") in der bei einem Zugversuch erhaltenen Spannungs-Dehnungs-Kurve. Im elastischen Teil der Spannungs-Dehnungs-Kurve muss der Wert der Steigung nicht unbedingt dem Elastizitätsmodul entsprechen. Dieser Wert kann mit dem Wert des Elastizitätsmoduls (nur) sehr gut übereinstimmen, wenn optimale Bedingungen herrschten. + This property describes the value of the slope of the first linear increasing part (‘elastic part’) in the stress-percentage extension curve obtained during a tensile test. In the elastic part of the stress‐percentage extension curve, the value of the slope may not necessarily represent the modulus of elasticity. This value may closely agree with the value of the modulus of elasticity if optimal conditions were used. + DIN EN ISO 6892-1:2019 + + + + + + + + + + + Dehngeschwindigkeit + Strain Rate + Symbol: e^._L_e + Zunahme der mit einem Extensometer in der Extensometer-Messlänge gemessenen Dehnung je Zeiteinheit + increase of strain, measured with an extensometer, in extensometer gauge length, per time + DIN EN ISO 6892-1:2019 + + + + + + + + + + + Spannungsgeschwindigkeit + Stress Rate + Symbol: R + Zunahme der Spannung je Zeiteinheit + +Anmerkung: Die Spannungsgeschwindigkeit wird nur im elastischen Bereich des Versuchs verwendet. + increase of stress per time + +Note: Stress rate is only used in the elastic part of the test. + DIN EN ISO 6892-1:2019 + + + + + + + + + + + + + + + + + + + + + + + + + Tensile Strength + Zugfestigkeit + Spannung, die der Höchstkraft entspricht + Symbol: R_m + stress corresponding to the maximum force + DIN EN ISO 6892-1:2019 + + + + + + + + + + + + 1 + + + + + + + 1 + + + + + + Tensile Test + Zugversuch + Tensile tests (tension tests) on materials provide information on their strength, ductility as well as other characteristic values under uniaxial tensile stress. + +The tensile test involves straining a test piece by tensile force, generally to fracture, for the determination of one or more mechanical properties specified by the semantically related and defined terms. + Zugversuche (Zugprüfungen) an Werkstoffen geben Auskunft über deren Festigkeit, Duktilität sowie weitere Kennwerte unter einachsiger Zugbeanspruchung. + +Beim Zugversuch wird ein Prüfkörper durch Zugkraft belastet, im Allgemeinen bis zum Bruch, um eine oder mehrere mechanische Eigenschaften zu bestimmen, die durch die semantisch verknüpften und definierten Begriffe festgelegt sind. + DIN EN ISO 6892-1:2019 + + + + + + + + + + + Tensile Test Node + Zugversuchsprozessknoten + Diese Entität beschreibt einen Workflow-Bestandteil, der Werkzeuge und Geräte beinhaltet, die für die Durchführung eines Zugversuchs verwendet werden, z. B. eine Zugprüfmaschine. + This entity describes a workflow constituent that hosts tools and equipment that is used for the performance of a tensile test, e.g., a tensile test machine. + + + + + + + + + + + + Tensile Testing Machine + Zugprüfmaschine + Maschine zur Durchführung eines Zugversuches; die Regelung und Überwachung des Versuches, die Messungen und die Datenverarbeitung werden üblicherweise mithilfe eines Computers durchgeführt. + machine to conduct a tensile test; the control and monitoring of the test, the measurements, and the data processing are usually undertaken by computer + DIN EN ISO 6892-1:2019 + + + + + + + + + + + End-Dicke + Thickness After Fracture + Diese Entität beschreibt die gemessene Dimension in einer Richtung eines Prüfstücks, wie sie vor der Prüfung gemessen wurde. + This entity describes the measured dimension in one direction of a test piece, as measured after the test. + + + + + + + + + + + Transition Point + Umschaltpunkt + Diese Entität beschreibt einen einzelnen Punkt, an dem ein Übergang von einer Bedingung oder einem Zustand in einen anderen erfolgt, z. B. der Punkt, an dem verschiedene Phasen von Materie im Gleichgewicht miteinander existieren können (auch Inversionspunkt genannt) oder wenn Prozessparameter geändert werden, die zu einem Übergang des Prozesses während seiner Ausführung führen. + This entity describes a single point at which a transition from one condition or state to another occurs, e.g. the point at which different phases of matter are capable of existing together in equilibrium (also called inversion point) or if process parameters are changed that will lead to a transition of the process during its execution. + + + + + + + + + + + + + + + + + Transition Point Testing Rate + Umschaltpunkt der Prüfgeschwindigkeit + Diese Entität beschreibt den Umschaltpunkt der Prüfgeschwindigkeit während eines Analyse- / Testprozesses, z.B. den Punkt bezogen auf die Dehnung oder Spannung, an welchem die Prüfgeschwindigkeit während eines Zugversuchs geändert wird. Typischerweise ist dieser Punkt mit einer Abnahme des Extensometers (Dehnungsaufnehmers) vom Prüfkörper während eines dehnungsgeregelten Zugversuchs verbunden. + This entity describes the the transition point of the testing rate during an analysis / test process, e.g. the point referring to the strain or the stress at which the testing rate is changed during a tensile test. Typically, this transition point is associated with a removal of the extensometer from the test piece during a strain-controlled tensile test. + + + + + + + + + + + Typ Der Messlängenmarkierungen + Type Gauge Length Marks + Diese Eigenschaft wird verwendet, um die sichtbaren Markierungen zu beschreiben, die in der Regel während eines Zugversuchs zur Messung der Dehnung an den Prüfkörpern angebracht werden. + This property is used to describe the visible markers usually attached to test pieces during a tensile test for elongation / extension measurements. + + + + + + + + + + + + + + + + + Obere Streckgrenze + Upper Yield Strength + Symbol: R_eH + höchste Spannung, bevor der erste Kraftabfall auftritt + maximum value of stress prior to the first decrease in force + DIN EN ISO 6892-1:2019 + + + + + + + + + + + End-Breite + Width After Fracture + Diese Entität beschreibt eine horizontale Messung eines Objekts (Prüfkörpers) im rechten Winkel zur Länge des Objekts (Prüfkörpers), wie sie nach einer Prüfung gemessen wird. + This entity describes a horizontal measurement of an object (test piece) taken at right angles to the length of the object (test piece), as measured after a test. + + + + + + + + + + + + + + + + + Streckgrenze + Yield Strength + Wenn der metallische Werkstoff diese Eigenschaft aufweist: die Spannung zu einem bestimmten Zeitpunkt während des Versuchs bei dem eine plastische Verformung ohne Zunahme der Kraft auftritt + when the metallic material exhibits a yield phenomenon, stress corresponding to the point reached during the test at which plastic deformation occurs without any increase in the force + DIN EN ISO 6892-1:2019 + + + + + + + + diff --git a/tto/ontology.ttl b/tto/ontology.ttl new file mode 100644 index 0000000..5430ecf --- /dev/null +++ b/tto/ontology.ttl @@ -0,0 +1,870 @@ +@prefix : . +@prefix owl: . +@prefix rdf: . +@prefix xml: . +@prefix xsd: . +@prefix rdfs: . +@base . + + rdf:type owl:Ontology ; + owl:imports ; + , + , + , + , + ; + ; + "Markus Schilling, Bernd Bayerlein, Henk Birkholz, Philipp von Hartrott, Jörg Waitelonis. (July 14th, 2023) TTO: Tensile Test Ontology. Version 2.0.0, https://w3id.org/pmd/tto"@en ; + "2023-07-14"@en ; + "Tensile Test Ontology (TTO)"@en ; + rdfs:comment """This is the stable version of the PMD ontology of the tensile test (Tensile Test Ontology - TTO) as developed on the basis of the standard ISO 6892-1: Metallic materials - Tensile Testing - Part 1: Method of test at room temperature. + +The TTO was developed in the frame of the PMD project. The TTO provides conceptualizations valid for the description of tensile tests and corresponding data in accordance with the respective standard. By using TTO for storing tensile test data, all data will be well structured and based on a common vocabulary agreed on by an expert group (generation of FAIR data) which will lead to enhanced data interoperability. This comprises several data categories such as primary data, secondary data and metadata. Data will be human and machine readable. The usage of TTO facilitates data retrieval and downstream usage. Due to a close connection to the PMD core ontology (PMDco), the interoperability of tensile test data is enhanced and querying in combination with other aspects and data within the broad field of material science and engineering (MSE) is facilitated. + +The TTO class structure forms a comprehensible and semantic layer for unified storage of data generated in a tensile test including the possibility to record data from analysis, re-evaluation and re-use. Furthermore, extensive metadata allows to assess data quality and reproduce experiments. Following the open world assumption, object properties are deliberately low restrictive and sparse. + +TTO of PMD at GitHub: https://github.com/materialdigital/application-ontologies/tree/main/tensile_test_ontology_TTO"""@en ; + owl:versionInfo "2.0.1" . + +################################################################# +# Annotation properties +################################################################# + +### https://w3id.org/pmd/co/definitionSource + rdf:type owl:AnnotationProperty . + + +### https://w3id.org/pmd/co/symbol + rdf:type owl:AnnotationProperty . + + +################################################################# +# Object Properties +################################################################# + +### https://w3id.org/pmd/co/participant + rdf:type owl:ObjectProperty . + + +### https://w3id.org/pmd/co/relatesTo + rdf:type owl:ObjectProperty . + + +### https://w3id.org/pmd/tto/relatesToExtension + rdf:type owl:ObjectProperty ; + rdfs:subPropertyOf ; + rdfs:domain ; + rdfs:range ; + rdfs:isDefinedBy ; + rdfs:label "relates to extension"@en . + + +################################################################# +# Classes +################################################################# + +### https://w3id.org/pmd/co/Diameter + rdf:type owl:Class . + + +### https://w3id.org/pmd/co/Extension + rdf:type owl:Class . + + +### https://w3id.org/pmd/co/Extensometer + rdf:type owl:Class . + + +### https://w3id.org/pmd/co/Force + rdf:type owl:Class . + + +### https://w3id.org/pmd/co/Length + rdf:type owl:Class . + + +### https://w3id.org/pmd/co/LoadCell + rdf:type owl:Class . + + +### https://w3id.org/pmd/co/MechanicalTestingProcess + rdf:type owl:Class . + + +### https://w3id.org/pmd/co/PercentageExtension + rdf:type owl:Class ; + owl:equivalentClass [ rdf:type owl:Restriction ; + owl:onProperty ; + owl:someValuesFrom + ] . + + +### https://w3id.org/pmd/co/ProcessingNode + rdf:type owl:Class . + + +### https://w3id.org/pmd/co/Stress + rdf:type owl:Class . + + +### https://w3id.org/pmd/co/TestPiece + rdf:type owl:Class . + + +### https://w3id.org/pmd/co/TestPieceInfo + rdf:type owl:Class . + + +### https://w3id.org/pmd/co/TestingMachine + rdf:type owl:Class . + + +### https://w3id.org/pmd/co/TestingRate + rdf:type owl:Class . + + +### https://w3id.org/pmd/co/Thickness + rdf:type owl:Class . + + +### https://w3id.org/pmd/co/ValueObject + rdf:type owl:Class . + + +### https://w3id.org/pmd/co/Width + rdf:type owl:Class . + + +### https://w3id.org/pmd/tto/ChangeOfTransverseDimension + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Change Of Transverse Dimension"@en , + "Änderung der transversalen Dimension"@de ; + "Dieses Wertobjekt beschreibt eine Variation der Abmessungen eines Prüfkörpers in Bezug auf seine Querachse, die sich auf seine Querschnittsfläche auswirkt und möglicherweise während eines Zugversuchs auftritt. Das Verhältnis der wahren plastischen Breitendehnung und der wahren plastischen Dickendehnung in einem in uniaxialem Zug beanspruchten Prüfkörper (vertikale Anisotropie) kann anhand dieser Information berechnet werden."@de , + "This value object describes a variation in the dimension of a test piece referring to its transversal axis affecting its cross-sectional area that may potentially occur during a tensile test. The ratio of the true plastic strain in width and the true plastic strain in thickness in a test piece loaded in uniaxial tension (vertical anisotropy) may be calculated using this information."@en ; + "DIN EN ISO 10113:2021-06" . + + +### https://w3id.org/pmd/tto/CrossheadSeparation + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Crosshead Separation"@en , + "Querhaupttrennung"@de ; + "Diese Eigenschaft beschreibt die Verschiebung der Traverse einer Zugprüfmaschine."@de , + """Dimensional analysis: L +Unit (e.g. SI): mm"""@en , + "This property describes the displacement of the crossheads of a tensile testing machine."@en ; + "DIN EN ISO 6892-1:2019"@en . + + +### https://w3id.org/pmd/tto/CrossheadSeparationRate + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Crosshead Separation Rate"@en , + "Traversengeschwindigkeit"@de ; + "Symbol: v_c"@en , + "Traversenweg je Zeiteinheit"@de , + "displacement of the crossheads per time"@en ; + "DIN EN ISO 6892-1:2019"@en . + + +### https://w3id.org/pmd/tto/DiameterAfterFracture + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Diameter After Fracture"@en , + "End-Probendurchmesser"@de ; + "Die Länge einer geraden Linie durch den Mittelpunkt eines Objekts (Zugprüfstücks), gemessen nach einem Bruch, der während einer Prüfung aufgetreten ist."@de , + "The length of a straight line through the center of an object (tensile test piece) as measured after a fracture occured during a test."@en . + + +### https://w3id.org/pmd/tto/Elongation + rdf:type owl:Class ; + owl:equivalentClass [ rdf:type owl:Restriction ; + owl:onProperty ; + owl:someValuesFrom + ] ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Elongation"@en , + "Verlängerung"@de ; + "Zunahme der Anfangsmesslänge zu einem beliebigen Zeitpunkt während des Versuchs"@de , + "increase in the original gauge length at any moment during the test"@en ; + "DIN EN ISO 6892-1:2019"@en . + + +### https://w3id.org/pmd/tto/EstimatedStrainRateOverTheParallelLength + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Abgeschätzte Dehngeschwindigkeit Über Die Parallele Länge"@de , + "Estimated Strain Rate Over The Parallel Length"@en ; + "Symbol: e^._L_c"@en , + "Zunahme der Dehnung über die parallele Länge der Probe je Zeiteinheit, basierend auf der Traversengeschwindigkeit und der parallelen Länge der Probe"@de , + "value of the increase of strain over the parallel length of the test piece per time based on the crosshead separation rate and the parallel length of the test piece"@en ; + "DIN EN ISO 6892-1:2019"@en . + + +### https://w3id.org/pmd/tto/ExtensometerGaugeLength + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Extensometer Gauge Length"@en , + "Extensometer-Messlänge"@de ; + """Anfangsmesslänge des Dehnungsaufnehmers (Extensometer), die zum Messen der Verlängerung benutzt wird + +Anmerkung: Für die Bestimmung mehrerer Eigenschaften, die (teilweise oder vollständig) von der Verlängerung abhängig sind, z. B. R_p, A_e oder A_g, ist die Verwendung eines Extensometers zwingend erforderlich."""@de , + "Symbol: L_e"@en , + """initial gauge length of the extensometer used for measurement of extension + +Note: For the determination of several properties which are based (partly or complete) on extension, e. g. R_p, A_e or A_g, the use of an extensometer is mandatory."""@en ; + "DIN EN ISO 6892-1:2019"@en . + + +### https://w3id.org/pmd/tto/FinalGaugeLengthAfterFracture + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Final Gauge Length After Fracture"@en , + "Messlänge nach dem Bruch"@de , + "Symbol: L_u"@en ; + "Länge zwischen den Marken zur Kennzeichnung der Messlänge auf der Probe, die nach dem Bruch bei Raumtemperatur gemessen wird, nachdem die beiden Probenbruchstücke sorgfältig so zusammengefügt wurden, dass ihre Achsen in einer Geraden liegen"@de , + "length between gauge length marks on the test piece measured after rupture, at room temperature, the two pieces having been carefully fitted back together so that their axes lie in a straight line"@en ; + "DIN EN ISO 6892-1:2019"@en . + + +### https://w3id.org/pmd/tto/GaugeLength + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Gauge Length"@en , + "Messlänge"@de ; + "Länge des parallelen Teils der Probe, an dem zu einem beliebigen Zeitpunkt während des Versuchs die Verlängerung gemessen wird"@de , + "Symbol: L"@en , + "length of the parallel portion of the test piece on which elongation is measured at any moment during the test"@en ; + "DIN EN ISO 6892-1:2019"@en . + + +### https://w3id.org/pmd/tto/GeometryShape + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Geometrische Form"@de , + "Geometry Shape"@en ; + "Diese Eigenschaft beschreibt die geometrischen Abmessungen und das Erscheinungsbild (Form und Abmaße) einer Probe, eines Prüfkörpers oder eines Prüfstücks, wie sie üblicherweise durch eine entsprechende Norm definiert sind. Dementsprechend ist der angegebene Formwert in Übereinstimmung mit der definierenden Norm anzugeben, z. B. \"Zugprüfstück Form 1 gemäß Anhang B\"."@de , + "This property describes the geometric dimensions and appearance (shape and dimensions) of a sample, specimen, or test piece as usually defined by a corresponding standard. Accordingly, the shape value given is in accordance with the defining standard, e.g., ‘tensile test piece shape 1 in accordance with annex B’."@en ; + "DIN EN ISO 6892-1:2019"@en . + + +### https://w3id.org/pmd/tto/LowerYieldStrength + rdf:type owl:Class ; + owl:equivalentClass [ rdf:type owl:Restriction ; + owl:onProperty ; + owl:someValuesFrom + ] ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Lower Yield Strength"@en , + "untere Streckgrenze"@de ; + "Symbol: R_eL"@en , + "kleinste Spannung während des plastischen Fließens, wobei Einschwingerscheinungen nicht berücksichtigt werden"@de , + "lowest value of stress during plastic yielding, ignoring any initial transient effects"@en ; + "DIN EN ISO 6892-1:2019"@en . + + +### https://w3id.org/pmd/tto/MaximumForce + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Höchstkraft"@de , + "Maximum Force"@en ; + """Bei Werkstoffen, die kein diskontinuierliches Fließen zeigen: größte Kraft, der die Probe während des Versuchs standhält + +Bei Werkstoffen, die ein diskontinuierliches Fließen zeigen: größte Kraft, der die Probe während des Versuchs nach dem Beginn der Verfestigung standhält + +Anmerkung: Für Werkstoffe, die ein diskontinuierliches Fließen zeigen, aber keine Verfestigung erzielt werden kann, ist die Höchstkraft nicht definiert +."""@de , + """For materials displaying no discontinuous yielding: highest force that the test piece withstands during the test + +For materials displaying discontinuous yielding: highest force that the test piece withstands during the test after the beginning of work-hardening + +Note: For materials which display discontinuous yielding, but where no work-hardening can be established, the maximum force is not defined."""@en ; + "DIN EN ISO 6892-1:2019"@en . + + +### https://w3id.org/pmd/tto/MinimumCrossSectionalAreaAfterFracture + rdf:type owl:Class ; + owl:equivalentClass [ rdf:type owl:Class ; + owl:unionOf ( [ owl:intersectionOf ( [ rdf:type owl:Restriction ; + owl:onProperty ; + owl:someValuesFrom + ] + [ rdf:type owl:Restriction ; + owl:onProperty ; + owl:someValuesFrom + ] + ) ; + rdf:type owl:Class + ] + [ rdf:type owl:Restriction ; + owl:onProperty ; + owl:someValuesFrom + ] + ) + ] ; + rdfs:subClassOf ; + rdfs:comment "Symbol: S_u" ; + rdfs:isDefinedBy ; + rdfs:label "Kleinster Querschnitt nach dem Bruch"@de , + "Minimum cross-sectional area after fracture"@en ; + """Dieses Konzept beschreibt die kleinste Querschnittsfläche des Zugprüfkörers, die nach dem Bruch infolge der aufgebrachten Zugkraft erhalten wird. + +Anmerkung: Sie wird in der Regel senkrecht zur Richtung der aufgebrachten Kraft gemessen und dient zur Berechnung der technischen Spannung während der Prüfung. + +Anmerkung: Es wird empfohlen, den Anfangsquerschnitt innerhalb der parallelen Länge mit einer Genauigkeit von ±2 % zu messen. Bei runden Prüfkörpern mit kleinem Durchmesser oder Prüfkörpern mit anderen Querschnittsgeometrien ist es jedoch möglicherweise nicht möglich, den Anfangsquerschnitt innerhalb der parallelen Länge mit einer Genauigkeit von ±2 % zu messen."""@de , + """This concept describes the smallest cross-sectional area of the tensile test piece observed after it has fractured under the applied tensile force. + +Note: It is typically measured perpendicular to the direction of the applied force and is used to calculate engineering stress during the test. + +Note: It is recommended to measure the original cross-sectional area of the parallel length to an accuracy of ±2 %. However, measuring the original cross-sectional area of the parallel length with an accuracy of ±2 % on small diameter round test pieces, or test pieces with other cross-sectional geometries, may not be possible."""@en ; + "DIN EN ISO 6892-1:2019" . + + +### https://w3id.org/pmd/tto/OriginalCrossSectionalArea + rdf:type owl:Class ; + owl:equivalentClass [ rdf:type owl:Class ; + owl:unionOf ( [ owl:intersectionOf ( [ rdf:type owl:Restriction ; + owl:onProperty ; + owl:someValuesFrom + ] + [ rdf:type owl:Restriction ; + owl:onProperty ; + owl:someValuesFrom + ] + ) ; + rdf:type owl:Class + ] + [ rdf:type owl:Restriction ; + owl:onProperty ; + owl:someValuesFrom + ] + ) + ] ; + rdfs:subClassOf ; + rdfs:comment "Symbol: S_o" ; + rdfs:isDefinedBy ; + rdfs:label "Anfangsquerschnitt innerhalb der parallelen Länge"@de , + "Original cross-sectional area of the parallel length"@en ; + "Dieses Konzept beschreibt die initiale Querschnittsfläche des Zugprüfkörpers entlang seiner parallelen Länge, bevor eine Verformung auftritt."@de , + "This concept describes the initial area of the tensile test piece before any deformation occurs."@en ; + "DIN EN ISO 6892-1:2019" . + + +### https://w3id.org/pmd/tto/OriginalDiameter + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Anfangs-Probendurchmesser"@de , + "Original Diameter"@en ; + "Die Länge einer geraden Linie durch den Mittelpunkt eines Objekts (Zugprüfkörpers), die vor einer Prüfung gemessen wird."@de , + "The length of a straight line through the center of an object (tensile test piece) as measured prior to a tensile test."@en ; + "DIN EN ISO 6892-1:2019"@en . + + +### https://w3id.org/pmd/tto/OriginalGaugeLength + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Anfangsmesslänge"@de , + "Original Gauge Length"@en ; + "Länge zwischen den Marken zur Kennzeichnung der Messlänge auf der Probe, die vor dem Versuch bei Raumtemperatur gemessen wird"@de , + "Symbol: L_o"@en , + "length between gauge length marks on the test piece measured at room temperature before the test"@en ; + "DIN EN ISO 6892-1:2019"@en . + + +### https://w3id.org/pmd/tto/OriginalThickness + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Anfangs-Dicke"@de , + "Original Thickness"@en ; + "Diese Entität beschreibt die gemessene Dimension in einer Richtung eines Prüfstücks, wie sie vor der Prüfung gemessen wurde."@de , + "This entity describes the measured dimension in one direction of a test piece, as measured before the test."@en . + + +### https://w3id.org/pmd/tto/OriginalWidth + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Anfangs-Breite"@de , + "Original Width"@en ; + "Diese Entität beschreibt eine horizontale Messung eines Objekts (Prüfkörpers) im rechten Winkel zur Länge des Objekts (Prüfkörpers), wie sie vor einer Prüfung gemessen wird."@de , + "This entity describes a horizontal measurement of an object (test piece) taken at right angles to the length of the object (test piece), as measured before a test."@en . + + +### https://w3id.org/pmd/tto/ParallelLength + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Parallel Length"@en , + "Parallele Länge"@de ; + """Länge des parallelen reduzierten Querschnitts der Probe + +Anmerkung: Bei unbearbeiteten Proben tritt an die Stelle der parallelen Länge der Abstand zwischen den Einspannungen."""@de , + "Symbol: L_c"@en , + """length of the parallel reduced section of the test piece + +Note: The concept of parallel length is replaced by the concept of distance between grips for unmachined test pieces."""@en ; + "DIN EN ISO 6892-1:2019"@en . + + +### https://w3id.org/pmd/tto/PercentageElongation + rdf:type owl:Class ; + owl:equivalentClass [ rdf:type owl:Restriction ; + owl:onProperty ; + owl:someValuesFrom + ] ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Dehnung"@de , + "Percentage Elongation"@en ; + "Verlängerung, angegeben in Prozent, bezogen auf die Anfangsmesslänge"@de , + "elongation expressed as a percentage of the original gauge length"@en ; + "DIN EN ISO 6892-1:2019"@en . + + +### https://w3id.org/pmd/tto/PercentageElongationAfterFracture + rdf:type owl:Class ; + owl:equivalentClass [ rdf:type owl:Restriction ; + owl:onProperty ; + owl:someValuesFrom + ] ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Bruchdehnung"@de , + "Percentage Elongation After Fracture"@en ; + "Symbol: A"@en , + "bleibende Verlängerung der Messlänge nach dem Bruch (L_u − L_o), angegeben in Prozent, bezogen auf die Anfangsmesslänge"@de , + "permanent elongation of the gauge length after fracture (L_u − L_o), expressed as a percentage of the original gauge length"@en ; + "DIN EN ISO 6892-1:2019"@en . + + +### https://w3id.org/pmd/tto/PercentagePermanentElongation + rdf:type owl:Class ; + owl:equivalentClass [ rdf:type owl:Restriction ; + owl:onProperty ; + owl:someValuesFrom + ] ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Bleibende Dehnung"@de , + "Percentage Permanent Elongation"@en ; + "Zunahme der Anfangsmesslänge einer Probe nach Entfernen einer festgelegten Zugspannung, angegeben in Prozent, bezogen auf die Anfangsmesslänge"@de , + "increase in the original gauge length of a test piece after removal of a specified stress, expressed as a percentage of the original gauge length"@en ; + "DIN EN ISO 6892-1:2019"@en . + + +### https://w3id.org/pmd/tto/PercentagePermanentExtension + rdf:type owl:Class ; + owl:equivalentClass [ rdf:type owl:Restriction ; + owl:onProperty ; + owl:someValuesFrom + ] ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Bleibende Extensometer-Dehnung"@de , + "Percentage Permanent Extension"@en ; + "Vergrößerung der Extensometer-Messlänge nach Entfernen einer festgelegten, auf die Probe aufgebrachten Zugspannung, angegeben in Prozent, bezogen auf die Extensometer-Messlänge"@de , + "increase in the extensometer gauge length, after removal of a specified stress from the test piece, expressed as a percentage of the extensometer gauge length"@en ; + "DIN EN ISO 6892-1:2019"@en . + + +### https://w3id.org/pmd/tto/PercentagePlasticExtensionAtMaximumForce + rdf:type owl:Class ; + owl:equivalentClass [ owl:intersectionOf ( [ rdf:type owl:Restriction ; + owl:onProperty ; + owl:someValuesFrom + ] + [ rdf:type owl:Restriction ; + owl:onProperty ; + owl:someValuesFrom + ] + ) ; + rdf:type owl:Class + ] ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Percentage Plastic Extension At Maximum Force"@en , + "Plastische Extensometer-Dehnung bei Höchstkraft"@de ; + "Symbol: A_g"@en , + "plastic extension at maximum force, expressed as a percentage of the extensometer gauge length"@en , + "plastische Verlängerung der Extensometer-Messlänge bei Höchstkraft, angegeben in Prozent, bezogen auf die Extensometer-Messlänge"@de ; + "DIN EN ISO 6892-1:2019"@en . + + +### https://w3id.org/pmd/tto/PercentageReductionOfArea + rdf:type owl:Class ; + owl:equivalentClass [ owl:intersectionOf ( [ rdf:type owl:Restriction ; + owl:onProperty ; + owl:someValuesFrom + ] + [ rdf:type owl:Restriction ; + owl:onProperty ; + owl:someValuesFrom + ] + ) ; + rdf:type owl:Class + ] ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Brucheinschnürung"@de , + "Percentage Reduction Of Area"@en ; + "größte während des Versuchs aufgetretene Änderung des Querschnitts (S_o − S_u), angegeben in Prozent, bezogen auf den Anfangsquerschnitt S_o"@de , + "maximum change in cross-sectional area which has occurred during the test (S_o − S_u), expressed as a percentage of the original cross-sectional area, S_o"@en ; + "DIN EN ISO 6892-1:2019"@en ; + "Z" . + + +### https://w3id.org/pmd/tto/PercentageTotalExtensionAtFracture + rdf:type owl:Class ; + owl:equivalentClass [ rdf:type owl:Restriction ; + owl:onProperty ; + owl:someValuesFrom + ] ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Gesamte Extensometer-Dehnung beim Bruch"@de , + "Percentage Total Extension At Fracture"@en ; + "Symbol: A_t"@en , + "gesamte Verlängerung (elastische plus plastische Verlängerung) der Extensometer-Messlänge beim Bruch, angegeben in Prozent, bezogen auf die Extensometer-Messlänge"@de , + "total extension (elastic extension plus plastic extension) at the moment of fracture, expressed as a percentage of the extensometer gauge length"@en ; + "DIN EN ISO 6892-1:2019"@en . + + +### https://w3id.org/pmd/tto/PercentageTotalExtensionAtMaximumForce + rdf:type owl:Class ; + owl:equivalentClass [ owl:intersectionOf ( [ rdf:type owl:Restriction ; + owl:onProperty ; + owl:someValuesFrom + ] + [ rdf:type owl:Restriction ; + owl:onProperty ; + owl:someValuesFrom + ] + ) ; + rdf:type owl:Class + ] ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Gesamte Extensometer-Dehnung bei Höchstkraft"@de , + "Percentage Total Extension At Maximum Force"@en ; + "Symbol: A_gt"@en , + "gesamte Verlängerung (elastische plus plastische Verlängerung) der Extensometer-Messlänge bei Höchstkraft, angegeben in Prozent, bezogen auf die Extensometer-Messlänge"@de , + "total extension (elastic extension plus plastic extension) at maximum force, expressed as a percentage of the extensometer gauge length"@en ; + "DIN EN ISO 6892-1:2019"@en . + + +### https://w3id.org/pmd/tto/PercentageYieldPointExtension + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Percentage Yield Point Extension"@en , + "Streckgrenzen-Extensometer-Dehnung"@de ; + "Bei Werkstoffen, die ein diskontinuierliches Fließen zeigen: Verlängerung der Extensometer-Messlänge zwischen dem Beginn örtlichen Fließens und dem Einsetzen gleichmäßiger Verfestigung, angegeben in Prozent, bezogen auf die Extensometer-Messlänge"@de , + "For discontinuous yielding materials: extension between the start of yielding and the start of uniform work-hardening, expressed as a percentage of the extensometer gauge length"@en , + "Symbol: A_e"@en ; + "DIN EN ISO 6892-1:2019"@en . + + +### https://w3id.org/pmd/tto/ProofStrength + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Dehngrenze"@de , + "Proof Strength"@en ; + "Spannung, bei der ein bestimmter Dehnungswert gleich einem bestimmten Prozentsatz der Messlänge des Dehnungsmessers ist"@de , + "stress at which the a specific extension value is equal to a specified percentage of the extensometer gauge length"@en . + + +### https://w3id.org/pmd/tto/ProofStrengthPlasticExtension + rdf:type owl:Class ; + owl:equivalentClass [ rdf:type owl:Restriction ; + owl:onProperty ; + owl:someValuesFrom [ rdf:type owl:Restriction ; + owl:onProperty ; + owl:someValuesFrom xsd:float + ] + ] ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Dehngrenze bei plastischer Extensometer-Dehnung"@de , + "Proof Strength Plastic Extension"@en ; + """Spannung, bei der die plastische Extensometer-Dehnung einem vorgegebenen Prozentanteil der Extensometer-Messlänge entspricht + +Anmerkung: Der Index wird durch den Zahlenwert ergänzt, der den vorgegebenen Zahlenwert der plastischen Extensometer-Dehnung in Prozent angibt, z. B. R_p_0,2."""@de , + "Symbol: R_p"@en , + """stress at which the plastic extension is equal to a specified percentage of the extensometer gauge length + +Note: A suffix is added to the subscript to indicate the prescribed percentage, e.g. R_p_0.2. + +Source: ISO 6892-1:2019"""@en ; + "DIN EN ISO 6892-1:2019"@en . + + +### https://w3id.org/pmd/tto/ProofStrengthTotalExtension + rdf:type owl:Class ; + owl:equivalentClass [ rdf:type owl:Restriction ; + owl:onProperty ; + owl:someValuesFrom + ] ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Dehngrenze bei gesamter Extensometer-Dehnung"@de , + "Proof Strength Total Extension"@en ; + """Spannung, bei der die gesamte Extensometer-Dehnung (elastische und plastische Extensometer-Dehnung) einem vorgegebenen Prozentanteil der Extensometer-Messlänge entspricht + +Anmerkung: Der Index wird durch den Zahlenwert ergänzt, der den vorgegebenen Zahlenwert der gesamten Extensometer-Dehnung in Prozent angibt, z. B. R_t_0,5."""@de , + "Symbol: R_t"@en , + """stress at which total extension (elastic extension plus plastic extension) is equal to a specified percentage of the extensometer gauge length + +Note: A suffix is added to the subscript to indicate the prescribed percentage, e.g. R_t_0.5."""@en ; + "DIN EN ISO 6892-1:2019"@en . + + +### https://w3id.org/pmd/tto/Rp01 + rdf:type owl:Class ; + owl:equivalentClass [ rdf:type owl:Restriction ; + owl:onProperty ; + owl:someValuesFrom [ rdf:type owl:Restriction ; + owl:onProperty ; + owl:hasValue "0.1"^^xsd:float + ] + ] ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Dehngrenze bei plastischer Extensometer-Dehnung Rp01"@de , + "Proof Strength Plastic Extension Rp01"@en ; + "Spannung bei einer plastischen Extensometer-Dehnung, die 0,1 Prozent der Extensometer-Messlänge entspricht"@de , + "Symbol: R_p_0.1"@en , + "stress at which the plastic extension is equal to 0.1 percent of the extensometer gauge length"@en ; + "DIN EN ISO 6892-1:2019"@en . + + +### https://w3id.org/pmd/tto/Rp02 + rdf:type owl:Class ; + owl:equivalentClass [ rdf:type owl:Restriction ; + owl:onProperty ; + owl:someValuesFrom [ rdf:type owl:Restriction ; + owl:onProperty ; + owl:hasValue "0.2"^^xsd:float + ] + ] ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Dehngrenze bei plastischer Extensometer-Dehnung Rp02"@de , + "Proof Strength Plastic Extension Rp02"@en ; + "Spannung bei einer plastischen Extensometer-Dehnung, die 0,2 Prozent der Extensometer-Messlänge entspricht"@de , + "Symbol: R_p_0.2"@en , + "stress at which the plastic extension is equal to 0.2 percent of the extensometer gauge length"@en ; + "DIN EN ISO 6892-1:2019"@en . + + +### https://w3id.org/pmd/tto/SlopeOfTheElasticPart + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Slope Of The Elastic Part"@en , + "Steigung des elastischen Bereichs"@de ; + "Diese Eigenschaft beschreibt den Wert der Steigung des ersten linear ansteigenden Teils (\"elastischer Teil\") in der bei einem Zugversuch erhaltenen Spannungs-Dehnungs-Kurve. Im elastischen Teil der Spannungs-Dehnungs-Kurve muss der Wert der Steigung nicht unbedingt dem Elastizitätsmodul entsprechen. Dieser Wert kann mit dem Wert des Elastizitätsmoduls (nur) sehr gut übereinstimmen, wenn optimale Bedingungen herrschten."@de , + "This property describes the value of the slope of the first linear increasing part (‘elastic part’) in the stress-percentage extension curve obtained during a tensile test. In the elastic part of the stress‐percentage extension curve, the value of the slope may not necessarily represent the modulus of elasticity. This value may closely agree with the value of the modulus of elasticity if optimal conditions were used."@en ; + "DIN EN ISO 6892-1:2019"@en . + + +### https://w3id.org/pmd/tto/StrainRate + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Dehngeschwindigkeit"@de , + "Strain Rate"@en ; + "Symbol: e^._L_e"@en , + "Zunahme der mit einem Extensometer in der Extensometer-Messlänge gemessenen Dehnung je Zeiteinheit"@de , + "increase of strain, measured with an extensometer, in extensometer gauge length, per time"@en ; + "DIN EN ISO 6892-1:2019"@en . + + +### https://w3id.org/pmd/tto/StressRate + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Spannungsgeschwindigkeit"@de , + "Stress Rate"@en ; + "Symbol: R"@en , + """Zunahme der Spannung je Zeiteinheit + +Anmerkung: Die Spannungsgeschwindigkeit wird nur im elastischen Bereich des Versuchs verwendet."""@de , + """increase of stress per time + +Note: Stress rate is only used in the elastic part of the test."""@en ; + "DIN EN ISO 6892-1:2019"@en . + + +### https://w3id.org/pmd/tto/TensileStrength + rdf:type owl:Class ; + owl:equivalentClass [ owl:intersectionOf ( [ rdf:type owl:Restriction ; + owl:onProperty ; + owl:someValuesFrom + ] + [ rdf:type owl:Restriction ; + owl:onProperty ; + owl:someValuesFrom + ] + ) ; + rdf:type owl:Class + ] ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Tensile Strength"@en , + "Zugfestigkeit"@de ; + "Spannung, die der Höchstkraft entspricht"@de , + "Symbol: R_m"@en , + "stress corresponding to the maximum force"@en ; + "DIN EN ISO 6892-1:2019"@en . + + +### https://w3id.org/pmd/tto/TensileTest + rdf:type owl:Class ; + owl:equivalentClass [ rdf:type owl:Restriction ; + owl:onProperty ; + owl:qualifiedCardinality "1"^^xsd:nonNegativeInteger ; + owl:onClass + ] , + [ rdf:type owl:Restriction ; + owl:onProperty ; + owl:qualifiedCardinality "1"^^xsd:nonNegativeInteger ; + owl:onClass + ] ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Tensile Test"@en , + "Zugversuch"@de ; + """Tensile tests (tension tests) on materials provide information on their strength, ductility as well as other characteristic values under uniaxial tensile stress. + +The tensile test involves straining a test piece by tensile force, generally to fracture, for the determination of one or more mechanical properties specified by the semantically related and defined terms."""@en , + """Zugversuche (Zugprüfungen) an Werkstoffen geben Auskunft über deren Festigkeit, Duktilität sowie weitere Kennwerte unter einachsiger Zugbeanspruchung. + +Beim Zugversuch wird ein Prüfkörper durch Zugkraft belastet, im Allgemeinen bis zum Bruch, um eine oder mehrere mechanische Eigenschaften zu bestimmen, die durch die semantisch verknüpften und definierten Begriffe festgelegt sind."""@de ; + "DIN EN ISO 6892-1:2019"@en . + + +### https://w3id.org/pmd/tto/TensileTestNode + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Tensile Test Node"@en , + "Zugversuchsprozessknoten"@de ; + "Diese Entität beschreibt einen Workflow-Bestandteil, der Werkzeuge und Geräte beinhaltet, die für die Durchführung eines Zugversuchs verwendet werden, z. B. eine Zugprüfmaschine."@de , + "This entity describes a workflow constituent that hosts tools and equipment that is used for the performance of a tensile test, e.g., a tensile test machine."@en . + + +### https://w3id.org/pmd/tto/TensileTestingMachine + rdf:type owl:Class ; + rdfs:subClassOf , + ; + rdfs:isDefinedBy ; + rdfs:label "Tensile Testing Machine"@en , + "Zugprüfmaschine"@de ; + "Maschine zur Durchführung eines Zugversuches; die Regelung und Überwachung des Versuches, die Messungen und die Datenverarbeitung werden üblicherweise mithilfe eines Computers durchgeführt."@de , + "machine to conduct a tensile test; the control and monitoring of the test, the measurements, and the data processing are usually undertaken by computer"@en ; + "DIN EN ISO 6892-1:2019"@en . + + +### https://w3id.org/pmd/tto/ThicknessAfterFracture + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "End-Dicke"@de , + "Thickness After Fracture"@en ; + "Diese Entität beschreibt die gemessene Dimension in einer Richtung eines Prüfstücks, wie sie vor der Prüfung gemessen wurde."@de , + "This entity describes the measured dimension in one direction of a test piece, as measured after the test."@en . + + +### https://w3id.org/pmd/tto/TransitionPoint + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Transition Point"@en , + "Umschaltpunkt"@de ; + "Diese Entität beschreibt einen einzelnen Punkt, an dem ein Übergang von einer Bedingung oder einem Zustand in einen anderen erfolgt, z. B. der Punkt, an dem verschiedene Phasen von Materie im Gleichgewicht miteinander existieren können (auch Inversionspunkt genannt) oder wenn Prozessparameter geändert werden, die zu einem Übergang des Prozesses während seiner Ausführung führen."@de , + "This entity describes a single point at which a transition from one condition or state to another occurs, e.g. the point at which different phases of matter are capable of existing together in equilibrium (also called inversion point) or if process parameters are changed that will lead to a transition of the process during its execution."@en . + + +### https://w3id.org/pmd/tto/TransitionPointTestingRate + rdf:type owl:Class ; + owl:equivalentClass [ rdf:type owl:Restriction ; + owl:onProperty ; + owl:someValuesFrom + ] ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Transition Point Testing Rate"@en , + "Umschaltpunkt der Prüfgeschwindigkeit"@de ; + "Diese Entität beschreibt den Umschaltpunkt der Prüfgeschwindigkeit während eines Analyse- / Testprozesses, z.B. den Punkt bezogen auf die Dehnung oder Spannung, an welchem die Prüfgeschwindigkeit während eines Zugversuchs geändert wird. Typischerweise ist dieser Punkt mit einer Abnahme des Extensometers (Dehnungsaufnehmers) vom Prüfkörper während eines dehnungsgeregelten Zugversuchs verbunden."@de , + "This entity describes the the transition point of the testing rate during an analysis / test process, e.g. the point referring to the strain or the stress at which the testing rate is changed during a tensile test. Typically, this transition point is associated with a removal of the extensometer from the test piece during a strain-controlled tensile test."@en . + + +### https://w3id.org/pmd/tto/TypeGaugeLengthMarks + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Typ Der Messlängenmarkierungen"@de , + "Type Gauge Length Marks"@en ; + "Diese Eigenschaft wird verwendet, um die sichtbaren Markierungen zu beschreiben, die in der Regel während eines Zugversuchs zur Messung der Dehnung an den Prüfkörpern angebracht werden."@de , + "This property is used to describe the visible markers usually attached to test pieces during a tensile test for elongation / extension measurements."@en . + + +### https://w3id.org/pmd/tto/UpperYieldStrength + rdf:type owl:Class ; + owl:equivalentClass [ rdf:type owl:Restriction ; + owl:onProperty ; + owl:someValuesFrom + ] ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Obere Streckgrenze"@de , + "Upper Yield Strength"@en ; + "Symbol: R_eH"@en , + "höchste Spannung, bevor der erste Kraftabfall auftritt"@de , + "maximum value of stress prior to the first decrease in force"@en ; + "DIN EN ISO 6892-1:2019"@en . + + +### https://w3id.org/pmd/tto/WidthAfterFracture + rdf:type owl:Class ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "End-Breite"@de , + "Width After Fracture"@en ; + "Diese Entität beschreibt eine horizontale Messung eines Objekts (Prüfkörpers) im rechten Winkel zur Länge des Objekts (Prüfkörpers), wie sie nach einer Prüfung gemessen wird."@de , + "This entity describes a horizontal measurement of an object (test piece) taken at right angles to the length of the object (test piece), as measured after a test."@en . + + +### https://w3id.org/pmd/tto/YieldStrength + rdf:type owl:Class ; + owl:equivalentClass [ rdf:type owl:Restriction ; + owl:onProperty ; + owl:someValuesFrom + ] ; + rdfs:subClassOf ; + rdfs:isDefinedBy ; + rdfs:label "Streckgrenze"@de , + "Yield Strength"@en ; + "Wenn der metallische Werkstoff diese Eigenschaft aufweist: die Spannung zu einem bestimmten Zeitpunkt während des Versuchs bei dem eine plastische Verformung ohne Zunahme der Kraft auftritt"@de , + "when the metallic material exhibits a yield phenomenon, stress corresponding to the point reached during the test at which plastic deformation occurs without any increase in the force"@en ; + "DIN EN ISO 6892-1:2019"@en . + + +### Generated by the OWL API (version 5.1.18) https://github.com/owlcs/owlapi/ diff --git a/tto/provenance/provenance-de.html b/tto/provenance/provenance-de.html new file mode 100644 index 0000000..d8eb1bb --- /dev/null +++ b/tto/provenance/provenance-de.html @@ -0,0 +1,17 @@ + + + + + + + + +
    +

    Herkunft von Tensile Test Ontology (TTO) Dokumentation (public/tto)

    +
      +
    • Entwickler der Ontologie: https://orcid.org/0000-0001-7192-7143, https://orcid.org/0000-0002-3717-7104, https://orcid.org/0000-0002-7094-5371, https://orcid.org/0000-0002-9014-2920, https://orcid.org/0000-0003-4971-3645
    • Die Ontologie-Dokumentation ist Ergebnis der Anwendung vom Widoco Tool (das wiederum LODE zur Generierung der Querverweise verwendet.
    • +
    • Diese Dokumentation wurde generiert am: 2023-07-14
    +
    +

    zurück zu Dokumentation. TTL Format

    + + \ No newline at end of file diff --git a/tto/provenance/provenance-de.ttl b/tto/provenance/provenance-de.ttl new file mode 100644 index 0000000..5737e0c --- /dev/null +++ b/tto/provenance/provenance-de.ttl @@ -0,0 +1,19 @@ +@prefix prov: . +@prefix dc: . +@prefix foaf: . +@prefix : <> . +<..\index-de.html> a prov:Entity; + dc:title "Tensile Test Ontology (TTO)"; + prov:wasAttributedTo ; + dc:creator ; + prov:wasAttributedTo ; + dc:creator ; + prov:wasAttributedTo ; + dc:creator ; + prov:wasAttributedTo ; + dc:creator ; + prov:wasAttributedTo ; + dc:creator ; + prov:wasAttributedTo ,; + prov:wasGeneratedAt "2023-07-14"; +. diff --git a/tto/provenance/provenance-en.html b/tto/provenance/provenance-en.html new file mode 100644 index 0000000..87047ef --- /dev/null +++ b/tto/provenance/provenance-en.html @@ -0,0 +1,17 @@ + + + + + + + + +
    +

    Provenance for Tensile Test Ontology (TTO) Documentation (public/tto)

    +
      +
    • Ontology created by: https://orcid.org/0000-0001-7192-7143, https://orcid.org/0000-0002-3717-7104, https://orcid.org/0000-0002-7094-5371, https://orcid.org/0000-0002-9014-2920, https://orcid.org/0000-0003-4971-3645
    • The ontology documentation was the result of using the Widoco tool (which itself uses LODE for generating the crossreference section).
    • +
    • The documentation was generated at 2023-07-14
    +
    +

    back to documentation. TTL format

    + + \ No newline at end of file diff --git a/tto/provenance/provenance-en.ttl b/tto/provenance/provenance-en.ttl new file mode 100644 index 0000000..2691223 --- /dev/null +++ b/tto/provenance/provenance-en.ttl @@ -0,0 +1,19 @@ +@prefix prov: . +@prefix dc: . +@prefix foaf: . +@prefix : <> . +<..\index-en.html> a prov:Entity; + dc:title "Tensile Test Ontology (TTO)"; + prov:wasAttributedTo ; + dc:creator ; + prov:wasAttributedTo ; + dc:creator ; + prov:wasAttributedTo ; + dc:creator ; + prov:wasAttributedTo ; + dc:creator ; + prov:wasAttributedTo ; + dc:creator ; + prov:wasAttributedTo ,; + prov:wasGeneratedAt "2023-07-14"; +. diff --git a/tto/readme.md b/tto/readme.md new file mode 100644 index 0000000..246eeba --- /dev/null +++ b/tto/readme.md @@ -0,0 +1,34 @@ +About Widoco output +=================== +The purpose of Widoco is to reuse and integrate existing tools for documentation, plus the set of features listed below: +* Separation of the sections of your html page so you can write them independently and replace only those needed. +* Automatic annotation in RDF-a of the html produced. +* Association of a provenance page which includes the history of your vocabulary (W3C PROV-O compliant). +* Metadata extraction from the ontology plus the means to complete it on the fly when generating your ontology. +* Guidelines on the main sections that your document should have and how to complete them. + +Widoco will create 3 different folders: +| +|-provenance (a folder including an html and RDF serialization of how the documentation page was created) +|-resources (folder with the different resources) +|-sections (folder with the different sections of the documentation, separated for easy editing. Just edit one and the main page will be updated) + +Completing ontology metadata. +=================== +Widoco uses the ontology metadata to update a configuration file. If you complete that configuration file (ended up widoco.conf), the tool will enhance your html with additional details, such as how to cite the document, previous revisions, icons with the licence, etc. + +Browser issues +========== +The result of executing Widoco is an html file. We have tested it in Mozilla, IE and Chrome, and when the page is stored in a server all the browsers work correctly. If you view the file locally, we recommend you to use Mozilla Firefox (or Internet Explorer, if you must). Google Chrome will not show the contents correctly, as it doesn't allow XMLHttpRequest without HTTP. If you want to view the page locally with Google Chrome you have two possibilities: + +a) Place the file in a server and access it via its URL (for example, put it in dropbox and access through its public url). + +b) Execute Chrome with the following commands : + +(WIN) chrome.exe --allow-file-access-from-files, + +(OSX) open /Applications/Google\ Chrome.app/ --args --allow-file-access-from-files + +(UNX) /usr/bin/google-chrome --allow-file-access-from-files + +Do you have a problem? open an issue at https://github.com/dgarijo/Widoco \ No newline at end of file diff --git a/tto/resources/extra.css b/tto/resources/extra.css new file mode 100644 index 0000000..16689d3 --- /dev/null +++ b/tto/resources/extra.css @@ -0,0 +1,124 @@ +body { + text-align: justify; +} + +h1 { + line-height: 110%; +} + +.hlist { + border: 1px solid navy; + padding:5px; + background-color: #F4FFFF; +} + +.hlist li { + display: inline; + display: inline-table; + list-style-type: none; + padding-right: 20px; + +} + +.entity { + border: 1px solid navy; + margin:5px 0px 5px 0px; + padding: 5px; +} + +.type-c { + cursor:help; + color:orange; +} + +.type-op { + cursor:help; + color:navy; +} + +.type-dp { + cursor:help; + color:green; +} + +.type-ap { + cursor:help; + color:maroon; +} + +.type-ni { + cursor:help; + color:brown; +} + +.logic { + color:purple; + font-weight:bold; +} + +h3 { + margin-top: 3px; + padding-bottom: 5px; + border-bottom: 1px solid navy; +} + +h2 { + margin-top:40px; +} + +.dotted { + border-bottom: 1px dotted gray; +} + +dt { + margin-top:5px; +} + +.description { + border-top: 1px dashed gray; + border-bottom: 1px dashed gray; + background-color: rgb(242, 243, 244); + margin-top:5px; + padding-bottom:5px; +} + +.description dl { + background-color: rgb(242, 243, 244); +} + +.description ul { + padding-left: 12px; + margin-top: 0px; +} + +.backlink { + font-size:10pt; + text-align:right; + float:right; + color:black; + padding: 2px; + border: 1px dotted navy; + background-color: #F4FFFF; +} + +.imageblock { + text-align: center; +} + +.imageblock img { + border:1px solid gray; +} + +.endnote { + margin-top: 40px; + border-top: 1px solid gray; + padding-top: 10px; + text-align: center; + color:gray; + font-size:70%; +} + +.literal { + color:green; + font-style:italic; +} \ No newline at end of file diff --git a/tto/resources/jquery.js b/tto/resources/jquery.js new file mode 100644 index 0000000..48590ec --- /dev/null +++ b/tto/resources/jquery.js @@ -0,0 +1,18 @@ +/*! + * jQuery JavaScript Library v1.6.2 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Thu Jun 30 14:16:56 2011 -0400 + */ +(function(a,b){function cv(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cs(a){if(!cg[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ch||(ch=c.createElement("iframe"),ch.frameBorder=ch.width=ch.height=0),b.appendChild(ch);if(!ci||!ch.createElement)ci=(ch.contentWindow||ch.contentDocument).document,ci.write((c.compatMode==="CSS1Compat"?"":"")+""),ci.close();d=ci.createElement(a),ci.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ch)}cg[a]=e}return cg[a]}function cr(a,b){var c={};f.each(cm.concat.apply([],cm.slice(0,b)),function(){c[this]=a});return c}function cq(){cn=b}function cp(){setTimeout(cq,0);return cn=f.now()}function cf(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ce(){try{return new a.XMLHttpRequest}catch(b){}}function b$(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bx(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function bm(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(be,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bl(a){f.nodeName(a,"input")?bk(a):"getElementsByTagName"in a&&f.grep(a.getElementsByTagName("input"),bk)}function bk(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bj(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bi(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bh(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i=0===c})}function V(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function N(a,b){return(a&&a!=="*"?a+".":"")+b.replace(z,"`").replace(A,"&")}function M(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;ic)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function K(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function E(){return!0}function D(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"$1-$2").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z])/ig,x=function(a,b){return b.toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.2",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!A){A=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a);return c===b||D.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(b,c,d){a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),d=c.documentElement,(!d||!d.nodeName||d.nodeName==="parsererror")&&e.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c
    a",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.firstChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0},m&&f.extend(p,{position:"absolute",left:-1e3,top:-1e3});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="
    ",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="
    t
    ",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0),o.innerHTML="",n.removeChild(o);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([a-z])([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g=f.expando,h=typeof c=="string",i,j=a.nodeType,k=j?f.cache:a,l=j?a[f.expando]:a[f.expando]&&f.expando;if((!l||e&&l&&!k[l][g])&&h&&d===b)return;l||(j?a[f.expando]=l=++f.uuid:l=f.expando),k[l]||(k[l]={},j||(k[l].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?k[l][g]=f.extend(k[l][g],c):k[l]=f.extend(k[l],c);i=k[l],e&&(i[g]||(i[g]={}),i=i[g]),d!==b&&(i[f.camelCase(c)]=d);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[f.camelCase(c)]||i[c]:i}},removeData:function(b,c,d){if(!!f.acceptData(b)){var e=f.expando,g=b.nodeType,h=g?f.cache:b,i=g?b[f.expando]:f.expando;if(!h[i])return;if(c){var j=d?h[i][e]:h[i];if(j){delete j[c];if(!l(j))return}}if(d){delete h[i][e];if(!l(h[i]))return}var k=h[i][e];f.support.deleteExpando||h!=a?delete h[i]:h[i]=null,k?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=k):g&&(f.support.deleteExpando?delete b[f.expando]:b.removeAttribute?b.removeAttribute(f.expando):b[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;d=e.value;return typeof d=="string"?d.replace(p,""):d==null?"":d}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);j&&(c=f.attrFix[c]||c,i=f.attrHooks[c],i||(t.test(c)?i=w:v&&c!=="className"&&(f.nodeName(a,"form")||u.test(c))&&(i=v)));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j&&(h=i.get(a,c))!==null)return h;h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.support.getSetAttribute?a.removeAttribute(b):(f.attr(a,b,""),a.removeAttributeNode(a.getAttributeNode(b))),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},tabIndex:{get:function(a){var c=a.getAttributeNode("tabIndex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}},value:{get:function(a,b){if(v&&f.nodeName(a,"button"))return v.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(v&&f.nodeName(a,"button"))return v.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);i&&(c=f.propFix[c]||c,h=f.propHooks[c]);return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==b?g:a[c]},propHooks:{}}),w={get:function(a,c){return f.prop(a,c)?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},f.support.getSetAttribute||(f.attrFix=f.propFix,v=f.attrHooks.name=f.attrHooks.title=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,c){var d=a.getAttributeNode(c);if(d){d.nodeValue=b;return b}}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var x=/\.(.*)$/,y=/^(?:textarea|input|select)$/i,z=/\./g,A=/ /g,B=/[^\w\s.|`]/g,C=function(a){return a.replace(B,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=D;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=D);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),C).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i. +shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d!=null?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},J=function(c){var d=c.target,e,g;if(!!y.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=I(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:J,beforedeactivate:J,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&J.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&J.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",I(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in H)f.event.add(this,c+".specialChange",H[c]);return y.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return y.test(this.nodeName)}},H=f.event.special.change.filters,H.focus=H.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

    ";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
    ";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g0)for(h=g;h0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=T.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a=="string")return f.inArray(this[0],a?f(a):this.parent().children());return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(V(c[0])||V(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=S.call(arguments);O.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!U[a]?f.unique(e):e,(this.length>1||Q.test(d))&&P.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var X=/ jQuery\d+="(?:\d+|null)"/g,Y=/^\s+/,Z=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,$=/<([\w:]+)/,_=/",""],legend:[1,"
    ","
    "],thead:[1,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],col:[2,"","
    "],area:[1,"",""],_default:[0,"",""]};bf.optgroup=bf.option,bf.tbody=bf.tfoot=bf.colgroup=bf.caption=bf.thead,bf.th=bf.td,f.support.htmlSerialize||(bf._default=[1,"div
    ","
    "]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(X,""):null;if(typeof a=="string"&&!bb.test(a)&&(f.support.leadingWhitespace||!Y.test(a))&&!bf[($.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Z,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j +)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bi(a,d),e=bj(a),g=bj(d);for(h=0;e[h];++h)bi(e[h],g[h])}if(b){bh(a,d);if(c){e=bj(a),g=bj(d);for(h=0;e[h];++h)bh(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!ba.test(k))k=b.createTextNode(k);else{k=k.replace(Z,"<$1>");var l=($.exec(k)||["",""])[1].toLowerCase(),m=bf[l]||bf._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=_.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&Y.test(k)&&o.insertBefore(b.createTextNode(Y.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bo.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle;c.zoom=1;var e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.filter=bn.test(g)?g.replace(bn,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bx(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(by=function(a,c){var d,e,g;c=c.replace(bp,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bz=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bq.test(d)&&br.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bx=by||bz,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bB=/%20/g,bC=/\[\]$/,bD=/\r?\n/g,bE=/#.*$/,bF=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bG=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bH=/^(?:about|app|app\-storage|.+\-extension|file|widget):$/,bI=/^(?:GET|HEAD)$/,bJ=/^\/\//,bK=/\?/,bL=/)<[^<]*)*<\/script>/gi,bM=/^(?:select|textarea)/i,bN=/\s+/,bO=/([?&])_=[^&]*/,bP=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bQ=f.fn.load,bR={},bS={},bT,bU;try{bT=e.href}catch(bV){bT=c.createElement("a"),bT.href="",bT=bT.href}bU=bP.exec(bT.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bQ)return bQ.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
    ").append(c.replace(bL,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bM.test(this.nodeName)||bG.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bD,"\r\n")}}):{name:b.name,value:c.replace(bD,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?f.extend(!0,a,f.ajaxSettings,b):(b=a,a=f.extend(!0,f.ajaxSettings,b));for(var c in{context:1,url:1})c in b?a[c]=b[c]:c in f.ajaxSettings&&(a[c]=f.ajaxSettings[c]);return a},ajaxSettings:{url:bT,isLocal:bH.test(bU[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":"*/*"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML}},ajaxPrefilter:bW(bR),ajaxTransport:bW(bS),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a?4:0;var o,r,u,w=l?bZ(d,v,l):b,x,y;if(a>=200&&a<300||a===304){if(d.ifModified){if(x=v.getResponseHeader("Last-Modified"))f.lastModified[k]=x;if(y=v.getResponseHeader("Etag"))f.etag[k]=y}if(a===304)c="notmodified",o=!0;else try{r=b$(d,w),c="success",o=!0}catch(z){c="parsererror",u=z}}else{u=c;if(!c||a)c="error",a<0&&(a=0)}v.status=a,v.statusText=c,o?h.resolveWith(e,[r,c,v]):h.rejectWith(e,[v,c,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,c]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bF.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bE,"").replace(bJ,bU[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bN),d.crossDomain==null&&(r=bP.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bU[1]&&r[2]==bU[2]&&(r[3]||(r[1]==="http:"?80:443))==(bU[3]||(bU[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bX(bR,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bI.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bK.test(d.url)?"&":"?")+d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bO,"$1_="+x);d.url=y+(y===d.url?(bK.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", */*; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bX(bS,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){status<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)bY(g,a[g],c,e);return d.join("&").replace(bB,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var b_=f.now(),ca=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+b_++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ca.test(b.url)||e&&ca.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ca,l),b.url===j&&(e&&(k=k.replace(ca,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cb=a.ActiveXObject?function(){for(var a in cd)cd[a](0,1)}:!1,cc=0,cd;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ce()||cf()}:ce,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cb&&delete cd[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cc,cb&&(cd||(cd={},f(a).unload(cb)),cd[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cg={},ch,ci,cj=/^(?:toggle|show|hide)$/,ck=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cl,cm=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cn,co=a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||a.oRequestAnimationFrame;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cr("show",3),a,b,c);for(var g=0,h=this.length;g=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b
    ";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cu.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cu.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cv(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cv(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a&&a.style?parseFloat(f.css(a,d,"padding")):null},f.fn["outer"+c]=function(a){var b=this[0];return b&&b.style?parseFloat(f.css(b,d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c];return e.document.compatMode==="CSS1Compat"&&g||e.document.body["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var h=f.css(e,d),i=parseFloat(h);return f.isNaN(i)?h:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window); \ No newline at end of file diff --git a/tto/resources/marked.min.js b/tto/resources/marked.min.js new file mode 100644 index 0000000..17021ae --- /dev/null +++ b/tto/resources/marked.min.js @@ -0,0 +1,6 @@ +/** + * marked - a markdown parser + * Copyright (c) 2011-2014, Christopher Jeffrey. (MIT Licensed) + * https://github.com/chjj/marked + */ +(function(){var block={newline:/^\n+/,code:/^( {4}[^\n]+\n*)+/,fences:noop,hr:/^( *[-*_]){3,} *(?:\n+|$)/,heading:/^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/,nptable:noop,lheading:/^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,blockquote:/^( *>[^\n]+(\n(?!def)[^\n]+)*\n*)+/,list:/^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:/^ *(?:comment|closed|closing) *(?:\n{2,}|\s*$)/,def:/^ *\[([^\]]+)\]: *]+)>?(?: +["(]([^\n]+)[")])? *(?:\n+|$)/,table:noop,paragraph:/^((?:[^\n]+\n?(?!hr|heading|lheading|blockquote|tag|def))+)\n*/,text:/^[^\n]+/};block.bullet=/(?:[*+-]|\d+\.)/;block.item=/^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/;block.item=replace(block.item,"gm")(/bull/g,block.bullet)();block.list=replace(block.list)(/bull/g,block.bullet)("hr","\\n+(?=\\1?(?:[-*_] *){3,}(?:\\n+|$))")("def","\\n+(?="+block.def.source+")")();block.blockquote=replace(block.blockquote)("def",block.def)();block._tag="(?!(?:"+"a|em|strong|small|s|cite|q|dfn|abbr|data|time|code"+"|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo"+"|span|br|wbr|ins|del|img)\\b)\\w+(?!:/|[^\\w\\s@]*@)\\b";block.html=replace(block.html)("comment",//)("closed",/<(tag)[\s\S]+?<\/\1>/)("closing",/])*?>/)(/tag/g,block._tag)();block.paragraph=replace(block.paragraph)("hr",block.hr)("heading",block.heading)("lheading",block.lheading)("blockquote",block.blockquote)("tag","<"+block._tag)("def",block.def)();block.normal=merge({},block);block.gfm=merge({},block.normal,{fences:/^ *(`{3,}|~{3,}) *(\S+)? *\n([\s\S]+?)\s*\1 *(?:\n+|$)/,paragraph:/^/});block.gfm.paragraph=replace(block.paragraph)("(?!","(?!"+block.gfm.fences.source.replace("\\1","\\2")+"|"+block.list.source.replace("\\1","\\3")+"|")();block.tables=merge({},block.gfm,{nptable:/^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/,table:/^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/});function Lexer(options){this.tokens=[];this.tokens.links={};this.options=options||marked.defaults;this.rules=block.normal;if(this.options.gfm){if(this.options.tables){this.rules=block.tables}else{this.rules=block.gfm}}}Lexer.rules=block;Lexer.lex=function(src,options){var lexer=new Lexer(options);return lexer.lex(src)};Lexer.prototype.lex=function(src){src=src.replace(/\r\n|\r/g,"\n").replace(/\t/g," ").replace(/\u00a0/g," ").replace(/\u2424/g,"\n");return this.token(src,true)};Lexer.prototype.token=function(src,top,bq){var src=src.replace(/^ +$/gm,""),next,loose,cap,bull,b,item,space,i,l;while(src){if(cap=this.rules.newline.exec(src)){src=src.substring(cap[0].length);if(cap[0].length>1){this.tokens.push({type:"space"})}}if(cap=this.rules.code.exec(src)){src=src.substring(cap[0].length);cap=cap[0].replace(/^ {4}/gm,"");this.tokens.push({type:"code",text:!this.options.pedantic?cap.replace(/\n+$/,""):cap});continue}if(cap=this.rules.fences.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"code",lang:cap[2],text:cap[3]});continue}if(cap=this.rules.heading.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"heading",depth:cap[1].length,text:cap[2]});continue}if(top&&(cap=this.rules.nptable.exec(src))){src=src.substring(cap[0].length);item={type:"table",header:cap[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:cap[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:cap[3].replace(/\n$/,"").split("\n")};for(i=0;i ?/gm,"");this.token(cap,top,true);this.tokens.push({type:"blockquote_end"});continue}if(cap=this.rules.list.exec(src)){src=src.substring(cap[0].length);bull=cap[2];this.tokens.push({type:"list_start",ordered:bull.length>1});cap=cap[0].match(this.rules.item);next=false;l=cap.length;i=0;for(;i1&&b.length>1)){src=cap.slice(i+1).join("\n")+src;i=l-1}}loose=next||/\n\n(?!\s*$)/.test(item);if(i!==l-1){next=item.charAt(item.length-1)==="\n";if(!loose)loose=next}this.tokens.push({type:loose?"loose_item_start":"list_item_start"});this.token(item,false,bq);this.tokens.push({type:"list_item_end"})}this.tokens.push({type:"list_end"});continue}if(cap=this.rules.html.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:this.options.sanitize?"paragraph":"html",pre:cap[1]==="pre"||cap[1]==="script"||cap[1]==="style",text:cap[0]});continue}if(!bq&&top&&(cap=this.rules.def.exec(src))){src=src.substring(cap[0].length);this.tokens.links[cap[1].toLowerCase()]={href:cap[2],title:cap[3]};continue}if(top&&(cap=this.rules.table.exec(src))){src=src.substring(cap[0].length);item={type:"table",header:cap[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:cap[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:cap[3].replace(/(?: *\| *)?\n$/,"").split("\n")};for(i=0;i])/,autolink:/^<([^ >]+(@|:\/)[^ >]+)>/,url:noop,tag:/^|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/,link:/^!?\[(inside)\]\(href\)/,reflink:/^!?\[(inside)\]\s*\[([^\]]*)\]/,nolink:/^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/,strong:/^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/,em:/^\b_((?:__|[\s\S])+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,code:/^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/,br:/^ {2,}\n(?!\s*$)/,del:noop,text:/^[\s\S]+?(?=[\\?(?:\s+['"]([\s\S]*?)['"])?\s*/;inline.link=replace(inline.link)("inside",inline._inside)("href",inline._href)();inline.reflink=replace(inline.reflink)("inside",inline._inside)();inline.normal=merge({},inline);inline.pedantic=merge({},inline.normal,{strong:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,em:/^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/});inline.gfm=merge({},inline.normal,{escape:replace(inline.escape)("])","~|])")(),url:/^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/,del:/^~~(?=\S)([\s\S]*?\S)~~/,text:replace(inline.text)("]|","~]|")("|","|https?://|")()});inline.breaks=merge({},inline.gfm,{br:replace(inline.br)("{2,}","*")(),text:replace(inline.gfm.text)("{2,}","*")()});function InlineLexer(links,options){this.options=options||marked.defaults;this.links=links;this.rules=inline.normal;this.renderer=this.options.renderer||new Renderer;this.renderer.options=this.options;if(!this.links){throw new Error("Tokens array requires a `links` property.")}if(this.options.gfm){if(this.options.breaks){this.rules=inline.breaks}else{this.rules=inline.gfm}}else if(this.options.pedantic){this.rules=inline.pedantic}}InlineLexer.rules=inline;InlineLexer.output=function(src,links,options){var inline=new InlineLexer(links,options);return inline.output(src)};InlineLexer.prototype.output=function(src){var out="",link,text,href,cap;while(src){if(cap=this.rules.escape.exec(src)){src=src.substring(cap[0].length);out+=cap[1];continue}if(cap=this.rules.autolink.exec(src)){src=src.substring(cap[0].length);if(cap[2]==="@"){text=cap[1].charAt(6)===":"?this.mangle(cap[1].substring(7)):this.mangle(cap[1]);href=this.mangle("mailto:")+text}else{text=escape(cap[1]);href=text}out+=this.renderer.link(href,null,text);continue}if(!this.inLink&&(cap=this.rules.url.exec(src))){src=src.substring(cap[0].length);text=escape(cap[1]);href=text;out+=this.renderer.link(href,null,text);continue}if(cap=this.rules.tag.exec(src)){if(!this.inLink&&/^/i.test(cap[0])){this.inLink=false}src=src.substring(cap[0].length);out+=this.options.sanitize?escape(cap[0]):cap[0];continue}if(cap=this.rules.link.exec(src)){src=src.substring(cap[0].length);this.inLink=true;out+=this.outputLink(cap,{href:cap[2],title:cap[3]});this.inLink=false;continue}if((cap=this.rules.reflink.exec(src))||(cap=this.rules.nolink.exec(src))){src=src.substring(cap[0].length);link=(cap[2]||cap[1]).replace(/\s+/g," ");link=this.links[link.toLowerCase()];if(!link||!link.href){out+=cap[0].charAt(0);src=cap[0].substring(1)+src;continue}this.inLink=true;out+=this.outputLink(cap,link);this.inLink=false;continue}if(cap=this.rules.strong.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.strong(this.output(cap[2]||cap[1]));continue}if(cap=this.rules.em.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.em(this.output(cap[2]||cap[1]));continue}if(cap=this.rules.code.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.codespan(escape(cap[2],true));continue}if(cap=this.rules.br.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.br();continue}if(cap=this.rules.del.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.del(this.output(cap[1]));continue}if(cap=this.rules.text.exec(src)){src=src.substring(cap[0].length);out+=escape(this.smartypants(cap[0]));continue}if(src){throw new Error("Infinite loop on byte: "+src.charCodeAt(0))}}return out};InlineLexer.prototype.outputLink=function(cap,link){var href=escape(link.href),title=link.title?escape(link.title):null;return cap[0].charAt(0)!=="!"?this.renderer.link(href,title,this.output(cap[1])):this.renderer.image(href,title,escape(cap[1]))};InlineLexer.prototype.smartypants=function(text){if(!this.options.smartypants)return text;return text.replace(/--/g,"").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1").replace(/'/g,"").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1").replace(/"/g,"").replace(/\.{3}/g,"")};InlineLexer.prototype.mangle=function(text){var out="",l=text.length,i=0,ch;for(;i.5){ch="x"+ch.toString(16)}out+="&#"+ch+";"}return out};function Renderer(options){this.options=options||{}}Renderer.prototype.code=function(code,lang,escaped){if(this.options.highlight){var out=this.options.highlight(code,lang);if(out!=null&&out!==code){escaped=true;code=out}}if(!lang){return"
    "+(escaped?code:escape(code,true))+"\n
    "}return'
    '+(escaped?code:escape(code,true))+"\n
    \n"};Renderer.prototype.blockquote=function(quote){return"
    \n"+quote+"
    \n"};Renderer.prototype.html=function(html){return html};Renderer.prototype.heading=function(text,level,raw){return"'+text+"\n"};Renderer.prototype.hr=function(){return this.options.xhtml?"
    \n":"
    \n"};Renderer.prototype.list=function(body,ordered){var type=ordered?"ol":"ul";return"<"+type+">\n"+body+"\n"};Renderer.prototype.listitem=function(text){return"
  • "+text+"
  • \n"};Renderer.prototype.paragraph=function(text){return"

    "+text+"

    \n"};Renderer.prototype.table=function(header,body){return"\n"+"\n"+header+"\n"+"\n"+body+"\n"+"
    \n"};Renderer.prototype.tablerow=function(content){return"\n"+content+"\n"};Renderer.prototype.tablecell=function(content,flags){var type=flags.header?"th":"td";var tag=flags.align?"<"+type+' style="text-align:'+flags.align+'">':"<"+type+">";return tag+content+"\n"};Renderer.prototype.strong=function(text){return""+text+""};Renderer.prototype.em=function(text){return""+text+""};Renderer.prototype.codespan=function(text){return""+text+""};Renderer.prototype.br=function(){return this.options.xhtml?"
    ":"
    "};Renderer.prototype.del=function(text){return""+text+""};Renderer.prototype.link=function(href,title,text){if(this.options.sanitize){try{var prot=decodeURIComponent(unescape(href)).replace(/[^\w:]/g,"").toLowerCase()}catch(e){return""}if(prot.indexOf("javascript:")===0){return""}}var out='
    ";return out};Renderer.prototype.image=function(href,title,text){var out=''+text+'":">";return out};function Parser(options){this.tokens=[];this.token=null;this.options=options||marked.defaults;this.options.renderer=this.options.renderer||new Renderer;this.renderer=this.options.renderer;this.renderer.options=this.options}Parser.parse=function(src,options,renderer){var parser=new Parser(options,renderer);return parser.parse(src)};Parser.prototype.parse=function(src){this.inline=new InlineLexer(src.links,this.options,this.renderer);this.tokens=src.reverse();var out="";while(this.next()){out+=this.tok()}return out};Parser.prototype.next=function(){return this.token=this.tokens.pop()};Parser.prototype.peek=function(){return this.tokens[this.tokens.length-1]||0};Parser.prototype.parseText=function(){var body=this.token.text;while(this.peek().type==="text"){body+="\n"+this.next().text}return this.inline.output(body)};Parser.prototype.tok=function(){switch(this.token.type){case"space":{return""}case"hr":{return this.renderer.hr()}case"heading":{return this.renderer.heading(this.inline.output(this.token.text),this.token.depth,this.token.text)}case"code":{return this.renderer.code(this.token.text,this.token.lang,this.token.escaped)}case"table":{var header="",body="",i,row,cell,flags,j;cell="";for(i=0;i/g,">").replace(/"/g,""").replace(/'/g,"'")}function unescape(html){return html.replace(/&([#\w]+);/g,function(_,n){n=n.toLowerCase();if(n==="colon")return":";if(n.charAt(0)==="#"){return n.charAt(1)==="x"?String.fromCharCode(parseInt(n.substring(2),16)):String.fromCharCode(+n.substring(1))}return""})}function replace(regex,opt){regex=regex.source;opt=opt||"";return function self(name,val){if(!name)return new RegExp(regex,opt);val=val.source||val;val=val.replace(/(^|[^\[])\^/g,"$1");regex=regex.replace(name,val);return self}}function noop(){}noop.exec=noop;function merge(obj){var i=1,target,key;for(;iAn error occured:

    "+escape(e.message+"",true)+"
    "}throw e}}marked.options=marked.setOptions=function(opt){merge(marked.defaults,opt);return marked};marked.defaults={gfm:true,tables:true,breaks:false,pedantic:false,sanitize:false,smartLists:false,silent:false,highlight:null,langPrefix:"lang-",smartypants:false,headerPrefix:"",renderer:new Renderer,xhtml:false};marked.Parser=Parser;marked.parser=Parser.parse;marked.Renderer=Renderer;marked.Lexer=Lexer;marked.lexer=Lexer.lex;marked.InlineLexer=InlineLexer;marked.inlineLexer=InlineLexer.output;marked.parse=marked;if(typeof module!=="undefined"&&typeof exports==="object"){module.exports=marked}else if(typeof define==="function"&&define.amd){define(function(){return marked})}else{this.marked=marked}}).call(function(){return this||(typeof window!=="undefined"?window:global)}()); \ No newline at end of file diff --git a/tto/resources/owl.css b/tto/resources/owl.css new file mode 100644 index 0000000..9c00876 --- /dev/null +++ b/tto/resources/owl.css @@ -0,0 +1,248 @@ +.RFC2119 { + text-transform: lowercase; + font-style: italic; +} +.nonterminal { + font-weight: bold; + font-family: sans-serif; + font-size: 95%; +} +#abstract br { + /* doesn't work right SOMETIMES + margin-bottom: 1em; */ +} +.name { + font-family: monospace; +} +.buttonpanel { + margin-top: 1ex; + margin-bottom: 1ex; + padding-left: 1ex; + padding-right: 1ex; + padding-top: 1ex; + padding-bottom: 0.6ex; + border: 1px dotted black; +} +.grammar { + margin-top: 1ex; + margin-bottom: 1ex; + padding-left: 1ex; + padding-right: 1ex; + padding-top: 1ex; + padding-bottom: 0.6ex; + border: 1px dashed #2f6fab; + font-family: monospace; +} +.image { + text-align: center; +} +.centered { + text-align: center; + padding-top: 4ex; + padding-bottom: 4ex; +} +.centered table { + margin: 0 auto; + text-align: left; +} +.caption { + font-weight: bold; +} +.indent { + margin-left: 20px; +} +.atrisknote { + padding: 5px; + margin-top: 10px; + margin-bottom: 10px; + border: solid 2px blue; + background-color: #FFA; +} +.atrisknotehead { + font-style: italic; +} + +/* Stying the examples. */ + +.anexample:before { + content: "Example:"; + font-family: sans-serif; + font-size: 1.6ex; + font-weight: bold; +} +.anexample { + margin-top: 1ex; + margin-bottom: 1ex; + padding-left: 1ex; + padding-right: 1ex; + padding-top: 1ex; + padding-bottom: 0.6ex; + border: 1px dashed #2f6fab; + background-color: #f9f9f9; +} +.anexample table { + background-color: #f9f9f9; +} + +/* Styling the parts in the functional-style syntax. */ + +div.fss { + margin-top: 10px; + margin-bottom: 10px; + margin-left: 20px; + margin-right: 20px; + font-family: monospace; +} +table.fss { + margin: 0px 0px 0px 0px; + padding: 0px 0px 0px 0px; + width: 100%; +} +table.fss caption.fss { + font-size: 1.5ex; + font-weight: bold; + text-align: left; + padding-left: 10px; +} +table.fss td:first-child { + font-family: monospace; + padding-left: 20px; + padding-right: 20px; + width: 60%; +} +table{ + background-color: #f4ffff; + border: 1px solid navy; + margin: 20px; + vertical-align: middle; +} +table td { + padding: 5px 15px; + text-align: left; +} + +/* Styling the parts in the RDF syntax. */ + +div.rdf{ + margin-top: 10px; + margin-bottom: 10px; + margin-left: 20px; + margin-right: 20px; + font-family: monospace; +} +table.rdf { + margin: 0px 0px 0px 0px; + padding: 0px 0px 0px 0px; + width: 100%; +} +table.rdf caption.rdf { + font-size: 1.5ex; + font-weight: bold; + text-align: left; + padding-left: 10px; +} +table.rdf td:first-child { + font-family: monospace; + padding-left: 20px; + padding-right: 20px; + width: 60%; +} + +/* Styling the XML syntax. */ + +div.xmlsyn { + margin-top: 10px; + margin-bottom: 10px; + margin-left: 20px; + margin-right: 20px; + font-family: monospace; +} +div.axioms { + margin-top: 10px; + margin-bottom: 10px; + margin-left: 20px; + margin-right: 20px; +} + +/* Other styles. */ + +table.complexity td { + text-align: center; +} +table.allname td { + font-family: monospace; +} +table.canonicalparsing { + margin-left: 20px; + border-style: none; +} +table.canonicalparsing td { + vertical-align: top; + padding: 2px 2px 2px 2px; +} +table.canonicalparsing td.two { + padding-left: 30px; +} + +/* The following are classes for templates used in the editing process. */ + +.review { + padding: 5px; + border: solid 1px black; + margin-left: 10%; + margin-top: 10px; + margin-bottom: 10px; + background-color: #FFA; + font-size: smaller; +} +.reviewauthor { + font-size: smaller; + font-style: italic; +} +.ednote { + padding: 5px; + border: solid 1px black; + margin-top: 10px; + margin-bottom: 10px; +} +.ednotehead { + font-weight: bold; +} + +/* override mediawiki's beautiful DL styling... */ +dl { + background: white; + width: 100%; + border: none; + margin-top: 0; + margin-bottom: 0; + padding-top: 0; + padding-bottom: 0; +} + +div { + margin-top: 0; + margin-bottom: 0; +} +#fulltitle { + font-size: 140%; + font-weight: bold; +} + +.xml { + color: red +} + +.rdbms{ +color: red +} + +/* just copying from wiki, so it stays through TR. Currently + affects Primer, at least */ +pre { + background-color:#F9F9F9; + border:1px dashed #2F6FAB; + color:black; + line-height:1.1em; + padding:1em; +} \ No newline at end of file diff --git a/tto/resources/primer.css b/tto/resources/primer.css new file mode 100644 index 0000000..3136dac --- /dev/null +++ b/tto/resources/primer.css @@ -0,0 +1,103 @@ +/* define a class "noprint" for sections which don't get printed */ +.noprint { display: none; } + +/* our syntax menu for switching */ +div.syntaxmenu { + border: 1px dotted black; + padding:0.5em; + margin: 1em; +} + +.container { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; +} + +@media print { + div.syntaxmenu { display:none; } +} + +/* use tab-like headers for syntax examples */ +div.exampleheader { + font-size: 90%; + float: left; + background: #F9F9F9; + color: #2F6FAB; + border: 1px dashed #2F6FAB; + border-bottom: 0px; + padding-top: 2px; +} + +div.exampleheader span.exampleheader { + background: #F9F9F9; + padding-top: 0px; + padding-right: 10px; + padding-left: 10px; + padding-bottom: 3px; + padding-top: 0px; +} + +/* Also copy MediaWiki style here, so it will not look different when exported */ +div.fssyntax pre, div.rdfxml pre, div.owlxml pre, div.turtle pre, div.manchester pre { + background-color: #F9F9F9; + border: 1px dashed #2F6FAB; + color: black; + line-height: 1.1em; + padding: 1em; + clear: both; + margin-left: 0em; +} +/* Expansion to add the status*/ +.status { + position: fixed; + left: 0em; + top: 0em; + text-align: right; + vertical-align: middle; + /* Square version of the inside span. Slightly larger */ + width: 26em; + height: 26em; + z-index: -1; + opacity: 0.8; + + /** From http://stackoverflow.com/questions/1080792/how-to-draw-vertical-text-with-css-cross-browser */ + + -webkit-transform: rotate(-90deg); + -moz-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + -o-transform: rotate(-90deg); + transform: rotate(-90deg); + /* also accepts left, right, top, bottom coordinates; not + * required, but a good idea for styling */ + -webkit-transform-origin: 50% 50%; + -moz-transform-origin: 50% 50%; + -ms-transform-origin: 50% 50%; + -o-transform-origin: 50% 50%; + transform-origin: 50% 50%; + + /* Should be unset in IE9+ I think. */ + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); +} + +/* The actual status box */ + .status div { + display: block; + background: rgb(0, 90, 156); + color: white; + width: 24em; + padding-top: 0.3em; + padding-left: 0em; + padding-right: 5em; + padding-bottom: 0.3em; + /* Enable for debugging + border: red thin solid; + */ +} + +/* And text inside, don't confuse fonts as it breaks em above */ +.status div span { + font-family: "Tauri"; + font-size: larger; +} \ No newline at end of file diff --git a/tto/resources/rec.css b/tto/resources/rec.css new file mode 100644 index 0000000..d8a1ff2 --- /dev/null +++ b/tto/resources/rec.css @@ -0,0 +1,88 @@ +/* Style for a "Recommendation" */ + +/* + Copyright 1997-2003 W3C (MIT, ERCIM, Keio). All Rights Reserved. + The following software licensing rules apply: + http://www.w3.org/Consortium/Legal/copyright-software */ + +/* $Id: base.css,v 1.25 2006/04/18 08:42:53 bbos Exp $ */ + +body { + padding: 2em 1em 2em 70px; + margin: 0; + font-family: sans-serif; + color: black; + background: white; + background-position: top left; + background-attachment: fixed; + background-repeat: no-repeat; + counter-reset:section; +} +:link { color: #00C; background: transparent } +:visited { color: #609; background: transparent } +a:active { color: #C00; background: transparent } + +a:link img, a:visited img { border-style: none } /* no border on img links */ + +a img { color: white; } /* trick to hide the border in Netscape 4 */ +@media all { /* hide the next rule from Netscape 4 */ + a img { color: inherit; } /* undo the color change above */ +} + +th, td { /* ns 4 */ + font-family: sans-serif; +} + +h1, h2, h3, h4, h5, h6 { text-align: left } +h2.list{counter-reset:subsection } +h2.list:before{counter-increment:section;content: counter(section) ". ";} +h3.list:before{counter-increment:subsection;content: counter(section) "." counter(subsection) ". "; + } +h3.list{margin-top: 20px; + border-bottom: 0px; } +/* background should be transparent, but WebTV has a bug */ +h1, h2, h3 { color: #005A9C; background: white } +h1 { font: 170% sans-serif } +h2 { font: 140% sans-serif } +h3 { font: 120% sans-serif } +h4 { font: bold 100% sans-serif } +h5 { font: italic 100% sans-serif } +h6 { font: small-caps 100% sans-serif } + +.hide { display: none } + +div.head { margin-bottom: 1em } +div.head h1 { margin-top: 2em; clear: both } +div.head table { margin-left: 2em; margin-top: 2em } + +p.copyright { font-size: small } +p.copyright small { font-size: small } + +@media screen { /* hide from IE3 */ +a[href]:hover { background: #ffa } +} + +pre { margin-left: 2em } +/* +p { + margin-top: 0.6em; + margin-bottom: 0.6em; +} +*/ +dt, dd { margin-top: 0; margin-bottom: 0 } /* opera 3.50 */ +dt { font-weight: bold } + +pre, code { font-family: monospace } /* navigator 4 requires this */ + +ul.toc, ol.toc { + list-style: disc; /* Mac NS has problem with 'none' */ + list-style: none; +} + +@media aural { + h1, h2, h3 { stress: 20; richness: 90 } + .hide { speak: none } + p.copyright { volume: x-soft; speech-rate: x-fast } + dt { pause-before: 20% } + pre { speak-punctuation: code } +} diff --git a/tto/webvowl/css/webvowl.app.css b/tto/webvowl/css/webvowl.app.css new file mode 100644 index 0000000..45526ce --- /dev/null +++ b/tto/webvowl/css/webvowl.app.css @@ -0,0 +1,2477 @@ +@import url(http://fonts.googleapis.com/css?family=Open+Sans);/*---------------------------------------------- + WebVOWL page +----------------------------------------------*/ +html { + -ms-content-zooming: none; +} + + + +#loading-progress { + width: 50%; + margin: 10px 0; +} + +#drag_dropOverlay{ + width: 100%; + height:100%; + position:absolute; + top:0; + opacity: 0.5; + background-color: #3071a9; + pointer-events: none; + +} + +#dragDropContainer{ + width: 100%; + height:100%; + position:absolute; + top:0; + pointer-events: none; +} +#drag_icon_group{ + + +} + +#drag_msg{ + width: 50%; + background-color: #fefefe; + height: 50%; + border: black 2px solid; + border-radius: 20px; + left: 25%; + position: absolute; + top: 25%; + vertical-align: middle; + line-height: 10px; + text-align: center; + pointer-events: none; + padding: 10px; + font-size: 1.5em; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + + +#layoutLoadingProgressBarContainer { + height: 50px; + text-align: left; + line-height: 1.5; +} + +#FPS_Statistics { + /*position : absolute;*/ + /*top : 10px;*/ + /*right: 50px;*/ + padding-left: 60px; + padding-top: 60px; +} + +#reloadCachedOntology { + /*position : absolute;*/ + /*top : 10px;*/ + /*right: 50px;*/ +} + +#additionalInformationContainer { + position: absolute; + top: 10px; + right: 50px; +} + +#modeOfOperationString { + /*position: absolute;*/ + /*right: 50px;*/ + /*top : 60px;*/ + padding-left: 34px; +} + +#direct-text-input { + border: 1px solid #34495e; + width: 100%; + margin-top: 5px; + cursor: pointer; +} + +#directUploadBtn, #close_directUploadBtn { + border: 1px solid #34495e; + width: 100%; + margin-top: 5px; + cursor: pointer +} + +#di_controls { + +} + +#di_controls > ul { + list-style: none; + margin: 0; + padding: 5px 0 0 5px; + +} + +#progressBarContext { + border-radius: 10px; + background-color: #bdc3c7; + height: 25px; + border: solid 1px black; + + margin: auto; + +} + +#progressBarValue { + border-radius: 9px; + width: 0%; + background-color: #2980b9; + height: 25px; + line-height: 1.5; + text-align: center; +} + +/** adding searching Styles **/ +.dbEntry { + background-color: #ffffff; + color: #2980b9; + padding: 10px; + font-size: 14px; + border: none; + cursor: pointer; +} + +.debugOption { + +} + +.dbEntrySelected { + background-color: #bdc3c7; + color: #2980b9; + padding: 10px; + font-size: 14px; + border: none; + cursor: pointer; +} + +.dbEntry:hover, .dbEntry:focus { + background-color: #bdc3c7; +} + +.searchMenuEntry { + background-color: #ffffff; + bottom: 0; + font-size: 14px; + min-width: 50px; + margin: 0; + padding: 0; + z-index: 99; + border-radius: 4px 4px 0 0; + border: 1px solid rgba(0, 0, 0, 0.15); + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + box-sizing: border-box; + border-bottom: none; + display: none; + position: absolute; + list-style: none; +} + +.searchInputText { + background-color: #ffffff; + color: black; + border: black; + text-decoration: none; + max-width: 150px; + overflow: hidden; + text-overflow: ellipsis; + /*height: 20px;*/ + margin: 0; +} + +img, iframe { + border: none; +} + +.hidden { + display: none !important; +} + +.clear { + clear: both; +} + +a { + color: #69c; + text-decoration: none; +} + +a:hover { + color: #3498db; +} + +#optionsArea a { + color: #2980b9; +} + +#optionsArea a.highlighted { + background-color: #d90; +} + +.toolTipMenu li.highlighted { + background-color: #feb; +} + +#browserCheck { + /* checking for IE where WebVOWL is not working */ + background-color: #f00; + padding: 5px 0; + position: absolute; + text-align: center; + width: 100%; +} + +#browserCheck a { + color: #fff; +} + +#browserCheck a:hover { + text-decoration: underline; +} + +/*---------------------------------------------- + SideBar Animation Class; +----------------------------------------------- */ +@-webkit-keyframes sbExpandAnimation { + 0% { + width: 78%; + } + 100% { + width: 100%; + } +} + +@-moz-keyframes sbExpandAnimation { + 0% { + width: 78%; + } + 100% { + width: 100%; + } +} + +@-o-keyframes sbExpandAnimation { + 0% { + width: 78%; + } + 100% { + width: 100%; + } +} + +@keyframes sbExpandAnimation { + 0% { + width: 78%; + } + 100% { + width: 100%; + } +} + +/*Collapse Animation*/ +@-webkit-keyframes sbCollapseAnimation { + 0% { + width: 100%; + } + 100% { + width: 78%; + } +} + +@-moz-keyframes sbCollapseAnimation { + 0% { + width: 100%; + } + 100% { + width: 78%; + } +} + +@-o-keyframes sbCollapseAnimation { + 0% { + width: 100%; + } + 100% { + width: 78%; + } +} + +@keyframes sbCollapseAnimation { + 0% { + width: 100%; + } + 100% { + width: 78%; + } +} + +/*---------------------------------------------- + SideBar Animation Class; +----------------------------------------------- */ +@-webkit-keyframes l_sbExpandAnimation { + 0% { + width: 0px; + } + 100% { + width: 200px; + } +} + +@-moz-keyframes l_sbExpandAnimation { + 0% { + width: 0px; + } + 100% { + width: 200px; + } +} + +@-o-keyframes l_sbExpandAnimation { + 0% { + width: 0px; + } + 100% { + width: 200px; + } +} + +@keyframes l_sbExpandAnimation { + 0% { + width: 0px; + } + 100% { + width: 200px; + } +} + +/*Collapse Animation*/ +@-webkit-keyframes l_sbCollapseAnimation { + 0% { + width: 200px; + } + 100% { + width: 0px; + } +} + +@-moz-keyframes l_sbCollapseAnimation { + 0% { + width: 200px; + } + 100% { + width: 0px; + } +} + +@-o-keyframes l_sbCollapseAnimation { + 0% { + width: 200px; + } + 100% { + width: 0px; + } +} + +@keyframes l_sbCollapseAnimation { + 0% { + width: 200px; + } + 100% { + width: 0px; + } +} + +/*----------------- WARNING ANIMATIONS-------------*/ + +/*---------------------------------------------- + SideBar Animation Class; +----------------------------------------------- */ +@-webkit-keyframes warn_ExpandAnimation { + 0% { + top: -500px; + } + 100% { + top: 0; + } +} + +@-moz-keyframes warn_ExpandAnimation { + 0% { + top: -500px; + } + 100% { + top: 0; + } +} + +@-o-keyframes warn_ExpandAnimation { + 0% { + top: -500px; + } + 100% { + top: 0; + } +} + +@keyframes warn_ExpandAnimation { + 0% { + top: -500px; + } + 100% { + top: 0; + } +} + +/*Collapse Animation*/ +@-webkit-keyframes warn_CollapseAnimation { + 0% { + top: 0; + } + 100% { + top: -400px; + } +} + +@-moz-keyframes warn_CollapseAnimation { + 0% { + top: 0; + } + 100% { + top: -400px; + } +} + +@-o-keyframes warn_CollapseAnimation { + 0% { + top: 0; + } + 100% { + top: -400px; + } +} + +@keyframes warn_CollapseAnimation { + 0% { + top: 0; + } + 100% { + top: -400px; + } +} + +@keyframes msg_CollapseAnimation { + 0% { + top: 0; + } + 100% { + top: -400px; + } +} + +/*// add expand and collaps width for the warn module*/ +@-webkit-keyframes warn_ExpandLeftBarAnimation { + 0% { + left: 0; + } + 100% { + left: 100px; + } +} + +@-moz-keyframes warn_ExpandLeftBarAnimation { + 0% { + left: 0; + } + 100% { + left: 100px; + } +} + +@-o-keyframes warn_ExpandLeftBarAnimation { + 0% { + left: 0; + } + 100% { + left: 100px; + } +} + +@keyframes warn_ExpandLeftBarAnimation { + 0% { + left: 0; + } + 100% { + left: 100px; + } +} + +/*Collapse Animation*/ +@-webkit-keyframes warn_CollapseLeftBarAnimation { + 0% { + left: 100px; + } + 100% { + left: 0; + } +} + +@-moz-keyframes warn_CollapseLeftBarAnimation { + 0% { + left: 100px; + } + 100% { + left: 0; + } +} + +@-o-keyframes warn_CollapseLeftBarAnimation { + 0% { + left: 100px; + } + 100% { + left: 0; + } +} + +@keyframes warn_CollapseLeftBarAnimation { + 0% { + left: 100px; + } + 100% { + left: 0; + } +} + +/*// same for the right side expansion*/ + +/*// add expand and collaps width for the warn module*/ +@-webkit-keyframes warn_ExpandRightBarAnimation { + 0% { + width: 100%; + } + 100% { + width: 78%; + } +} + +@-moz-keyframes warn_ExpandRightBarAnimation { + 0% { + width: 100%; + } + 100% { + width: 78%; + } +} + +@-o-keyframes warn_ExpandRightBarAnimation { + 0% { + width: 100%; + } + 100% { + width: 78%; + } +} + +@keyframes warn_ExpandRightBarAnimation { + 0% { + width: 100%; + } + 100% { + width: 78%; + } + +} + +/*Collapse Animation*/ +@-webkit-keyframes warn_CollapseRightBarAnimation { + 0% { + width: 78%; + } + 100% { + width: 100%; + } +} + +@-moz-keyframes warn_CollapseRightBarAnimation { + 0% { + width: 78%; + } + 100% { + width: 100%; + } +} + +@-o-keyframes warn_CollapseRightBarAnimation { + 0% { + width: 78%; + } + 100% { + width: 100%; + } +} + +@keyframes warn_CollapseRightBarAnimation { + 0% { + width: 78%; + } + 100% { + width: 100%; + } +} + +/*---------------------------------------------- + LAYOUT +----------------------------------------------*/ +body { + background: rgb(24, 32, 42); + height: 100%; + font-size: 14px; + font-family: 'Open Sans', Helvetica, Arial, sans-serif; + line-height: 1; + margin: 0; + overflow: hidden; + padding: 0; + position: fixed; + width: 100%; +} + +main { + height: 100%; + margin: 0; + padding: 0; + position: relative; + width: 100%; +} + +#canvasArea { + position: relative; + margin: 0; + padding: 0; + width: 78%; +} + +#canvasArea #graph { + box-sizing: border-box; + margin: 0 0 2px 0; + background-color: #ecf0f1; + overflow: hidden; + padding: 0; + width: 100%; +} + +#canvasArea svg { + box-sizing: border-box; + margin: 0; + overflow: hidden; + padding: 0; +} + +#logo { + position: fixed; + /*padding: 10px;*/ + pointer-events: none; + /*border: solid 1px red;*/ +} + +#logo h2 { + color: #3498db; + margin: 0; + line-height: 0.7; + text-align: center; + font-size: 24px; +} + +#logo h2 span { + color: #34495E; + /*font-size: min(2vmin, 24px);*/ + font-size: 16px; +} + +@media screen and (max-device-height: 800px) { + #logo h2 { + font-size: calc(8px + 1.0vmin); + } + + #logo h2 span { + font-size: calc(3px + 1.0vmin); + } +} + +@media screen and (max-height: 800px) { + #logo h2 { + font-size: calc(8px + 1.0vmin); + } + + #logo h2 span { + font-size: calc(3px + 1.0vmin); + } +} + +@media screen and (max-device-width: 1200px) { + #logo h2 { + font-size: calc(8px + 1.0vmin); + } + + #logo h2 span { + font-size: calc(3px + 1.0vmin); + } +} + +@media screen and (max-width: 1200px) { + #logo h2 { + font-size: calc(8px + 1.0vmin); + } + + #logo h2 span { + font-size: calc(3px + 1.0vmin); + } +} + +.checkboxContainer input, .checkboxContainer label { + vertical-align: middle; +} + +.selected-ontology { + background-color: #eee; +} + +#credits { + border-top: solid 1px #bdc3c7; + font-size: 0.9em; +} + +.slideOption { + position: relative; + padding: 8px 5px; + outline: none; +} + +.slideOption .value { + float: right; + outline: none; +} + +.slideOption input[type="range"] { + box-sizing: border-box; + margin: 0; + outline: none; + -webkit-appearance: none; + -moz-appearance: none; + border-radius: 3px; + height: 12px; + width: 100%; + box-shadow: none; + left: 0; + position: relative; + transition: all 0.5s ease; + background-color: #eee; +} + +/*TRACK*/ +.slideOption input[type=range]::-webkit-slider-runnable-track { + -webkit-appearance: none; + background-color: #3071a9; + height: 3px; +} + +.slideOption input[type=range]::-moz-range-track { + -webkit-appearance: none; + background-color: #3071a9; + height: 3px; +} + +.slideOption input[type="range"]:hover { + outline: none; +} + +/*THUMB*/ +.slideOption input[type="range"]::-webkit-slider-thumb { + -webkit-appearance: none; + background-color: white; + border-radius: 3px; + border: solid 1px black; + transition: all 0.5s ease; + height: 10px; + width: 30px; + outline: none; + margin-top: -3px; +} + +.slideOption input[type="range"]::-moz-range-thumb { + -webkit-appearance: none; + background-color: white; + border-radius: 3px; + border: solid 1px black; + transition: all 0.5s ease; + height: 10px; + width: 30px; + outline: none; +} + +.slideOption input[type="range"]::-moz-range-thumb:hover { + background-color: #d90; + outline: none; +} + +.slideOption input[type="range"]::-webkit-slider-thumb:hover { + background-color: #d90; + /*color: #d90;*/ + outline: none; +} + +/*focus : remove border*/ +.slideOption input[type="range"]:focus { + outline: none; +} + +.slideOption input[type="range"]:active { + outline: none; +} + +.slideOption input[type="range"]::-moz-range-thumb:focus { + outline: none; +} + +.slideOption input[type="range"]::-moz-range-thumb:active { + outline: none; +} + +.slideOption input[type="range"]::-webkit-slider-thumb:focus { + outline: none; +} + +.slideOption input[type="range"]::-webkit-slider-thumb:active { + outline: none; +} + +.slideOption input[type="range"]:disabled { + box-sizing: border-box; + margin: 0; + outline: none; + -webkit-appearance: none; + -moz-appearance: none; + border-radius: 3px; + height: 12px; + width: 100%; + box-shadow: none; + left: 0; + position: relative; + transition: all 0.5s ease; + background-color: #787878; +} + +/*TRACK*/ +.slideOption input[type=range]:disabled::-webkit-slider-runnable-track { + -webkit-appearance: none; + background-color: #373737; + height: 3px; +} + +.slideOption input[type=range]:disabled::-moz-range-track { + -webkit-appearance: none; + background-color: #373737; + height: 3px; +} + +.slideOption input[type="range"]:disabled { + outline: none; +} + +/*THUMB*/ +.slideOption input[type="range"]:disabled::-webkit-slider-thumb { + -webkit-appearance: none; + background-color: #363636; + border-radius: 3px; + border: solid 1px #aaaaaa; + transition: all 0.5s ease; + height: 10px; + width: 30px; + outline: none; + margin-top: -3px; +} + +.slideOption input[type="range"]:disabled::-moz-range-thumb { + -webkit-appearance: none; + background-color: #aaaaaa; + border-radius: 3px; + border: solid 1px black; + transition: all 0.5s ease; + height: 10px; + width: 30px; + outline: none; +} + +.slideOption input[type="range"]:disabled::-moz-range-thumb { + background-color: #aaaaaa; + outline: none; +} + +.slideOption input[type="range"]:disabled::-webkit-slider-thumb { + background-color: #aaaaaa; + /*color: #d90;*/ + outline: none; +} + +.slideOption input[type="range"]:disabled:hover::-moz-range-thumb { + background-color: #404040; + outline: none; +} + +.slideOption input[type="range"]:disabled:hover::-webkit-slider-thumb { + background-color: #404040; + /*color: #d90;*/ + outline: none; +} + +#detailsArea { + top: 0; + right: 0; + bottom: 0; + color: #bdc3c7; + height: 100%; + width: 22%; + overflow-y: auto; + overflow-x: hidden; + position: fixed; + border-left: 1px solid #34495E; +} + +#detailsArea h1 { + border-bottom: solid 1px #34495e; + color: #ecf0f1; + display: block; + font-weight: 100; + font-size: 1.5em; + margin: 0; + padding: 10px 0; + text-align: center; +} + +#generalDetails { + width: auto; + box-sizing: border-box; + height: 100%; +} + +#generalDetails span #about { + border-bottom: solid 1px #34495e; + display: block; + padding: 10px; + text-align: center; + word-wrap: break-word; + color: #69c; +} + +#generalDetails h4 { + background: rgb(27, 37, 46); + color: #ecf0f1; + display: block; + font-size: 1.1em; + font-weight: 100; + margin: 0; + padding: 10px 0; + text-align: center; +} + +#detailsArea #generalDetails h5 { + border-bottom: solid 1px #34495e; + font-size: 0.9em; + font-weight: 100; + margin: 0; + padding: 5px; + text-align: center; +} + +#description { + text-align: justify; +} + +.accordion-container p { + font-size: 0.9em; + line-height: 1.3; + margin: 5px 10px; +} + +.statisticDetails span { + font-weight: 100; + font-style: italic; + margin: 10px 0; + padding: 10px; +} + +.statisticDetails div { + font-weight: 100; + font-style: italic; + margin: 10px 0; + padding: 0 10px; + display: inline; +} + +#selection-details .propDetails a { + color: #69c; +} + +#selection-details .propDetails > span { + font-weight: 100; + font-style: italic; + padding: 0 10px; +} + +#selection-details #classEquivUri span, #selection-details #disjointNodes span { + padding: 0; +} + +#selection-details .propDetails div { + font-weight: 100; + font-style: italic; + margin: 10px 0; + padding: 0 10px; + display: inline; +} + +#selection-details .propDetails div span { + padding: 0; +} + +/* give subclass property the same background color as the canvas */ +.subclass { + fill: #ecf0f1; +} + +.accordion-trigger { + background: #24323e; + cursor: pointer; + padding: .5em; +} + +.accordion-trigger.accordion-trigger-active:before { + padding-right: 4px; + content: "\25BC" +} + +.accordion-trigger:not(.accordion-trigger-active):before { + padding-right: 4px; + content: "\25BA" +} + +.accordion-container.scrollable { + max-height: 40%; + overflow: auto; +} + +.small-whitespace-separator { + height: 3px; +} + +#language { + background: transparent; + border: 1px solid #34495E; + color: #ecf0f1; +} + +#language option { + background-color: #24323e; +} + +.converter-form:not(:first-child) { + margin-top: 5px; +} + +.converter-form label { + display: inline-block; + line-height: normal; +} + +.converter-form input { + box-sizing: border-box; + height: 20px; + width: 74%; + border: 1px solid #34495E; +} + +.converter-form button { + cursor: pointer; + float: right; + height: 20px; + padding: 0; + width: 25%; + border: 1px solid #34495E; + background-color: #ecf0f1; +} + +#file-converter-label { + border: 1px solid #34495E; + box-sizing: border-box; + cursor: pointer; + height: 20px; + width: 74%; +} + +#killWarning { + cursor: pointer; + color: #ffffff; + font-weight: bold; +} + +/*#copyBt{*/ +/*box-sizing: border-box;*/ +/*color: #000000;*/ +/*float:right;*/ +/*position:absolute;*/ +/*right:2px;*/ +/*padding: 2px 7px 3px 7px;*/ +/*border: 1px solid #000000;*/ +/*background-color: #ecf0f1;*/ +/*cursor: pointer;*/ +/*}*/ + +#copyBt { + box-sizing: border-box; + height: 20px; + width: 31%; + border: 1px solid #34495E; +} + +#sidebarExpandButton { + height: 24px; + width: 24px; + /*background-color: white;*/ + /*box-shadow: 0px 1px 1px grey;*/ + box-sizing: border-box; + top: 10px; + color: #000000; + float: right; + position: absolute; + right: 0; + border: 1px solid #000000; + + text-align: center; + font-size: 1.5em; + cursor: pointer; +} + +.dropdownMenuClass { + height: 20px; + /*width: 69%;*/ + float: right; + border: 1px solid #34495E; + background-color: #34495E; + color: white; + /*border-bottom: 1px solid #d90;*/ + text-align: left; + width: auto; +} + +#typeEditForm_datatype { + padding-top: 5px; +} + +#typeEditor { + width: 165px; +} + +#typeEditor_datatype { + width: 165px; +} + +#leftSideBarCollapseButton { + box-sizing: border-box; + top: 50px; + /*padding:5px;*/ + color: #000000; + position: absolute; + left: 200px; + border: 1px solid #000000; + /*background-color: #ecf0f1;*/ + cursor: pointer; + width: 24px; + height: 24px; + font-size: 1.5em; + text-align: center; +} + +#leftSideBarCollapseButton:hover { + background-color: #d90; +} + +#sidebarExpandButton:hover { + background-color: #d90; +} + +.spanForCharSelection { + padding-left: 25px; +} + +.nodeEditSpan { + color: #000; + background-color: #fff; + text-align: center; + /*overflow: auto;*/ + border: none; + padding-top: 6px; +} + +.nodeEditSpan:focus { + outline: none; + border: none; +} + +.foreignelements { + /*width: 80px;*/ + /*height: 3px;*/ + border: none; +} + +.foreignelements:focus { + outline: none; + border: none; +} + +#leftSideBarContent { + color: #000000; + float: left; + position: absolute; + left: 0; + /*border: 1px solid #000000;*/ + background-color: rgb(24, 32, 42); + width: 100%; + height: 100%; +} + +#leftSideBarContent > h3 { + color: #ecf0f1; + display: block; + font-size: 1.1em; + font-weight: 100; + margin: 0 0 5px 0; + padding: 10px 0; + text-align: left; +} + +#generalDetailsEdit { + /*color: #ecf0f1;*/ + color: #ecf0f1; +} + +#generalDetailsEdit > div { + padding: 5px; +} + +#generalDetailsEdit > h3 { + color: #ecf0f1; + display: block; + font-size: 1.1em; + font-weight: 100; + margin: 0 0 5px 0; + padding: 10px 0; + text-align: left; +} + +.subAccordion { + color: #ecf0f1; + display: block; + font-size: 0.8em; + font-weight: 100; + margin: 0; + padding: 5px; + text-align: left; +} + +.subAccordionDescription { + padding: 0 5px; +} + +.boxed { + padding: 0 5px; +} + +.separatorLineRight { + border-right: 1px solid #f00; +} + +.editPrefixButton:hover { + color: #ff972d; + cursor: pointer; +} + +.editPrefixIcon:hover { + stroke: #ff972d; + stroke-width: 1px; + cursor: pointer; +} + +.editPrefixIcon { + stroke: #fffff; + stroke-width: 1px; + cursor: pointer; +} + +.deletePrefixButton:hover { + color: #ff972d; + cursor: pointer; +} + +.deletePrefixButton { + color: #ff0000; + cursor: pointer; +} + +.invisiblePrefixButton { + cursor: default; + color: rgb(24, 32, 42); +} + +#containerForAddPrefixButton { + width: 100%; + margin-top: 5px; +} + +.roundedButton { + border: 1px solid #000000; + border-radius: 20px; + padding: 0 5px; + background: #fff; + cursor: pointer; + color: black; + outline: none; +} + +.roundedButton:hover { + background: #318638; + cursor: pointer; + color: #fff; + outline: none; +} + +#prefixURL_Description { + padding: 5px 0 0 0; +} + +.prefixIRIElements { + display: inline-block; + padding: 3px; + border-bottom: 1px solid #34495E; + width: 100% +} + +.prefixInput { + width: 30px; + display: inline-block; + margin-right: 5px; +} + +.prefixURL { + width: 100px; + display: inline-block; + paddig-left: 5px; +} + +.selectedDefaultElement { + text-align: left; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + display: inline-block; + max-width: 200px; +} + +#editHeader { + color: #ecf0f1; + background-color: #394f5a; + display: block; + font-size: 1.1em; + font-weight: 100; + text-align: center; +} + +#leftHeader { + color: #ecf0f1; + background-color: #394f5a; + display: block; + font-size: 1.1em; + font-weight: 100; + text-align: center; + padding: 10px 0; + margin: 0; +} + +.containerForDefaultSelection { + color: #ecf0f1; + display: block; + font-size: 1.1em; + font-weight: 100; + margin: 0; + padding: 10px 20px; + text-align: left; +} + +.defaultSelected { + color: #a15d05; + background-color: #283943; +} + +.containerForDefaultSelection:hover { + color: #f19505; + background-color: #394f5a; + display: block; + cursor: pointer; +} + +#containerForLeftSideBar { + top: 50px; + float: left; + position: absolute; + background-color: #1b252e; + left: 0; + width: 200px; + height: 200px; + overflow-y: auto; + overflow-x: hidden; +} + +#leftSideBar { + width: 100%; + background-color: rgb(24, 32, 42); +} + +#loading-info { + box-sizing: border-box; + position: absolute; + text-align: center; + + width: 100%; + height: 80%; + top: 0; +} + +#loading-info > div { + display: inline-block; + color: #ffffff; + background-color: #18202A; + border-bottom-left-radius: 2px; + border-bottom-right-radius: 2px; +} + +#loading-info > * > * { + padding: 5px; +} + +#loading-info { + pointer-events: none; +} + +#loading-progress { + pointer-events: auto; + min-width: 220px; + border-radius: 10px; +} + +#show-loadingInfo-button { + font-size: 12px; + color: #fff; + cursor: pointer; + text-align: center; +} + +#loadingIndicator_closeButton:hover { + color: #ff972d; + cursor: pointer; + +} + +#loadingIndicator_closeButton { + color: #ffe30f; + cursor: pointer; + padding-bottom: 5px; + float: right; +} + +.busyProgressBar { + background-color: #000; + height: 25px; + position: relative; + animation: busy 2s linear infinite; +} + +@-webkit-keyframes busy { + 0% { + left: 0%; + } + 50% { + left: 80%; + } + 100% { + left: 0%; + } +} + +#bulletPoint_container { + padding-left: 15px; + margin-top: 0px; + margin-bottom: 0px; +} + +#bulletPoint_container > div { + margin-left: -15px; +} + +#loadingInfo-container { + box-sizing: border-box; + text-align: left; + line-height: 1.2; + padding-top: 5px; + overflow: auto; + /*white-space: nowrap;*/ + /*min-width: 250px;*/ + height: 120px; + min-height: 40px; + background-color: #3c3c3c; + +} + +#error-description-button { + margin: 5px 0 0 0; + font-size: 12px; + color: #69c; + cursor: pointer; + text-align: center; +} + +#error-description-container { + box-sizing: border-box; + text-align: left; +} + +#error-description-container pre { + background-color: #34495E; + padding: 2px; + margin: 0; + white-space: pre-wrap; + max-height: calc(100vh - 125px); + max-width: 75vw; + overflow: auto; +} + +.spin { + display: inline-block; + -webkit-animation: spin 2s infinite linear; + animation: spin 2s infinite linear; +} + +@-webkit-keyframes spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} + +@keyframes spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} + +.truncate { + max-width: 250px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.color-mode-switch { + float: right; + width: 90px; + cursor: pointer; + height: 20px; + padding: 0; + border: 0; + color: #555; + background-color: #ECEEEF; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2), inset 0 0 3px rgba(0, 0, 0, 0.1); +} + +.color-mode-switch:focus { + outline-width: 0; +} + +.color-mode-switch.active { + color: #FFF; + background-color: #32CD32; + box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.2), inset 0 0 3px rgba(0, 0, 0, 0.1); +} + +/* adding button pulse animation*/ +.filterMenuButtonHighlight { + background-color: #d90; +} + +@-webkit-keyframes buttonAnimation { + 0% { + background-color: unset; + } + 100% { + background-color: #d90; + } +} + +@-moz-keyframes buttonAnimation { + 0% { + background-color: unset; + } + 100% { + background-color: #d90; + } +} + +@-o-keyframes buttonAnimation { + 0% { + background-color: unset; + } + 100% { + background-color: #d90; + } +} + +@keyframes buttonAnimation { + 0% { + background-color: unset; + } + 100% { + background-color: #d90; + } +} + +.buttonPulse { + -webkit-animation-name: buttonAnimation; + -moz-animation-name: buttonAnimation; + -o-animation-name: buttonAnimation; + animation-name: buttonAnimation; + + -webkit-animation-duration: 0.5s; + -moz-animation-duration: 0.5s; + -o-animation-duration: 0.5s; + animation-duration: 0.5s; + + -webkit-animation-iteration-count: 3; + -moz-animation-iteration-count: 3; + -o-animation-iteration-count: 3; + animation-iteration-count: 3; + + -webkit-animation-timing-function: linear; + -moz-animation-timing-function: linear; + -o-animation-timing-function: linear; + animation-timing-function: linear; + + +} + +/*swipe bar definition*/ + +/*Overwriting individual menu widths*/ +#m_about { + max-width: 200px; + width: 200px; + position: absolute; + +} + +#m_modes { + max-width: 160px; + width: 160px; + position: absolute; +} + +#m_filter { + max-width: 170px; + width: 170px; + position: absolute; +} + +#m_gravity { + max-width: 180px; + width: 180px; + position: absolute; +} + +#m_export { + max-width: 160px; + width: 160px; + position: absolute; + +} + +#exportedUrl { + width: 100px; +} + +#m_select { + max-width: 300px; + width: 300px; + position: absolute; +} + +#m_config { + max-width: 240px; + width: 240px; + position: absolute; +} + +#m_search { + max-width: 250px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +/***************** REWRITING MENU ELEMENT CONTAINERS ***********************/ +/*Container which holds the swipeBar*/ +#swipeBarContainer { + position: fixed; + width: 77.8%; + height: 40px; + margin: 0; + padding: 0; + bottom: 0; +} + +/*Scroll-able container for the menu entries */ +#menuElementContainer { + margin: 0; + padding: 0; + overflow-x: auto; + overflow-y: hidden; + white-space: nowrap; + text-align: right; + list-style-type: none; +} + +/*Style for the individual menu entries*/ +#menuElementContainer > li { + display: inline-block; + box-sizing: border-box; + text-align: left; + position: relative; + height: 40px; + font-size: 14px; + color: #ffffff; + padding: 12px 0 0; + margin-left: -4px; +} + +/*Font-color Style for menu entries */ +#menuElementContainer > li > a { + color: #fff; + padding: 9px 12px 12px 30px; +} + +.menuElementSvgElement { + height: 20px; + width: 20px; + display: block; + position: absolute; + top: 10px; + left: 8px; +} + +.btn_shadowed { + background-color: #fefefe; + box-shadow: 1px 1px 1px gray; +} + +.reloadCachedOntologyIcon { + height: 20px; + width: 108px; + display: block; + position: absolute; + top: 20px; + left: 3px; + /*background: #ecf0f1;;*/ + border: solid 1px black; + border-radius: 10px; + cursor: pointer; +} + +.reloadCachedOntologyIcon:disabled { + background: #f4f4f4; + cursor: auto; + border: solid 1px darkgray; + +} + +.reloadCachedOntologyIcon:hover { + background: #d90; + cursor: pointer; +} + +.disabledReloadElement { + cursor: auto; + background: #F4F4F4; + pointer-events: auto; + border: solid 1px darkgray; + color: #bbbbbb; +} + +.disabledReloadElement:hover { + cursor: auto; + background: #EEEEEE; + pointer-events: auto; +} + +#menuElementContainer > li > input { + color: #000; + /*padding : 0 0.3em 0 1.5em;*/ + padding: 0.1em .3em 0.1em 1.5em; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + width: 120px; +} + +/*Hovered behavior for the menu entries*/ +#menuElementContainer > li > a:hover { + box-sizing: border-box; + background: #1B252E; + /*background : #d90;*/ + color: #bdc3c7; + +} + +#empty:hover { + box-sizing: border-box; + background: #e1e1e1; + /*background : #d90;*/ + color: #2980b9; +} + +#empty.disabled { + pointer-events: none; + cursor: default; + color: #979797; +} + +.disabled { + pointer-events: none; + cursor: default; + color: #979797; +} + +/*ToolTip Menu Definition*/ +.toolTipMenu { + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + box-sizing: border-box; + background-color: #ffffff; + border: 1px solid rgba(0, 0, 0, 0.15); + border-bottom: none; + border-radius: 4px 4px 0 0; + bottom: 0; + display: none; + font-size: 14px; + list-style: none; + /*max-width: 300px;*/ + margin: 0; + padding: 0; + white-space: normal; + position: absolute; + z-index: 99; +} + +.toolTipMenu > li:first-of-type { + border: none; +} + +.toolTipMenu a { + color: #2980b9; +} + +.toolTipMenu > li { + border-top: solid 1px #bdc3c7; +} + +.toolTipMenu li { + color: #2980b9; + display: block; +} + +/*MenuElement hovering enables the toolTip of the corresponding menu*/ +#menuElementContainer > li:hover .toolTipMenu { + display: block; +} + +#menuElementContainer li > ul.toolTipMenu li a:hover { + background: #e1e1e1; +} + +/****************************************************************************/ +/*ScrollButton behavior*/ +#scrollLeftButton { + height: 30px; + width: 30px; + padding: 5px 0 5px 10px; + color: #fff; + cursor: pointer; + position: absolute; + margin-top: -2px; + font-size: 2em; + background-color: #24323e; + left: 0; +} + +#scrollLeftButton:focus { + outline: none; +} + +#scrollLeftButton:before { + content: "<"; +} + +/*Right Scroll Button*/ +#scrollRightButton { + height: 30px; + width: 30px; + padding: 5px 0 5px 10px; + color: #fff; + cursor: pointer; + position: absolute; + margin-top: -2px; + font-size: 2em; + background-color: #24323e; + right: 0; +} + +#scrollRightButton:focus { + outline: none; +} + +#scrollRightButton:hover { + color: #bdc3c7; +} + +#scrollLeftButton:hover { + color: #bdc3c7; +} + +#scrollRightButton:before { + content: ">"; +} + +#centerGraphButton, #zoomInButton, #zoomOutButton { + border: 1px solid #000000; + text-align: center; + margin: -1px 0 0 0; + font-size: 1.5em; + padding: 0; + height: 28px; +} + +.noselect { + -webkit-touch-callout: none; /* iOS Safari */ + -webkit-user-select: none; /* Safari */ + -khtml-user-select: none; /* Konqueror HTML */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* Internet Explorer/Edge */ + user-select: none; + /* Non-prefixed version, currently + supported by Chrome and Opera */ +} + +#zoomOutButton { + line-height: 22px; +} + +#centerGraphButton { + line-height: 25px; +} + +#zoomInButton { + line-height: 25px; +} + +#zoomSlider > p:hover { + background-color: #d90; +} + +#zoomSliderParagraph { + color: #000000; + padding-top: 5px; + margin: -1px 0 0 0; + border: 1px solid #000000; + /*background-color: #ecf0f1;*/ + /*width: 28px;*/ + height: 150px; +} + +p#zoomSliderParagraph:hover { + background-color: #fff; +} + +/*todo put this in a proper position*/ +#zoomSlider { + width: 28px; + margin-top: -2px; + padding: 0; + font-size: 1.5em; + cursor: pointer; + position: absolute; + right: 20px; + bottom: 20px; + color: #000; + /*background-color: #ecf0f1;*/ + box-sizing: border-box; +} + +/****************************************************************************/ +/*Definition for the Icons before*/ +#menuElementContainer > li > a::before { + font-size: 1em; + margin: 0; + padding: 0 6px 0 0; +} + +#menuElementContainer a.highlighted { + background-color: #d90; +} + +/*#search-input-text.searchInputText {*/ +/*!*padding: 0 0.2em;*!*/ +/*color: black;*/ +/*}*/ + +.inner-addon { + position: relative; +} + +.searchIcon { + position: absolute; + /*padding: 0.15em 0;*/ + width: 17px; + height: 17px; + + pointer-events: none; +} + +.gearIcon { + position: absolute; + width: 17px; + height: 17px; + pointer-events: none; + left: -5px; +} + +/*#search-input-text::before {*/ +/*!*padding: 0 0.2em;*!*/ +/*!*color: black;*!*/ +/*font-size: 1.4em; !* todo : test this *!*/ +/*!*content: "\2315";*!*/ +/*content: "⚲";*/ +/*color: white;*/ +/*padding: 0;*/ +/*-webkit-transform: rotate(-45deg);*/ +/*!*content: "\2315" or "\1F50D"*!;*/ +/*display: inline-block;*/ +/*position: relative;*/ +/*top: 2px;*/ +/*left:-5px;*/ +/*}*/ + +li#c_search { + padding: 0 5px; + margin-left: 5px; + height: 20px; +} + +/*Menu icons before the links selection */ +/*#c_select > a::before { content: "\2263"; }*/ +/*#c_export > a::before { content: "\21E4"; }*/ +/*#c_gravity > a::before { content: "\2299"; }*/ +/*#c_filter > a::before { content: "\25BD"; }*/ +/*#c_modes > a::before { content: "\2606"; }*/ +/*#c_reset > a::before { content: "\21BB"; }*/ +/*#c_about > a::before { content: "\00A9"; }*/ + +li#c_locate { + padding: 0; +} + +#c_locate > a { + font-size: 2em; + padding: 0; +} + +a#pause-button { + padding: 12px 12px; +} + +/*Pause Button has a different behavior*/ +a#pause-button.paused::before { + content: "\25BA"; +} + +a#pause-button.paused:hover { + background-color: #d90; + color: #fff; +} + +a#pause-button:not(.paused)::before { + content: "II"; +} + +.toolTipMenu li:hover { + background-color: #e1e1e1; +} + +#emptyLiHover { + background-color: #FFFFFF; +} + +#emptyLiHover:hover { + background-color: #FFFFFF; +} + +.toggleOption li:hover { + background-color: #e1e1e1; +} + +.toggleOption { + padding: 8px 5px; +} + +#converter-option:hover { + background-color: #ffffff; +} + +.toolTipMenu li a:only-child, .option { + display: block; + float: none; + padding: 8px 5px; +} + +.customLocate { + padding: 0; + background-color: #32CD32; +} + +a#locateSearchResult { + padding-bottom: 0; + padding-top: 50px; + position: relative; + top: 5px; +} + +/*#sliderRange{*/ +/*padding: 0;*/ +/*margin: 7px 0 0 0;*/ +/*width:100%;*/ +/*height:5px;*/ +/*-webkit-appearance: none;*/ +/*outline: none;*/ +/*}*/ + +#zoomSliderElement { + color: #000; + position: relative; + padding-top: 0; + width: 155px; + height: 24px; + background-color: transparent; + -webkit-transform-origin-x: 73px; + -webkit-transform-origin-y: 73px; + -webkit-transform: rotate(-90deg); + -moz-transform-origin: 73px 73px; + transform: rotate(-90deg); + transform-origin: 73px 73px; + -webkit-appearance: none; + outline: none; + margin: 4px 0; +} + +/* ------------------ Zoom Slider styles --------------------------*/ +#zoomSliderElement::-webkit-scrollbar { + height: 0; +} + +#zoomSliderElement:hover { + cursor: crosshair; +} + +/*TRACK*/ +#zoomSliderElement::-webkit-slider-runnable-track { + width: 100%; + height: 5px; + cursor: pointer; + background: #3071a9; +} + +#zoomSliderElement::-moz-range-track { + width: 100%; + height: 5px; + cursor: pointer; + background: #3071a9; +} + +/*Thumb*/ +#zoomSliderElement::-webkit-slider-thumb { + -webkit-appearance: none; + border: 1px solid #000000; + height: 10px; + width: 30px; + margin-right: 50px; + border-radius: 3px; + background: #fff; + cursor: pointer; + outline: none; + margin-top: -3px; +} + +#zoomSliderElement::-ms-thumb { + -webkit-appearance: none; + border: 1px solid #000000; + height: 10px; + width: 30px; + margin-right: 50px; + border-radius: 3px; + background: #fff; + cursor: pointer; + outline: none; + margin-top: -3px; +} + +#zoomSliderElement::-ms-thumb:hover { + -webkit-appearance: none; + border: 1px solid #000000; + height: 10px; + width: 30px; + margin-right: 50px; + border-radius: 3px; + background: #d90; + cursor: pointer; + outline: none; + margin-top: -3px; +} + +#zoomSliderElement::-webkit-slider-thumb:hover { + -webkit-appearance: none; + border: 1px solid #000000; + height: 10px; + width: 30px; + margin-right: 50px; + border-radius: 3px; + background: #d90; + cursor: pointer; + outline: none; + margin-top: -3px; +} + +#zoomSliderElement::-moz-range-thumb { + border: 1px solid #000000; + height: 10px; + width: 30px; + border-radius: 3px; + /*background: #ffffff;*/ + cursor: pointer; + outline: none; +} + +#zoomSliderElement::-moz-range-thumb:hover { + border: 1px solid #000000; + height: 10px; + width: 30px; + border-radius: 3px; + background: #d90; + cursor: pointer; + outline: none; +} + +#zoomSliderElement::-moz-focus-outer { + border: 0; +} + +#locateSearchResult:focus { + outline: none; + +} + +a#locateSearchResult.highlighted:hover { + background-color: #d90; + color: red; +} + +a#locateSearchResult { + outline: none; + padding-bottom: 0; + padding-top: 0; + position: relative; + top: 5px; +} + +/*Editor hints*/ +#editorHint { + padding: 5px 5px; + position: absolute; + text-align: center; + width: 100%; + pointer-events: none; +} + +#editorHint label { + pointer-events: auto; + float: right; + padding: 5px 5px; + color: #ffdd00; +} + +#editorHint label:hover { + text-decoration: underline; + cursor: pointer; +} + +#editorHint > div { + pointer-events: auto; + text-align: left; + display: inline-block; + color: #ffffff; + font-size: 0.8em; + background-color: #18202A; + padding: 5px 5px; + border-radius: 5px; + +} + +#WarningErrorMessagesContainer { + position: absolute; + text-align: center; + top: 0; + pointer-events: none; +} + +/*Editor hints*/ +#WarningErrorMessages { + position: relative; + /*text-align: center;*/ + width: 50%; + pointer-events: auto; + margin: 10px 0; + padding-right: 12px; + overflow-y: auto; + overflow-x: hidden; +} + +#WarningErrorMessages label { + pointer-events: auto; + float: right; + padding: 5px 5px; + color: #ffdd00; +} + +#WarningErrorMessages span { + pointer-events: auto; + float: right; + padding: 5px 5px; +} + +#WarningErrorMessages label:hover { + text-decoration: underline; + cursor: pointer; +} + +#WarningErrorMessages > div { + pointer-events: auto; + text-align: left; + display: inline-block; + color: #ffffff; + font-size: 0.8em; + background-color: #18202A; + padding: 5px 5px; + border-radius: 10px; + border: solid 1px #ecf0f1; + width: 70%; + +} + +#WarningErrorMessagesContent > ul { + -webkit-padding-start: 20px; + padding: 0 16px; + +} + +#WarningErrorMessagesContent > ul > li { + padding: 5px; +} + +.converter-form-Editor { + /*display: inline-block;*/ +} + +.textLineEditWithLabel { + display: inline-block; + width: 100%; + border-bottom: 1px solid #34495E; + padding: 2px 0; + +} + +.converter-form-Editor label { + /*//display: inline-block;*/ + line-height: normal; +} + +.descriptionTextClass { + background-color: #34495E; + color: white; +} + +.prefixIRIElements input { + border: 1px solid #34495E; + background-color: #34495E; + color: white; +} + +.prefixIRIElements input:disabled { + background-color: rgb(24, 32, 42); + border: 1px solid rgb(24, 32, 42); + color: white; +} + +.converter-form-Editor input { + /*box-sizing: border-box;*/ + /*height: 18px;*/ + /*width: 69%;*/ + float: right; + border: 1px solid #34495E; + background-color: #34495E; + color: white; + /*border-bottom: 1px solid #d90;*/ + /*text-align: center;*/ + /*display: inline-block;*/ +} + +.converter-form-Editor input:disabled { + background-color: #545350; + border: 1px solid #34495E; + color: #939798; +} + +.disabledLabelForSlider { + color: #808080; +} diff --git a/tto/webvowl/css/webvowl.css b/tto/webvowl/css/webvowl.css new file mode 100644 index 0000000..bd06623 --- /dev/null +++ b/tto/webvowl/css/webvowl.css @@ -0,0 +1,296 @@ +/*----------------------------------------------------------------- + VOWL graphical elements (part of spec) - mixed CSS and SVG styles +-----------------------------------------------------------------*/ + +/*-------- Text --------*/ +.text { + font-family: Helvetica, Arial, sans-serif; + font-size: 12px; +} + +.subtext { + font-size: 9px; +} + +.text.instance-count { + fill: #666; +} + +.external + text .instance-count { + fill: #aaa; +} + +.cardinality { + font-size: 10px; +} + +.text, .embedded { + pointer-events: none; +} + +/*------- Colors ------*/ +.class, .object, .disjoint, .objectproperty, .disjointwith, .equivalentproperty, .transitiveproperty, .functionalproperty, .inversefunctionalproperty, .symmetricproperty, .allvaluesfromproperty, .somevaluesfromproperty { + fill: #acf; +} + +.label .datatype, .datatypeproperty { + fill: #9c6; +} + +.rdf, .rdfproperty { + fill: #c9c; +} + +.literal, .node .datatype { + fill: #fc3; +} + +.deprecated, .deprecatedproperty { + fill: #ccc; +} + +.external, .externalproperty { + /*fill: #36c;*/ +} + +path, .nofill { + fill: none; +} + +marker path { + fill: #000; +} + +.class, path, line, .fineline { + stroke: #000; +} + +.white, .subclass, .subclassproperty, .external + text { + fill: #fff; +} + +.class.hovered, .property.hovered, .cardinality.hovered, .cardinality.focused, .filled.hovered, .filled.focused, .values-from.filled.hovered { + fill: #f00 !important; + cursor: pointer; +} + +.hoveredForEditing { + fill: #f00 !important; + cursor: pointer; +} + +.feature { + fill: #f00; + cursor: pointer; +} + +@-webkit-keyframes pulseAnimation { + 0% { + -webkit-transform: scale(1.5); + stroke-width: 3.33; + } + 50% { + stroke-width: 4; + } + 100% { + -webkit-transform: scale(1.0); + stroke-width: 5; + } +} + +@-moz-keyframes pulseAnimation { + 0% { + -webkit-transform: scale(1.5); + stroke-width: 3.33; + } + 50% { + stroke-width: 4; + } + 100% { + -webkit-transform: scale(1.0); + stroke-width: 5; + } +} + +@-o-keyframes pulseAnimation { + 0% { + -webkit-transform: scale(1.5); + stroke-width: 3.33; + } + 50% { + stroke-width: 4; + } + 100% { + -webkit-transform: scale(1.0); + stroke-width: 5; + } +} + +@keyframes pulseAnimation { + 0% { + -webkit-transform: scale(1.5); + stroke-width: 3.33; + } + 50% { + stroke-width: 4; + } + 100% { + -webkit-transform: scale(1.0); + stroke-width: 5; + } +} + +.searchResultA { + fill: none; + stroke-width: 5; + stroke: #f00; + -webkit-animation-name: pulseAnimation; + -moz-animation-name: pulseAnimation; + -o-animation-name: pulseAnimation; + animation-name: pulseAnimation; + + -webkit-animation-duration: 0.8s; + -moz-animation-duration: 0.8s; + -o-animation-duration: 0.8s; + animation-duration: 0.8s; + + -webkit-transform: translateZ(0); + -o-transform: translateZ(0); + -webkit-animation-iteration-count: 3; + -moz-animation-iteration-count: 3; + -o-animation-iteration-count: 3; + animation-iteration-count: 3; + + -webkit-animation-timing-function: linear; + -moz-animation-timing-function: linear; + -o-animation-timing-function: linear; + animation-timing-function: linear; + +} + +/* a class for not animated search results (hovered over node)*/ +.searchResultB { + fill: none; + stroke-width: 5; + stroke: #f00; +} + +.hovered-MathSymbol { + fill: none; + stroke: #f00 !important; +} + +.focused, path.hovered { + stroke: #f00 !important; +} + +.indirect-highlighting, .feature:hover { + fill: #f90; + cursor: pointer; +} + +.feature_hover { + fill: #f90; + cursor: pointer; +} + +.values-from { + stroke: #69c; +} + +.symbol, .values-from.filled { + fill: #69c; +} + +/*------- Strokes ------*/ +.class, path, line { + stroke-width: 2; +} + +.fineline { + stroke-width: 1; +} + +.dashed, .anonymous { + stroke-dasharray: 8; +} + +.dotted { + stroke-dasharray: 3; +} + +rect.focused, circle.focused { + stroke-width: 4px; +} + +.nostroke { + stroke: none; +} + +/*----------------------------------------------------------------- + Additional elements for the WebVOWL demo (NOT part of spec) +-----------------------------------------------------------------*/ + +.addDataPropertyElement { + fill: #9c6 !important; + cursor: pointer; + stroke-width: 2; + stroke: black; +} + +.addDataPropertyElement:hover { + fill: #f90 !important; + cursor: pointer; + stroke-width: 2; + stroke: black; +} + +.superHiddenElement { + fill: rgba(255, 153, 0, 0.4); + cursor: pointer; + stroke-width: 0; + stroke: black; + /*opacity:0;*/ +} + +.superOpacityElement { + opacity: 0; +} + +.deleteParentElement:hover { + fill: #f90; + cursor: pointer; + stroke-width: 2; + stroke: black; +} + +.deleteParentElement { + fill: #f00; + cursor: pointer; + stroke-width: 2; + stroke: black; +} + +.classNodeDragPath { + stroke: black; + stroke-width: 2px; +} + +.classDraggerNodeHovered { + fill: #f90; + stroke: black; + stroke-width: 2px; + cursor: pointer; +} + +.classDraggerNode { + fill: #acf; + stroke: black; + stroke-width: 2px; +} + +marker path { + /* Safari and Chrome workaround for inheriting the style of its link. + Use any value that is larger than the length of the marker path. */ + stroke-dasharray: 100; +} diff --git a/tto/webvowl/data/foaf.json b/tto/webvowl/data/foaf.json new file mode 100644 index 0000000..4897985 --- /dev/null +++ b/tto/webvowl/data/foaf.json @@ -0,0 +1,2894 @@ +{ + "_comment" : "Created with OWL2VOWL (version 0.3.7), http://vowl.visualdataweb.org", + "header" : { + "languages" : [ "undefined" ], + "baseIris" : [ "http://schema.org", "http://www.w3.org/2000/01/rdf-schema", "http://www.w3.org/2003/01/geo/wgs84_pos", "http://purl.org/dc/terms", "http://www.w3.org/2001/XMLSchema", "http://xmlns.com/foaf/0.1", "http://www.w3.org/2000/10/swap/pim/contact", "http://www.w3.org/2004/02/skos/core" ], + "prefixList" : { + "owl" : "http://www.w3.org/2002/07/owl#", + "rdf" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#", + "wot" : "http://xmlns.com/wot/0.1/", + "xsd" : "http://www.w3.org/2001/XMLSchema#", + "dc" : "http://purl.org/dc/elements/1.1/", + "xml" : "http://www.w3.org/XML/1998/namespace", + "vs" : "http://www.w3.org/2003/06/sw-vocab-status/ns#", + "foaf" : "http://xmlns.com/foaf/0.1/", + "rdfs" : "http://www.w3.org/2000/01/rdf-schema#" + }, + "title" : { + "undefined" : "Friend of a Friend (FOAF) vocabulary" + }, + "iri" : "http://xmlns.com/foaf/0.1/", + "description" : { + "undefined" : "The Friend of a Friend (FOAF) RDF vocabulary, described using W3C RDF Schema and the Web Ontology Language." + }, + "other" : { + "title" : [ { + "identifier" : "title", + "language" : "undefined", + "value" : "Friend of a Friend (FOAF) vocabulary", + "type" : "label" + } ] + } + }, + "namespace" : [ ], + "class" : [ { + "id" : "3", + "type" : "owl:Thing" + }, { + "id" : "9", + "type" : "owl:Class" + }, { + "id" : "1", + "type" : "owl:equivalentClass" + }, { + "id" : "18", + "type" : "owl:Thing" + }, { + "id" : "19", + "type" : "owl:Thing" + }, { + "id" : "5", + "type" : "owl:Thing" + }, { + "id" : "20", + "type" : "rdfs:Literal" + }, { + "id" : "8", + "type" : "rdfs:Literal" + }, { + "id" : "11", + "type" : "owl:Class" + }, { + "id" : "21", + "type" : "owl:Thing" + }, { + "id" : "22", + "type" : "rdfs:Literal" + }, { + "id" : "24", + "type" : "rdfs:Literal" + }, { + "id" : "26", + "type" : "rdfs:Literal" + }, { + "id" : "27", + "type" : "rdfs:Literal" + }, { + "id" : "37", + "type" : "owl:equivalentClass" + }, { + "id" : "45", + "type" : "rdfs:Literal" + }, { + "id" : "46", + "type" : "rdfs:Literal" + }, { + "id" : "53", + "type" : "rdfs:Literal" + }, { + "id" : "56", + "type" : "rdfs:Literal" + }, { + "id" : "59", + "type" : "rdfs:Literal" + }, { + "id" : "60", + "type" : "owl:Class" + }, { + "id" : "61", + "type" : "rdfs:Literal" + }, { + "id" : "6", + "type" : "rdfs:Literal" + }, { + "id" : "62", + "type" : "rdfs:Literal" + }, { + "id" : "12", + "type" : "owl:equivalentClass" + }, { + "id" : "55", + "type" : "rdfs:Literal" + }, { + "id" : "69", + "type" : "rdfs:Literal" + }, { + "id" : "71", + "type" : "owl:Class" + }, { + "id" : "36", + "type" : "owl:Class" + }, { + "id" : "86", + "type" : "owl:Class" + }, { + "id" : "83", + "type" : "owl:Class" + }, { + "id" : "94", + "type" : "owl:Class" + }, { + "id" : "73", + "type" : "rdfs:Literal" + }, { + "id" : "68", + "type" : "rdfs:Literal" + }, { + "id" : "93", + "type" : "rdfs:Literal" + }, { + "id" : "33", + "type" : "owl:Thing" + }, { + "id" : "49", + "type" : "rdfs:Literal" + }, { + "id" : "29", + "type" : "owl:Thing" + }, { + "id" : "101", + "type" : "rdfs:Literal" + }, { + "id" : "39", + "type" : "owl:Thing" + }, { + "id" : "63", + "type" : "owl:equivalentClass" + }, { + "id" : "64", + "type" : "owl:equivalentClass" + }, { + "id" : "102", + "type" : "owl:equivalentClass" + }, { + "id" : "78", + "type" : "owl:Class" + }, { + "id" : "77", + "type" : "owl:Class" + }, { + "id" : "13", + "type" : "owl:equivalentClass" + }, { + "id" : "58", + "type" : "rdfs:Literal" + }, { + "id" : "100", + "type" : "rdfs:Literal" + }, { + "id" : "106", + "type" : "rdfs:Literal" + }, { + "id" : "52", + "type" : "rdfs:Literal" + }, { + "id" : "88", + "type" : "rdfs:Literal" + }, { + "id" : "118", + "type" : "rdfs:Literal" + }, { + "id" : "126", + "type" : "owl:Class" + }, { + "id" : "2", + "type" : "owl:equivalentClass" + }, { + "id" : "32", + "type" : "owl:equivalentClass" + }, { + "id" : "10", + "type" : "owl:Class" + } ], + "classAttribute" : [ { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "3", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2004/02/skos/core#Concept", + "baseIri" : "http://www.w3.org/2004/02/skos/core", + "instances" : 0, + "label" : { + "IRI-based" : "Concept", + "undefined" : "Concept" + }, + "attributes" : [ "external" ], + "id" : "9" + }, { + "iri" : "http://xmlns.com/foaf/0.1/Agent", + "equivalent" : [ "13" ], + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Agent", + "undefined" : "Agent" + }, + "subClasses" : [ "10", "11", "12" ], + "comment" : { + "undefined" : "An agent (eg. person, group, software or physical artifact)." + }, + "attributes" : [ "equivalent" ], + "id" : "1" + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "18", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "19", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "5", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "20", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "id" : "8", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://xmlns.com/foaf/0.1/Organization", + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Organization", + "undefined" : "Organization" + }, + "comment" : { + "undefined" : "An organization." + }, + "id" : "11", + "superClasses" : [ "1" ] + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "21", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "22", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "24", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "26", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "27", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://schema.org/CreativeWork", + "baseIri" : "http://schema.org", + "instances" : 0, + "label" : { + "IRI-based" : "CreativeWork" + }, + "attributes" : [ "external", "equivalent" ], + "id" : "37" + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "45", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "46", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "53", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "56", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "59", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://xmlns.com/foaf/0.1/Project", + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Project", + "undefined" : "Project" + }, + "comment" : { + "undefined" : "A project (a collective endeavour of some kind)." + }, + "id" : "60" + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "61", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "6", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "62", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://xmlns.com/foaf/0.1/Person", + "equivalent" : [ "63", "64" ], + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Person", + "undefined" : "Person" + }, + "comment" : { + "undefined" : "A person." + }, + "attributes" : [ "equivalent" ], + "id" : "12", + "superClasses" : [ "1", "36" ] + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "55", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "69", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://xmlns.com/foaf/0.1/PersonalProfileDocument", + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "PersonalProfileDocument", + "undefined" : "PersonalProfileDocument" + }, + "comment" : { + "undefined" : "A personal profile RDF document." + }, + "id" : "71", + "superClasses" : [ "2" ] + }, { + "iri" : "http://www.w3.org/2003/01/geo/wgs84_pos#SpatialThing", + "baseIri" : "http://www.w3.org/2003/01/geo/wgs84_pos", + "instances" : 0, + "label" : { + "IRI-based" : "SpatialThing", + "undefined" : "Spatial Thing" + }, + "subClasses" : [ "12" ], + "attributes" : [ "external" ], + "id" : "36" + }, { + "iri" : "http://xmlns.com/foaf/0.1/OnlineChatAccount", + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "OnlineChatAccount", + "undefined" : "Online Chat Account" + }, + "comment" : { + "undefined" : "An online chat account." + }, + "id" : "86", + "superClasses" : [ "78" ] + }, { + "iri" : "http://xmlns.com/foaf/0.1/OnlineGamingAccount", + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "OnlineGamingAccount", + "undefined" : "Online Gaming Account" + }, + "comment" : { + "undefined" : "An online gaming account." + }, + "id" : "83", + "superClasses" : [ "78" ] + }, { + "iri" : "http://xmlns.com/foaf/0.1/LabelProperty", + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "LabelProperty", + "undefined" : "Label Property" + }, + "comment" : { + "undefined" : "A foaf:LabelProperty is any RDF property with texual values that serve as labels." + }, + "id" : "94" + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "id" : "73", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "id" : "68", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "id" : "93", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "33", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "id" : "49", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "29", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "id" : "101", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "39", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2000/10/swap/pim/contact#Person", + "baseIri" : "http://www.w3.org/2000/10/swap/pim/contact", + "instances" : 0, + "label" : { + "IRI-based" : "Person" + }, + "attributes" : [ "external", "equivalent" ], + "id" : "63" + }, { + "iri" : "http://schema.org/Person", + "baseIri" : "http://schema.org", + "instances" : 0, + "label" : { + "IRI-based" : "Person" + }, + "attributes" : [ "external", "equivalent" ], + "id" : "64" + }, { + "iri" : "http://schema.org/ImageObject", + "baseIri" : "http://schema.org", + "instances" : 0, + "label" : { + "IRI-based" : "ImageObject" + }, + "attributes" : [ "external", "equivalent" ], + "id" : "102" + }, { + "iri" : "http://xmlns.com/foaf/0.1/OnlineAccount", + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "OnlineAccount", + "undefined" : "Online Account" + }, + "subClasses" : [ "77", "86", "83" ], + "comment" : { + "undefined" : "An online account." + }, + "id" : "78" + }, { + "iri" : "http://xmlns.com/foaf/0.1/OnlineEcommerceAccount", + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "OnlineEcommerceAccount", + "undefined" : "Online E-commerce Account" + }, + "comment" : { + "undefined" : "An online e-commerce account." + }, + "id" : "77", + "superClasses" : [ "78" ] + }, { + "iri" : "http://purl.org/dc/terms/Agent", + "baseIri" : "http://purl.org/dc/terms", + "instances" : 0, + "label" : { + "IRI-based" : "Agent" + }, + "attributes" : [ "external", "equivalent" ], + "id" : "13" + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "58", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "100", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "106", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "52", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "88", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "118", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Class", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "instances" : 0, + "label" : { + "IRI-based" : "Class" + }, + "attributes" : [ "external" ], + "id" : "126" + }, { + "iri" : "http://xmlns.com/foaf/0.1/Document", + "equivalent" : [ "37" ], + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Document", + "undefined" : "Document" + }, + "subClasses" : [ "71", "32" ], + "comment" : { + "undefined" : "A document." + }, + "attributes" : [ "equivalent" ], + "id" : "2" + }, { + "iri" : "http://xmlns.com/foaf/0.1/Image", + "equivalent" : [ "102" ], + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Image", + "undefined" : "Image" + }, + "comment" : { + "undefined" : "An image." + }, + "attributes" : [ "equivalent" ], + "id" : "32", + "superClasses" : [ "2" ] + }, { + "iri" : "http://xmlns.com/foaf/0.1/Group", + "baseIri" : "http://xmlns.com/foaf/0.1", + "instances" : 0, + "annotations" : { + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Group", + "undefined" : "Group" + }, + "comment" : { + "undefined" : "A class of Agents." + }, + "id" : "10", + "superClasses" : [ "1" ] + } ], + "property" : [ { + "id" : "0", + "type" : "owl:objectProperty" + }, { + "id" : "4", + "type" : "owl:datatypeProperty" + }, { + "id" : "7", + "type" : "owl:datatypeProperty" + }, { + "id" : "14", + "type" : "owl:objectProperty" + }, { + "id" : "16", + "type" : "owl:objectProperty" + }, { + "id" : "17", + "type" : "owl:objectProperty" + }, { + "id" : "23", + "type" : "owl:objectProperty" + }, { + "id" : "25", + "type" : "owl:objectProperty" + }, { + "id" : "28", + "type" : "owl:objectProperty" + }, { + "id" : "30", + "type" : "owl:objectProperty" + }, { + "id" : "31", + "type" : "owl:objectProperty" + }, { + "id" : "35", + "type" : "owl:objectProperty" + }, { + "id" : "38", + "type" : "owl:objectProperty" + }, { + "id" : "44", + "type" : "owl:datatypeProperty" + }, { + "id" : "47", + "type" : "owl:objectProperty" + }, { + "id" : "48", + "type" : "owl:datatypeProperty" + }, { + "id" : "50", + "type" : "owl:objectProperty" + }, { + "id" : "51", + "type" : "owl:datatypeProperty" + }, { + "id" : "54", + "type" : "owl:datatypeProperty" + }, { + "id" : "57", + "type" : "owl:datatypeProperty" + }, { + "id" : "65", + "type" : "owl:datatypeProperty" + }, { + "id" : "66", + "type" : "owl:datatypeProperty" + }, { + "id" : "67", + "type" : "owl:datatypeProperty" + }, { + "id" : "70", + "type" : "owl:datatypeProperty" + }, { + "id" : "72", + "type" : "owl:datatypeProperty" + }, { + "id" : "15", + "type" : "owl:objectProperty" + }, { + "id" : "74", + "type" : "rdfs:SubClassOf" + }, { + "id" : "75", + "type" : "rdfs:SubClassOf" + }, { + "id" : "76", + "type" : "rdfs:SubClassOf" + }, { + "id" : "79", + "type" : "rdfs:SubClassOf" + }, { + "id" : "80", + "type" : "owl:objectProperty" + }, { + "id" : "81", + "type" : "owl:objectProperty" + }, { + "id" : "82", + "type" : "rdfs:SubClassOf" + }, { + "id" : "34", + "type" : "owl:objectProperty" + }, { + "id" : "85", + "type" : "rdfs:SubClassOf" + }, { + "id" : "87", + "type" : "owl:datatypeProperty" + }, { + "id" : "89", + "type" : "rdfs:SubClassOf" + }, { + "id" : "90", + "type" : "rdfs:SubClassOf" + }, { + "id" : "91", + "type" : "owl:objectProperty" + }, { + "id" : "92", + "type" : "owl:datatypeProperty" + }, { + "id" : "95", + "type" : "owl:datatypeProperty" + }, { + "id" : "96", + "type" : "owl:objectProperty" + }, { + "id" : "97", + "type" : "owl:datatypeProperty" + }, { + "id" : "98", + "type" : "rdfs:SubClassOf" + }, { + "id" : "99", + "type" : "owl:datatypeProperty" + }, { + "id" : "43", + "type" : "owl:objectProperty" + }, { + "id" : "42", + "type" : "owl:objectProperty" + }, { + "id" : "103", + "type" : "owl:datatypeProperty" + }, { + "id" : "104", + "type" : "owl:objectProperty" + }, { + "id" : "105", + "type" : "owl:datatypeProperty" + }, { + "id" : "107", + "type" : "owl:objectProperty" + }, { + "id" : "108", + "type" : "owl:datatypeProperty" + }, { + "id" : "109", + "type" : "owl:objectProperty" + }, { + "id" : "110", + "type" : "owl:objectProperty" + }, { + "id" : "40", + "type" : "owl:objectProperty" + }, { + "id" : "41", + "type" : "owl:objectProperty" + }, { + "id" : "84", + "type" : "owl:objectProperty" + }, { + "id" : "111", + "type" : "owl:datatypeProperty" + }, { + "id" : "112", + "type" : "owl:datatypeProperty" + }, { + "id" : "113", + "type" : "owl:datatypeProperty" + }, { + "id" : "114", + "type" : "owl:objectProperty" + }, { + "id" : "116", + "type" : "owl:disjointWith" + }, { + "id" : "117", + "type" : "owl:disjointWith" + }, { + "id" : "119", + "type" : "owl:datatypeProperty" + }, { + "id" : "120", + "type" : "owl:disjointWith" + }, { + "id" : "121", + "type" : "owl:disjointWith" + }, { + "id" : "122", + "type" : "owl:objectProperty" + }, { + "id" : "123", + "type" : "owl:datatypeProperty" + }, { + "id" : "124", + "type" : "owl:objectProperty" + }, { + "id" : "125", + "type" : "owl:datatypeProperty" + }, { + "id" : "127", + "type" : "owl:datatypeProperty" + }, { + "id" : "115", + "type" : "owl:objectProperty" + }, { + "id" : "128", + "type" : "owl:objectProperty" + }, { + "id" : "129", + "type" : "owl:objectProperty" + } ], + "propertyAttribute" : [ { + "iri" : "http://xmlns.com/foaf/0.1/interest", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "interest", + "undefined" : "interest" + }, + "domain" : "1", + "comment" : { + "undefined" : "A page about a topic of interest to this person." + }, + "attributes" : [ "object" ], + "id" : "0" + }, { + "iri" : "http://xmlns.com/foaf/0.1/mbox_sha1sum", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "6", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "mbox_sha1sum", + "undefined" : "sha1sum of a personal mailbox URI name" + }, + "domain" : "5", + "comment" : { + "undefined" : "The sha1sum of the URI of an Internet mailbox associated with exactly one owner, the first owner of the mailbox." + }, + "attributes" : [ "datatype" ], + "id" : "4" + }, { + "iri" : "http://xmlns.com/foaf/0.1/nick", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "8", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "nick", + "undefined" : "nickname" + }, + "domain" : "5", + "comment" : { + "undefined" : "A short informal nickname characterising an agent (includes login identifiers, IRC and other chat nicknames)." + }, + "attributes" : [ "datatype" ], + "id" : "7" + }, { + "iri" : "http://xmlns.com/foaf/0.1/openid", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "openid", + "undefined" : "openid" + }, + "superproperty" : [ "15" ], + "domain" : "1", + "comment" : { + "undefined" : "An OpenID for an Agent." + }, + "attributes" : [ "inverse functional", "object" ], + "id" : "14" + }, { + "iri" : "http://xmlns.com/foaf/0.1/workInfoHomepage", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "workInfoHomepage", + "undefined" : "work info homepage" + }, + "domain" : "12", + "comment" : { + "undefined" : "A work info homepage of some person; a page about their work for some organization." + }, + "attributes" : [ "object" ], + "id" : "16" + }, { + "iri" : "http://xmlns.com/foaf/0.1/pastProject", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "3", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "pastProject", + "undefined" : "past project" + }, + "domain" : "12", + "comment" : { + "undefined" : "A project this person has previously worked on." + }, + "attributes" : [ "object" ], + "id" : "17" + }, { + "iri" : "http://xmlns.com/foaf/0.1/theme", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "19", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "archaic", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "theme", + "undefined" : "theme" + }, + "domain" : "19", + "comment" : { + "undefined" : "A theme." + }, + "attributes" : [ "object" ], + "id" : "23" + }, { + "iri" : "http://xmlns.com/foaf/0.1/knows", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "12", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "knows", + "undefined" : "knows" + }, + "domain" : "12", + "comment" : { + "undefined" : "A person known by this person (indicating some level of reciprocated interaction between the parties)." + }, + "attributes" : [ "object" ], + "id" : "25" + }, { + "iri" : "http://xmlns.com/foaf/0.1/focus", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "29", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "focus", + "undefined" : "focus" + }, + "domain" : "9", + "comment" : { + "undefined" : "The underlying or 'focal' entity associated with some SKOS-described concept." + }, + "attributes" : [ "object" ], + "id" : "28" + }, { + "iri" : "http://xmlns.com/foaf/0.1/phone", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "19", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "phone", + "undefined" : "phone" + }, + "domain" : "19", + "comment" : { + "undefined" : "A phone, specified using fully qualified tel: URI scheme (refs: http://www.w3.org/Addressing/schemes.html#tel)." + }, + "attributes" : [ "object" ], + "id" : "30" + }, { + "iri" : "http://xmlns.com/foaf/0.1/depicts", + "inverse" : "34", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "33", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "depicts", + "undefined" : "depicts" + }, + "domain" : "32", + "comment" : { + "undefined" : "A thing depicted in this representation." + }, + "attributes" : [ "object" ], + "id" : "31" + }, { + "iri" : "http://xmlns.com/foaf/0.1/based_near", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "36", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "based_near", + "undefined" : "based near" + }, + "domain" : "36", + "comment" : { + "undefined" : "A location that something is based near, for some broadly human notion of near." + }, + "attributes" : [ "object" ], + "id" : "35" + }, { + "iri" : "http://xmlns.com/foaf/0.1/page", + "inverse" : "40", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "page", + "undefined" : "page" + }, + "domain" : "39", + "subproperty" : [ "15", "41", "42", "43" ], + "comment" : { + "undefined" : "A page or document about this thing." + }, + "attributes" : [ "object" ], + "id" : "38" + }, { + "iri" : "http://xmlns.com/foaf/0.1/geekcode", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "26", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "archaic", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "geekcode", + "undefined" : "geekcode" + }, + "domain" : "12", + "comment" : { + "undefined" : "A textual geekcode for this person, see http://www.geekcode.com/geek.html" + }, + "attributes" : [ "datatype" ], + "id" : "44" + }, { + "iri" : "http://xmlns.com/foaf/0.1/primaryTopic", + "inverse" : "15", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "39", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "primaryTopic", + "undefined" : "primary topic" + }, + "domain" : "2", + "comment" : { + "undefined" : "The primary topic of some page or document." + }, + "attributes" : [ "object", "functional" ], + "id" : "47" + }, { + "iri" : "http://xmlns.com/foaf/0.1/givenName", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "49", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "givenName", + "undefined" : "Given name" + }, + "domain" : "19", + "comment" : { + "undefined" : "The given name of some person." + }, + "attributes" : [ "datatype" ], + "id" : "48" + }, { + "iri" : "http://xmlns.com/foaf/0.1/schoolHomepage", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "schoolHomepage", + "undefined" : "schoolHomepage" + }, + "domain" : "12", + "comment" : { + "undefined" : "A homepage of a school attended by the person." + }, + "attributes" : [ "object" ], + "id" : "50" + }, { + "iri" : "http://xmlns.com/foaf/0.1/gender", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "52", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "gender", + "undefined" : "gender" + }, + "domain" : "1", + "comment" : { + "undefined" : "The gender of this Agent (typically but not necessarily 'male' or 'female')." + }, + "attributes" : [ "datatype", "functional" ], + "id" : "51" + }, { + "iri" : "http://xmlns.com/foaf/0.1/dnaChecksum", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "55", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "archaic", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "dnaChecksum", + "undefined" : "DNA checksum" + }, + "domain" : "19", + "comment" : { + "undefined" : "A checksum for the DNA of some thing. Joke." + }, + "attributes" : [ "datatype" ], + "id" : "54" + }, { + "iri" : "http://xmlns.com/foaf/0.1/lastName", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "58", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "lastName", + "undefined" : "lastName" + }, + "domain" : "12", + "comment" : { + "undefined" : "The last name of a person." + }, + "attributes" : [ "datatype" ], + "id" : "57" + }, { + "iri" : "http://xmlns.com/foaf/0.1/status", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "45", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "status", + "undefined" : "status" + }, + "domain" : "1", + "comment" : { + "undefined" : "A string expressing what the user is happy for the general public (normally) to know about their current activity." + }, + "attributes" : [ "datatype" ], + "id" : "65" + }, { + "iri" : "http://xmlns.com/foaf/0.1/yahooChatID", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "46", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "yahooChatID", + "undefined" : "Yahoo chat ID" + }, + "domain" : "19", + "comment" : { + "undefined" : "A Yahoo chat ID" + }, + "attributes" : [ "datatype" ], + "id" : "66" + }, { + "iri" : "http://xmlns.com/foaf/0.1/name", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "68", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "name", + "undefined" : "name" + }, + "domain" : "19", + "comment" : { + "undefined" : "A name for some thing." + }, + "attributes" : [ "datatype" ], + "id" : "67" + }, { + "iri" : "http://xmlns.com/foaf/0.1/icqChatID", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "53", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "icqChatID", + "undefined" : "ICQ chat ID" + }, + "domain" : "19", + "comment" : { + "undefined" : "An ICQ chat ID" + }, + "attributes" : [ "datatype" ], + "id" : "70" + }, { + "iri" : "http://xmlns.com/foaf/0.1/givenname", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "73", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "archaic", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "givenname", + "undefined" : "Given name" + }, + "domain" : "19", + "comment" : { + "undefined" : "The given name of some person." + }, + "attributes" : [ "datatype" ], + "id" : "72" + }, { + "iri" : "http://xmlns.com/foaf/0.1/isPrimaryTopicOf", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "isPrimaryTopicOf", + "undefined" : "is primary topic of" + }, + "superproperty" : [ "38" ], + "domain" : "39", + "subproperty" : [ "14", "43" ], + "comment" : { + "undefined" : "A document that this thing is the primary topic of." + }, + "attributes" : [ "inverse functional", "object" ], + "id" : "15" + }, { + "range" : "2", + "domain" : "32", + "attributes" : [ "anonymous", "object" ], + "id" : "74" + }, { + "range" : "2", + "domain" : "71", + "attributes" : [ "anonymous", "object" ], + "id" : "75" + }, { + "range" : "78", + "domain" : "77", + "attributes" : [ "anonymous", "object" ], + "id" : "76" + }, { + "range" : "36", + "domain" : "12", + "attributes" : [ "anonymous", "object" ], + "id" : "79" + }, { + "iri" : "http://xmlns.com/foaf/0.1/accountServiceHomepage", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "accountServiceHomepage", + "undefined" : "account service homepage" + }, + "domain" : "78", + "comment" : { + "undefined" : "Indicates a homepage of the service provide for this online account." + }, + "attributes" : [ "object" ], + "id" : "80" + }, { + "iri" : "http://xmlns.com/foaf/0.1/logo", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "19", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "logo", + "undefined" : "logo" + }, + "domain" : "19", + "comment" : { + "undefined" : "A logo representing some thing." + }, + "attributes" : [ "inverse functional", "object" ], + "id" : "81" + }, { + "range" : "78", + "domain" : "83", + "attributes" : [ "anonymous", "object" ], + "id" : "82" + }, { + "iri" : "http://xmlns.com/foaf/0.1/depiction", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "32", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "depiction", + "undefined" : "depiction" + }, + "domain" : "33", + "subproperty" : [ "84" ], + "comment" : { + "undefined" : "A depiction of some thing." + }, + "attributes" : [ "object" ], + "id" : "34" + }, { + "range" : "78", + "domain" : "86", + "attributes" : [ "anonymous", "object" ], + "id" : "85" + }, { + "iri" : "http://xmlns.com/foaf/0.1/family_name", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "88", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "archaic", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "family_name", + "undefined" : "family_name" + }, + "domain" : "12", + "comment" : { + "undefined" : "The family name of some person." + }, + "attributes" : [ "datatype" ], + "id" : "87" + }, { + "range" : "1", + "domain" : "12", + "attributes" : [ "anonymous", "object" ], + "id" : "89" + }, { + "range" : "1", + "domain" : "11", + "attributes" : [ "anonymous", "object" ], + "id" : "90" + }, { + "iri" : "http://xmlns.com/foaf/0.1/fundedBy", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "19", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "archaic", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "fundedBy", + "undefined" : "funded by" + }, + "domain" : "19", + "comment" : { + "undefined" : "An organization funding a project or person." + }, + "attributes" : [ "object" ], + "id" : "91" + }, { + "iri" : "http://xmlns.com/foaf/0.1/title", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "93", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "title", + "undefined" : "title" + }, + "domain" : "19", + "comment" : { + "undefined" : "Title (Mr, Mrs, Ms, Dr. etc)" + }, + "attributes" : [ "datatype" ], + "id" : "92" + }, { + "iri" : "http://xmlns.com/foaf/0.1/accountName", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "59", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "accountName", + "undefined" : "account name" + }, + "domain" : "78", + "comment" : { + "undefined" : "Indicates the name (identifier) associated with this online account." + }, + "attributes" : [ "datatype" ], + "id" : "95" + }, { + "iri" : "http://xmlns.com/foaf/0.1/account", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "78", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "account", + "undefined" : "account" + }, + "domain" : "1", + "comment" : { + "undefined" : "Indicates an account held by this agent." + }, + "attributes" : [ "object" ], + "id" : "96" + }, { + "iri" : "http://xmlns.com/foaf/0.1/jabberID", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "69", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "jabberID", + "undefined" : "jabber ID" + }, + "domain" : "19", + "comment" : { + "undefined" : "A jabber ID for something." + }, + "attributes" : [ "datatype" ], + "id" : "97" + }, { + "range" : "1", + "domain" : "10", + "attributes" : [ "anonymous", "object" ], + "id" : "98" + }, { + "iri" : "http://xmlns.com/foaf/0.1/age", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "100", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "age", + "undefined" : "age" + }, + "domain" : "1", + "comment" : { + "undefined" : "The age in years of some agent." + }, + "attributes" : [ "datatype", "functional" ], + "id" : "99" + }, { + "iri" : "http://xmlns.com/foaf/0.1/homepage", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "homepage", + "undefined" : "homepage" + }, + "superproperty" : [ "15", "38" ], + "domain" : "39", + "comment" : { + "undefined" : "A homepage for some thing." + }, + "attributes" : [ "inverse functional", "object" ], + "id" : "43" + }, { + "iri" : "http://xmlns.com/foaf/0.1/tipjar", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "tipjar", + "undefined" : "tipjar" + }, + "superproperty" : [ "38" ], + "domain" : "1", + "comment" : { + "undefined" : "A tipjar document for this agent, describing means for payment and reward." + }, + "attributes" : [ "object" ], + "id" : "42" + }, { + "iri" : "http://xmlns.com/foaf/0.1/msnChatID", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "61", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "msnChatID", + "undefined" : "MSN chat ID" + }, + "domain" : "5", + "comment" : { + "undefined" : "An MSN chat ID" + }, + "attributes" : [ "datatype" ], + "id" : "103" + }, { + "iri" : "http://xmlns.com/foaf/0.1/topic_interest", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "18", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "topic_interest", + "undefined" : "topic_interest" + }, + "domain" : "1", + "comment" : { + "undefined" : "A thing of interest to this person." + }, + "attributes" : [ "object" ], + "id" : "104" + }, { + "iri" : "http://xmlns.com/foaf/0.1/aimChatID", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "106", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "aimChatID", + "undefined" : "AIM chat ID" + }, + "domain" : "19", + "comment" : { + "undefined" : "An AIM chat ID" + }, + "attributes" : [ "datatype" ], + "id" : "105" + }, { + "iri" : "http://xmlns.com/foaf/0.1/currentProject", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "3", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "currentProject", + "undefined" : "current project" + }, + "domain" : "12", + "comment" : { + "undefined" : "A current project this person works on." + }, + "attributes" : [ "object" ], + "id" : "107" + }, { + "iri" : "http://xmlns.com/foaf/0.1/skypeID", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "20", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "skypeID", + "undefined" : "Skype ID" + }, + "domain" : "1", + "comment" : { + "undefined" : "A Skype ID" + }, + "attributes" : [ "datatype" ], + "id" : "108" + }, { + "iri" : "http://xmlns.com/foaf/0.1/holdsAccount", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "78", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "archaic", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "holdsAccount", + "undefined" : "account" + }, + "domain" : "1", + "comment" : { + "undefined" : "Indicates an account held by this agent." + }, + "attributes" : [ "object" ], + "id" : "109" + }, { + "iri" : "http://xmlns.com/foaf/0.1/thumbnail", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "32", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "thumbnail", + "undefined" : "thumbnail" + }, + "domain" : "32", + "comment" : { + "undefined" : "A derived thumbnail image." + }, + "attributes" : [ "object" ], + "id" : "110" + }, { + "iri" : "http://xmlns.com/foaf/0.1/topic", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "39", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "topic", + "undefined" : "topic" + }, + "domain" : "2", + "comment" : { + "undefined" : "A topic of some page or document." + }, + "attributes" : [ "object" ], + "id" : "40" + }, { + "iri" : "http://xmlns.com/foaf/0.1/weblog", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "weblog", + "undefined" : "weblog" + }, + "superproperty" : [ "38" ], + "domain" : "1", + "comment" : { + "undefined" : "A weblog of some thing (whether person, group, company etc.)." + }, + "attributes" : [ "inverse functional", "object" ], + "id" : "41" + }, { + "iri" : "http://xmlns.com/foaf/0.1/img", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "32", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "img", + "undefined" : "image" + }, + "superproperty" : [ "34" ], + "domain" : "12", + "comment" : { + "undefined" : "An image that can be used to represent some thing (ie. those depictions which are particularly representative of something, eg. one's photo on a homepage)." + }, + "attributes" : [ "object" ], + "id" : "84" + }, { + "iri" : "http://xmlns.com/foaf/0.1/birthday", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "56", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "birthday", + "undefined" : "birthday" + }, + "domain" : "1", + "comment" : { + "undefined" : "The birthday of this Agent, represented in mm-dd string form, eg. '12-31'." + }, + "attributes" : [ "datatype", "functional" ], + "id" : "111" + }, { + "iri" : "http://xmlns.com/foaf/0.1/sha1", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "101", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "unstable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "sha1", + "undefined" : "sha1sum (hex)" + }, + "domain" : "2", + "comment" : { + "undefined" : "A sha1sum hash, in hex." + }, + "attributes" : [ "datatype" ], + "id" : "112" + }, { + "iri" : "http://xmlns.com/foaf/0.1/firstName", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "24", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "firstName", + "undefined" : "firstName" + }, + "domain" : "12", + "comment" : { + "undefined" : "The first name of a person." + }, + "attributes" : [ "datatype" ], + "id" : "113" + }, { + "iri" : "http://xmlns.com/foaf/0.1/made", + "inverse" : "115", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "18", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "made", + "undefined" : "made" + }, + "domain" : "1", + "comment" : { + "undefined" : "Something that was made by this agent." + }, + "attributes" : [ "object" ], + "id" : "114" + }, { + "range" : "60", + "domain" : "2", + "attributes" : [ "anonymous", "object" ], + "id" : "116" + }, { + "range" : "12", + "domain" : "60", + "attributes" : [ "anonymous", "object" ], + "id" : "117" + }, { + "iri" : "http://xmlns.com/foaf/0.1/familyName", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "62", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "familyName", + "undefined" : "familyName" + }, + "domain" : "12", + "comment" : { + "undefined" : "The family name of some person." + }, + "attributes" : [ "datatype" ], + "id" : "119" + }, { + "range" : "2", + "domain" : "11", + "attributes" : [ "anonymous", "object" ], + "id" : "120" + }, { + "range" : "12", + "domain" : "11", + "attributes" : [ "anonymous", "object" ], + "id" : "121" + }, { + "iri" : "http://xmlns.com/foaf/0.1/member", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "1", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "member", + "undefined" : "member" + }, + "domain" : "10", + "comment" : { + "undefined" : "Indicates a member of a Group" + }, + "attributes" : [ "object" ], + "id" : "122" + }, { + "iri" : "http://xmlns.com/foaf/0.1/plan", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "27", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "plan", + "undefined" : "plan" + }, + "domain" : "12", + "comment" : { + "undefined" : "A .plan comment, in the tradition of finger and '.plan' files." + }, + "attributes" : [ "datatype" ], + "id" : "123" + }, { + "iri" : "http://xmlns.com/foaf/0.1/mbox", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "18", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "mbox", + "undefined" : "personal mailbox" + }, + "domain" : "1", + "comment" : { + "undefined" : "A personal mailbox, ie. an Internet mailbox associated with exactly one owner, the first owner of this mailbox. This is a 'static inverse functional property', in that there is (across time and change) at most one individual that ever has any particular value for foaf:mbox." + }, + "attributes" : [ "inverse functional", "object" ], + "id" : "124" + }, { + "iri" : "http://xmlns.com/foaf/0.1/surname", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "118", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "archaic", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "surname", + "undefined" : "Surname" + }, + "domain" : "12", + "comment" : { + "undefined" : "The surname of some person." + }, + "attributes" : [ "datatype" ], + "id" : "125" + }, { + "iri" : "http://xmlns.com/foaf/0.1/myersBriggs", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "22", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "myersBriggs", + "undefined" : "myersBriggs" + }, + "domain" : "12", + "comment" : { + "undefined" : "A Myers Briggs (MBTI) personality classification." + }, + "attributes" : [ "datatype" ], + "id" : "127" + }, { + "iri" : "http://xmlns.com/foaf/0.1/maker", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "1", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "stable", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "maker", + "undefined" : "maker" + }, + "domain" : "18", + "comment" : { + "undefined" : "An agent that made this thing." + }, + "attributes" : [ "object" ], + "id" : "115" + }, { + "iri" : "http://xmlns.com/foaf/0.1/publications", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "publications", + "undefined" : "publications" + }, + "domain" : "12", + "comment" : { + "undefined" : "A link to the publications of this person." + }, + "attributes" : [ "object" ], + "id" : "128" + }, { + "iri" : "http://xmlns.com/foaf/0.1/workplaceHomepage", + "baseIri" : "http://xmlns.com/foaf/0.1", + "range" : "2", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://xmlns.com/foaf/0.1/", + "type" : "iri" + } ], + "term_status" : [ { + "identifier" : "term_status", + "language" : "undefined", + "value" : "testing", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "workplaceHomepage", + "undefined" : "workplace homepage" + }, + "domain" : "12", + "comment" : { + "undefined" : "A workplace homepage of some person; the homepage of an organization they work for." + }, + "attributes" : [ "object" ], + "id" : "129" + } ] +} \ No newline at end of file diff --git a/tto/webvowl/data/ontology.json b/tto/webvowl/data/ontology.json new file mode 100644 index 0000000..454e691 --- /dev/null +++ b/tto/webvowl/data/ontology.json @@ -0,0 +1,19206 @@ +{ + "_comment" : "Created with OWL2VOWL (version 0.3.5), http://vowl.visualdataweb.org", + "header" : { + "languages" : [ "de", "en", "undefined" ], + "baseIris" : [ "http://www.w3.org/1999/02/22-rdf-syntax-ns", "http://qudt.org/schema/qudt", "http://purl.obolibrary.org/obo", "http://www.w3.org/2002/07/owl", "https://w3id.org/pmd/co", "http://www.w3.org/2001/XMLSchema", "http://purl.org/spar/datacite", "http://www.w3.org/2000/01/rdf-schema", "http://www.w3.org/ns/prov", "http://www.w3.org/ns/oa", "http://purl.org/dc/terms", "http://w3id.org/DMI", "https://w3id.org/pmd/tto" ], + "title" : { + "en" : "Tensile Test Ontology (TTO)" + }, + "iri" : "https://w3id.org/pmd/tto", + "version" : "2.0.1", + "author" : [ "https://orcid.org/0000-0001-7192-7143", "https://orcid.org/0000-0002-3717-7104", "https://orcid.org/0000-0003-4971-3645", "https://orcid.org/0000-0002-7094-5371", "https://orcid.org/0000-0002-9014-2920" ], + "comments" : { + "en" : "This is the stable version of the PMD ontology of the tensile test (Tensile Test Ontology - TTO) as developed on the basis of the standard ISO 6892-1: Metallic materials - Tensile Testing - Part 1: Method of test at room temperature.\n\nThe TTO was developed in the frame of the PMD project. The TTO provides conceptualizations valid for the description of tensile tests and corresponding data in accordance with the respective standard. By using TTO for storing tensile test data, all data will be well structured and based on a common vocabulary agreed on by an expert group (generation of FAIR data) which will lead to enhanced data interoperability. This comprises several data categories such as primary data, secondary data and metadata. Data will be human and machine readable. The usage of TTO facilitates data retrieval and downstream usage. Due to a close connection to the PMD core ontology (PMDco), the interoperability of tensile test data is enhanced and querying in combination with other aspects and data within the broad field of material science and engineering (MSE) is facilitated.\n\nThe TTO class structure forms a comprehensible and semantic layer for unified storage of data generated in a tensile test including the possibility to record data from analysis, re-evaluation and re-use. Furthermore, extensive metadata allows to assess data quality and reproduce experiments. Following the open world assumption, object properties are deliberately low restrictive and sparse.\n\nTTO of PMD at GitHub: https://github.com/materialdigital/application-ontologies/tree/main/tensile_test_ontology_TTO" + }, + "other" : { + "license" : [ { + "identifier" : "license", + "language" : "undefined", + "value" : "http://creativecommons.org/licenses/by/4.0/", + "type" : "iri" + } ], + "creator" : [ { + "identifier" : "creator", + "language" : "undefined", + "value" : "https://orcid.org/0000-0003-4971-3645", + "type" : "iri" + }, { + "identifier" : "creator", + "language" : "undefined", + "value" : "https://orcid.org/0000-0002-9014-2920", + "type" : "iri" + }, { + "identifier" : "creator", + "language" : "undefined", + "value" : "https://orcid.org/0000-0002-7094-5371", + "type" : "iri" + }, { + "identifier" : "creator", + "language" : "undefined", + "value" : "https://orcid.org/0000-0001-7192-7143", + "type" : "iri" + }, { + "identifier" : "creator", + "language" : "undefined", + "value" : "https://orcid.org/0000-0002-3717-7104", + "type" : "iri" + } ], + "created" : [ { + "identifier" : "created", + "language" : "en", + "value" : "2023-07-14", + "type" : "label" + } ], + "versionInfo" : [ { + "identifier" : "versionInfo", + "language" : "undefined", + "value" : "2.0.1", + "type" : "label" + } ], + "bibliographicCitation" : [ { + "identifier" : "bibliographicCitation", + "language" : "en", + "value" : "Markus Schilling, Bernd Bayerlein, Henk Birkholz, Philipp von Hartrott, Jörg Waitelonis. (July 14th, 2023) TTO: Tensile Test Ontology. Version 2.0.0, https://w3id.org/pmd/tto", + "type" : "label" + } ], + "title" : [ { + "identifier" : "title", + "language" : "en", + "value" : "Tensile Test Ontology (TTO)", + "type" : "label" + } ] + } + }, + "namespace" : [ ], + "class" : [ { + "id" : "13", + "type" : "owl:Class" + }, { + "id" : "41", + "type" : "owl:Class" + }, { + "id" : "43", + "type" : "owl:Class" + }, { + "id" : "62", + "type" : "owl:Class" + }, { + "id" : "69", + "type" : "owl:Class" + }, { + "id" : "71", + "type" : "owl:Class" + }, { + "id" : "88", + "type" : "owl:Class" + }, { + "id" : "89", + "type" : "owl:Class" + }, { + "id" : "91", + "type" : "owl:Class" + }, { + "id" : "99", + "type" : "owl:Class" + }, { + "id" : "107", + "type" : "owl:Class" + }, { + "id" : "109", + "type" : "owl:Class" + }, { + "id" : "114", + "type" : "owl:Class" + }, { + "id" : "139", + "type" : "owl:Class" + }, { + "id" : "140", + "type" : "owl:Class" + }, { + "id" : "141", + "type" : "owl:Class" + }, { + "id" : "145", + "type" : "owl:Class" + }, { + "id" : "148", + "type" : "owl:Class" + }, { + "id" : "106", + "type" : "owl:Class" + }, { + "id" : "166", + "type" : "owl:Class" + }, { + "id" : "189", + "type" : "owl:Class" + }, { + "id" : "92", + "type" : "owl:Class" + }, { + "id" : "214", + "type" : "owl:Class" + }, { + "id" : "219", + "type" : "owl:Class" + }, { + "id" : "217", + "type" : "owl:Class" + }, { + "id" : "220", + "type" : "owl:Class" + }, { + "id" : "221", + "type" : "owl:Class" + }, { + "id" : "222", + "type" : "owl:Class" + }, { + "id" : "236", + "type" : "owl:Class" + }, { + "id" : "246", + "type" : "owl:Class" + }, { + "id" : "44", + "type" : "owl:Class" + }, { + "id" : "110", + "type" : "owl:Class" + }, { + "id" : "282", + "type" : "owl:Class" + }, { + "id" : "215", + "type" : "owl:Class" + }, { + "id" : "121", + "type" : "owl:Class" + }, { + "id" : "118", + "type" : "owl:Class" + }, { + "id" : "204", + "type" : "owl:Class" + }, { + "id" : "227", + "type" : "owl:Class" + }, { + "id" : "288", + "type" : "owl:Class" + }, { + "id" : "305", + "type" : "owl:Class" + }, { + "id" : "306", + "type" : "owl:Class" + }, { + "id" : "241", + "type" : "owl:Class" + }, { + "id" : "309", + "type" : "owl:intersectionOf" + }, { + "id" : "310", + "type" : "owl:Class" + }, { + "id" : "313", + "type" : "owl:Class" + }, { + "id" : "314", + "type" : "owl:Class" + }, { + "id" : "328", + "type" : "owl:Class" + }, { + "id" : "329", + "type" : "owl:Class" + }, { + "id" : "335", + "type" : "owl:Class" + }, { + "id" : "210", + "type" : "owl:Class" + }, { + "id" : "283", + "type" : "owl:Class" + }, { + "id" : "346", + "type" : "owl:Class" + }, { + "id" : "101", + "type" : "owl:Class" + }, { + "id" : "295", + "type" : "owl:Class" + }, { + "id" : "245", + "type" : "owl:Class" + }, { + "id" : "344", + "type" : "owl:Class" + }, { + "id" : "150", + "type" : "owl:Class" + }, { + "id" : "198", + "type" : "owl:Class" + }, { + "id" : "368", + "type" : "owl:Class" + }, { + "id" : "386", + "type" : "owl:Class" + }, { + "id" : "39", + "type" : "owl:Class" + }, { + "id" : "311", + "type" : "owl:Class" + }, { + "id" : "156", + "type" : "owl:Class" + }, { + "id" : "268", + "type" : "owl:Class" + }, { + "id" : "142", + "type" : "owl:Class" + }, { + "id" : "403", + "type" : "owl:Class" + }, { + "id" : "266", + "type" : "owl:Class" + }, { + "id" : "405", + "type" : "owl:Class" + }, { + "id" : "269", + "type" : "owl:Class" + }, { + "id" : "149", + "type" : "owl:Class" + }, { + "id" : "274", + "type" : "owl:Class" + }, { + "id" : "446", + "type" : "owl:intersectionOf" + }, { + "id" : "432", + "type" : "owl:intersectionOf" + }, { + "id" : "95", + "type" : "owl:Class" + }, { + "id" : "177", + "type" : "owl:Class" + }, { + "id" : "454", + "type" : "owl:intersectionOf" + }, { + "id" : "262", + "type" : "owl:Class" + }, { + "id" : "104", + "type" : "owl:Class" + }, { + "id" : "466", + "type" : "owl:Class" + }, { + "id" : "395", + "type" : "owl:Class" + }, { + "id" : "468", + "type" : "owl:Class" + }, { + "id" : "359", + "type" : "owl:Class" + }, { + "id" : "469", + "type" : "owl:intersectionOf" + }, { + "id" : "380", + "type" : "owl:Class" + }, { + "id" : "47", + "type" : "owl:Class" + }, { + "id" : "211", + "type" : "owl:Class" + }, { + "id" : "436", + "type" : "owl:Class" + }, { + "id" : "225", + "type" : "owl:Class" + }, { + "id" : "2", + "type" : "owl:Class" + }, { + "id" : "319", + "type" : "owl:Class" + }, { + "id" : "479", + "type" : "rdfs:Literal" + }, { + "id" : "25", + "type" : "owl:Class" + }, { + "id" : "7", + "type" : "owl:Class" + }, { + "id" : "65", + "type" : "owl:Class" + }, { + "id" : "182", + "type" : "owl:Class" + }, { + "id" : "263", + "type" : "owl:Class" + }, { + "id" : "11", + "type" : "owl:unionOf" + }, { + "id" : "497", + "type" : "rdfs:Literal" + }, { + "id" : "499", + "type" : "owl:Class" + }, { + "id" : "123", + "type" : "owl:Class" + }, { + "id" : "330", + "type" : "owl:Class" + }, { + "id" : "48", + "type" : "owl:Thing" + }, { + "id" : "84", + "type" : "rdfs:Literal" + }, { + "id" : "472", + "type" : "owl:Class" + }, { + "id" : "54", + "type" : "owl:Thing" + }, { + "id" : "200", + "type" : "owl:Class" + }, { + "id" : "348", + "type" : "owl:Class" + }, { + "id" : "297", + "type" : "owl:Class" + }, { + "id" : "427", + "type" : "owl:Class" + }, { + "id" : "514", + "type" : "rdfs:Datatype" + }, { + "id" : "237", + "type" : "owl:Class" + }, { + "id" : "515", + "type" : "rdfs:Datatype" + }, { + "id" : "12", + "type" : "owl:Thing" + }, { + "id" : "516", + "type" : "rdfs:Literal" + }, { + "id" : "304", + "type" : "rdfs:Datatype" + }, { + "id" : "170", + "type" : "owl:Class" + }, { + "id" : "517", + "type" : "owl:unionOf" + }, { + "id" : "518", + "type" : "rdfs:Datatype" + }, { + "id" : "138", + "type" : "rdfs:Datatype" + }, { + "id" : "519", + "type" : "owl:unionOf" + }, { + "id" : "521", + "type" : "owl:Class" + }, { + "id" : "165", + "type" : "owl:unionOf" + }, { + "id" : "27", + "type" : "owl:Class" + }, { + "id" : "439", + "type" : "owl:intersectionOf" + }, { + "id" : "356", + "type" : "owl:Class" + }, { + "id" : "523", + "type" : "owl:Class" + }, { + "id" : "524", + "type" : "owl:unionOf" + }, { + "id" : "129", + "type" : "owl:Class" + }, { + "id" : "8", + "type" : "owl:unionOf" + }, { + "id" : "526", + "type" : "owl:unionOf" + }, { + "id" : "527", + "type" : "owl:unionOf" + }, { + "id" : "528", + "type" : "owl:unionOf" + }, { + "id" : "20", + "type" : "owl:Class" + }, { + "id" : "532", + "type" : "owl:unionOf" + }, { + "id" : "74", + "type" : "owl:unionOf" + }, { + "id" : "108", + "type" : "owl:Class" + }, { + "id" : "510", + "type" : "owl:Class" + }, { + "id" : "325", + "type" : "owl:Class" + }, { + "id" : "213", + "type" : "owl:Class" + }, { + "id" : "334", + "type" : "owl:Class" + }, { + "id" : "423", + "type" : "owl:intersectionOf" + }, { + "id" : "94", + "type" : "owl:intersectionOf" + }, { + "id" : "228", + "type" : "owl:Class" + }, { + "id" : "339", + "type" : "owl:Class" + }, { + "id" : "564", + "type" : "owl:Class" + }, { + "id" : "401", + "type" : "rdfs:Literal" + }, { + "id" : "566", + "type" : "rdfs:Literal" + }, { + "id" : "175", + "type" : "owl:Class" + }, { + "id" : "569", + "type" : "owl:Class" + }, { + "id" : "571", + "type" : "owl:Class" + }, { + "id" : "160", + "type" : "owl:Class" + }, { + "id" : "574", + "type" : "owl:Class" + }, { + "id" : "98", + "type" : "owl:Class" + }, { + "id" : "119", + "type" : "owl:Class" + }, { + "id" : "206", + "type" : "owl:Class" + }, { + "id" : "583", + "type" : "owl:Class" + }, { + "id" : "585", + "type" : "owl:Class" + }, { + "id" : "31", + "type" : "owl:Class" + }, { + "id" : "507", + "type" : "owl:Class" + }, { + "id" : "463", + "type" : "owl:Class" + }, { + "id" : "351", + "type" : "owl:Class" + }, { + "id" : "581", + "type" : "rdfs:Literal" + }, { + "id" : "550", + "type" : "rdfs:Literal" + }, { + "id" : "587", + "type" : "owl:Thing" + }, { + "id" : "590", + "type" : "owl:Thing" + }, { + "id" : "591", + "type" : "rdfs:Literal" + }, { + "id" : "488", + "type" : "owl:Thing" + }, { + "id" : "287", + "type" : "rdfs:Literal" + }, { + "id" : "230", + "type" : "owl:Class" + }, { + "id" : "402", + "type" : "owl:Class" + }, { + "id" : "597", + "type" : "owl:Class" + }, { + "id" : "410", + "type" : "owl:Class" + }, { + "id" : "600", + "type" : "owl:Class" + }, { + "id" : "601", + "type" : "owl:Class" + }, { + "id" : "87", + "type" : "owl:Class" + }, { + "id" : "493", + "type" : "owl:Class" + }, { + "id" : "192", + "type" : "owl:Class" + }, { + "id" : "80", + "type" : "owl:Class" + }, { + "id" : "159", + "type" : "owl:Class" + }, { + "id" : "1", + "type" : "owl:Class" + }, { + "id" : "78", + "type" : "owl:Class" + }, { + "id" : "460", + "type" : "owl:Class" + }, { + "id" : "629", + "type" : "owl:Class" + }, { + "id" : "321", + "type" : "owl:Class" + }, { + "id" : "174", + "type" : "owl:Class" + }, { + "id" : "631", + "type" : "owl:intersectionOf" + }, { + "id" : "632", + "type" : "owl:Class" + }, { + "id" : "633", + "type" : "owl:Class" + }, { + "id" : "5", + "type" : "owl:Class" + }, { + "id" : "18", + "type" : "owl:Class" + }, { + "id" : "218", + "type" : "owl:Class" + }, { + "id" : "635", + "type" : "owl:Class" + }, { + "id" : "636", + "type" : "owl:Class" + }, { + "id" : "372", + "type" : "owl:Class" + }, { + "id" : "40", + "type" : "owl:Class" + }, { + "id" : "113", + "type" : "owl:Class" + }, { + "id" : "502", + "type" : "owl:Class" + }, { + "id" : "265", + "type" : "owl:Class" + }, { + "id" : "525", + "type" : "owl:Class" + }, { + "id" : "100", + "type" : "owl:Class" + }, { + "id" : "367", + "type" : "owl:Class" + }, { + "id" : "444", + "type" : "owl:Class" + }, { + "id" : "72", + "type" : "owl:Class" + }, { + "id" : "312", + "type" : "owl:Class" + }, { + "id" : "196", + "type" : "owl:Class" + }, { + "id" : "243", + "type" : "owl:Class" + }, { + "id" : "258", + "type" : "owl:Class" + }, { + "id" : "577", + "type" : "owl:Class" + }, { + "id" : "249", + "type" : "owl:Class" + }, { + "id" : "51", + "type" : "owl:Class" + }, { + "id" : "82", + "type" : "owl:Class" + }, { + "id" : "492", + "type" : "owl:Class" + }, { + "id" : "378", + "type" : "owl:Class" + }, { + "id" : "223", + "type" : "owl:Class" + }, { + "id" : "370", + "type" : "owl:Class" + }, { + "id" : "190", + "type" : "owl:Class" + }, { + "id" : "75", + "type" : "owl:Class" + }, { + "id" : "647", + "type" : "owl:intersectionOf" + }, { + "id" : "322", + "type" : "owl:Class" + }, { + "id" : "326", + "type" : "owl:Class" + }, { + "id" : "168", + "type" : "owl:intersectionOf" + }, { + "id" : "66", + "type" : "owl:Class" + }, { + "id" : "300", + "type" : "owl:Class" + }, { + "id" : "420", + "type" : "owl:Class" + }, { + "id" : "293", + "type" : "owl:Class" + }, { + "id" : "146", + "type" : "owl:Class" + }, { + "id" : "180", + "type" : "owl:Class" + }, { + "id" : "361", + "type" : "owl:Class" + }, { + "id" : "35", + "type" : "owl:Class" + }, { + "id" : "332", + "type" : "owl:Class" + }, { + "id" : "216", + "type" : "owl:Class" + }, { + "id" : "42", + "type" : "owl:Class" + }, { + "id" : "239", + "type" : "owl:Class" + }, { + "id" : "369", + "type" : "owl:Class" + }, { + "id" : "343", + "type" : "owl:Class" + }, { + "id" : "302", + "type" : "owl:Class" + }, { + "id" : "382", + "type" : "owl:Class" + }, { + "id" : "63", + "type" : "owl:Class" + }, { + "id" : "442", + "type" : "owl:Class" + }, { + "id" : "232", + "type" : "owl:Class" + }, { + "id" : "428", + "type" : "owl:Class" + }, { + "id" : "656", + "type" : "owl:Class" + }, { + "id" : "648", + "type" : "owl:Class" + }, { + "id" : "270", + "type" : "owl:Class" + }, { + "id" : "24", + "type" : "owl:Class" + }, { + "id" : "77", + "type" : "owl:Class" + }, { + "id" : "513", + "type" : "owl:Class" + }, { + "id" : "187", + "type" : "owl:Class" + }, { + "id" : "185", + "type" : "owl:Class" + }, { + "id" : "494", + "type" : "owl:Class" + }, { + "id" : "278", + "type" : "owl:Class" + }, { + "id" : "90", + "type" : "owl:Class" + }, { + "id" : "15", + "type" : "owl:Class" + }, { + "id" : "152", + "type" : "owl:Class" + }, { + "id" : "547", + "type" : "owl:Class" + }, { + "id" : "136", + "type" : "owl:Class" + }, { + "id" : "251", + "type" : "owl:Class" + }, { + "id" : "162", + "type" : "owl:Class" + }, { + "id" : "234", + "type" : "owl:Class" + }, { + "id" : "272", + "type" : "owl:Class" + }, { + "id" : "336", + "type" : "owl:Class" + }, { + "id" : "674", + "type" : "owl:Class" + }, { + "id" : "385", + "type" : "owl:Class" + }, { + "id" : "341", + "type" : "owl:Class" + }, { + "id" : "448", + "type" : "owl:Class" + }, { + "id" : "22", + "type" : "owl:Class" + }, { + "id" : "455", + "type" : "owl:Class" + }, { + "id" : "33", + "type" : "owl:Class" + }, { + "id" : "37", + "type" : "owl:Class" + }, { + "id" : "481", + "type" : "owl:Class" + }, { + "id" : "4", + "type" : "owl:Class" + }, { + "id" : "363", + "type" : "owl:Class" + }, { + "id" : "426", + "type" : "owl:intersectionOf" + }, { + "id" : "374", + "type" : "owl:Class" + }, { + "id" : "202", + "type" : "owl:Class" + }, { + "id" : "235", + "type" : "owl:Class" + }, { + "id" : "267", + "type" : "owl:Class" + }, { + "id" : "132", + "type" : "owl:Class" + }, { + "id" : "254", + "type" : "owl:Class" + }, { + "id" : "652", + "type" : "owl:Class" + }, { + "id" : "276", + "type" : "owl:Class" + }, { + "id" : "29", + "type" : "owl:Class" + }, { + "id" : "495", + "type" : "owl:Class" + }, { + "id" : "125", + "type" : "owl:Class" + }, { + "id" : "134", + "type" : "owl:Class" + }, { + "id" : "285", + "type" : "owl:Class" + }, { + "id" : "429", + "type" : "owl:Class" + }, { + "id" : "392", + "type" : "owl:Class" + }, { + "id" : "412", + "type" : "owl:Class" + }, { + "id" : "178", + "type" : "owl:Class" + }, { + "id" : "183", + "type" : "owl:Class" + }, { + "id" : "434", + "type" : "owl:Class" + }, { + "id" : "155", + "type" : "owl:intersectionOf" + }, { + "id" : "377", + "type" : "owl:Class" + }, { + "id" : "292", + "type" : "owl:Class" + }, { + "id" : "508", + "type" : "owl:Class" + }, { + "id" : "194", + "type" : "owl:Class" + }, { + "id" : "208", + "type" : "owl:Class" + }, { + "id" : "557", + "type" : "owl:Class" + }, { + "id" : "490", + "type" : "owl:Class" + }, { + "id" : "253", + "type" : "owl:Class" + }, { + "id" : "491", + "type" : "owl:Class" + }, { + "id" : "188", + "type" : "owl:Class" + }, { + "id" : "70", + "type" : "owl:Class" + }, { + "id" : "260", + "type" : "owl:Class" + }, { + "id" : "552", + "type" : "owl:Class" + }, { + "id" : "256", + "type" : "owl:Class" + }, { + "id" : "17", + "type" : "owl:Class" + }, { + "id" : "116", + "type" : "owl:Class" + }, { + "id" : "153", + "type" : "owl:Class" + }, { + "id" : "264", + "type" : "owl:Class" + }, { + "id" : "496", + "type" : "owl:Class" + }, { + "id" : "97", + "type" : "owl:Class" + }, { + "id" : "102", + "type" : "owl:Class" + }, { + "id" : "281", + "type" : "owl:Class" + }, { + "id" : "568", + "type" : "owl:Class" + }, { + "id" : "163", + "type" : "owl:Class" + }, { + "id" : "127", + "type" : "owl:Class" + } ], + "classAttribute" : [ { + "iri" : "https://w3id.org/pmd/co/Weight", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Weight.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/weight. Accessed 5 Dec. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The force with which a body is attracted toward the earth or a celestial body by gravitation and which is equal to the product of the mass and the local gravitational acceleration.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Gewicht", + "IRI-based" : "Weight", + "en" : "Weight" + }, + "attributes" : [ "external" ], + "id" : "13", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/ClassificationDocument", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This entity describes a document used to define the working or application range of a process node in accordance with standardized graduations.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Entität beschreibt ein Dokument, das dazu dient, den Arbeits- oder Anwendungsbereich eines Prozessknotens in Übereinstimmung mit genormten Abstufungen zu definieren.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Klassifzierungsdokument", + "IRI-based" : "ClassificationDocument", + "en" : "Classification Document" + }, + "attributes" : [ "external" ], + "id" : "41", + "superClasses" : [ "42" ] + }, { + "iri" : "https://w3id.org/pmd/co/WeightedYCoordinate", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Mass center of grey values in the other direction", + "type" : "label" + } ] + }, + "label" : { + "de" : "Gewichtete Y Koordinate", + "IRI-based" : "WeightedYCoordinate", + "en" : "Weighted Y coordinate" + }, + "attributes" : [ "external" ], + "id" : "43", + "superClasses" : [ "44" ] + }, { + "iri" : "https://w3id.org/pmd/co/OpticalMicroscopy", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Optical microscope.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/optical%20microscope. Accessed 24 Nov. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A microscopy process in which light rays are seen directly by the observer as distinguished from one (as an electron microscope) in which some transformation or system of indirect viewing is use.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Optische Mikroskopie", + "IRI-based" : "OpticalMicroscopy", + "en" : "Optical Microscopy" + }, + "attributes" : [ "external" ], + "id" : "62", + "superClasses" : [ "63" ] + }, { + "iri" : "https://w3id.org/pmd/co/Index", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Some running number.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Index", + "IRI-based" : "Index", + "en" : "Index" + }, + "subClasses" : [ "70" ], + "attributes" : [ "external" ], + "id" : "69", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/ElectronMicroscope", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Electron microscope.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/electron%20microscope. Accessed 24 Nov. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An electron-optical instrument in which a beam of electrons is used to produce an enlarged image of a minute object.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Elektronenmikroskop", + "IRI-based" : "ElectronMicroscope", + "en" : "Electron Microscope" + }, + "attributes" : [ "external" ], + "id" : "71", + "superClasses" : [ "72" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Person", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-agent", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Person agents are people.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-types", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Person", + "undefined" : "Person" + }, + "attributes" : [ "external" ], + "id" : "88", + "superClasses" : [ "51" ] + }, { + "iri" : "https://w3id.org/pmd/co/Elliptical", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Elliptical.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/elliptical. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Shaped like an ellipse.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Geformt wie eine Ellipse.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Elliptisch", + "IRI-based" : "Elliptical", + "en" : "Elliptical" + }, + "attributes" : [ "external" ], + "id" : "89", + "superClasses" : [ "90" ] + }, { + "iri" : "https://w3id.org/pmd/tto/WidthAfterFracture", + "baseIri" : "https://w3id.org/pmd/tto", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/tto", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Entität beschreibt eine horizontale Messung eines Objekts (Prüfkörpers) im rechten Winkel zur Länge des Objekts (Prüfkörpers), wie sie nach einer Prüfung gemessen wird.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This entity describes a horizontal measurement of an object (test piece) taken at right angles to the length of the object (test piece), as measured after a test.", + "type" : "label" + } ] + }, + "label" : { + "de" : "End-Breite", + "IRI-based" : "WidthAfterFracture", + "en" : "Width After Fracture" + }, + "attributes" : [ "external" ], + "id" : "91", + "superClasses" : [ "92" ] + }, { + "iri" : "https://w3id.org/pmd/co/ProvidedIdentifier", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A colloquial, human-generated descriptor.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Bereitgestellter Identifikator", + "IRI-based" : "ProvidedIdentifier", + "en" : "Provided Identifier" + }, + "subClasses" : [ "101", "102" ], + "attributes" : [ "external" ], + "id" : "99", + "superClasses" : [ "100" ] + }, { + "iri" : "https://w3id.org/pmd/co/ManufacturingNode", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A processing node that implements transformative processes as well as consumes and creates tangible objects and typically requires inputs\nIn general but not necessarily, a manufacture node includes intrinsic analysis nodes that create corresponding measurements with respect to the process implemented by the manufacture node.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Herstellungsknoten", + "IRI-based" : "ManufacturingNode", + "en" : "Manufacturing Node" + }, + "attributes" : [ "external" ], + "id" : "107", + "superClasses" : [ "108" ] + }, { + "iri" : "https://w3id.org/pmd/co/Acoustical", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Acoustic.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/acoustic. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Akustisch bezieht sich auf den Hörsinn oder die Hörorgane, auf Schall oder auf die Wissenschaft vom Schall. Hier spezifisch auf die akustischen Eigenschaften eines Materials.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Acoustical is relating to the sense or organs of hearing, to sound, or to the science of sounds. Here specifically on the acoustic properties of a material.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Akustisch", + "IRI-based" : "Acoustical", + "en" : "Acoustical" + }, + "attributes" : [ "external" ], + "id" : "109", + "superClasses" : [ "110" ] + }, { + "iri" : "https://w3id.org/pmd/co/Measurement", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "https://en.wikipedia.org/wiki/Measurement", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The ValueScope category Measurement enables the categorization of ValueObjects as measured.\nMeasurement is the quantification of attributes of an object or event, which can be used to compare with other objects or events.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This value scope describes that a :ValueObject is the quantification of attributes of an object or event, which can be used to compare with other objects or events.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Die Wertekategorie Messung ermöglicht die Kategorisierung von ValueObjects als gemessen.\nMessung ist die Quantifizierung von Eigenschaften eines Objekts oder Ereignisses, die zum Vergleich mit anderen Objekten oder Ereignissen verwendet werden können.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Messwert", + "IRI-based" : "Measurement", + "en" : "Measurement" + }, + "attributes" : [ "external" ], + "id" : "114", + "superClasses" : [ "80" ] + }, { + "iri" : "https://w3id.org/pmd/co/Electrical", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Electric.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/electric. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Electrical is relating to electricity or something that is powered by electricity. Here specifically to the electrical properties of a material.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Elektrisch bezieht sich auf Elektrizität oder etwas, das mit Elektrizität betrieben wird. Hier speziell auf die elektrischen Eigenschaften eines Materials.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Elektrisch", + "IRI-based" : "Electrical", + "en" : "Electrical" + }, + "attributes" : [ "external" ], + "id" : "139", + "superClasses" : [ "110" ] + }, { + "iri" : "https://w3id.org/pmd/co/ElectronMicroscopy", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Electron microscope.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/electron%20microscope. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Die Verwendung eines elektronenoptischen Instruments, bei dem ein Strahl beschleunigter Elektronen als Beleuchtungsquelle eingesetzt wird, um ein vergrößertes Bild eines kleinen Objekts zu erzeugen.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A microscopy process using an electron-optical instrument in which a beam of accelerated electrons as a source of illumination is applied to produce a magnified image of a tiny object.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Elektronenmikroskopie", + "IRI-based" : "ElectronMicroscopy", + "en" : "Electron Microscopy" + }, + "attributes" : [ "external" ], + "id" : "140", + "superClasses" : [ "63" ] + }, { + "iri" : "https://w3id.org/pmd/tto/ParallelLength", + "baseIri" : "https://w3id.org/pmd/tto", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/tto", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Länge des parallelen reduzierten Querschnitts der Probe\n\nAnmerkung: Bei unbearbeiteten Proben tritt an die Stelle der parallelen Länge der Abstand zwischen den Einspannungen.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Symbol: L_c", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "length of the parallel reduced section of the test piece\n\nNote: The concept of parallel length is replaced by the concept of distance between grips for unmachined test pieces.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Parallele Länge", + "IRI-based" : "ParallelLength", + "en" : "Parallel Length" + }, + "attributes" : [ "external" ], + "id" : "141", + "superClasses" : [ "142" ] + }, { + "iri" : "https://w3id.org/pmd/co/VanderwaalsBond", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Van der Waals forces.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/van%20der%20Waals%20forces. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Van der Waals bond is given by the relatively weak attractive forces that act on neutral atoms and molecules and that arise because of the electric polarization induced in each of the particles by the presence of other particles.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Die Van-der-Waals-Bindung ist durch die relativ schwachen Anziehungskräfte gegeben, die auf neutrale Atome und Moleküle wirken und die aufgrund der elektrischen Polarisierung entstehen, die in jedem der Teilchen durch die Anwesenheit anderer Teilchen induziert wird.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Van der Waals Bindung", + "IRI-based" : "VanderwaalsBond", + "en" : "Vanderwaals Bond" + }, + "attributes" : [ "external" ], + "id" : "145", + "superClasses" : [ "146" ] + }, { + "iri" : "https://w3id.org/pmd/co/MechanicalTestingProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A mechanical testing process ia process that determines mechanical properties.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Mechanischer Testprozess", + "IRI-based" : "MechanicalTestingProcess", + "en" : "Mechanical Testing Process" + }, + "subClasses" : [ "150" ], + "attributes" : [ "external" ], + "id" : "148", + "superClasses" : [ "149" ] + }, { + "iri" : "https://w3id.org/pmd/co/SemiCrystallineStructure", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Feststoffe, die eine teilkristalline Struktur aufweisen, enthalten sowohl kristalline als auch amorphe Bereiche (Domänen). Kristalline Stoffe, die keine Einkristalle, sondern Polykristalle sind, werden nicht als teilkristallin bezeichnet, auch wenn sich zwischen den Kristalliten ein dünner amorpher Film befindet.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Solid materials exhibiting a semi-crystalline structure contain both crystalline and amorphous sections (domains). Crystalline substances that are polycrystals rather than single crystals are not designated as semicrystalline, even if there is a thin amorphous film between the crystallites.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Semikristalline Struktur", + "IRI-based" : "SemiCrystallineStructure", + "en" : "Semi Crystalline Structure" + }, + "attributes" : [ "external" ], + "id" : "106", + "superClasses" : [ "98" ] + }, { + "iri" : "https://w3id.org/pmd/co/CalibrationDocument", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "https://www.merriam-webster.com/dictionary/calibration", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Entität beschreibt ein Dokument, welches Abweichungen eines Messgerätes oder einer Maßverkörperung gegenüber einem anderen Gerät oder einer anderen Maßverkörperung feststellt und dokumentiert. Typischerweise ist die Person, welche die Kalibrierung durchführte, angegeben.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This entity describes a document used to state that a set of graduations to indicate values or positions has been performed. Typically, the calibration operator is included.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Kalibrierungsdokument", + "IRI-based" : "CalibrationDocument", + "en" : "Calibration Document" + }, + "attributes" : [ "external" ], + "id" : "166", + "superClasses" : [ "42" ] + }, { + "iri" : "https://w3id.org/pmd/co/EnvironmentalTemperature", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Eigenschaft beschreibt die beobachtete Temperatur in der Umgebung eines betrachteten materiellen Objekts. Dazu können die Raumtemperatur und die in Prüfkammern gemessenen Temperaturen gehören.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This property describes the observed temperature surrounding a tangible object considered. This may include room temperature and temperatures measured in test chambers.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Umgebungstemperatur", + "IRI-based" : "EnvironmentalTemperature", + "en" : "Environmental Temperature" + }, + "attributes" : [ "external" ], + "id" : "189", + "superClasses" : [ "190" ] + }, { + "iri" : "https://w3id.org/pmd/co/Width", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "https://www.merriam-webster.com/dictionary/width", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Entität bezeichnet eine horizontale Messung, die im rechten Winkel zur Länge eines Objekts vorgenommen wird.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This entity describes a horizontal measurement of an object taken at right angles to the length of the object.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Breite", + "IRI-based" : "Width", + "en" : "Width" + }, + "subClasses" : [ "91", "211" ], + "attributes" : [ "external" ], + "id" : "92", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/FurnaceCharacteristic", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Properties that describe the functions and capabilities of a heat treatment process node.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Ofencharakteristik", + "IRI-based" : "FurnaceCharacteristic", + "en" : "Furnace Characteristic" + }, + "subClasses" : [ "215", "216", "217", "218" ], + "attributes" : [ "external" ], + "id" : "214", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/Squared", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Square.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/square. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Having four equal sides and four right angles.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Geformt mit vier gleichen Seiten und vier rechten Winkeln.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Quadratisch", + "IRI-based" : "Squared", + "en" : "Squared" + }, + "attributes" : [ "external" ], + "id" : "219", + "superClasses" : [ "90" ] + }, { + "iri" : "https://w3id.org/pmd/co/RetortType", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Geometry and and orientation of the inner system boundaries of the heat treatment processing node.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Retortentyp", + "IRI-based" : "RetortType", + "en" : "Retort Type" + }, + "attributes" : [ "external" ], + "id" : "217", + "superClasses" : [ "214" ] + }, { + "iri" : "https://w3id.org/pmd/co/ProcessDuration", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A length of an interval of time in which a process is conducted.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Prozessdauer", + "IRI-based" : "ProcessDuration", + "en" : "Process Duration" + }, + "attributes" : [ "external" ], + "id" : "220", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/Stiffness", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Die Steifigkeit ist das Maß, bis zu dem ein Objekt einer Verformung als Reaktion auf eine einwirkende Kraft widersteht.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Stiffness is the extent to which an object resists deformation in response to an applied force.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Steifigkeit", + "IRI-based" : "Stiffness", + "en" : "Stiffness" + }, + "attributes" : [ "external" ], + "id" : "221", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/tto/EstimatedStrainRateOverTheParallelLength", + "baseIri" : "https://w3id.org/pmd/tto", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/tto", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "value of the increase of strain over the parallel length of the test piece per time based on the crosshead separation rate and the parallel length of the test piece", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Zunahme der Dehnung über die parallele Länge der Probe je Zeiteinheit, basierend auf der Traversengeschwindigkeit und der parallelen Länge der Probe", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Symbol: e^._L_c", + "type" : "label" + } ] + }, + "label" : { + "de" : "Abgeschätzte Dehngeschwindigkeit Über Die Parallele Länge", + "IRI-based" : "EstimatedStrainRateOverTheParallelLength", + "en" : "Estimated Strain Rate Over The Parallel Length" + }, + "attributes" : [ "external" ], + "id" : "222", + "superClasses" : [ "223" ] + }, { + "iri" : "https://w3id.org/pmd/co/HeatTreatmentProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Heat-treat.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/heat-treat. Accessed 24 Nov. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A heat treatment is a conditioning process at (with) a defined temperature (change) and holding in order to achieve a change in the microstructure, residual stresses, defect distribution or local chemical composition of a material.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Wärmebehandlung", + "IRI-based" : "HeatTreatmentProcess", + "en" : "Heat Treatment Process" + }, + "attributes" : [ "external" ], + "id" : "236", + "superClasses" : [ "237" ] + }, { + "iri" : "https://w3id.org/pmd/co/Thermocouple", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Thermocouple.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/thermocouple. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A device for measuring temperature in which a pair of wires of dissimilar metals (such as copper and iron) are joined and the free ends of the wires are connected to an instrument (such as a voltmeter) that measures the difference in potential created at the junction of the two metals.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Ein Gerät zur Temperaturmessung, bei dem ein Paar Drähte aus unterschiedlichen Metallen (z. B. Kupfer und Eisen) verbunden und die freien Enden der Drähte mit einem Instrument (z. B. einem Voltmeter) verbunden werden, das die an der Verbindungsstelle erzeugte der beiden Metalle Potentialdifferenz misst .", + "type" : "label" + } ] + }, + "label" : { + "de" : "Thermoelement", + "IRI-based" : "Thermocouple", + "en" : "Thermocouple" + }, + "attributes" : [ "external" ], + "id" : "246", + "superClasses" : [ "243" ] + }, { + "iri" : "https://w3id.org/pmd/co/YCoordinate", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Y-coordinate.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/y-coordinate. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Die Y-Koordinate ist eine Koordinate, deren Wert durch Messung parallel zu einer Y-Achse bestimmt wird.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Y-coordinate is a coordinate whose value is determined by measuring parallel to a y-axis.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Y Koordinate", + "IRI-based" : "YCoordinate", + "en" : "Y Coordinate" + }, + "subClasses" : [ "43" ], + "attributes" : [ "external" ], + "id" : "44", + "superClasses" : [ "182" ] + }, { + "iri" : "https://w3id.org/pmd/co/MaterialProperty", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“List of materials properties.” Wikipedia The Free Encyclopedia, https://en.wikipedia.org/wiki/List_of_materials_properties. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Eine Materialeigenschaft ist eine intensive Eigenschaft eines Materials, d. h. eine physikalische Eigenschaft, die nicht von der Menge des Materials abhängt. Diese quantitativen Eigenschaften können als Maßstab verwendet werden, um die Vorteile eines Materials mit denen eines anderen zu vergleichen und so die Materialauswahl zu erleichtern.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A materials property is an intensive property of a material, i.e., a physical property that does not depend on the amount of the material. These quantitative properties may be used as a metric by which the benefits of one material versus another can be compared, thereby aiding in materials selection.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Materialeigenschaft", + "IRI-based" : "MaterialProperty", + "en" : "Material Property" + }, + "subClasses" : [ "109", "264", "265", "266", "267", "268", "269", "139", "270" ], + "attributes" : [ "external" ], + "id" : "110", + "superClasses" : [ "263" ] + }, { + "iri" : "https://w3id.org/pmd/co/CrossSectionDetermination", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Cross section.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/cross%20section. Accessed 24 Nov. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Cross section is a cutting or piece of something cut off at right angles to an axis\nalso : a representation of such a cutting.", + "type" : "label" + } ], + "example" : [ { + "identifier" : "example", + "language" : "en", + "value" : "Using the density of the test piece.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Querschnittsermittlung", + "IRI-based" : "CrossSectionDetermination", + "en" : "Cross Section Determination" + }, + "attributes" : [ "external" ], + "id" : "282", + "superClasses" : [ "283" ] + }, { + "iri" : "https://w3id.org/pmd/co/HeatCapacity", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "https://en.wikipedia.org/wiki/Heat_capacity", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Heat capacity or thermal capacity is a physical property of matter, defined as the amount of heat to be supplied to an object to produce a unit change in its temperature.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Wärmekapazität", + "IRI-based" : "HeatCapacity", + "en" : "Heat Capacity" + }, + "attributes" : [ "external" ], + "id" : "215", + "superClasses" : [ "214" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Bundle", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-bundle-entity", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A bundle is a named set of provenance descriptions, and is itself an Entity, so allowing provenance of provenance to be expressed.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-bundle-declaration", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Bundle", + "undefined" : "Bundle" + }, + "comment" : { + "en" : "Note that there are kinds of bundles (e.g. handwritten letters, audio recordings, etc.) that are not expressed in PROV-O, but can be still be described by PROV-O." + }, + "attributes" : [ "external" ], + "id" : "121", + "superClasses" : [ "47" ] + }, { + "iri" : "https://w3id.org/pmd/tto/OriginalGaugeLength", + "baseIri" : "https://w3id.org/pmd/tto", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/tto", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Symbol: L_o", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "length between gauge length marks on the test piece measured at room temperature before the test", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Länge zwischen den Marken zur Kennzeichnung der Messlänge auf der Probe, die vor dem Versuch bei Raumtemperatur gemessen wird", + "type" : "label" + } ] + }, + "label" : { + "de" : "Anfangsmesslänge", + "IRI-based" : "OriginalGaugeLength", + "en" : "Original Gauge Length" + }, + "attributes" : [ "external" ], + "id" : "118", + "superClasses" : [ "119" ] + }, { + "iri" : "https://w3id.org/pmd/co/Duration", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Eine Zeitspanne mit einer eigenen Zeitskala und einer in einer anderen Zeitskala verankerten Epoche. Eine Dauer kann durch einen einzigen Wert ausgedrückt werden, da sie die Zeitdifferenz zwischen zwei Zeitpunkten darstellt, z. B. die Differenz zwischen Endzeit und Startzeit oder die Differenz zwischen der aktuellen, momentanen Zeit und der Startzeit.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A period of time with its own timescale and an epoch anchored in another timescale. A duration can be expressed via a single value as it represents the time difference between two points in time, e.g. the difference between EndTime and StartTime or the difference between the current, momentary time and the StartTime.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Dauer", + "IRI-based" : "Duration", + "en" : "Duration" + }, + "attributes" : [ "external" ], + "id" : "204", + "superClasses" : [ "160" ] + }, { + "iri" : "https://w3id.org/pmd/co/BaseFraction", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The assumed base material of the objects or the remainder of the composition, e.g. for nickel-based alloy, iron-based alloy.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Basisanteil", + "IRI-based" : "BaseFraction", + "en" : "Base fraction" + }, + "attributes" : [ "external" ], + "id" : "227", + "superClasses" : [ "228" ] + }, { + "iri" : "https://w3id.org/pmd/co/Area", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The extent or measurement of a surface.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Fläche", + "IRI-based" : "Area", + "en" : "Area" + }, + "subClasses" : [ "25" ], + "attributes" : [ "external" ], + "id" : "288", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/Note", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Additional information & knowledge for and by humans. Not expected to be parsable", + "type" : "label" + } ] + }, + "label" : { + "de" : "Bemerkung", + "IRI-based" : "Note", + "en" : "Note" + }, + "attributes" : [ "external" ], + "id" : "305", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/InsertSurface", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "https://www.merriam-webster.com/dictionary/surface", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Entität beschreibt den Zustand und die Qualität des Außenbereichs des Einsatzes eines Prozessknotens, z. B. die in Klemm- und Spannsystemen verwendeten Einsätze.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This entity describes the state and quality of the exterior of the insert of a processing node, e.g., the inserts used in grips.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Oberfläche Eines Einsatzstücks", + "IRI-based" : "InsertSurface", + "en" : "Insert Surface" + }, + "attributes" : [ "external" ], + "id" : "306", + "superClasses" : [ "234" ] + }, { + "iri" : "https://w3id.org/pmd/co/NodeModel", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Processing Node short description, e.g. \"Vacuum Furnace\"", + "type" : "label" + } ] + }, + "label" : { + "de" : "Knotenmodell", + "IRI-based" : "NodeModel", + "en" : "Node Model" + }, + "attributes" : [ "external" ], + "id" : "241", + "superClasses" : [ "235" ] + }, { + "iri" : "https://w3id.org/pmd/co/DigitalMaterialIdentifier", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The DigitalMaterialIdentifier value object refers to a dmi:DigitalMaterialIdentifier.\n\nA dmi:DigitalMaterialIdentifier is a resource identifier (IRI) that represents the specification of a material (in the sense of a material class) described in a specification document. The specification document can be, e.g., a standard, a datasheet, or any other citable document. Typically, a specification document requires some qualities that a material (in the sense of a portion of matter) has to comply with. Typical requirements include chemical compositions or physical properties.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "DigitalMaterialIdentifier", + "en" : "Digital Material Identifier" + }, + "intersection" : [ "100" ], + "attributes" : [ "intersection", "external" ], + "id" : "309", + "superClasses" : [ "100" ] + }, { + "iri" : "https://w3id.org/pmd/co/Thickness", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This entity describes the measured dimension in one direction of a test piece.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Entität beschreibt die gemessene Dimension in einer Richtung eines Prüfstücks.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Dicke", + "IRI-based" : "Thickness", + "en" : "Thickness" + }, + "subClasses" : [ "311", "312" ], + "attributes" : [ "external" ], + "id" : "310", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/DataCiteMetadata", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This value object refers to metadata which can be provided as DataCite element.", + "type" : "label" + } ], + "example" : [ { + "identifier" : "example", + "language" : "en", + "value" : "For example, to refer to a ISBN number, following triples might be created:\n\n :p1 a pmd:Process .\n :p1 pmd:characteristic :doc_vo1 .\n :doc_vo1 a pmd:Document .\n :doc_vo1 pmd:characteristic :isbn_vo1 .\n :doc_vo1 pmd:resource \"http://example.org/book.pdf\" .\n :isbn_vo1 a pmd:DataCiteMetadata .\n :isbn_vo1 pmd:relatesTo .\n :isbn_vo1 pmd:value \"9780262012423\". \n\n\"a document related to process :p1 has a ISBN number 9780262012423\"", + "type" : "label" + } ] + }, + "label" : { + "de" : "Data Cite Metadaten", + "IRI-based" : "DataCiteMetadata", + "en" : "DataCite Metadata" + }, + "attributes" : [ "external" ], + "id" : "313", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/DimensionMeasuringDevice", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This entity generically describes any tool that is used for the measurement of the dimensions of a tangible object, e.g., a caliper.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Entität beschreibt allgemein jedes Werkzeug, das für die Messung der Abmessungen eines greifbaren Objekts verwendet wird, z. B. eines Messschiebers.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Dimensionsmesswerkzeug", + "IRI-based" : "DimensionMeasuringDevice", + "en" : "Dimension Measuring Device" + }, + "attributes" : [ "external" ], + "id" : "314", + "superClasses" : [ "243" ] + }, { + "iri" : "https://w3id.org/pmd/co/Caliper", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "https://www.merriam-webster.com/dictionary/caliper", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "ein Messgerät mit zwei in der Regel verstellbaren Armen, Schenkeln oder Klemmbacken, das vor allem zur Messung der Abmessungen von Gegenständen, wie z. B. des Durchmessers oder der Dicke, verwendet wird", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "any of various measuring instruments having two usually adjustable arms, legs, or jaws used especially to measure the dimensions of objects, such as diameters or thicknesses", + "type" : "label" + } ] + }, + "label" : { + "de" : "Messschieber", + "IRI-based" : "Caliper", + "en" : "Caliper" + }, + "attributes" : [ "external" ], + "id" : "328", + "superClasses" : [ "243" ] + }, { + "iri" : "https://w3id.org/pmd/tto/PercentagePlasticExtensionAtMaximumForce", + "baseIri" : "https://w3id.org/pmd/tto", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/tto", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "plastische Verlängerung der Extensometer-Messlänge bei Höchstkraft, angegeben in Prozent, bezogen auf die Extensometer-Messlänge", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "plastic extension at maximum force, expressed as a percentage of the extensometer gauge length", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Symbol: A_g", + "type" : "label" + } ] + }, + "label" : { + "de" : "Plastische Extensometer-Dehnung bei Höchstkraft", + "IRI-based" : "PercentagePlasticExtensionAtMaximumForce", + "en" : "Percentage Plastic Extension At Maximum Force" + }, + "attributes" : [ "external" ], + "id" : "329", + "superClasses" : [ "330" ] + }, { + "iri" : "https://w3id.org/pmd/co/Regression", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Regression.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/regression. Accessed 24 Nov. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A functional relationship between two or more correlated variables that is often empirically determined from data and is used especially to predict values of one variable when given values of the others.\nSpecifically : a function that yields the mean value of a random variable under the condition that one or more independent variables have specified values.", + "type" : "label" + } ], + "example" : [ { + "identifier" : "example", + "language" : "en", + "value" : "Regression of y on x is linear", + "type" : "label" + } ] + }, + "label" : { + "de" : "Regression", + "IRI-based" : "Regression", + "en" : "Regression" + }, + "attributes" : [ "external" ], + "id" : "335", + "superClasses" : [ "336" ] + }, { + "iri" : "https://w3id.org/pmd/co/RegionOfInterest", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Some region of interest (ROI) in an image. Describe the ROI by use of Web Annotation Vocabulary (https://www.w3.org/TR/annotation-vocab/). The ROI is understood as the target of a (body-less) annotation. \n\nThe web annotation model suggests the use of different fragment specifications (https://www.w3.org/TR/annotation-model/#fragment-selector), however we suggest to prefer media fragments (https://www.w3.org/TR/media-frags/).", + "type" : "label" + } ], + "example" : [ { + "identifier" : "example", + "language" : "undefined", + "value" : ":image1 a pmd:Image\n:roi1 a pmd:RegionOfInterest .\n:roi1 oa:hasSource :image1 ;\n oa:hasSelector [\n a oa:FragmentSelector ;\n dcterms:conformsTo ;\n rdf:value \"xywh=160,120,320,240\" ] ] .", + "type" : "label" + } ] + }, + "label" : { + "de" : "Betrachteter Bereich", + "IRI-based" : "RegionOfInterest", + "en" : "Region of Interest" + }, + "attributes" : [ "external" ], + "id" : "210", + "superClasses" : [ "116" ] + }, { + "iri" : "https://w3id.org/pmd/co/Method", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Method.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/method. Accessed 5 Dec. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A way, technique, or process of or for doing something", + "type" : "label" + } ] + }, + "label" : { + "de" : "Methode", + "IRI-based" : "Method", + "en" : "Method" + }, + "subClasses" : [ "344", "336", "282" ], + "attributes" : [ "external" ], + "id" : "283", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/tto/PercentageReductionOfArea", + "baseIri" : "https://w3id.org/pmd/tto", + "instances" : 0, + "annotations" : { + "symbol" : [ { + "identifier" : "symbol", + "language" : "undefined", + "value" : "Z", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/tto", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "maximum change in cross-sectional area which has occurred during the test (S_o − S_u), expressed as a percentage of the original cross-sectional area, S_o", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "größte während des Versuchs aufgetretene Änderung des Querschnitts (S_o − S_u), angegeben in Prozent, bezogen auf den Anfangsquerschnitt S_o", + "type" : "label" + } ] + }, + "label" : { + "de" : "Brucheinschnürung", + "IRI-based" : "PercentageReductionOfArea", + "en" : "Percentage Reduction Of Area" + }, + "attributes" : [ "external" ], + "id" : "346", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/NodeName", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A human-generated identifier associated with a discernible, tangible or simulated entity intended to be unique in a given scope", + "type" : "label" + } ] + }, + "label" : { + "de" : "Knotenname", + "IRI-based" : "NodeName", + "en" : "Node Name" + }, + "attributes" : [ "external" ], + "id" : "101", + "superClasses" : [ "99", "235" ] + }, { + "iri" : "https://w3id.org/pmd/co/Address", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Address.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/address. Accessed 16 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Ein Ort, an dem mit einer Person oder Organisation kommuniziert werden kann.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A place where a person or organization may be communicated with.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Adresse", + "IRI-based" : "Address", + "en" : "Address" + }, + "attributes" : [ "external" ], + "id" : "295", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/NodeVersion", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Processing Node Version Number, e.g. \"2.24\"", + "type" : "label" + } ] + }, + "label" : { + "de" : "Knotenversion", + "IRI-based" : "NodeVersion", + "en" : "Node Version" + }, + "attributes" : [ "external" ], + "id" : "245", + "superClasses" : [ "235" ] + }, { + "iri" : "https://w3id.org/pmd/co/Norm", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Norm.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/norm. Accessed 24 Nov. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An authoritative standard.", + "type" : "label" + } ], + "example" : [ { + "identifier" : "example", + "language" : "en", + "value" : "Technical standard issued by the German Institute for Standardisation Registered Association (Deutsches Institut für Normung e.V. - DIN)", + "type" : "label" + } ] + }, + "label" : { + "de" : "Norm", + "IRI-based" : "Norm", + "en" : "Norm" + }, + "attributes" : [ "external" ], + "id" : "344", + "superClasses" : [ "283" ] + }, { + "iri" : "https://w3id.org/pmd/tto/TensileTest", + "baseIri" : "https://w3id.org/pmd/tto", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/tto", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Tensile tests (tension tests) on materials provide information on their strength, ductility as well as other characteristic values under uniaxial tensile stress.\n\nThe tensile test involves straining a test piece by tensile force, generally to fracture, for the determination of one or more mechanical properties specified by the semantically related and defined terms.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Zugversuche (Zugprüfungen) an Werkstoffen geben Auskunft über deren Festigkeit, Duktilität sowie weitere Kennwerte unter einachsiger Zugbeanspruchung.\n\nBeim Zugversuch wird ein Prüfkörper durch Zugkraft belastet, im Allgemeinen bis zum Bruch, um eine oder mehrere mechanische Eigenschaften zu bestimmen, die durch die semantisch verknüpften und definierten Begriffe festgelegt sind.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Zugversuch", + "IRI-based" : "TensileTest", + "en" : "Tensile Test" + }, + "attributes" : [ "external" ], + "id" : "150", + "superClasses" : [ "148" ] + }, { + "iri" : "https://w3id.org/pmd/co/Voxel", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An element representing a value on a grid in three dimensional space.\nIn PMD, an infinitesimal part of an object which is made of a homogenuous material. Size depends on the observed material level. For now, geometrically, a cubus is assumed.\nDifferent Voxels can have different material properties and material structure\nA (partial) logical object that describes (a part of) a physical object", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "An element representing a value on a grid in three dimensional space.\nIn PMD, an infinitesimal part of an object which is made of a homogenuous material. Size depends on the observed material level. For now, geometrically, a cubus is assumed.\nMade of a material\nDifferent Voxels can have different material properties and material structure\nA (partial) logical object that describes (a part of) a physical object", + "type" : "label" + } ] + }, + "label" : { + "de" : "Voxel", + "IRI-based" : "Voxel", + "en" : "Voxel" + }, + "attributes" : [ "external" ], + "id" : "198", + "superClasses" : [ "116" ] + }, { + "iri" : "https://w3id.org/pmd/tto/ProofStrength", + "baseIri" : "https://w3id.org/pmd/tto", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/tto", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Spannung, bei der ein bestimmter Dehnungswert gleich einem bestimmten Prozentsatz der Messlänge des Dehnungsmessers ist", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "stress at which the a specific extension value is equal to a specified percentage of the extensometer gauge length", + "type" : "label" + } ] + }, + "label" : { + "de" : "Dehngrenze", + "IRI-based" : "ProofStrength", + "en" : "Proof Strength" + }, + "subClasses" : [ "369", "370" ], + "attributes" : [ "external" ], + "id" : "368", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/Furnace", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Furnace.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/furnace. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An enclosed structure in which heat is produced (as for heating a house or for reducing ore).", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Eine geschlossene Struktur, in der Wärme erzeugt wird (z. B. zum Heizen eines Hauses oder zum Einschmelzen von Erz).", + "type" : "label" + } ] + }, + "label" : { + "de" : "Ofen", + "IRI-based" : "Furnace", + "en" : "Furnace" + }, + "attributes" : [ "external" ], + "id" : "386", + "superClasses" : [ "108" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Communication", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasInformedBy", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-Communication", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "undefined", + "value" : "Communication is the exchange of an entity by two activities, one activity using the entity generated by the other.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "constraints" : [ { + "identifier" : "constraints", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-constraints-20130430/#prov-dm-constraints-fig", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-wasInformedBy", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Communication", + "undefined" : "Communication" + }, + "comment" : { + "en" : "An instance of prov:Communication provides additional descriptions about the binary prov:wasInformedBy relation from an informed prov:Activity to the prov:Activity that informed it. For example, :you_jumping_off_bridge prov:wasInformedBy :everyone_else_jumping_off_bridge; prov:qualifiedCommunication [ a prov:Communication; prov:activity :everyone_else_jumping_off_bridge; :foo :bar ]." + }, + "attributes" : [ "external" ], + "id" : "39", + "superClasses" : [ "40" ] + }, { + "iri" : "https://w3id.org/pmd/tto/OriginalThickness", + "baseIri" : "https://w3id.org/pmd/tto", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/tto", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Entität beschreibt die gemessene Dimension in einer Richtung eines Prüfstücks, wie sie vor der Prüfung gemessen wurde.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This entity describes the measured dimension in one direction of a test piece, as measured before the test.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Anfangs-Dicke", + "IRI-based" : "OriginalThickness", + "en" : "Original Thickness" + }, + "attributes" : [ "external" ], + "id" : "311", + "superClasses" : [ "310" ] + }, { + "iri" : "http://purl.obolibrary.org/obo/CHEBI_24431", + "baseIri" : "http://purl.obolibrary.org/obo", + "instances" : 0, + "annotations" : { + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ChEBI ontology https://www.ebi.ac.uk/chebi/searchId.do?chebiId=CHEBI:24431#", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "CHEBI_24431", + "en" : "Chemical Entity" + }, + "attributes" : [ "external" ], + "id" : "156" + }, { + "iri" : "https://w3id.org/pmd/co/Thermal", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Thermal.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/thermal. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Thermal is relating to, or caused by heat. Here specifically to the thermal properties of a material.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Thermisch bedeutet in Bezug auf oder verursacht durch Wärme. Hier speziell auf die thermischen Eigenschaften eines Materials.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Thermisch", + "IRI-based" : "Thermal", + "en" : "Thermal" + }, + "attributes" : [ "external" ], + "id" : "268", + "superClasses" : [ "110" ] + }, { + "iri" : "https://w3id.org/pmd/co/Length", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "de", + "value" : "https://www.merriam-webster.com/dictionary/length", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Eine gemessene Entfernung oder Abmessung eines Objekts, normalerweise die längere oder längste Abmessung des Objekts.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A measured distance or dimension of an object, usually the longer or longest dimension of the object.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Länge", + "IRI-based" : "Length", + "en" : "Length" + }, + "subClasses" : [ "402", "119", "141" ], + "attributes" : [ "external" ], + "id" : "142", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/CalibrationRange", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This property describes the region between the limits within which a quantity is measured, received or transmitted (typically by a process node, e.g. a machine), expressed by stating the lower and upper range values.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Eigenschaft beschreibt den Bereich zwischen den Grenzen, innerhalb derer eine Größe gemessen, empfangen oder übertragen wird (typischerweise von einem Prozessknoten, z. B. einer Maschine), ausgedrückt durch die Angabe des unteren und oberen Bereichswertes.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Kalibrierbereich", + "IRI-based" : "CalibrationRange", + "en" : "Calibration range" + }, + "attributes" : [ "external" ], + "id" : "403", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/Chemical", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Chemical.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/chemical. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Chemical is relating to, used in, or produced by chemistry or the phenomena of chemistry Here specifically to the chemical properties of a material.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Chemisch ist ein Begriff, der sich auf die Chemie oder die chemischen Phänomene bezieht, in der Chemie verwendet wird oder durch sie erzeugt wird. Hier geht es speziell um die chemischen Eigenschaften eines Materials.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Chemisch", + "IRI-based" : "Chemical", + "en" : "Chemical" + }, + "attributes" : [ "external" ], + "id" : "266", + "superClasses" : [ "110" ] + }, { + "iri" : "https://w3id.org/pmd/co/CoatingDesignation", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Eigenschaft ist ein Name oder Bezeichner eines Materialtyps, welcher den obersten Teil eines Bauteils (Beschichtung) bedeckt.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This property is a name or identifier of a material type which designates the most upper part of a component (coating).", + "type" : "label" + } ] + }, + "label" : { + "de" : "Beschichtungsbezeichnung", + "IRI-based" : "CoatingDesignation", + "en" : "Coating Designation" + }, + "attributes" : [ "external" ], + "id" : "405", + "superClasses" : [ "263" ] + }, { + "iri" : "https://w3id.org/pmd/co/Biological", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Biological.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/biological. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Biologisch bezieht sich auf die Biologie oder auf das Leben und lebende Prozesse. Hier speziell auf die biologischen Eigenschaften eines Materials.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Biological is relating to biology or to life and living processes. Here specifically to the biological properties of a material.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Biologisch", + "IRI-based" : "Biological", + "en" : "Biological" + }, + "attributes" : [ "external" ], + "id" : "269", + "superClasses" : [ "110" ] + }, { + "iri" : "https://w3id.org/pmd/co/AnalysingProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A process that is driven by the primary intent to gain new measurements.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Analyseprozess", + "IRI-based" : "AnalysingProcess", + "en" : "Analysing Process" + }, + "subClasses" : [ "427", "148", "428", "63", "429" ], + "attributes" : [ "external" ], + "id" : "149", + "superClasses" : [ "65" ] + }, { + "iri" : "https://w3id.org/pmd/co/PrimaryData", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Die Datenkategorie Primärdaten umfasst Daten, die vor / nach einem Prozess erfasst werden, entweder bezogen auf die Geometrie des Objekts (z.B. ao, bo, do, au, bu, du, Lu) oder als Register des gesamten Aufbaus (z.B. Skizzen, Fotos oder Videos)", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This data scope expresses that a ValueObject refers to data that is directly acquired during a process by sensors (time, force, length, temperature)", + "type" : "label" + } ] + }, + "label" : { + "de" : "Primärdaten", + "IRI-based" : "PrimaryData", + "en" : "Primary Data" + }, + "attributes" : [ "external" ], + "id" : "274", + "superClasses" : [ "125" ] + }, { + "iri" : "https://w3id.org/pmd/co/Manufacturer", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Processing Node's manufacturer name, e.g.: \"Ipsen\", \"UPC\" or \"Bosch\"", + "type" : "label" + } ] + }, + "label" : { + "de" : "Hersteller", + "IRI-based" : "Manufacturer", + "en" : "Manufacturer" + }, + "intersection" : [ "95" ], + "attributes" : [ "intersection", "external" ], + "id" : "446" + }, { + "iri" : "https://w3id.org/pmd/co/TestPieceName", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Eigenschaft beschreibt die Bezeichnung eines Prüfkörpers, die in der Regel als menschenlesbarer Identifikator von Menschen vergeben wird.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This property describes the designation of a test piece, usually given as human-readable identifier by humans.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Prüfkörpername", + "IRI-based" : "TestPieceName", + "en" : "Test Piece Name" + }, + "intersection" : [ "100" ], + "attributes" : [ "intersection", "external" ], + "id" : "432", + "superClasses" : [ "100" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Organization", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-agent", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "undefined", + "value" : "An organization is a social or legal institution such as a company, society, etc.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-types", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Organization", + "undefined" : "Organization" + }, + "subClasses" : [ "168", "94" ], + "attributes" : [ "external" ], + "id" : "95", + "superClasses" : [ "51" ] + }, { + "iri" : "https://w3id.org/pmd/co/Slide", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A moving piece that is guided by a part along its path, providing the mount for objects.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Schlitten", + "IRI-based" : "Slide", + "en" : "Slide" + }, + "attributes" : [ "external" ], + "id" : "177", + "superClasses" : [ "178" ] + }, { + "iri" : "https://w3id.org/pmd/co/ProcessDescription", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A human readable order of steps. Might include additional information that likes sketches and notes.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A descriptive text qualifying the nature of a process instance used as an identifier that is not strictly intended to be unique, e.g. \"1050°C30 840°C10/ÖL\".", + "type" : "label" + } ] + }, + "label" : { + "de" : "Prozessbeschreibung", + "IRI-based" : "ProcessDescription", + "en" : "Process Description" + }, + "intersection" : [ "455" ], + "attributes" : [ "intersection", "external" ], + "id" : "454", + "superClasses" : [ "455" ] + }, { + "iri" : "https://w3id.org/pmd/tto/PercentageElongation", + "baseIri" : "https://w3id.org/pmd/tto", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/tto", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Verlängerung, angegeben in Prozent, bezogen auf die Anfangsmesslänge", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "elongation expressed as a percentage of the original gauge length", + "type" : "label" + } ] + }, + "label" : { + "de" : "Dehnung", + "IRI-based" : "PercentageElongation", + "en" : "Percentage Elongation" + }, + "attributes" : [ "external" ], + "id" : "262", + "superClasses" : [ "254" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Activity", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-Activity", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "undefined", + "value" : "An activity is something that occurs over a period of time and acts upon or with entities; it may include consuming, processing, transforming, modifying, relocating, using, or generating entities.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "starting-point", + "type" : "label" + } ], + "constraints" : [ { + "identifier" : "constraints", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-constraints-20130430/#prov-dm-constraints-fig", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-Activity", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Activity", + "undefined" : "Activity" + }, + "subClasses" : [ "66", "65" ], + "attributes" : [ "external" ], + "id" : "104" + }, { + "iri" : "https://w3id.org/pmd/tto/PercentagePermanentExtension", + "baseIri" : "https://w3id.org/pmd/tto", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/tto", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Vergrößerung der Extensometer-Messlänge nach Entfernen einer festgelegten, auf die Probe aufgebrachten Zugspannung, angegeben in Prozent, bezogen auf die Extensometer-Messlänge", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "increase in the extensometer gauge length, after removal of a specified stress from the test piece, expressed as a percentage of the extensometer gauge length", + "type" : "label" + } ] + }, + "label" : { + "de" : "Bleibende Extensometer-Dehnung", + "IRI-based" : "PercentagePermanentExtension", + "en" : "Percentage Permanent Extension" + }, + "attributes" : [ "external" ], + "id" : "466", + "superClasses" : [ "330" ] + }, { + "iri" : "https://w3id.org/pmd/co/ChemicalComposition", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "undefined", + "value" : "https://chem.libretexts.org/Courses/College_of_Marin/CHEM_114%3A_Introductory_Chemistry/06%3A_Chemical_Composition", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Chemical composition refers to the arrangement, type, and ratio of atoms in molecules of chemical substances. Chemical composition varies when chemicals are added or subtracted from a substance, when the ratio of substances changes, or when other chemical changes occur in chemicals.", + "type" : "label" + } ], + "example" : [ { + "identifier" : "example", + "language" : "undefined", + "value" : "ex:proc1 a pmd:Process .\nex:proc1 pmd:chacteristic ex:vo1 .\n\nex:vo1 a ValueObject .\nex:vo1 pmd:resource ex:chemComp1 .\nex:chemComp1 a pmd:ChemicalComposition .\n\nex:vo2 dcterm:partOf ex:chemComp1 .\nex:vo2 a pmd:ChemicalElement .\nex:vo2 pmd:relatesToElement CHEBI:28984 .\nex:vo2 pmd:relatesTo ex:vo3 .\n\npmd:MassFraction rdf:subClassOf ValueObject .\nex:vo3 a pmd:MassFraction .\nex:vo3 qudt:upperBound \"0.3\" .\nex:vo3 qudt:lowerBound \"0\" .\nex:vo3 qudt:unit qudt:PERCENT .\n\nex:vo4 a pmd:MassFraction .\nex:vo4 pmd:resource pmd:NotDetected .", + "type" : "label" + } ] + }, + "label" : { + "de" : "Chemische Zusammensetzung", + "IRI-based" : "ChemicalComposition", + "en" : "Chemical Composition" + }, + "attributes" : [ "external" ], + "id" : "395", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/FeretDiameter", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The Feret diameter or Feret's diameter is a measure of an object size along a specified direction. In general, it can be defined as the distance between the two parallel planes restricting the object perpendicular to that direction.\n(cf. Wikipedia: https://en.wikipedia.org/wiki/Feret_diameter)", + "type" : "label" + } ] + }, + "label" : { + "de" : "Äquivalentdurchmesser", + "IRI-based" : "FeretDiameter", + "en" : "Feret diameter" + }, + "attributes" : [ "external" ], + "id" : "468", + "superClasses" : [ "302" ] + }, { + "iri" : "https://w3id.org/pmd/co/AgingTemperature", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Variable Temperature during an Aging Process depending on the desired deposition formations.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Alterungstemperatur", + "IRI-based" : "AgingTemperature", + "en" : "Aging Temperature" + }, + "attributes" : [ "external" ], + "id" : "359", + "superClasses" : [ "190" ] + }, { + "iri" : "https://w3id.org/pmd/co/Initiator", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The person that commisioned the process.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Initiator", + "IRI-based" : "Initiator", + "en" : "Initiator" + }, + "intersection" : [ "88" ], + "attributes" : [ "intersection", "external" ], + "id" : "469" + }, { + "iri" : "https://w3id.org/pmd/co/ModulusOfElasticity", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "symbol" : [ { + "identifier" : "symbol", + "language" : "undefined", + "value" : "E", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "de", + "value" : "E-Modul", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "quotient of change of stress ΔR and change of percentage extension Δe in the range of evaluation, multiplied by 100 %\n\nNote: It is recommended to report the value in GPa rounded to the nearest 0.1 GPa and according to ISO 80000-1.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Quotient der Änderung der Spannung ΔR und Änderung der prozentualen Dehnung Δe in dem untersuchten Bereich multipliziert mit 100 % \n\nAnmerkung: Es wird empfohlen, den Wert in GPa, gerundet auf 0,1 GPa, und nach ISO 80000-1 anzugeben.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Elastizitätsmodul", + "IRI-based" : "ModulusOfElasticity", + "en" : "Modulus Of Elasticity" + }, + "attributes" : [ "external" ], + "id" : "380", + "superClasses" : [ "11" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Entity", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-entity", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An entity is a physical, digital, conceptual, or other kind of thing with some fixed aspects; entities may be real or imaginary. ", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "starting-point", + "type" : "label" + } ], + "constraints" : [ { + "identifier" : "constraints", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-constraints-20130430/#prov-dm-constraints-fig", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-Entity", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Entity", + "undefined" : "Entity" + }, + "subClasses" : [ "116", "121", "125", "129", "132", "136", "80", "11" ], + "attributes" : [ "external" ], + "id" : "47" + }, { + "iri" : "https://w3id.org/pmd/tto/OriginalWidth", + "baseIri" : "https://w3id.org/pmd/tto", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/tto", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This entity describes a horizontal measurement of an object (test piece) taken at right angles to the length of the object (test piece), as measured before a test.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Entität beschreibt eine horizontale Messung eines Objekts (Prüfkörpers) im rechten Winkel zur Länge des Objekts (Prüfkörpers), wie sie vor einer Prüfung gemessen wird.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Anfangs-Breite", + "IRI-based" : "OriginalWidth", + "en" : "Original Width" + }, + "attributes" : [ "external" ], + "id" : "211", + "superClasses" : [ "92" ] + }, { + "iri" : "https://w3id.org/pmd/co/RelatedProjectIdentifier", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Eigenschaft beschreibt einen benannten Wert, der dazu dient, zwischen Projekten zu unterscheiden, die mit dem betrachteten Projekt in Relation stehen. Zwei in Relation stehende Projekte könnten zum Beispiel ein Messprojekt sein, das Teil eines Projekts mit einem breiteren Betrachtungsbereich ist.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This property describes a named value intended to distinguish between projects that are related to the project considered. For instance, two related projects could be a measurement project that is part of project with a broader scope.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Identifikation Eines Verbundenen Projektes", + "IRI-based" : "RelatedProjectIdentifier", + "en" : "Related Project Identifier" + }, + "attributes" : [ "external" ], + "id" : "436", + "superClasses" : [ "100" ] + }, { + "iri" : "https://w3id.org/pmd/co/SecondaryData", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Der Datenkategorie Sekundärdaten umfasst Werte (z. B. Testergebnisse), die durch Gleichungen oder Algorithmen unter Verwendung von Primärdaten und Metadaten ermittelt werden.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This data scope expresses that a ValueObject refers to characteristic values (e.g. test results) determined by equations or algorithms using primary data and/or metadata.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Sekundärdaten", + "IRI-based" : "SecondaryData", + "en" : "Secondary Data" + }, + "attributes" : [ "external" ], + "id" : "225", + "superClasses" : [ "125" ] + }, { + "iri" : "https://w3id.org/pmd/co/AssemblingProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A process to mount or demount a component.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Assemblierungsprozess", + "IRI-based" : "AssemblingProcess", + "en" : "Assembling Process" + }, + "subClasses" : [ "1", "15", "20" ], + "attributes" : [ "external" ], + "id" : "2", + "superClasses" : [ "65" ] + }, { + "iri" : "https://w3id.org/pmd/co/LoadCellCapacity", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "LoadCellCapacity", + "en" : "Load cell capacity" + }, + "attributes" : [ "external" ], + "id" : "319", + "superClasses" : [ "11" ] + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "479", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "https://w3id.org/pmd/co/CrossSectionArea", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "https://www.merriam-webster.com/dictionary/cross%20section", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Eigenschaft beschreibt die Fläche eines Schnittes oder eines rechtwinklig geschnittenen oder gebrochenen Stücks eines Objektes in Bezug auf eine Achse.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This property describes the area of a cutting or piece of an object cut off or broken at right angles or related to an axis.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Querschnittsfläche", + "IRI-based" : "CrossSectionArea", + "en" : "Cross Section Area" + }, + "subClasses" : [ "24", "29" ], + "attributes" : [ "external" ], + "id" : "25", + "superClasses" : [ "288" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Influence", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasInfluencedBy", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-influence", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Influence is the capacity of an entity, activity, or agent to have an effect on the character, development, or behavior of another by means of usage, start, end, generation, invalidation, communication, derivation, attribution, association, or delegation.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-influence", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Influence", + "undefined" : "Influence" + }, + "subClasses" : [ "33", "37", "40" ], + "comment" : { + "en" : "Because prov:Influence is a broad relation, its most specific subclasses (e.g. prov:Communication, prov:Delegation, prov:End, prov:Revision, etc.) should be used when applicable." + }, + "attributes" : [ "external" ], + "id" : "7" + }, { + "iri" : "https://w3id.org/pmd/co/Process", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "IAO_0000117" : [ { + "identifier" : "IAO_0000117", + "language" : "en", + "value" : "A process is an activity comprising a series of actions or operations conducing to an end. In PMD, a process is conducted via processing nodes and has a discernable duration as part of a workflow. A process consumes objects and parameters. A process potentially generates new objects and measurements.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A process is an activity including a series of actions or operations conducing to an end. In PMD, a process is conducted via processing nodes and has a discernable duration as part of a workflow. A process consumes objects and parameters. A process potentially generates new objects and measurements.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Prozess", + "IRI-based" : "Process", + "en" : "Process" + }, + "subClasses" : [ "149", "460", "463", "78", "2", "237", "434" ], + "attributes" : [ "external" ], + "id" : "65", + "superClasses" : [ "104" ] + }, { + "iri" : "https://w3id.org/pmd/co/2DPixelCoordinates", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Ein Pixel kann durch ein Paar von Ganzzahlen identifiziert werden, die die Spalten- und Zeilennummer angeben, hier die 2D Pixel Koordinaten. Zum Beispiel würde ein Pixel mit den Koordinaten (1,2) in der Spalte Nummer 1 und der Zeile Nummer 2 liegen. Üblicherweise werden Spalten beginnend mit Null von links nach rechts nummeriert.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A pixel can be identified by a pair of integers indicating the column and row number, here the 2D pixel coordinates. For example, a pixel with coordinates (1,2) would be in column number 1 and row number 2. Typically, columns are numbered starting with zero from left to right.", + "type" : "label" + } ] + }, + "label" : { + "de" : "2D Pixel Koordinaten", + "IRI-based" : "2DPixelCoordinates", + "en" : "2D Pixel Coordinates" + }, + "subClasses" : [ "44", "188" ], + "attributes" : [ "external" ], + "id" : "182", + "superClasses" : [ "183" ] + }, { + "iri" : "https://w3id.org/pmd/co/MaterialRelated", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This property is used to qualitatively and quantitatively describe a material by providing information on a material, e.g., by including material properties, material structure, etc.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Klasse dient der qualitativen und quantitativen Beschreibung eines Materials, indem sie Informationen über ein Material angibt, z. B. durch die Einbeziehung von Materialeigenschaften, Materialstruktur usw.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Materialbezug", + "IRI-based" : "MaterialRelated", + "en" : "Material Related" + }, + "subClasses" : [ "444", "110", "410", "98", "405", "146" ], + "attributes" : [ "external" ], + "id" : "263", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/ValueObject", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A :ValueObject is an entity which represents a specific value. This value can be a numerical, textual, or a more complex data structure. If a literal value is to be specified, the :value datatype property has to be used. In cases where the value is represented by a resource (e.g. URI), the :resource object property has to be used.\n\nA value object, respectively its value, is always associated with an entity of type :Process, :ProcessingNode, :Object (e.g. :Specimen), :DigitalEntity, :Project, or other :ValueObject. The value is meant to be a charactaristic of the associated entity. To express this association it is indended to use the :characteristic object property if the value decribes some \\\"quality\\\", or the :participant (:input,:output) if it is participating a process.\n\nA value object might also refer to a unit. The :unit property might be used (e.g. with QUDT ontology).\n\nInstances of a value object might also be a type of :ValueScope, namely a :SetPoint (nominal value), or :Measurement (measured value). With :Setpoint the intend is to express, that the value is meant to be some preset, setting or nominal value. :Measurement expresses, that the value has been measured or determined somehow (see example).\n\nInstances of a value object might also be specified in a specific :DataScope (:Metadata, :PrimaryData, :SecondaryData).", + "type" : "label" + } ], + "example" : [ { + "identifier" : "example", + "language" : "en", + "value" : "- the length of a specimen\n- the model number of a machine\n- a person involved in a process\n- a force on an object", + "type" : "label" + }, { + "identifier" : "example", + "language" : "en", + "value" : ":Length rdfs:subClass :ValueObject .\nex:vo1 a :Length .\nex:vo1 a :Measurement .\nex:vo1 a :PrimaryData .\nex:vo1 :unit qudt:MilliM . \nex:vo1 :value \"123.45\"\nex:p1 a :LengthMeasuringProcess .\nex:p1 :characteristic ex:vo1 .", + "type" : "label" + }, { + "identifier" : "example", + "language" : "en", + "value" : "The length of a specimen, which has been measured as primary data. Its actual value is 123.45 millimeters.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Wertobjekt", + "IRI-based" : "ValueObject", + "en" : "Value Object" + }, + "union" : [ "278" ], + "subClasses" : [ "13", "392", "395", "305", "293", "183", "372", "155", "380", "310", "313", "100", "228", "69", "361", "319", "283", "332", "42", "341", "346", "160", "295", "263", "302", "490", "455", "481", "368", "330", "491", "492", "92", "235", "214", "378", "493", "142", "220", "223", "403", "221", "254", "190", "494", "278", "90", "322", "495", "153", "496", "288" ], + "attributes" : [ "union", "external" ], + "id" : "11", + "superClasses" : [ "47" ] + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "497", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "https://w3id.org/pmd/tto/TensileTestingMachine", + "baseIri" : "https://w3id.org/pmd/tto", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/tto", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "machine to conduct a tensile test; the control and monitoring of the test, the measurements, and the data processing are usually undertaken by computer", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Maschine zur Durchführung eines Zugversuches; die Regelung und Überwachung des Versuches, die Messungen und die Datenverarbeitung werden üblicherweise mithilfe eines Computers durchgeführt.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Zugprüfmaschine", + "IRI-based" : "TensileTestingMachine", + "en" : "Tensile Testing Machine" + }, + "attributes" : [ "external" ], + "id" : "499", + "superClasses" : [ "232", "239" ] + }, { + "iri" : "https://w3id.org/pmd/tto/FinalGaugeLengthAfterFracture", + "baseIri" : "https://w3id.org/pmd/tto", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/tto", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "length between gauge length marks on the test piece measured after rupture, at room temperature, the two pieces having been carefully fitted back together so that their axes lie in a straight line", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Länge zwischen den Marken zur Kennzeichnung der Messlänge auf der Probe, die nach dem Bruch bei Raumtemperatur gemessen wird, nachdem die beiden Probenbruchstücke sorgfältig so zusammengefügt wurden, dass ihre Achsen in einer Geraden liegen", + "type" : "label" + } ] + }, + "label" : { + "de" : "Messlänge nach dem Bruch", + "IRI-based" : "FinalGaugeLengthAfterFracture", + "en" : "Final Gauge Length After Fracture" + }, + "attributes" : [ "external" ], + "id" : "123", + "superClasses" : [ "119" ] + }, { + "iri" : "https://w3id.org/pmd/co/Extension", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Increase in the extensometer gauge length at any moment during the test", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Zunahme der Extensometer-Messlänge zu einem beliebigen Zeitpunkt des Versuchs", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Dimensional analysis: L\nUnit (e.g. SI): mm", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Note: The extension might be measured using different channels (e.g. when using one or two extensometer channels); usually, the mean average value of involved channels is given as extension value, if applicable.\n\nNote: Optical extensometry may require a specific data storage method.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Verlängerung (der Extensometer-Messlänge)", + "IRI-based" : "Extension", + "en" : "Extension" + }, + "subClasses" : [ "507", "502", "472", "466", "508", "329" ], + "attributes" : [ "external" ], + "id" : "330", + "superClasses" : [ "11" ] + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "48", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "id" : "84", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "https://w3id.org/pmd/tto/PercentageTotalExtensionAtFracture", + "baseIri" : "https://w3id.org/pmd/tto", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/tto", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "total extension (elastic extension plus plastic extension) at the moment of fracture, expressed as a percentage of the extensometer gauge length", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "gesamte Verlängerung (elastische plus plastische Verlängerung) der Extensometer-Messlänge beim Bruch, angegeben in Prozent, bezogen auf die Extensometer-Messlänge", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Symbol: A_t", + "type" : "label" + } ] + }, + "label" : { + "de" : "Gesamte Extensometer-Dehnung beim Bruch", + "IRI-based" : "PercentageTotalExtensionAtFracture", + "en" : "Percentage Total Extension At Fracture" + }, + "attributes" : [ "external" ], + "id" : "472", + "superClasses" : [ "330" ] + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "54", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "https://w3id.org/pmd/co/StartTime", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The date and time when a plan/recipe or process is executed.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Startzeit", + "IRI-based" : "StartTime", + "en" : "Start Time" + }, + "attributes" : [ "external" ], + "id" : "200", + "superClasses" : [ "160" ] + }, { + "iri" : "https://w3id.org/pmd/co/TestPieceClassification", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Eigenschaft wird verwendet, um Informationen über einen Prüfkörper bezüglich seiner Einordnung gemäß entsprechender Normen zu liefern.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This property is used to provide information on a test piece concerning its graduation in accordance with corresponding standards.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Prüfkörperklassifizierung", + "IRI-based" : "TestPieceClassification", + "en" : "Test Piece Classification" + }, + "attributes" : [ "external" ], + "id" : "348", + "superClasses" : [ "293" ] + }, { + "iri" : "https://w3id.org/pmd/co/IonicBond", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "\"Ionic bond.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/ionic%20bond. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Ionic bond is a chemical bond formed between oppositely charged species because of their mutual electrostatic attraction.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Eine Ionenbindung ist eine chemische Bindung, die zwischen entgegengesetzt geladenen Stoffen aufgrund ihrer gegenseitigen elektrostatischen Anziehung entsteht.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Ionische Bindung", + "IRI-based" : "IonicBond", + "en" : "Ionic Bond" + }, + "attributes" : [ "external" ], + "id" : "297", + "superClasses" : [ "146" ] + }, { + "iri" : "https://w3id.org/pmd/co/MeasuringProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A measurement process is an analysis process that acquires data (usually expressed in numbers) by using tools.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Messprozess", + "IRI-based" : "MeasuringProcess", + "en" : "Measuring Process" + }, + "attributes" : [ "external" ], + "id" : "427", + "superClasses" : [ "149" ] + }, { + "iri" : "http://www.w3.org/2001/XMLSchema#dateTime", + "baseIri" : "http://www.w3.org/2001/XMLSchema", + "id" : "514", + "label" : { + "IRI-based" : "dateTime" + } + }, { + "iri" : "https://w3id.org/pmd/co/ConditioningProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Aktivität beschreibt den Prozess und die Maßnahmen, die ergriffen werden, um einen materiellen Gegenstand auf vordefinierte Umgebungsbedingungen einzustellen.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A process that comprises the procedure and measures by which a material object is adapted to predefined environmental conditions.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Konditionierungsprozess", + "IRI-based" : "ConditioningProcess", + "en" : "Conditioning Process" + }, + "subClasses" : [ "236", "510" ], + "attributes" : [ "external" ], + "id" : "237", + "superClasses" : [ "65" ] + }, { + "iri" : "http://www.w3.org/2001/XMLSchema#dateTime", + "baseIri" : "http://www.w3.org/2001/XMLSchema", + "id" : "515", + "label" : { + "IRI-based" : "dateTime" + } + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "12", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "baseIri" : "http://www.w3.org/2000/01/rdf-schema", + "id" : "516", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2001/XMLSchema#dateTime", + "baseIri" : "http://www.w3.org/2001/XMLSchema", + "id" : "304", + "label" : { + "IRI-based" : "dateTime" + } + }, { + "iri" : "https://w3id.org/pmd/co/Date", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Eine Erklärung über den Tag der Ausführung oder Herstellung. Basierend auf dem gregorianischen Kalendersystem.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A statement of the day of execution or making. Based on an the gregorian calender system.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Datum", + "IRI-based" : "Date", + "en" : "Date" + }, + "attributes" : [ "external" ], + "id" : "170", + "superClasses" : [ "160" ] + }, { + "instances" : 0, + "union" : [ "367", "374" ], + "attributes" : [ "union", "anonymous" ], + "id" : "517" + }, { + "iri" : "http://www.w3.org/2001/XMLSchema#dateTime", + "baseIri" : "http://www.w3.org/2001/XMLSchema", + "id" : "518", + "label" : { + "IRI-based" : "dateTime" + } + }, { + "iri" : "http://www.w3.org/2001/XMLSchema#dateTime", + "baseIri" : "http://www.w3.org/2001/XMLSchema", + "id" : "138", + "label" : { + "IRI-based" : "dateTime" + } + }, { + "instances" : 0, + "union" : [ "116", "129", "11" ], + "attributes" : [ "union", "anonymous" ], + "id" : "519" + }, { + "iri" : "https://w3id.org/pmd/tto/OriginalDiameter", + "baseIri" : "https://w3id.org/pmd/tto", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/tto", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Die Länge einer geraden Linie durch den Mittelpunkt eines Objekts (Zugprüfkörpers), die vor einer Prüfung gemessen wird.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "The length of a straight line through the center of an object (tensile test piece) as measured prior to a tensile test.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Anfangs-Probendurchmesser", + "IRI-based" : "OriginalDiameter", + "en" : "Original Diameter" + }, + "attributes" : [ "external" ], + "id" : "521", + "superClasses" : [ "302" ] + }, { + "instances" : 0, + "union" : [ "108", "178" ], + "attributes" : [ "union", "anonymous" ], + "id" : "165" + }, { + "iri" : "http://www.w3.org/ns/prov#Invalidation", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasInvalidatedBy", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-Invalidation", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "undefined", + "value" : "Invalidation is the start of the destruction, cessation, or expiry of an existing entity by an activity. The entity is no longer available for use (or further invalidation) after invalidation. Any generation or usage of an entity precedes its invalidation.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "constraints" : [ { + "identifier" : "constraints", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-constraints-20130430/#prov-dm-constraints-fig", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-Invalidation", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Invalidation", + "undefined" : "Invalidation" + }, + "comment" : { + "en" : "An instance of prov:Invalidation provides additional descriptions about the binary prov:wasInvalidatedBy relation from an invalidated prov:Entity to the prov:Activity that invalidated it. For example, :uncracked_egg prov:wasInvalidatedBy :baking; prov:qualifiedInvalidation [ a prov:Invalidation; prov:activity :baking; :foo :bar ]." + }, + "attributes" : [ "external" ], + "id" : "27", + "superClasses" : [ "18", "40" ] + }, { + "iri" : "https://w3id.org/pmd/co/SpecimenName", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "This property describes the designation of a specimen, usually given as human-readable identifier by humans.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Eigenschaft beschreibt die Bezeichnung eines Prüfstücks, die in der Regel von Menschen als von Menschen lesbarer Identifikator vergeben wird.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Prüfstück Name", + "IRI-based" : "SpecimenName", + "en" : "Specimen Name" + }, + "intersection" : [ "100" ], + "attributes" : [ "intersection", "external" ], + "id" : "439", + "superClasses" : [ "100" ] + }, { + "iri" : "https://w3id.org/pmd/tto/StrainRate", + "baseIri" : "https://w3id.org/pmd/tto", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/tto", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Zunahme der mit einem Extensometer in der Extensometer-Messlänge gemessenen Dehnung je Zeiteinheit", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Symbol: e^._L_e", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "increase of strain, measured with an extensometer, in extensometer gauge length, per time", + "type" : "label" + } ] + }, + "label" : { + "de" : "Dehngeschwindigkeit", + "IRI-based" : "StrainRate", + "en" : "Strain Rate" + }, + "attributes" : [ "external" ], + "id" : "356", + "superClasses" : [ "223" ] + }, { + "iri" : "https://w3id.org/pmd/co/ClampingPressure", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Eigenschaft beschreibt als quantitativer Wert die Kraft pro Fläche (Druck), die beim Einbau einer Probe, eines Prüfkörpers oder eines Prüfstücks aufgebracht wird. Typischerweise ist das Aufbringen eines Klemmdrucks mit einer Art von Klemm- oder Spannzubehör (Grips) oder Ähnlichem verbunden.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This property describes the force per area (pressure) that is used during the mounting process of a sample, specimen, or test piece as a quantitative value. Typically, this process involves some sort of grips or the like.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Klemmdruck", + "IRI-based" : "ClampingPressure", + "en" : "Clamping Pressure" + }, + "attributes" : [ "external" ], + "id" : "523", + "superClasses" : [ "481" ] + }, { + "instances" : 0, + "union" : [ "108", "116", "66", "65", "129", "11" ], + "attributes" : [ "union", "anonymous" ], + "id" : "524" + }, { + "iri" : "https://w3id.org/pmd/co/Object", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A discernable, tangible or simulated entity that is processed in a process by a processing node.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Objekt", + "IRI-based" : "Object", + "en" : "Object" + }, + "subClasses" : [ "525", "5", "178" ], + "attributes" : [ "external" ], + "id" : "129", + "superClasses" : [ "47" ] + }, { + "instances" : 0, + "union" : [ "104", "47", "51" ], + "attributes" : [ "union", "anonymous" ], + "id" : "8" + }, { + "instances" : 0, + "union" : [ "448", "18" ], + "attributes" : [ "union", "anonymous" ], + "id" : "526" + }, { + "instances" : 0, + "union" : [ "104", "47", "51" ], + "attributes" : [ "union", "anonymous" ], + "id" : "527" + }, { + "instances" : 0, + "union" : [ "104", "47", "51" ], + "attributes" : [ "union", "anonymous" ], + "id" : "528" + }, { + "iri" : "https://w3id.org/pmd/co/MountingProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An assembly process in which a test piece or specimen is installed or otherwise integrated into a testing machine. This may also include the use of other processing nodes and components (e.g. grips).", + "type" : "label" + } ] + }, + "label" : { + "de" : "Montageprozess", + "IRI-based" : "MountingProcess", + "en" : "Mounting Process" + }, + "attributes" : [ "external" ], + "id" : "20", + "superClasses" : [ "2" ] + }, { + "instances" : 0, + "union" : [ "285", "326", "31", "35" ], + "attributes" : [ "union", "anonymous" ], + "id" : "532" + }, { + "instances" : 0, + "union" : [ "104", "47", "18", "51" ], + "attributes" : [ "union", "anonymous" ], + "id" : "74" + }, { + "iri" : "https://w3id.org/pmd/co/ProcessingNode", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Processing nodes are tools, equipment and accessories as well as software that are relevant for the performance of processes, such as e.g. mechanical and chemical test as well as simulation, prediction, and machine learning. Accordingly, processing nodes may be machines, parts of machines, and software applications.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Prozessknoten sind Werkzeuge, Geräte und Zubehör sowie Software, die für die Durchführung von Prozessen relevant sind, wie z. B. mechanische und chemische Tests sowie Simulationen, Vorhersagen und maschinelles Lernen. Dementsprechend können Prozessknoten Maschinen, Teile von Maschinen und Softwareanwendungen sein.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Prozessknoten", + "IRI-based" : "ProcessingNode", + "en" : "Processing Node" + }, + "subClasses" : [ "386", "107", "232", "239", "243", "72", "251", "256" ], + "attributes" : [ "external" ], + "id" : "108", + "superClasses" : [ "51" ] + }, { + "iri" : "https://w3id.org/pmd/co/TemperatureChangingProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A conditioning process which is run to increase or decrease the temperature of an object or a space. Usually, this involves heating or cooling devices such as furnaces or cooling media.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Temperaturänderungsprozess", + "IRI-based" : "TemperatureChangingProcess", + "en" : "Temperature Changing Process" + }, + "attributes" : [ "external" ], + "id" : "510", + "superClasses" : [ "237" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Quotation", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasQuotedFrom", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-quotation", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A quotation is the repeat of (some or all of) an entity, such as text or image, by someone who may or may not be its original author. Quotation is a particular case of derivation.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-quotation", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Quotation", + "undefined" : "Quotation" + }, + "comment" : { + "en" : "An instance of prov:Quotation provides additional descriptions about the binary prov:wasQuotedFrom relation from some taken prov:Entity from an earlier, larger prov:Entity. For example, :here_is_looking_at_you_kid prov:wasQuotedFrom :casablanca_script; prov:qualifiedQuotation [ a prov:Quotation; prov:entity :casablanca_script; :foo :bar ]." + }, + "attributes" : [ "external" ], + "id" : "325", + "superClasses" : [ "326" ] + }, { + "iri" : "https://w3id.org/pmd/co/AgingTime", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The timespan that an Aging Process executes to completion.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Alterungszeit", + "IRI-based" : "AgingTime", + "en" : "Aging Time" + }, + "subClasses" : [ "260" ], + "attributes" : [ "external" ], + "id" : "213", + "superClasses" : [ "160" ] + }, { + "iri" : "http://www.w3.org/ns/prov#PrimarySource", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#hadPrimarySource", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-primary-source", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A primary source for a topic refers to something produced by some agent with direct experience and knowledge about the topic, at the time of the topic's study, without benefit from hindsight.\n\nBecause of the directness of primary sources, they 'speak for themselves' in ways that cannot be captured through the filter of secondary sources. As such, it is important for secondary sources to reference those primary sources from which they were derived, so that their reliability can be investigated.\n\nA primary source relation is a particular case of derivation of secondary materials from their primary sources. It is recognized that the determination of primary sources can be up to interpretation, and should be done according to conventions accepted within the application's domain.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-original-source", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "PrimarySource", + "undefined" : "PrimarySource" + }, + "comment" : { + "en" : "An instance of prov:PrimarySource provides additional descriptions about the binary prov:hadPrimarySource relation from some secondary prov:Entity to an earlier, primary prov:Entity. For example, :blog prov:hadPrimarySource :newsArticle; prov:qualifiedPrimarySource [ a prov:PrimarySource; prov:entity :newsArticle; :foo :bar ] ." + }, + "attributes" : [ "external" ], + "id" : "334", + "superClasses" : [ "326" ] + }, { + "iri" : "https://w3id.org/pmd/co/ProcessIdentifier", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Ein umgangssprachlicher, von Menschen erstellter, beschreibender Text, der die Art einer Prozessinstanz qualifiziert, die als Kennung verwendet wird, die nicht unbedingt eindeutig sein muss, z.B. “1050°C30 840°C10/ÖL”.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A colloquial, human-generated, descriptive text qualifying the nature of a process instance used as an identifier that is not strictly intended to be unique, e.g. “1050°C30 840°C10/ÖL”.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Prozessidentifikator", + "IRI-based" : "ProcessIdentifier", + "en" : "Process Identifier" + }, + "intersection" : [ "100" ], + "attributes" : [ "intersection", "external" ], + "id" : "423", + "superClasses" : [ "100" ] + }, { + "iri" : "https://w3id.org/pmd/co/Laboratory", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Laboratory.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/laboratory. Accessed 24 Nov. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A place equipped for experimental study in a science or for testing and analysis.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Labor", + "IRI-based" : "Laboratory", + "en" : "Laboratory" + }, + "intersection" : [ "95" ], + "attributes" : [ "intersection", "external" ], + "id" : "94", + "superClasses" : [ "95" ] + }, { + "iri" : "https://w3id.org/pmd/co/Fraction", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "Fraction" + }, + "subClasses" : [ "272", "276", "281", "227" ], + "attributes" : [ "external" ], + "id" : "228", + "superClasses" : [ "11" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Revision", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasRevisionOf", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-revision", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A revision is a derivation for which the resulting entity is a revised version of some original. The implication here is that the resulting entity contains substantial content from the original. Revision is a particular case of derivation.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-Revision", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Revision", + "undefined" : "Revision" + }, + "comment" : { + "en" : "An instance of prov:Revision provides additional descriptions about the binary prov:wasRevisionOf relation from some newer prov:Entity to an earlier prov:Entity. For example, :draft_2 prov:wasRevisionOf :draft_1; prov:qualifiedRevision [ a prov:Revision; prov:entity :draft_1; :foo :bar ]." + }, + "attributes" : [ "external" ], + "id" : "339", + "superClasses" : [ "326" ] + }, { + "iri" : "https://w3id.org/pmd/co/Rectangular", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Rectangular.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/rectangular. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Geformt wie ein Rechteck.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Shaped like a rectangle.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Rechteckig", + "IRI-based" : "Rectangular", + "en" : "Rectangular" + }, + "attributes" : [ "external" ], + "id" : "564", + "superClasses" : [ "90" ] + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "id" : "401", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "id" : "566", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/ns/prov#Role", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-attribute-role", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A role is the function of an entity or agent with respect to an activity, in the context of a usage, generation, invalidation, association, start, and end.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-attribute", + "type" : "label" + } ], + "seeAlso" : [ { + "identifier" : "seeAlso", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#hadRole", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "Role", + "undefined" : "Role" + }, + "subClasses" : [ "174", "180", "185", "192", "196" ], + "attributes" : [ "external" ], + "id" : "175" + }, { + "instances" : 0, + "union" : [ "7", "526" ], + "attributes" : [ "union", "anonymous" ], + "id" : "569" + }, { + "instances" : 0, + "union" : [ "7", "532" ], + "attributes" : [ "union", "anonymous" ], + "id" : "571" + }, { + "iri" : "https://w3id.org/pmd/co/Time", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Time.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/time. Accessed 25 Nov. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A nonspatial continuum that is measured in terms of events which succeed one another from past through present to future.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Zeit", + "IRI-based" : "Time", + "en" : "Time" + }, + "subClasses" : [ "200", "204", "208", "213", "159", "170" ], + "attributes" : [ "external" ], + "id" : "160", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/SimulationNode", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A simulation node is a processing node that represents a computational unit or processing element consuming and creating simulation objects and parameters. It performs specific tasks, calculations, or processes related to the simulation, and may be contributing to an overall simulation model. Simulation nodes are integral components in simulating dynamic processes, and they may interact with other nodes to collectively model complex systems or scenarios.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Simulationsknoten", + "IRI-based" : "SimulationNode", + "en" : "Simulation Node" + }, + "attributes" : [ "external" ], + "id" : "574", + "superClasses" : [ "251" ] + }, { + "iri" : "https://w3id.org/pmd/co/MaterialStructure", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Material - Classification by structure.” Wikipedia The Free Encyclopedia, https://en.wikipedia.org/wiki/Material#Classification_by_structure. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Die relevante Struktur von Materialien hat je nach Material eine unterschiedliche Längenskala. Die Struktur und Zusammensetzung eines Materials kann durch Mikroskopie oder Spektroskopie bestimmt werden.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "The relevant structure of materials has a different length scale depending on the material. The structure and composition of a material can be determined by microscopy or spectroscopy.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Materialstruktur", + "IRI-based" : "MaterialStructure", + "en" : "Material Structure" + }, + "subClasses" : [ "97", "106", "113" ], + "attributes" : [ "external" ], + "id" : "98", + "superClasses" : [ "263" ] + }, { + "iri" : "https://w3id.org/pmd/tto/GaugeLength", + "baseIri" : "https://w3id.org/pmd/tto", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/tto", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Länge des parallelen Teils der Probe, an dem zu einem beliebigen Zeitpunkt während des Versuchs die Verlängerung gemessen wird", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Symbol: L", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "length of the parallel portion of the test piece on which elongation is measured at any moment during the test", + "type" : "label" + } ] + }, + "label" : { + "de" : "Messlänge", + "IRI-based" : "GaugeLength", + "en" : "Gauge Length" + }, + "subClasses" : [ "118", "123", "127" ], + "attributes" : [ "external" ], + "id" : "119", + "superClasses" : [ "142" ] + }, { + "iri" : "https://w3id.org/pmd/co/Pixel", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Pixel.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/pixel. Accessed 1 Dec. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Any of the small discrete elements that together constitute an image.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Pixel", + "IRI-based" : "Pixel", + "en" : "Pixel" + }, + "attributes" : [ "external" ], + "id" : "206", + "superClasses" : [ "116" ] + }, { + "iri" : "https://w3id.org/pmd/tto/Rp01", + "baseIri" : "https://w3id.org/pmd/tto", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/tto", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Symbol: R_p_0.1", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "stress at which the plastic extension is equal to 0.1 percent of the extensometer gauge length", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Spannung bei einer plastischen Extensometer-Dehnung, die 0,1 Prozent der Extensometer-Messlänge entspricht", + "type" : "label" + } ] + }, + "label" : { + "de" : "Dehngrenze bei plastischer Extensometer-Dehnung Rp01", + "IRI-based" : "Rp01", + "en" : "Proof Strength Plastic Extension Rp01" + }, + "attributes" : [ "external" ], + "id" : "583", + "superClasses" : [ "369" ] + }, { + "iri" : "https://w3id.org/pmd/tto/Rp02", + "baseIri" : "https://w3id.org/pmd/tto", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/tto", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Spannung bei einer plastischen Extensometer-Dehnung, die 0,2 Prozent der Extensometer-Messlänge entspricht", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Symbol: R_p_0.2", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "stress at which the plastic extension is equal to 0.2 percent of the extensometer gauge length", + "type" : "label" + } ] + }, + "label" : { + "de" : "Dehngrenze bei plastischer Extensometer-Dehnung Rp02", + "IRI-based" : "Rp02", + "en" : "Proof Strength Plastic Extension Rp02" + }, + "attributes" : [ "external" ], + "id" : "585", + "superClasses" : [ "369" ] + }, { + "iri" : "http://www.w3.org/ns/prov#End", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasEndedBy", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-End", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "End is when an activity is deemed to have been ended by an entity, known as trigger. The activity no longer exists after its end. Any usage, generation, or invalidation involving an activity precedes the activity's end. An end may refer to a trigger entity that terminated the activity, or to an activity, known as ender that generated the trigger.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "constraints" : [ { + "identifier" : "constraints", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-constraints-20130430/#prov-dm-constraints-fig", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-End", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "End", + "undefined" : "End" + }, + "comment" : { + "en" : "An instance of prov:End provides additional descriptions about the binary prov:wasEndedBy relation from some ended prov:Activity to an prov:Entity that ended it. For example, :ball_game prov:wasEndedBy :buzzer; prov:qualifiedEnd [ a prov:End; prov:entity :buzzer; :foo :bar; prov:atTime '2012-03-09T08:05:08-05:00'^^xsd:dateTime ]." + }, + "attributes" : [ "external" ], + "id" : "31", + "superClasses" : [ "37", "18" ] + }, { + "iri" : "https://w3id.org/pmd/tto/PercentageYieldPointExtension", + "baseIri" : "https://w3id.org/pmd/tto", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/tto", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "For discontinuous yielding materials: extension between the start of yielding and the start of uniform work-hardening, expressed as a percentage of the extensometer gauge length", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Symbol: A_e", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Bei Werkstoffen, die ein diskontinuierliches Fließen zeigen: Verlängerung der Extensometer-Messlänge zwischen dem Beginn örtlichen Fließens und dem Einsetzen gleichmäßiger Verfestigung, angegeben in Prozent, bezogen auf die Extensometer-Messlänge", + "type" : "label" + } ] + }, + "label" : { + "de" : "Streckgrenzen-Extensometer-Dehnung", + "IRI-based" : "PercentageYieldPointExtension", + "en" : "Percentage Yield Point Extension" + }, + "attributes" : [ "external" ], + "id" : "507", + "superClasses" : [ "330" ] + }, { + "iri" : "https://w3id.org/pmd/co/SimulationProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "undefined", + "value" : "A process that is used for a simulation.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Simulationsprozess", + "IRI-based" : "SimulationProcess", + "en" : "Simulation Process" + }, + "attributes" : [ "external" ], + "id" : "463", + "superClasses" : [ "65" ] + }, { + "iri" : "https://w3id.org/pmd/tto/CrossheadSeparationRate", + "baseIri" : "https://w3id.org/pmd/tto", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/tto", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Symbol: v_c", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "displacement of the crossheads per time", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Traversenweg je Zeiteinheit", + "type" : "label" + } ] + }, + "label" : { + "de" : "Traversengeschwindigkeit", + "IRI-based" : "CrossheadSeparationRate", + "en" : "Crosshead Separation Rate" + }, + "attributes" : [ "external" ], + "id" : "351", + "superClasses" : [ "223" ] + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "id" : "581", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "id" : "550", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "587", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "590", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "id" : "591", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "http://www.w3.org/2002/07/owl#Thing", + "baseIri" : "http://owl2vowl.de", + "id" : "488", + "label" : { + "undefined" : "Thing" + } + }, { + "iri" : "http://www.w3.org/2000/01/rdf-schema#Literal", + "id" : "287", + "label" : { + "IRI-based" : "Literal", + "undefined" : "Literal" + } + }, { + "iri" : "https://w3id.org/pmd/co/Grips", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "https://www.merriam-webster.com/dictionary/grips", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This entity describes a part by which something, usually a tangible object, is grasped. Typically, grips are part of a mounting system (processing node) referring to a testing system.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Entität beschreibt ein Bauelement / Teil, mit dem etwas, normalerweise ein materielles Objekt, fest gegriffen oder eingespannt wird. Typischerweise sind Halterungen, Klemm- bzw. Spannsysteme Teil eines Befestigungssystems (Prozessknoten), das sich auf ein Prüfsystem bezieht.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Halterungsklemmen", + "IRI-based" : "Grips", + "en" : "Grips" + }, + "attributes" : [ "external" ], + "id" : "230", + "superClasses" : [ "178" ] + }, { + "iri" : "https://w3id.org/pmd/tto/ChangeOfTransverseDimension", + "baseIri" : "https://w3id.org/pmd/tto", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/tto", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "undefined", + "value" : "DIN EN ISO 10113:2021-06", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Dieses Wertobjekt beschreibt eine Variation der Abmessungen eines Prüfkörpers in Bezug auf seine Querachse, die sich auf seine Querschnittsfläche auswirkt und möglicherweise während eines Zugversuchs auftritt. Das Verhältnis der wahren plastischen Breitendehnung und der wahren plastischen Dickendehnung in einem in uniaxialem Zug beanspruchten Prüfkörper (vertikale Anisotropie) kann anhand dieser Information berechnet werden.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This value object describes a variation in the dimension of a test piece referring to its transversal axis affecting its cross-sectional area that may potentially occur during a tensile test. The ratio of the true plastic strain in width and the true plastic strain in thickness in a test piece loaded in uniaxial tension (vertical anisotropy) may be calculated using this information.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Änderung der transversalen Dimension", + "IRI-based" : "ChangeOfTransverseDimension", + "en" : "Change Of Transverse Dimension" + }, + "attributes" : [ "external" ], + "id" : "402", + "superClasses" : [ "142" ] + }, { + "iri" : "https://w3id.org/pmd/co/AccreditationDocument", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "https://www.merriam-webster.com/dictionary/accreditation", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This entity describes a document used to state that an official authorization or approval to recognize or vouch for a conformation with a standard was granted to an organization, person, or entity. This may include, e.g., processes, (sets of) equipment, or entire laboratories.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Entität beschreibt ein Dokument, welches aussagt, dass einer Organisation, Person oder Einrichtung eine offizielle Konformität mit einer Norm anerkannt wurde. Dies kann z. B. Prozesse, Ausrüstungen oder ganze Laboratorien umfassen.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Akkreditierungsdokument", + "IRI-based" : "AccreditationDocument", + "en" : "Accreditation Document" + }, + "attributes" : [ "external" ], + "id" : "597", + "superClasses" : [ "42" ] + }, { + "iri" : "https://w3id.org/pmd/co/MaterialDesignation", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "editorialNote" : [ { + "identifier" : "editorialNote", + "language" : "undefined", + "value" : "former \"Material\" : \"It is a substance or mixture of substances that constitutes an object. represented by the sum of material properties and material structure\"", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "undefined", + "value" : "It is a name or identifier of a material type. It designates a material. \nE.g. \"steel\", \"aluminium\", \"wood\", \"plastic\", \"rubber\".", + "type" : "label" + } ] + }, + "label" : { + "de" : "Materialbezeichnung", + "IRI-based" : "MaterialDesignation", + "en" : "Material Designation" + }, + "attributes" : [ "external" ], + "id" : "410", + "superClasses" : [ "263" ] + }, { + "iri" : "https://w3id.org/pmd/co/MinorAxisDiameter", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The longest diameter of an ellipse.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Hauptachsendurchmesser", + "IRI-based" : "MinorAxisDiameter", + "en" : "Major axis diameter" + }, + "attributes" : [ "external" ], + "id" : "600", + "superClasses" : [ "302" ] + }, { + "iri" : "https://w3id.org/pmd/co/MajorAxisDiameter", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The shortest diameter of an ellipse.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Halbachsendurchmesser", + "IRI-based" : "MajorAxisDiameter", + "en" : "Minor axis diameter" + }, + "attributes" : [ "external" ], + "id" : "601", + "superClasses" : [ "302" ] + }, { + "iri" : "https://w3id.org/pmd/co/BaseMaterial", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This entity is used to describe the material that was taken as granted as such and used in the beginning of a process chain under consideration.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Ausgangsmaterial", + "IRI-based" : "BaseMaterial", + "en" : "Base Material" + }, + "attributes" : [ "external" ], + "id" : "87", + "superClasses" : [ "5" ] + }, { + "iri" : "https://w3id.org/pmd/co/DataAcquisitionRate", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Eigenschaft bezeichnet die Anzahl der Messungen / Abfragen pro Zeiteinheit bei einer betrachteten Messung einer Messgröße (Abtast-/Abfragerate bei der Datenerfassung).", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This property denotes the number of measurements / queries per time period for a considered measurement of a measurement parameter (sampling / query rate during data acquisition).", + "type" : "label" + } ] + }, + "label" : { + "de" : "Datenerfassungsrate", + "IRI-based" : "DataAcquisitionRate", + "en" : "Data Acquisition Rate" + }, + "attributes" : [ "external" ], + "id" : "493", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/OperatorRole", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A role indicating that its bearer participates a process as operator.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "OperatorRole", + "en" : "Operator Role" + }, + "attributes" : [ "external" ], + "id" : "192", + "superClasses" : [ "175" ] + }, { + "iri" : "https://w3id.org/pmd/co/ValueScope", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Eine Entität, die es ermöglicht \"ValueObjects\" zusätzlich zu kategorisieren.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This class expresses the categorization of :ValueObjects into measurements and setpoints.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "An entity that makes it possible to add categorization to \"ValueObjects\".", + "type" : "label" + } ] + }, + "label" : { + "de" : "Wertekategorie", + "IRI-based" : "ValueScope", + "en" : "Value Scope" + }, + "subClasses" : [ "114", "134" ], + "attributes" : [ "external" ], + "id" : "80", + "superClasses" : [ "47" ] + }, { + "iri" : "https://w3id.org/pmd/co/CommissionTime", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Date and time an order or plan has been dispatched at.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Kommissionszeit", + "IRI-based" : "CommissionTime", + "en" : "Commission Time" + }, + "attributes" : [ "external" ], + "id" : "159", + "superClasses" : [ "160" ] + }, { + "iri" : "https://w3id.org/pmd/co/DemountingProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An assembling process in which a test piece or specimen is removed from a test machine.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Demontageprozess", + "IRI-based" : "DemountingProcess", + "en" : "Demounting Process" + }, + "attributes" : [ "external" ], + "id" : "1", + "superClasses" : [ "2" ] + }, { + "iri" : "https://w3id.org/pmd/co/GeometryChangingProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A process that is modifing the geometry of an object.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "GeometryChangingProcess", + "en" : "Geometry Changing Process" + }, + "subClasses" : [ "77" ], + "attributes" : [ "external" ], + "id" : "78", + "superClasses" : [ "65" ] + }, { + "iri" : "https://w3id.org/pmd/co/ManufacturingProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A process that is driven by the primary intent to transform objects.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Herstellungsprozess", + "IRI-based" : "ManufacturingProcess", + "en" : "Manufacture Process" + }, + "attributes" : [ "external" ], + "id" : "460", + "superClasses" : [ "65" ] + }, { + "iri" : "https://w3id.org/pmd/tto/DiameterAfterFracture", + "baseIri" : "https://w3id.org/pmd/tto", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/tto", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The length of a straight line through the center of an object (tensile test piece) as measured after a fracture occured during a test.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Die Länge einer geraden Linie durch den Mittelpunkt eines Objekts (Zugprüfstücks), gemessen nach einem Bruch, der während einer Prüfung aufgetreten ist.", + "type" : "label" + } ] + }, + "label" : { + "de" : "End-Probendurchmesser", + "IRI-based" : "DiameterAfterFracture", + "en" : "Diameter After Fracture" + }, + "attributes" : [ "external" ], + "id" : "629", + "superClasses" : [ "302" ] + }, { + "iri" : "https://w3id.org/pmd/tto/MaximumForce", + "baseIri" : "https://w3id.org/pmd/tto", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/tto", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "For materials displaying no discontinuous yielding: highest force that the test piece withstands during the test\n\nFor materials displaying discontinuous yielding: highest force that the test piece withstands during the test after the beginning of work-hardening\n\nNote: For materials which display discontinuous yielding, but where no work-hardening can be established, the maximum force is not defined.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Bei Werkstoffen, die kein diskontinuierliches Fließen zeigen: größte Kraft, der die Probe während des Versuchs standhält\n\nBei Werkstoffen, die ein diskontinuierliches Fließen zeigen: größte Kraft, der die Probe während des Versuchs nach dem Beginn der Verfestigung standhält\n\nAnmerkung: Für Werkstoffe, die ein diskontinuierliches Fließen zeigen, aber keine Verfestigung erzielt werden kann, ist die Höchstkraft nicht definiert\n.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Höchstkraft", + "IRI-based" : "MaximumForce", + "en" : "Maximum Force" + }, + "attributes" : [ "external" ], + "id" : "321", + "superClasses" : [ "322" ] + }, { + "iri" : "https://w3id.org/pmd/co/DepartmentRole", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "label" : { + "IRI-based" : "DepartmentRole", + "en" : "Department Role", + "undefined" : "A role indication that an organization is a sub section of another organization." + }, + "attributes" : [ "external" ], + "id" : "174", + "superClasses" : [ "175" ] + }, { + "iri" : "http://purl.org/spar/datacite/Identifier", + "baseIri" : "http://purl.org/spar/datacite", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://purl.org/spar/datacite", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "Identifier", + "en" : "DataCite Identifier" + }, + "intersection" : [ "313", "11" ], + "attributes" : [ "intersection", "external" ], + "id" : "631" + }, { + "iri" : "https://w3id.org/pmd/co/HydrogenBond", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "\"Hydrogen bond.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/hydrogen%20bond. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Eine Wasserstoffbindung ist eine elektrostatische Anziehung zwischen einem Wasserstoffatom in einem polaren Molekül (z. B. Wasser) und einem kleinen elektronegativen Atom (z. B. Sauerstoff, Stickstoff oder Fluor) in einem anderen Molekül der gleichen oder einer anderen polaren Substanz.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Hydrogen bond is an electrostatic attraction between a hydrogen atom in one polar molecule (as of water) and a small electronegative atom (as of oxygen, nitrogen, or fluorine) in usually another molecule of the same or a different polar substance.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Wasserstoffbindung", + "IRI-based" : "HydrogenBond", + "en" : "Hydrogen Bond" + }, + "attributes" : [ "external" ], + "id" : "632", + "superClasses" : [ "146" ] + }, { + "iri" : "http://purl.obolibrary.org/obo/IAO_0000078", + "baseIri" : "http://purl.obolibrary.org/obo", + "instances" : 0, + "annotations" : { + "IAO_0000111" : [ { + "identifier" : "IAO_0000111", + "language" : "en", + "value" : "curation status specification", + "type" : "label" + } ], + "IAO_0000115" : [ { + "identifier" : "IAO_0000115", + "language" : "en", + "value" : "The curation status of the term. The allowed values come from an enumerated list of predefined terms. See the specification of these instances for more detailed definitions of each enumerated value.", + "type" : "label" + } ], + "IAO_0000114" : [ { + "identifier" : "IAO_0000114", + "language" : "undefined", + "value" : "http://purl.obolibrary.org/obo/IAO_0000125", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "IAO_0000078", + "en" : "curation status specification" + }, + "individuals" : [ { + "iri" : "http://purl.obolibrary.org/obo/IAO_0000125", + "baseIri" : "http://purl.obolibrary.org/obo", + "annotations" : { + "IAO_0000111" : [ { + "identifier" : "IAO_0000111", + "language" : "en", + "value" : "pending final vetting", + "type" : "label" + } ], + "IAO_0000115" : [ { + "identifier" : "IAO_0000115", + "language" : "en", + "value" : "All definitions, placement in the asserted IS_A hierarchy and required minimal metadata are complete. The class is awaiting a final review by someone other than the term editor.", + "type" : "label" + } ] + }, + "labels" : { + "IRI-based" : "IAO_0000125", + "en" : "pending final vetting" + } + }, { + "iri" : "http://purl.obolibrary.org/obo/IAO_0000423", + "baseIri" : "http://purl.obolibrary.org/obo", + "annotations" : { + "IAO_0000111" : [ { + "identifier" : "IAO_0000111", + "language" : "en", + "value" : "to be replaced with external ontology term", + "type" : "label" + } ], + "IAO_0000115" : [ { + "identifier" : "IAO_0000115", + "language" : "en", + "value" : "Terms with this status should eventually replaced with a term from another ontology.", + "type" : "label" + } ], + "IAO_0000117" : [ { + "identifier" : "IAO_0000117", + "language" : "en", + "value" : "Alan Ruttenberg", + "type" : "label" + } ], + "IAO_0000119" : [ { + "identifier" : "IAO_0000119", + "language" : "en", + "value" : "group:OBI", + "type" : "label" + } ] + }, + "labels" : { + "IRI-based" : "IAO_0000423", + "en" : "to be replaced with external ontology term" + } + }, { + "iri" : "http://purl.obolibrary.org/obo/IAO_0000121", + "baseIri" : "http://purl.obolibrary.org/obo", + "annotations" : { + "IAO_0000111" : [ { + "identifier" : "IAO_0000111", + "language" : "en", + "value" : "organizational term", + "type" : "label" + } ], + "IAO_0000115" : [ { + "identifier" : "IAO_0000115", + "language" : "en", + "value" : "Term created to ease viewing/sort terms for development purpose, and will not be included in a release", + "type" : "label" + } ] + }, + "labels" : { + "IRI-based" : "IAO_0000121", + "en" : "organizational term" + } + }, { + "iri" : "http://purl.obolibrary.org/obo/IAO_0000122", + "baseIri" : "http://purl.obolibrary.org/obo", + "annotations" : { + "IAO_0000111" : [ { + "identifier" : "IAO_0000111", + "language" : "en", + "value" : "ready for release", + "type" : "label" + } ], + "IAO_0000115" : [ { + "identifier" : "IAO_0000115", + "language" : "en", + "value" : "Class has undergone final review, is ready for use, and will be included in the next release. Any class lacking \"ready_for_release\" should be considered likely to change place in hierarchy, have its definition refined, or be obsoleted in the next release. Those classes deemed \"ready_for_release\" will also derived from a chain of ancestor classes that are also \"ready_for_release.\"", + "type" : "label" + } ] + }, + "labels" : { + "IRI-based" : "IAO_0000122", + "en" : "ready for release" + } + }, { + "iri" : "http://purl.obolibrary.org/obo/IAO_0000002", + "baseIri" : "http://purl.obolibrary.org/obo", + "annotations" : { + "IAO_0000111" : [ { + "identifier" : "IAO_0000111", + "language" : "en", + "value" : "example to be eventually removed", + "type" : "label" + } ] + }, + "labels" : { + "IRI-based" : "IAO_0000002", + "en" : "example to be eventually removed" + } + }, { + "iri" : "http://purl.obolibrary.org/obo/IAO_0000123", + "baseIri" : "http://purl.obolibrary.org/obo", + "annotations" : { + "IAO_0000111" : [ { + "identifier" : "IAO_0000111", + "language" : "en", + "value" : "metadata incomplete", + "type" : "label" + } ], + "IAO_0000115" : [ { + "identifier" : "IAO_0000115", + "language" : "en", + "value" : "Class is being worked on; however, the metadata (including definition) are not complete or sufficiently clear to the branch editors.", + "type" : "label" + } ] + }, + "labels" : { + "IRI-based" : "IAO_0000123", + "en" : "metadata incomplete" + } + }, { + "iri" : "http://purl.obolibrary.org/obo/IAO_0000124", + "baseIri" : "http://purl.obolibrary.org/obo", + "annotations" : { + "IAO_0000111" : [ { + "identifier" : "IAO_0000111", + "language" : "en", + "value" : "uncurated", + "type" : "label" + } ], + "IAO_0000115" : [ { + "identifier" : "IAO_0000115", + "language" : "en", + "value" : "Nothing done yet beyond assigning a unique class ID and proposing a preferred term.", + "type" : "label" + } ] + }, + "labels" : { + "IRI-based" : "IAO_0000124", + "en" : "uncurated" + } + }, { + "iri" : "http://purl.obolibrary.org/obo/IAO_0000120", + "baseIri" : "http://purl.obolibrary.org/obo", + "annotations" : { + "IAO_0000111" : [ { + "identifier" : "IAO_0000111", + "language" : "en", + "value" : "metadata complete", + "type" : "label" + } ], + "IAO_0000115" : [ { + "identifier" : "IAO_0000115", + "language" : "en", + "value" : "Class has all its metadata, but is either not guaranteed to be in its final location in the asserted IS_A hierarchy or refers to another class that is not complete.", + "type" : "label" + } ] + }, + "labels" : { + "IRI-based" : "IAO_0000120", + "en" : "metadata complete" + } + }, { + "iri" : "http://purl.obolibrary.org/obo/IAO_0000428", + "baseIri" : "http://purl.obolibrary.org/obo", + "annotations" : { + "IAO_0000115" : [ { + "identifier" : "IAO_0000115", + "language" : "en", + "value" : "A term that is metadata complete, has been reviewed, and problems have been identified that require discussion before release. Such a term requires editor note(s) to identify the outstanding issues.", + "type" : "label" + } ] + }, + "labels" : { + "IRI-based" : "IAO_0000428", + "en" : "requires discussion" + } + } ], + "attributes" : [ "external" ], + "id" : "633" + }, { + "iri" : "https://w3id.org/pmd/co/EngineeredMaterial", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A material that is synthesized within a manufacturing process.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Ein Material, das im Rahmen eines Herstellungsprozesses synthetisiert wird.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "EngineeredMaterial", + "en" : "Engineered Material" + }, + "subClasses" : [ "82", "87", "4" ], + "attributes" : [ "external" ], + "id" : "5", + "superClasses" : [ "129" ] + }, { + "iri" : "http://www.w3.org/ns/prov#InstantaneousEvent", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The PROV data model is implicitly based on a notion of instantaneous events (or just events), that mark transitions in the world. Events include generation, usage, or invalidation of entities, as well as starting or ending of activities. This notion of event is not first-class in the data model, but it is useful for explaining its other concepts and its semantics.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "constraints" : [ { + "identifier" : "constraints", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-constraints-20130430/#dfn-event", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "InstantaneousEvent", + "undefined" : "InstantaneousEvent" + }, + "subClasses" : [ "17", "22", "27", "31", "35" ], + "comment" : { + "en" : "An instantaneous event, or event for short, happens in the world and marks a change in the world, in its activities and in its entities. The term 'event' is commonly used in process algebra with a similar meaning. Events represent communications or interactions; they are assumed to be atomic and instantaneous." + }, + "attributes" : [ "external" ], + "id" : "18" + }, { + "iri" : "https://w3id.org/pmd/co/ThermalInsulation", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "https://en.wikipedia.org/wiki/Thermal_insulation", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Thermal insulation is the reduction of heat transfer (i.e., the transfer of thermal energy between objects of differing temperature) between objects in thermal contact or in range of radiative influence. Thermal insulation can be achieved with specially engineered methods or processes, as well as with suitable object shapes and materials.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Thermische Isolierung", + "IRI-based" : "ThermalInsulation", + "en" : "Thermal Insulation" + }, + "attributes" : [ "external" ], + "id" : "218", + "superClasses" : [ "214" ] + }, { + "iri" : "https://w3id.org/pmd/co/ErrorReportDocument", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Entität beschreibt ein Dokument, das Informationen über Fehler bereitstellt, die während der Anwendung eines Prozessknotens aufgetreten sind, wie z. B. eine Überschreitung des Arbeitsbereichs eines Messgeräts.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This entity describes a document used to provide information on errors that occurred during the application of a process node, such as, e.g., an overshooting exceeding the working range of a measurement device.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Fehlerberichtdokument", + "IRI-based" : "ErrorReportDocument", + "en" : "Error Report Document" + }, + "attributes" : [ "external" ], + "id" : "635", + "superClasses" : [ "42" ] + }, { + "iri" : "http://qudt.org/schema/qudt/Unit", + "baseIri" : "http://qudt.org/schema/qudt", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://qudt.org/schema/qudt", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "Unit" + }, + "individuals" : [ { + "iri" : "https://w3id.org/pmd/co/PixelUnit", + "baseIri" : "https://w3id.org/pmd/co", + "annotations" : { + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Pixel” Wikipedia The Free Encyclopedia, https://en.wikipedia.org/wiki/Pixel. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "In digital imaging, a pixel (abbreviated px), pel, or picture element is the smallest addressable element in a raster image, or the smallest point in an all points addressable display device. In most digital display devices, pixels are the smallest element that can be manipulated through software. Here it is referred to as a unit of counted pixels. (It is not an officially recognized unit).", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "In der digitalen Bildgebung ist ein Pixel (abgekürzt px), ein Pel oder ein Bildelement das kleinste adressierbare Element in einem Rasterbild oder der kleinste Punkt in einem alle Punkte adressierbaren Anzeigegerät. Bei den meisten digitalen Anzeigegeräten sind Pixel das kleinste Element, das durch Software manipuliert werden kann.\nHier wird es als eine Einheit von gezählten Pixeln bezeichnet. (Es handelt sich nicht um eine offiziell anerkannte Einheit.)", + "type" : "label" + } ] + }, + "labels" : { + "de" : "Pixeleinheit", + "IRI-based" : "PixelUnit", + "en" : "Pixel Unit" + } + }, { + "iri" : "https://w3id.org/pmd/co/PixelPerNanometerUnit", + "baseIri" : "https://w3id.org/pmd/co", + "annotations" : { + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Einheit der gezählten Pixel pro Nanometer. (Es handelt sich nicht um eine offizielle Einheit.)", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Unit of counted pixels per nanometer. (It is not an official unit.)", + "type" : "label" + } ] + }, + "labels" : { + "de" : "Pixel pro Nanometer", + "IRI-based" : "PixelPerNanometerUnit", + "en" : "Pixel Per Nanometer" + } + } ], + "attributes" : [ "external" ], + "id" : "636" + }, { + "iri" : "https://w3id.org/pmd/tto/CrossheadSeparation", + "baseIri" : "https://w3id.org/pmd/tto", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/tto", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Dimensional analysis: L\nUnit (e.g. SI): mm", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This property describes the displacement of the crossheads of a tensile testing machine.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Eigenschaft beschreibt die Verschiebung der Traverse einer Zugprüfmaschine.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Querhaupttrennung", + "IRI-based" : "CrossheadSeparation", + "en" : "Crosshead Separation" + }, + "attributes" : [ "external" ], + "id" : "372", + "superClasses" : [ "11" ] + }, { + "iri" : "http://www.w3.org/ns/prov#ActivityInfluence", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "editorsDefinition" : [ { + "identifier" : "editorsDefinition", + "language" : "en", + "value" : "ActivitiyInfluence is the capacity of an activity to have an effect on the character, development, or behavior of another by means of generation, invalidation, communication, or other.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "seeAlso" : [ { + "identifier" : "seeAlso", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#activity", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "ActivityInfluence", + "undefined" : "ActivityInfluence" + }, + "subClasses" : [ "39", "22", "27" ], + "comment" : { + "en" : "ActivityInfluence provides additional descriptions of an Activity's binary influence upon any other kind of resource. Instances of ActivityInfluence use the prov:activity property to cite the influencing Activity." + }, + "attributes" : [ "external" ], + "id" : "40", + "superClasses" : [ "7" ] + }, { + "iri" : "https://w3id.org/pmd/co/AmorphousStructure", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Amorphous solid - Structure.” Wikipedia The Free Encyclopedia, https://en.wikipedia.org/wiki/Amorphous_solid. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Amorphe Materialien haben eine innere Struktur, die aus miteinander verbundenen Strukturblöcken besteht, die den grundlegenden Struktureinheiten in der entsprechenden kristallinen Phase der gleichen Verbindung ähnlich sein können. Anders als bei kristallinen Materialien besteht jedoch keine langfristige Ordnung. Amorphe Materialien können daher nicht durch eine bestimmte Einheitszelle definiert werden. ", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Amorphous materials have an internal structure consisting of interconnected structural blocks that can be similar to the basic structural units found in the corresponding crystalline phase of the same compound. Unlike in crystalline materials, however, no long-range order exists. Amorphous materials therefore cannot be defined by a finite unit cell. ", + "type" : "label" + } ] + }, + "label" : { + "de" : "Amorphe Struktur", + "IRI-based" : "AmorphousStructure", + "en" : "Amorphous Structure" + }, + "attributes" : [ "external" ], + "id" : "113", + "superClasses" : [ "98" ] + }, { + "iri" : "https://w3id.org/pmd/co/PercentageExtension", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "in Prozent angegebene Verlängerung der Extensometer-Messlänge\n\nAnmerkung: Die Extensometer-Dehnung wird oftmals auch als technische Dehnung bezeichnet.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "extension expressed as a percentage of the extensometer gauge length\n\nNote: The percentage extension is commonly called engineering strain.", + "type" : "label" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "en", + "value" : "(engineering) strain", + "type" : "label" + }, { + "identifier" : "altLabel", + "language" : "de", + "value" : "technische Dehnung", + "type" : "label" + } ] + }, + "label" : { + "de" : "Extensometer-Dehnung", + "IRI-based" : "PercentageExtension", + "en" : "Percentage Extension" + }, + "attributes" : [ "external" ], + "id" : "502", + "superClasses" : [ "330" ] + }, { + "iri" : "https://w3id.org/pmd/co/Radiological", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Radiological.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/radiological. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Radiologisch bezieht sich auf die Radiologie. Hier speziell auf die radiologischen Eigenschaften eines Materials.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Radiological is relating to radiology. Here specifically to the radiological properties of a material.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Radiologisch", + "IRI-based" : "Radiological", + "en" : "Radiological" + }, + "attributes" : [ "external" ], + "id" : "265", + "superClasses" : [ "110" ] + }, { + "iri" : "https://w3id.org/pmd/co/Medium", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Substance that surrounds an object inside the system boundaries of a processing node.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Medium", + "IRI-based" : "Medium", + "en" : "Medium" + }, + "attributes" : [ "external" ], + "id" : "525", + "superClasses" : [ "129" ] + }, { + "iri" : "https://w3id.org/pmd/co/Identifier", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A named value intended to distinguish between entities.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Identifikator", + "IRI-based" : "Identifier", + "en" : "Identifier" + }, + "subClasses" : [ "99", "309", "423", "426", "432", "436", "439", "442" ], + "attributes" : [ "external" ], + "id" : "100", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/Specimen", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "undefined", + "value" : "An object designed for a specific analysis.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Prüfling", + "IRI-based" : "Specimen", + "en" : "Specimen" + }, + "attributes" : [ "external" ], + "id" : "367", + "superClasses" : [ "82" ] + }, { + "iri" : "https://w3id.org/pmd/co/MaterialQuality", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "i.e. Materialgüte", + "type" : "label" + } ] + }, + "label" : { + "de" : "Materialqualität", + "IRI-based" : "MaterialQuality", + "en" : "Material Quality" + }, + "attributes" : [ "external" ], + "id" : "444", + "superClasses" : [ "263" ] + }, { + "iri" : "https://w3id.org/pmd/co/Micropscope", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Microscope.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/microscope. Accessed 5 Dec. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An optical instrument consisting of a lens or combination of lenses for making enlarged images of minute objects.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Mikroskop", + "IRI-based" : "Micropscope", + "en" : "Microscope" + }, + "subClasses" : [ "71" ], + "attributes" : [ "external" ], + "id" : "72", + "superClasses" : [ "108" ] + }, { + "iri" : "https://w3id.org/pmd/tto/ThicknessAfterFracture", + "baseIri" : "https://w3id.org/pmd/tto", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/tto", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This entity describes the measured dimension in one direction of a test piece, as measured after the test.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Entität beschreibt die gemessene Dimension in einer Richtung eines Prüfstücks, wie sie vor der Prüfung gemessen wurde.", + "type" : "label" + } ] + }, + "label" : { + "de" : "End-Dicke", + "IRI-based" : "ThicknessAfterFracture", + "en" : "Thickness After Fracture" + }, + "attributes" : [ "external" ], + "id" : "312", + "superClasses" : [ "310" ] + }, { + "iri" : "https://w3id.org/pmd/co/LaboratoryRole", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "A role indicating that an organization participates in a process as laboratory.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "LaboratoryRole", + "en" : "Laboratory Role" + }, + "attributes" : [ "external" ], + "id" : "196", + "superClasses" : [ "175" ] + }, { + "iri" : "https://w3id.org/pmd/co/MeasuringDevice", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "undefined", + "value" : "A processing node capable of determining a specific quality.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Messgerät", + "IRI-based" : "MeasuringDevice", + "en" : "Measuring Device" + }, + "subClasses" : [ "246", "412", "314", "420", "328", "163" ], + "attributes" : [ "external" ], + "id" : "243", + "superClasses" : [ "108" ] + }, { + "iri" : "https://w3id.org/pmd/tto/PercentageElongationAfterFracture", + "baseIri" : "https://w3id.org/pmd/tto", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/tto", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "permanent elongation of the gauge length after fracture (L_u − L_o), expressed as a percentage of the original gauge length", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "bleibende Verlängerung der Messlänge nach dem Bruch (L_u − L_o), angegeben in Prozent, bezogen auf die Anfangsmesslänge", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Symbol: A", + "type" : "label" + } ] + }, + "label" : { + "de" : "Bruchdehnung", + "IRI-based" : "PercentageElongationAfterFracture", + "en" : "Percentage Elongation After Fracture" + }, + "attributes" : [ "external" ], + "id" : "258", + "superClasses" : [ "254" ] + }, { + "iri" : "https://w3id.org/pmd/co/Filter", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "https://en.wikipedia.org/wiki/Filter_%28software%29", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A filter is a computer program or subroutine to process a stream, producing another stream. While a single filter can be used individually, they are frequently strung together to form a pipeline.", + "type" : "label" + } ], + "example" : [ { + "identifier" : "example", + "language" : "en", + "value" : "Smoothing algorithm", + "type" : "label" + } ] + }, + "label" : { + "de" : "Filter", + "IRI-based" : "Filter", + "en" : "Filter" + }, + "attributes" : [ "external" ], + "id" : "577", + "superClasses" : [ "336" ] + }, { + "iri" : "http://www.w3.org/ns/prov#EmptyCollection", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "collections", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An empty collection is a collection without members.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "EmptyCollection", + "en" : "EmptyCollection" + }, + "attributes" : [ "external" ], + "id" : "249", + "superClasses" : [ "132" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Agent", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-agent", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An agent is something that bears some form of responsibility for an activity taking place, for the existence of an entity, or for another agent's activity. ", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "starting-point", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-Agent", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Agent", + "undefined" : "Agent" + }, + "subClasses" : [ "88", "108", "95", "363" ], + "attributes" : [ "external" ], + "id" : "51" + }, { + "iri" : "https://w3id.org/pmd/co/Sample", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "ISO 18589-1:2019-11 (international standardization committee: ISO/TC 85/SC 2/WG 17)", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Portion of material, usually selected from a larger quantity of material, collected and taken away for testing", + "type" : "label" + } ] + }, + "label" : { + "de" : "Probe", + "IRI-based" : "Sample", + "en" : "Sample" + }, + "subClasses" : [ "367", "374" ], + "attributes" : [ "external" ], + "id" : "82", + "superClasses" : [ "5" ] + }, { + "iri" : "https://w3id.org/pmd/co/Location", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Location.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/location. Accessed 17 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Eine Position oder ein Ort, der besetzt ist oder besetzt werden kann oder durch ein bestimmtes Merkmal gekennzeichnet ist.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A position or site occupied or available for occupancy or marked by some distinguishing feature.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Ort", + "IRI-based" : "Location", + "en" : "Location" + }, + "attributes" : [ "external" ], + "id" : "492", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/tto/YieldStrength", + "baseIri" : "https://w3id.org/pmd/tto", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/tto", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Wenn der metallische Werkstoff diese Eigenschaft aufweist: die Spannung zu einem bestimmten Zeitpunkt während des Versuchs bei dem eine plastische Verformung ohne Zunahme der Kraft auftritt", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "when the metallic material exhibits a yield phenomenon, stress corresponding to the point reached during the test at which plastic deformation occurs without any increase in the force", + "type" : "label" + } ] + }, + "label" : { + "de" : "Streckgrenze", + "IRI-based" : "YieldStrength", + "en" : "Yield Strength" + }, + "subClasses" : [ "377", "382" ], + "attributes" : [ "external" ], + "id" : "378", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/TestingRate", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "während des Versuchs verwendete Geschwindigkeit(en)", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "rate (resp. rates) used during the test", + "type" : "label" + } ] + }, + "label" : { + "de" : "Prüfgeschwindigkeit", + "IRI-based" : "TestingRate", + "en" : "Testing Rate" + }, + "subClasses" : [ "385", "351", "222", "356" ], + "attributes" : [ "external" ], + "id" : "223", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/tto/ProofStrengthTotalExtension", + "baseIri" : "https://w3id.org/pmd/tto", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/tto", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Symbol: R_t", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Spannung, bei der die gesamte Extensometer-Dehnung (elastische und plastische Extensometer-Dehnung) einem vorgegebenen Prozentanteil der Extensometer-Messlänge entspricht\n\nAnmerkung: Der Index wird durch den Zahlenwert ergänzt, der den vorgegebenen Zahlenwert der gesamten Extensometer-Dehnung in Prozent angibt, z. B. R_t_0,5.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "stress at which total extension (elastic extension plus plastic extension) is equal to a specified percentage of the extensometer gauge length\n\nNote: A suffix is added to the subscript to indicate the prescribed percentage, e.g. R_t_0.5.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Dehngrenze bei gesamter Extensometer-Dehnung", + "IRI-based" : "ProofStrengthTotalExtension", + "en" : "Proof Strength Total Extension" + }, + "attributes" : [ "external" ], + "id" : "370", + "superClasses" : [ "368" ] + }, { + "iri" : "https://w3id.org/pmd/co/Temperature", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Temperature.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/temperature. Accessed 25 Nov. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The degree of hotness or coldness measured on a definite scale.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Temperatur", + "IRI-based" : "Temperature", + "en" : "Temperature" + }, + "subClasses" : [ "359", "189" ], + "attributes" : [ "external" ], + "id" : "190", + "superClasses" : [ "11" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Location", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-attribute-location", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A location can be an identifiable geographic place (ISO 19112), but it can also be a non-geographic place such as a directory, row, or column. As such, there are numerous ways in which location can be expressed, such as by a coordinate, address, landmark, and so forth.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-attribute", + "type" : "label" + } ], + "seeAlso" : [ { + "identifier" : "seeAlso", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#atLocation", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "Location", + "undefined" : "Location" + }, + "attributes" : [ "external" ], + "id" : "75" + }, { + "iri" : "https://w3id.org/pmd/co/Operator", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Operator.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/operator. Accessed 24 Nov. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A person that operates a machine or device.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Operator", + "IRI-based" : "Operator", + "en" : "Operator" + }, + "intersection" : [ "88" ], + "attributes" : [ "intersection", "external" ], + "id" : "647" + }, { + "iri" : "https://w3id.org/pmd/co/Force", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Force.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/force. Accessed 5 Dec. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Strength or energy exerted or brought to bear : cause of motion or change : active power.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Kraft", + "IRI-based" : "Force", + "en" : "Force" + }, + "subClasses" : [ "321" ], + "attributes" : [ "external" ], + "id" : "322", + "superClasses" : [ "11" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Derivation", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasDerivedFrom", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-Derivation", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A derivation is a transformation of an entity into another, an update of an entity resulting in a new one, or the construction of a new entity based on a pre-existing entity.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "constraints" : [ { + "identifier" : "constraints", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-constraints-20130430/#prov-dm-constraints-fig", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#Derivation-Relation", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Derivation", + "undefined" : "Derivation" + }, + "subClasses" : [ "325", "334", "339" ], + "comment" : { + "en" : "The more specific forms of prov:Derivation (i.e., prov:Revision, prov:Quotation, prov:PrimarySource) should be asserted if they apply." + }, + "attributes" : [ "external" ], + "id" : "326", + "superClasses" : [ "37" ] + }, { + "iri" : "https://w3id.org/pmd/co/Department", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A sub section of an organization.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Abteilung", + "IRI-based" : "Department", + "en" : "Department" + }, + "intersection" : [ "95" ], + "attributes" : [ "intersection", "external" ], + "id" : "168", + "superClasses" : [ "95" ] + }, { + "iri" : "https://w3id.org/pmd/co/Project", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A series of goal-orientated (intent) activities and interactions to achieve a specific outcome.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Eine Reihe von zielorientierten (absichtlichen) Aktivitäten und Interaktionen, um ein bestimmtes Ergebnis zu erzielen.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Projekt", + "IRI-based" : "Project", + "en" : "Project" + }, + "attributes" : [ "external" ], + "id" : "66", + "superClasses" : [ "104" ] + }, { + "iri" : "https://w3id.org/pmd/co/MetallicBond", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "\"Metallic bond.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/metallic%20bond. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Metallic bond is the chemical bond typical of the metallic state and characterized by mobile valence electrons that hold the atoms together usually in crystal lattices and are responsible for the good electrical and heat conductivity of metals.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Metallische Bindung ist die für den metallischen Zustand typische chemische Bindung, die durch bewegliche Valenzelektronen gekennzeichnet ist, die die Atome in der Regel in Kristallgittern zusammenhalten und für die gute elektrische und Wärmeleitfähigkeit von Metallen verantwortlich sind.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Metallbindung", + "IRI-based" : "MetallicBond", + "en" : "Metallic Bond" + }, + "attributes" : [ "external" ], + "id" : "300", + "superClasses" : [ "146" ] + }, { + "iri" : "https://w3id.org/pmd/co/MicrometerGauge", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "https://www.merriam-webster.com/dictionary/micrometer%20caliper", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This entity describes a tool for making precise measurements having a spindle moved by a finely threaded screw.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Entität beschreibt ein Werkzeug zur Durchführung präziser Messungen mit einer Spindel, die durch eine Feingewindeschraube bewegt wird.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Bügelmessschraube", + "IRI-based" : "MicrometerGauge", + "en" : "Micrometer Gauge" + }, + "attributes" : [ "external" ], + "id" : "420", + "superClasses" : [ "243" ] + }, { + "iri" : "https://w3id.org/pmd/co/TestPieceInfo", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Eigenschaft wird verwendet, um Informationen über einen Prüfkörper zu liefern, wie z. B. seine geometrische Form, seine Klassifizierung und andere Parameter, einschließlich von Spezifikationen und Nennwerte. Die Informationen werden in Bezug auf die entsprechenden Normen bereitgestellt.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This property is used to provide information on a test piece such as its geometric shape, classification, and other parameters, including specifications and nominal values. The information is provided with respect to corresponding standards.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Prüfkörperinformationen", + "IRI-based" : "TestPieceInfo", + "en" : "Test Piece Info" + }, + "subClasses" : [ "343", "348", "292" ], + "attributes" : [ "external" ], + "id" : "293", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/BondingType", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "\"Bond types.” American Heritage® Dictionary of the English Language, Fifth Edition, https://www.thefreedictionary.com/Bond+Types. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Any of several forces, especially the ionic bond, covalent bond, and metallic bond, by which atoms or ions are bound in a molecule or crystal.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Eine von mehreren Bindungen, insbesondere die Ionenbindung, die kovalente Bindung und die Metallbindung, durch die Atome oder Ionen in einem Molekül oder Kristall gebunden sind.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Bindungstyp", + "IRI-based" : "BondingType", + "en" : "BondingType" + }, + "subClasses" : [ "297", "300", "145", "632", "648" ], + "attributes" : [ "external" ], + "id" : "146", + "superClasses" : [ "263" ] + }, { + "iri" : "https://w3id.org/pmd/co/InitiatorRole", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A role indicating that its bearer has inititated a process.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Initiator Role", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "InitiatorRole" + }, + "attributes" : [ "external" ], + "id" : "180", + "superClasses" : [ "175" ] + }, { + "iri" : "https://w3id.org/pmd/co/Roughness", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "https://en.wikipedia.org/wiki/Surface_roughness", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Die Oberflächenrauheit, oft abgekürzt als Rauheit, ist eine Komponente zur Beschreibung der Oberflächenbeschaffenheit (Oberflächentextur). Sie wird durch die Abweichungen in der Richtung des Normalenvektors einer realen Oberfläche von ihrer idealen Form quantifiziert. Sind diese Abweichungen groß, ist die Oberfläche rau (große Rauheit), sind sie klein, ist die Oberfläche glatt (geringe Rauheit).", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Surface roughness, often shortened to roughness, is a component of surface finish (surface texture). It is quantified by the deviations in the direction of the normal vector of a real surface from its ideal form. If these deviations are large, the surface is rough; if they are small, the surface is smooth.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Oberflächenrauheit", + "IRI-based" : "Roughness", + "en" : "Roughness" + }, + "attributes" : [ "external" ], + "id" : "361", + "superClasses" : [ "11" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Start", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasStartedBy", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-Start", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Start is when an activity is deemed to have been started by an entity, known as trigger. The activity did not exist before its start. Any usage, generation, or invalidation involving an activity follows the activity's start. A start may refer to a trigger entity that set off the activity, or to an activity, known as starter, that generated the trigger.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "constraints" : [ { + "identifier" : "constraints", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-constraints-20130430/#prov-dm-constraints-fig", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-Start", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Start", + "undefined" : "Start" + }, + "comment" : { + "en" : "An instance of prov:Start provides additional descriptions about the binary prov:wasStartedBy relation from some started prov:Activity to an prov:Entity that started it. For example, :foot_race prov:wasStartedBy :bang; prov:qualifiedStart [ a prov:Start; prov:entity :bang; :foo :bar; prov:atTime '2012-03-09T08:05:08-05:00'^^xsd:dateTime ] ." + }, + "attributes" : [ "external" ], + "id" : "35", + "superClasses" : [ "37", "18" ] + }, { + "iri" : "https://w3id.org/pmd/tto/SlopeOfTheElasticPart", + "baseIri" : "https://w3id.org/pmd/tto", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/tto", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Eigenschaft beschreibt den Wert der Steigung des ersten linear ansteigenden Teils (\"elastischer Teil\") in der bei einem Zugversuch erhaltenen Spannungs-Dehnungs-Kurve. Im elastischen Teil der Spannungs-Dehnungs-Kurve muss der Wert der Steigung nicht unbedingt dem Elastizitätsmodul entsprechen. Dieser Wert kann mit dem Wert des Elastizitätsmoduls (nur) sehr gut übereinstimmen, wenn optimale Bedingungen herrschten.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This property describes the value of the slope of the first linear increasing part (‘elastic part’) in the stress-percentage extension curve obtained during a tensile test. In the elastic part of the stress‐percentage extension curve, the value of the slope may not necessarily represent the modulus of elasticity. This value may closely agree with the value of the modulus of elasticity if optimal conditions were used.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Steigung des elastischen Bereichs", + "IRI-based" : "SlopeOfTheElasticPart", + "en" : "Slope Of The Elastic Part" + }, + "attributes" : [ "external" ], + "id" : "332", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/MediaMovement", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Displacement of media surrounding objects inside the system boundaries of a processing node.", + "type" : "label" + } ], + "example" : [ { + "identifier" : "example", + "language" : "en", + "value" : "Circulation of a gaseous media within the systems boundaries.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Medienbewegung", + "IRI-based" : "MediaMovement", + "en" : "Media Movement" + }, + "attributes" : [ "external" ], + "id" : "216", + "superClasses" : [ "214" ] + }, { + "iri" : "https://w3id.org/pmd/co/Document", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Document.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/document. Accessed 16 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An original or official paper relied on as the basis, proof, or support of something", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Ein Original oder offizielles Papier, auf das man sich als Grundlage, Beweis oder Unterstützung von etwas stützt.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Dokument", + "IRI-based" : "Document", + "en" : "Document" + }, + "subClasses" : [ "652", "597", "41", "635", "166" ], + "attributes" : [ "external" ], + "id" : "42", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/TestingMachine", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Entität beschreibt einen Prozessknoten, der für die Durchführung eines bestimmten Tests verwendet wird. Eine Prüfmaschine kann technisch komplex sein und aus mehreren Teilen bestehen.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This entity describes a processing node that is used to perform a defined test. A testing machine may be technically complex and contain several parts.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Prüfmaschine", + "IRI-based" : "TestingMachine", + "en" : "Testing Machine" + }, + "subClasses" : [ "499" ], + "attributes" : [ "external" ], + "id" : "239", + "superClasses" : [ "108" ] + }, { + "iri" : "https://w3id.org/pmd/tto/ProofStrengthPlasticExtension", + "baseIri" : "https://w3id.org/pmd/tto", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/tto", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Symbol: R_p", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "stress at which the plastic extension is equal to a specified percentage of the extensometer gauge length\n\nNote: A suffix is added to the subscript to indicate the prescribed percentage, e.g. R_p_0.2.\n\nSource: ISO 6892-1:2019", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Spannung, bei der die plastische Extensometer-Dehnung einem vorgegebenen Prozentanteil der Extensometer-Messlänge entspricht\n\nAnmerkung: Der Index wird durch den Zahlenwert ergänzt, der den vorgegebenen Zahlenwert der plastischen Extensometer-Dehnung in Prozent angibt, z. B. R_p_0,2.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Dehngrenze bei plastischer Extensometer-Dehnung", + "IRI-based" : "ProofStrengthPlasticExtension", + "en" : "Proof Strength Plastic Extension" + }, + "subClasses" : [ "583", "585" ], + "attributes" : [ "external" ], + "id" : "369", + "superClasses" : [ "368" ] + }, { + "iri" : "https://w3id.org/pmd/tto/TypeGaugeLengthMarks", + "baseIri" : "https://w3id.org/pmd/tto", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/tto", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This property is used to describe the visible markers usually attached to test pieces during a tensile test for elongation / extension measurements.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Eigenschaft wird verwendet, um die sichtbaren Markierungen zu beschreiben, die in der Regel während eines Zugversuchs zur Messung der Dehnung an den Prüfkörpern angebracht werden.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Typ Der Messlängenmarkierungen", + "IRI-based" : "TypeGaugeLengthMarks", + "en" : "Type Gauge Length Marks" + }, + "attributes" : [ "external" ], + "id" : "343", + "superClasses" : [ "293" ] + }, { + "iri" : "https://w3id.org/pmd/co/Diameter", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Diameter.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/diameter. Accessed 5 Dec. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The length of a straight line through the center of an object or space.", + "type" : "label" + } ], + "constraints" : [ { + "identifier" : "constraints", + "language" : "undefined", + "value" : "TesileTest", + "type" : "label" + } ] + }, + "label" : { + "de" : "Durchmesser", + "IRI-based" : "Diameter", + "en" : "Diameter" + }, + "subClasses" : [ "521", "600", "601", "468", "629" ], + "attributes" : [ "external" ], + "id" : "302", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/tto/UpperYieldStrength", + "baseIri" : "https://w3id.org/pmd/tto", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/tto", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Symbol: R_eH", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "maximum value of stress prior to the first decrease in force", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "höchste Spannung, bevor der erste Kraftabfall auftritt", + "type" : "label" + } ] + }, + "label" : { + "de" : "Obere Streckgrenze", + "IRI-based" : "UpperYieldStrength", + "en" : "Upper Yield Strength" + }, + "attributes" : [ "external" ], + "id" : "382", + "superClasses" : [ "378" ] + }, { + "iri" : "https://w3id.org/pmd/co/MicroscopyProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Microscopy.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/microscopy. Accessed 24 Nov. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An analysing process in which an investigation is made with a microscope.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Mikroskopie", + "IRI-based" : "MicroscopyProcess", + "en" : "Microscopy Process" + }, + "subClasses" : [ "62", "140" ], + "attributes" : [ "external" ], + "id" : "63", + "superClasses" : [ "149" ] + }, { + "iri" : "https://w3id.org/pmd/co/SequenceNumber", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Strict monotonically increasing integer that indicates the position in an ordered list.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Sequenznummer", + "IRI-based" : "SequenceNumber", + "en" : "Sequence Number" + }, + "attributes" : [ "external" ], + "id" : "442", + "superClasses" : [ "100" ] + }, { + "iri" : "https://w3id.org/pmd/tto/TensileTestNode", + "baseIri" : "https://w3id.org/pmd/tto", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/tto", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Entität beschreibt einen Workflow-Bestandteil, der Werkzeuge und Geräte beinhaltet, die für die Durchführung eines Zugversuchs verwendet werden, z. B. eine Zugprüfmaschine.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This entity describes a workflow constituent that hosts tools and equipment that is used for the performance of a tensile test, e.g., a tensile test machine.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Zugversuchsprozessknoten", + "IRI-based" : "TensileTestNode", + "en" : "Tensile Test Node" + }, + "subClasses" : [ "499" ], + "attributes" : [ "external" ], + "id" : "232", + "superClasses" : [ "108" ] + }, { + "iri" : "https://w3id.org/pmd/co/TransformativeAnalysisProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An analysis process that is transformative.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Transformativer Analyseprozess", + "IRI-based" : "TransformativeAnalysisProcess", + "en" : "Transformative Analysis Process" + }, + "attributes" : [ "external" ], + "id" : "428", + "superClasses" : [ "149" ] + }, { + "iri" : "http://www.w3.org/ns/oa#FragmentSelector", + "baseIri" : "http://www.w3.org/ns/oa", + "instances" : 0, + "annotations" : { + "example" : [ { + "identifier" : "example", + "language" : "undefined", + "value" : "http://www.w3.org/ns/oa#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "FragmentSelector", + "en" : "Fragment Selector" + }, + "attributes" : [ "external" ], + "id" : "656" + }, { + "iri" : "https://w3id.org/pmd/co/CovalentBond", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "\"Covalent bond.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/covalent%20bond. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Covalent bond is a chemical bond formed between atoms by the sharing of electrons.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Eine kovalente Bindung ist eine chemische Verbindung zwischen Atomen, die durch die gemeinsame Nutzung von Elektronen entsteht.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Kovalente Bindung", + "IRI-based" : "CovalentBond", + "en" : "Covalent Bond" + }, + "attributes" : [ "external" ], + "id" : "648", + "superClasses" : [ "146" ] + }, { + "iri" : "https://w3id.org/pmd/co/Magnetic", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Magnetic.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/magnetic. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Magnetisch bezieht sich auf einen Magneten oder auf Magnetismus. Hier speziell auf die magnetischen Eigenschaften eines Materials.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Magnetic is relating relating to a magnet or to magnetism. Here specifically to the magnetic properties of a material.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Magnetisch", + "IRI-based" : "Magnetic", + "en" : "Magnetic" + }, + "attributes" : [ "external" ], + "id" : "270", + "superClasses" : [ "110" ] + }, { + "iri" : "https://w3id.org/pmd/tto/MinimumCrossSectionalAreaAfterFracture", + "baseIri" : "https://w3id.org/pmd/tto", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/tto", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "undefined", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Dieses Konzept beschreibt die kleinste Querschnittsfläche des Zugprüfkörers, die nach dem Bruch infolge der aufgebrachten Zugkraft erhalten wird.\n\nAnmerkung: Sie wird in der Regel senkrecht zur Richtung der aufgebrachten Kraft gemessen und dient zur Berechnung der technischen Spannung während der Prüfung.\n\nAnmerkung: Es wird empfohlen, den Anfangsquerschnitt innerhalb der parallelen Länge mit einer Genauigkeit von ±2 % zu messen. Bei runden Prüfkörpern mit kleinem Durchmesser oder Prüfkörpern mit anderen Querschnittsgeometrien ist es jedoch möglicherweise nicht möglich, den Anfangsquerschnitt innerhalb der parallelen Länge mit einer Genauigkeit von ±2 % zu messen.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This concept describes the smallest cross-sectional area of the tensile test piece observed after it has fractured under the applied tensile force.\n\nNote: It is typically measured perpendicular to the direction of the applied force and is used to calculate engineering stress during the test.\n\nNote: It is recommended to measure the original cross-sectional area of the parallel length to an accuracy of ±2 %. However, measuring the original cross-sectional area of the parallel length with an accuracy of ±2 % on small diameter round test pieces, or test pieces with other cross-sectional geometries, may not be possible.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Kleinster Querschnitt nach dem Bruch", + "IRI-based" : "MinimumCrossSectionalAreaAfterFracture", + "en" : "Minimum cross-sectional area after fracture" + }, + "comment" : { + "undefined" : "Symbol: S_u" + }, + "attributes" : [ "external" ], + "id" : "24", + "superClasses" : [ "25" ] + }, { + "iri" : "https://w3id.org/pmd/co/LengthChangingProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A geometry changing process which changes the length characteristic of an object.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "LengthChangingProcess", + "en" : "Length Changing Process" + }, + "comment" : { + "undefined" : "This class is used as an example of SWRL based reasoning. An instance belongs to the class if there are two embracing processes (previous and next) that determine different values after a length measurement (see SWRL rule)." + }, + "attributes" : [ "external" ], + "id" : "77", + "superClasses" : [ "78" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Attribution", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasAttributedTo", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-attribution", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Attribution is the ascribing of an entity to an agent.\n\nWhen an entity e is attributed to agent ag, entity e was generated by some unspecified activity that in turn was associated to agent ag. Thus, this relation is useful when the activity is not known, or irrelevant.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "constraints" : [ { + "identifier" : "constraints", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-constraints-20130430/#prov-dm-constraints-fig", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-attribution", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Attribution", + "undefined" : "Attribution" + }, + "comment" : { + "en" : "An instance of prov:Attribution provides additional descriptions about the binary prov:wasAttributedTo relation from an prov:Entity to some prov:Agent that had some responsible for it. For example, :cake prov:wasAttributedTo :baker; prov:qualifiedAttribution [ a prov:Attribution; prov:entity :baker; :foo :bar ]." + }, + "attributes" : [ "external" ], + "id" : "513", + "superClasses" : [ "33" ] + }, { + "iri" : "https://w3id.org/pmd/co/WeightedXCoordinate", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Mass center of grey values in one direction", + "type" : "label" + } ] + }, + "label" : { + "de" : "Gewichtete X Koordinate", + "IRI-based" : "WeightedXCoordinate", + "en" : "Weighted X coordinate" + }, + "attributes" : [ "external" ], + "id" : "187", + "superClasses" : [ "188" ] + }, { + "iri" : "https://w3id.org/pmd/co/ManufacturerRole", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A role indicating that its bearer is a manufacturer. The role is realized in a manufacturing process.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "ManufacturerRole", + "en" : "Manufacturer Role" + }, + "attributes" : [ "external" ], + "id" : "185", + "superClasses" : [ "175" ] + }, { + "iri" : "https://w3id.org/pmd/tto/TensileStrength", + "baseIri" : "https://w3id.org/pmd/tto", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/tto", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "stress corresponding to the maximum force", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Spannung, die der Höchstkraft entspricht", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Symbol: R_m", + "type" : "label" + } ] + }, + "label" : { + "de" : "Zugfestigkeit", + "IRI-based" : "TensileStrength", + "en" : "Tensile Strength" + }, + "attributes" : [ "external" ], + "id" : "494", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/Metadata", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Die DataScope Metadaten umfassen Attribute und zusätzliche Daten (Provenienz), die z.B. die Fabrik, das Labor, das Prozesssystem und die Objekte betreffen und die eine Bewertung der Qualität / Zuverlässigkeit der Messungen und eine systematische Suche in einer Datenbank ermöglichen.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This data scope expresses that a :ValueObject refers to attributes and additional data (provenance) on production, laboratory, process system and objects that enable an evaluation of the quality/reliability of the measurements and a systematic search task in a database.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Metadaten", + "IRI-based" : "Metadata", + "en" : "Metadata" + }, + "attributes" : [ "external" ], + "id" : "278", + "superClasses" : [ "125", "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/Shape", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Shape.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/shape. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The visible makeup characteristic (spatial form or contour) of a particular item or kind of item.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Das sichtbare Ausstattungsmerkmal (räumliche Form oder Kontur) eines bestimmten Objektes oder einer Art von Objekt.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Form", + "IRI-based" : "Shape", + "en" : "Shape" + }, + "subClasses" : [ "89", "568", "219", "564" ], + "attributes" : [ "external" ], + "id" : "90", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/GripsAlignment", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An assembly process in which the grips used to grasp a tangible object, such as a sample, specimen or test piece, are arranged in a line. This process is usually part of the assembly process during testing, if applicable.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Klasse beschreibt den Prozess der Ausrichtung von Halterungen, die zum Fest-/Einspannen eines materiellen Objekts, wie z. B. einer Probe, eines Prüfkörpers oder eines Prüfstücks, verwendet werden. Dieser Vorgang ist in der Regel Teil des Montageprozesses während der Prüfung, falls ein solcher durchgeführt wird.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Ausrichtung Der Halterungen", + "IRI-based" : "GripsAlignment", + "en" : "Grips Alignment" + }, + "attributes" : [ "external" ], + "id" : "15", + "superClasses" : [ "2" ] + }, { + "iri" : "https://w3id.org/pmd/tto/TransitionPointTestingRate", + "baseIri" : "https://w3id.org/pmd/tto", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/tto", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Entität beschreibt den Umschaltpunkt der Prüfgeschwindigkeit während eines Analyse- / Testprozesses, z.B. den Punkt bezogen auf die Dehnung oder Spannung, an welchem die Prüfgeschwindigkeit während eines Zugversuchs geändert wird. Typischerweise ist dieser Punkt mit einer Abnahme des Extensometers (Dehnungsaufnehmers) vom Prüfkörper während eines dehnungsgeregelten Zugversuchs verbunden.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This entity describes the the transition point of the testing rate during an analysis / test process, e.g. the point referring to the strain or the stress at which the testing rate is changed during a tensile test. Typically, this transition point is associated with a removal of the extensometer from the test piece during a strain-controlled tensile test.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Umschaltpunkt der Prüfgeschwindigkeit", + "IRI-based" : "TransitionPointTestingRate", + "en" : "Transition Point Testing Rate" + }, + "attributes" : [ "external" ], + "id" : "152", + "superClasses" : [ "153" ] + }, { + "iri" : "https://w3id.org/pmd/co/CreepStress", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Is the strain occuring with time, when a constant force is applied to a physical body.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Kriechspannung", + "IRI-based" : "CreepStress", + "en" : "Creep Stress" + }, + "attributes" : [ "external" ], + "id" : "547", + "superClasses" : [ "481" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Plan", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-Association", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "undefined", + "value" : "A plan is an entity that represents a set of actions or steps intended by one or more agents to achieve some goals.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + }, { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-Association", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Plan", + "undefined" : "Plan" + }, + "comment" : { + "en" : "There exist no prescriptive requirement on the nature of plans, their representation, the actions or steps they consist of, or their intended goals. Since plans may evolve over time, it may become necessary to track their provenance, so plans themselves are entities. Representing the plan explicitly in the provenance can be useful for various tasks: for example, to validate the execution as represented in the provenance record, to manage expectation failures, or to provide explanations." + }, + "attributes" : [ "external" ], + "id" : "136", + "superClasses" : [ "47" ] + }, { + "iri" : "https://w3id.org/pmd/co/ComputingNode", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A computing system that provides an execution environment for, e.g., simulation processes or prediction models.\nA Computing Node can be virtual (e.g., a container or virtual machine) or physical (e.g., a bare-metal servers), uses digital represenations of objects as inputs and produces digital measurements, such as simulation results or predictions, as outputs.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Ein Rechnersystem, das eine Ausführungsumgebung bspw. für Simulationsprozesse oder Vorhersagemodelle bereitstellt.\nEin Rechenknoten kann virtuell (bspw. ein Container oder eine virtuelle Maschine) oder physisch (z. B. ein Bare-Metal-Server) ausgestaltet sein und verwendet in der Regel digitale Repräsentationen von Objekten als Eingaben und erzeugt digitale Messungen, wie z.B. Simulationsergebnisse oder Vorhersagen, als Ausgaben.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Computerknoten", + "IRI-based" : "ComputingNode", + "en" : "Computing Node" + }, + "subClasses" : [ "574" ], + "attributes" : [ "external" ], + "id" : "251", + "superClasses" : [ "108" ] + }, { + "iri" : "https://w3id.org/pmd/co/TemperatureChangeDevice", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Entität beschreibt allgemein jedes Werkzeug, das zur Änderung und Einstellung der Temperatur eines materiellen Objekts oder der Umgebung verwendet wird, z. B. einen Ofen und Kühlmittel.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This entity generically describes any tool that is used for the alteration and adjustment of the temperature of a tangible object or the environment, e.g., a furnace and cooling media.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Temperaturänderungswerkzeug", + "IRI-based" : "TemperatureChangeDevice", + "en" : "Temperature Change Device" + }, + "attributes" : [ "external" ], + "id" : "162", + "superClasses" : [ "163" ] + }, { + "iri" : "https://w3id.org/pmd/co/QualifyingNodeAnnotation", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Description for Processing Node's utility, e.g. \"Rear Vacuum Furnace Oil Quenching\"", + "type" : "label" + } ] + }, + "label" : { + "de" : "Qualifizierende Knotenannotation", + "IRI-based" : "QualifyingNodeAnnotation", + "en" : "Qualifying Node Annotation" + }, + "subClasses" : [ "306" ], + "attributes" : [ "external" ], + "id" : "234", + "superClasses" : [ "235" ] + }, { + "iri" : "https://w3id.org/pmd/co/NotDetected", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Indicates that an chemical element has not been detected in a corresponding experiment.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Nicht nachgewiesen", + "IRI-based" : "NotDetected", + "en" : "Not Detected" + }, + "attributes" : [ "external" ], + "id" : "272", + "superClasses" : [ "228" ] + }, { + "iri" : "https://w3id.org/pmd/co/Algorithm", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Algorithm.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/algorithm. Accessed 24 Nov. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A procedure for solving a mathematical problem (as of finding the greatest common divisor) in a finite number of steps that frequently involves repetition of an operation.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Algorithmus", + "IRI-based" : "Algorithm", + "en" : "Algorithm" + }, + "subClasses" : [ "577", "335" ], + "attributes" : [ "external" ], + "id" : "336", + "superClasses" : [ "283" ] + }, { + "iri" : "http://w3id.org/DMI/DigitalMaterialIdentifier", + "baseIri" : "http://w3id.org/DMI", + "instances" : 0, + "annotations" : { + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A dmi:DigitalMaterialIdentifier is a resource identifier (IRI) that represents the specification of a material (in the sense of a material class) described in a specification document. The specification document can be, e.g., a standard, a datasheet, or any other citable document. Typically, a specification document requires some qualities that a material (in the sense of a portion of matter) has to comply with. Typical requirements include chemical compositions or physical properties.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Digital Material Identifier", + "IRI-based" : "DigitalMaterialIdentifier", + "en" : "Digital Material Identifier" + }, + "attributes" : [ "external" ], + "id" : "674" + }, { + "iri" : "https://w3id.org/pmd/tto/StressRate", + "baseIri" : "https://w3id.org/pmd/tto", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/tto", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Symbol: R", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Zunahme der Spannung je Zeiteinheit\n\nAnmerkung: Die Spannungsgeschwindigkeit wird nur im elastischen Bereich des Versuchs verwendet.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "increase of stress per time\n\nNote: Stress rate is only used in the elastic part of the test.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Spannungsgeschwindigkeit", + "IRI-based" : "StressRate", + "en" : "Stress Rate" + }, + "attributes" : [ "external" ], + "id" : "385", + "superClasses" : [ "223" ] + }, { + "iri" : "https://w3id.org/pmd/co/Radius", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Radius.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/radius. Accessed 5 Dec. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A line segment extending from the center of a circle or sphere to the circumference or bounding surface.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Radius", + "IRI-based" : "Radius", + "en" : "Radius" + }, + "attributes" : [ "external" ], + "id" : "341", + "superClasses" : [ "11" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Association", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasAssociatedWith", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-Association", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An activity association is an assignment of responsibility to an agent for an activity, indicating that the agent had a role in the activity. It further allows for a plan to be specified, which is the plan intended by the agent to achieve some goals in the context of this activity.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-Association", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Association", + "undefined" : "Association" + }, + "comment" : { + "en" : "An instance of prov:Association provides additional descriptions about the binary prov:wasAssociatedWith relation from an prov:Activity to some prov:Agent that had some responsiblity for it. For example, :baking prov:wasAssociatedWith :baker; prov:qualifiedAssociation [ a prov:Association; prov:agent :baker; :foo :bar ]." + }, + "attributes" : [ "external" ], + "id" : "448", + "superClasses" : [ "33" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Generation", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasGeneratedBy", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-Generation", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Generation is the completion of production of a new entity by an activity. This entity did not exist before generation and becomes available for usage after this generation.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "constraints" : [ { + "identifier" : "constraints", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-constraints-20130430/#prov-dm-constraints-fig", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-Generation", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Generation", + "undefined" : "Generation" + }, + "comment" : { + "en" : "An instance of prov:Generation provides additional descriptions about the binary prov:wasGeneratedBy relation from a generated prov:Entity to the prov:Activity that generated it. For example, :cake prov:wasGeneratedBy :baking; prov:qualifiedGeneration [ a prov:Generation; prov:activity :baking; :foo :bar ]." + }, + "attributes" : [ "external" ], + "id" : "22", + "superClasses" : [ "18", "40" ] + }, { + "iri" : "https://w3id.org/pmd/co/Description", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "undefined", + "value" : "A descriptive text qualifying the nature of a thing (e.g. agent, activity, entity, object, ...).", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Ein beschreibender Text, der die Natur / Beschaffenheit / Informationen zu einer Entität qualifiziert (z.B. Aktivitäten, Entitäten, Objekten, ...).", + "type" : "label" + } ] + }, + "label" : { + "de" : "Beschreibung", + "IRI-based" : "Description", + "en" : "Description" + }, + "subClasses" : [ "454" ], + "attributes" : [ "external" ], + "id" : "455", + "superClasses" : [ "11" ] + }, { + "iri" : "http://www.w3.org/ns/prov#AgentInfluence", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "editorsDefinition" : [ { + "identifier" : "editorsDefinition", + "language" : "en", + "value" : "AgentInfluence is the capacity of an agent to have an effect on the character, development, or behavior of another by means of attribution, association, delegation, or other.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "seeAlso" : [ { + "identifier" : "seeAlso", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#agent", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "AgentInfluence", + "undefined" : "AgentInfluence" + }, + "subClasses" : [ "513", "448", "285" ], + "comment" : { + "en" : "It is not recommended that the type AgentInfluence be asserted without also asserting one of its more specific subclasses." + }, + "attributes" : [ "external" ], + "id" : "33", + "superClasses" : [ "7" ] + }, { + "iri" : "http://www.w3.org/ns/prov#EntityInfluence", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "editorsDefinition" : [ { + "identifier" : "editorsDefinition", + "language" : "en", + "value" : "EntityInfluence is the capacity of an entity to have an effect on the character, development, or behavior of another by means of usage, start, end, derivation, or other. ", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "seeAlso" : [ { + "identifier" : "seeAlso", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#entity", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "EntityInfluence", + "undefined" : "EntityInfluence" + }, + "subClasses" : [ "17", "326", "31", "35" ], + "comment" : { + "en" : "EntityInfluence provides additional descriptions of an Entity's binary influence upon any other kind of resource. Instances of EntityInfluence use the prov:entity property to cite the influencing Entity." + }, + "attributes" : [ "external" ], + "id" : "37", + "superClasses" : [ "7" ] + }, { + "iri" : "https://w3id.org/pmd/co/Stress", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "symbol" : [ { + "identifier" : "symbol", + "language" : "en", + "value" : "R", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Units: Pa (SI), psi", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Dimensional Analysis: \nML*-1T*-2", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "At any moment during the test, force divided by the original cross-sectional area, S_o, of the test piece\n\nNote: Here, all references to stress are to engineering stress.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Kraft zu einem beliebigen Zeitpunkt während des Versuchs dividiert durch den Anfangsquerschnitt (S_o) der Probe\n\nAnmerkung: Mit dem Begriff Spannung ist hier die technische Spannung ('Ingenieur-Spannung') gemeint.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Spannung", + "IRI-based" : "Stress", + "en" : "Stress" + }, + "subClasses" : [ "523", "547" ], + "attributes" : [ "external" ], + "id" : "481", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/Blank", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Blank.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/blank. Accessed 25 Nov. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A piece of material prepared to be made into something by a further operation.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Rohling", + "IRI-based" : "Blank", + "en" : "Blank" + }, + "attributes" : [ "external" ], + "id" : "4", + "superClasses" : [ "5" ] + }, { + "iri" : "http://www.w3.org/ns/prov#SoftwareAgent", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-agent", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A software agent is running software.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-types", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "SoftwareAgent", + "undefined" : "SoftwareAgent" + }, + "attributes" : [ "external" ], + "id" : "363", + "superClasses" : [ "51" ] + }, { + "iri" : "https://w3id.org/pmd/co/ProjectIdentifier", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Ein umgangssprachlicher, von Menschen erstellter, beschreibender Text, der die Art eines Projekts qualifiziert.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "A colloquial, human-generated, descriptive text qualifying the nature of a project.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Projektidentifikator", + "IRI-based" : "ProjectIdentifier", + "en" : "Project Identifier" + }, + "intersection" : [ "100" ], + "attributes" : [ "intersection", "external" ], + "id" : "426", + "superClasses" : [ "100" ] + }, { + "iri" : "https://w3id.org/pmd/co/TestPiece", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "EN 10021:2006-12 (European standardization committee: CEN/TC 459/SC 12/WG 4)", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Teil einer Probe mit bestimmten Dimensionen, bearbeitet oder unbearbeitet, der in einen erforderlichen Zustand gebracht wird, um einer bestimmten Prüfung unterzogen zu werden.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Part of a sample with specified dimensions, machined or un-machined, brought to a required condition for submission to a given test.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Prüfkörper", + "IRI-based" : "TestPiece", + "en" : "Test Piece" + }, + "attributes" : [ "external" ], + "id" : "374", + "superClasses" : [ "82" ] + }, { + "iri" : "https://w3id.org/pmd/co/Dataset", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A collection of data published in one or more files. Usually instances of this class are also instances of DCAT dataset (see https://www.w3.org/TR/vocab-dcat-2/).", + "type" : "label" + } ] + }, + "label" : { + "de" : "Datensatz", + "IRI-based" : "Dataset", + "en" : "Dataset" + }, + "attributes" : [ "external" ], + "id" : "202", + "superClasses" : [ "116" ] + }, { + "iri" : "https://w3id.org/pmd/co/NodeInfo", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Descriptive values to specify a processing node.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Knoteninformation", + "IRI-based" : "NodeInfo", + "en" : "Node Info" + }, + "subClasses" : [ "552", "101", "557", "102", "234", "241", "245" ], + "attributes" : [ "external" ], + "id" : "235", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/Optical", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Optical.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/optical. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Optical is relating to the science of optics. Here specifically to the optical properties of a material.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Optisch bezieht sich auf die Wissenschaft der Optik. Hier speziell auf die optischen Eigenschaften eines Materials.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Optisch", + "IRI-based" : "Optical", + "en" : "Optical" + }, + "attributes" : [ "external" ], + "id" : "267", + "superClasses" : [ "110" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Collection", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "collections", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-collection", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A collection is an entity that provides a structure to some constituents, which are themselves entities. These constituents are said to be member of the collections.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Collection", + "undefined" : "Collection" + }, + "subClasses" : [ "249" ], + "attributes" : [ "external" ], + "id" : "132", + "superClasses" : [ "47" ] + }, { + "iri" : "https://w3id.org/pmd/tto/Elongation", + "baseIri" : "https://w3id.org/pmd/tto", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/tto", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Zunahme der Anfangsmesslänge zu einem beliebigen Zeitpunkt während des Versuchs", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "increase in the original gauge length at any moment during the test", + "type" : "label" + } ] + }, + "label" : { + "de" : "Verlängerung", + "IRI-based" : "Elongation", + "en" : "Elongation" + }, + "subClasses" : [ "253", "258", "262" ], + "attributes" : [ "external" ], + "id" : "254", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/InspectionDocument", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Entität beschreibt ein Dokument, das Informationen über die Prüfung eines materiellen Objekts enthält, in der Regel versehen mit einem Prüfungsdatum, einem typischen Prüfungsintervall und dem Zustand des geprüften Objekts. Typischerweise wird ein solches Dokument für Prozessknoten verwendet.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This entity describes a document used to give information on the examination of a tangible object, usually including an examination date, a typical examination interval and the state of the examined object. Typically, this is used for processing nodes.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Inspektionsdokument", + "IRI-based" : "InspectionDocument", + "en" : "Inspection Document" + }, + "attributes" : [ "external" ], + "id" : "652", + "superClasses" : [ "42" ] + }, { + "iri" : "https://w3id.org/pmd/co/VolumeFraction", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This value object describes one of several portions of the property of a body that is a measure of the amount of material it contains and causes it to have volume.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Volumen Anteil", + "IRI-based" : "VolumeFraction", + "en" : "Volume Fraction" + }, + "attributes" : [ "external" ], + "id" : "276", + "superClasses" : [ "228" ] + }, { + "iri" : "https://w3id.org/pmd/tto/OriginalCrossSectionalArea", + "baseIri" : "https://w3id.org/pmd/tto", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/tto", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "undefined", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Dieses Konzept beschreibt die initiale Querschnittsfläche des Zugprüfkörpers entlang seiner parallelen Länge, bevor eine Verformung auftritt.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This concept describes the initial area of the tensile test piece before any deformation occurs.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Anfangsquerschnitt innerhalb der parallelen Länge", + "IRI-based" : "OriginalCrossSectionalArea", + "en" : "Original cross-sectional area of the parallel length" + }, + "comment" : { + "undefined" : "Symbol: S_o" + }, + "attributes" : [ "external" ], + "id" : "29", + "superClasses" : [ "25" ] + }, { + "iri" : "https://w3id.org/pmd/co/Precision", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Precision.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/precision. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The degree of refinement with which an operation is performed or a measurement stated.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Der Grad der Verfeinerung, mit dem eine Operation durchgeführt oder eine Messung angegeben wird.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Genauigkeit", + "IRI-based" : "Precision", + "en" : "Precision" + }, + "attributes" : [ "external" ], + "id" : "495", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/DataScope", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Die Entität Datenkategorie dient der Kategorisierung von Daten im Hinblick auf ihren Verwendungszweck in Übereinstimmung mit einem betrachteten Objekt oder Prozess.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This class is used to categorize data with respect to their intended usage in accordance with a regarded object or process.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Datenkategorie", + "IRI-based" : "DataScope", + "en" : "Data Scope" + }, + "subClasses" : [ "274", "278", "225" ], + "attributes" : [ "external" ], + "id" : "125", + "superClasses" : [ "47" ] + }, { + "iri" : "https://w3id.org/pmd/co/SetPoint", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "de", + "value" : "https://de.wikipedia.org/wiki/Sollwert", + "type" : "label" + }, { + "identifier" : "definitionSource", + "language" : "en", + "value" : "https://en.wikipedia.org/wiki/Setpoint_(control_system)", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Sollwert bezeichnet allgemein den angestrebten Wert eines quantitativen Merkmales eines Systems, von dem der tatsächliche Istwert so wenig wie möglich abweichen soll. Der Sollwert wird von einem anderen System (z. B. Technik, Mensch) vorgegeben.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This value scope expresses that a :ValueObject is the desired or target value for an essential variable, or process value (PV) of a control system.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Die Wertekategorie Sollwert bezeichnet allgemein den gewünschten Wert eines quantitativen Merkmals eines Systems, von dem der Istwert möglichst wenig abweichen soll.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "The ValueScope Setpoint generally refers to the desired value of a quantitative characteristic of a system, from which the actual value should deviate as little as possible.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Sollwert", + "IRI-based" : "SetPoint", + "en" : "Set Point" + }, + "attributes" : [ "external" ], + "id" : "134", + "superClasses" : [ "80" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Delegation", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#actedOnBehalfOf", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-delegation", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Delegation is the assignment of authority and responsibility to an agent (by itself or by another agent) to carry out a specific activity as a delegate or representative, while the agent it acts on behalf of retains some responsibility for the outcome of the delegated work.\n\nFor example, a student acted on behalf of his supervisor, who acted on behalf of the department chair, who acted on behalf of the university; all those agents are responsible in some way for the activity that took place but we do not say explicitly who bears responsibility and to what degree.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-delegation", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Delegation", + "undefined" : "Delegation" + }, + "comment" : { + "en" : "An instance of prov:Delegation provides additional descriptions about the binary prov:actedOnBehalfOf relation from a performing prov:Agent to some prov:Agent for whom it was performed. For example, :mixing prov:wasAssociatedWith :toddler . :toddler prov:actedOnBehalfOf :mother; prov:qualifiedDelegation [ a prov:Delegation; prov:entity :mother; :foo :bar ]." + }, + "attributes" : [ "external" ], + "id" : "285", + "superClasses" : [ "33" ] + }, { + "iri" : "https://w3id.org/pmd/co/NonTransformativeAnalysisProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An analysis process that is non-transformative.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Nicht-transformativer Analyseprozess", + "IRI-based" : "NonTransformativeAnalysisProcess", + "en" : "Non Transformative Analysis Process" + }, + "attributes" : [ "external" ], + "id" : "429", + "superClasses" : [ "149" ] + }, { + "iri" : "https://w3id.org/pmd/co/Perimeter", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Der Durchmesser einer zweidimensionalen Form.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "The perimeter of a two-dimensional shape is defined as the path or boundary that encloses the shape.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Umfang", + "IRI-based" : "Perimeter", + "en" : "Perimeter" + }, + "attributes" : [ "external" ], + "id" : "392", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/Extensometer", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Extensometer.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/extensometer. Accessed 5 Dec. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An instrument for measuring minute deformations of test specimens caused by tension, compression, bending, or twisting.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Extensometer", + "en" : "Extensometer" + }, + "attributes" : [ "external" ], + "id" : "412", + "superClasses" : [ "243" ] + }, { + "iri" : "https://w3id.org/pmd/co/Component", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Ein Objekt, das einer bestimmten technischen Anwendung dient. Bestandteil einer Zusammensetzung von Teilen, die eine technische Anwendung bilden.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "An object that serves a specific technical application. Constituent part of a compound of parts that builds a technical application.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Komponente", + "IRI-based" : "Component", + "en" : "Component" + }, + "subClasses" : [ "230", "177" ], + "attributes" : [ "external" ], + "id" : "178", + "superClasses" : [ "129" ] + }, { + "iri" : "https://w3id.org/pmd/co/Coordinates", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Coordinate.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/coordinate. Accessed 5 Dec. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Any of a set of numbers used in specifying the location of a point on a line, on a surface, or in space.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Koordinaten", + "IRI-based" : "Coordinates", + "en" : "Coordinates" + }, + "subClasses" : [ "182" ], + "attributes" : [ "external" ], + "id" : "183", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/AgingProcess", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A process that applies a method that causes a constituent to precipitate from solid solution.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Das Aging oder Auslagern ist ein Anlassvorgang, der den Martensit (Härtungsgefüge) wieder duktil und verformbar macht. Dabei wird ein Agingvorgang genutzt, nämlich die Bildung von Ausscheidungen in Form von FeXCY - Carbiden", + "type" : "label" + } ], + "example" : [ { + "identifier" : "example", + "language" : "en", + "value" : "The Process of austenitizing and quenching a steel alloy to achieve a martensitic microstructure for hardness increase.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Alterungsprozess", + "IRI-based" : "AgingProcess", + "en" : "Aging Process" + }, + "attributes" : [ "external" ], + "id" : "434", + "superClasses" : [ "65" ] + }, { + "iri" : "https://w3id.org/pmd/co/ChemicalObject", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Value object that describes the quantity (e.g. mass fraction) of a specific chemical object.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Chemisches Objekt", + "IRI-based" : "ChemicalObject", + "en" : "Chemical Object" + }, + "intersection" : [ "11" ], + "attributes" : [ "intersection", "external" ], + "id" : "155", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/tto/LowerYieldStrength", + "baseIri" : "https://w3id.org/pmd/tto", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/tto", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Symbol: R_eL", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "kleinste Spannung während des plastischen Fließens, wobei Einschwingerscheinungen nicht berücksichtigt werden", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "lowest value of stress during plastic yielding, ignoring any initial transient effects", + "type" : "label" + } ] + }, + "label" : { + "de" : "untere Streckgrenze", + "IRI-based" : "LowerYieldStrength", + "en" : "Lower Yield Strength" + }, + "attributes" : [ "external" ], + "id" : "377", + "superClasses" : [ "378" ] + }, { + "iri" : "https://w3id.org/pmd/tto/GeometryShape", + "baseIri" : "https://w3id.org/pmd/tto", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/tto", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Eigenschaft beschreibt die geometrischen Abmessungen und das Erscheinungsbild (Form und Abmaße) einer Probe, eines Prüfkörpers oder eines Prüfstücks, wie sie üblicherweise durch eine entsprechende Norm definiert sind. Dementsprechend ist der angegebene Formwert in Übereinstimmung mit der definierenden Norm anzugeben, z. B. \"Zugprüfstück Form 1 gemäß Anhang B\".", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This property describes the geometric dimensions and appearance (shape and dimensions) of a sample, specimen, or test piece as usually defined by a corresponding standard. Accordingly, the shape value given is in accordance with the defining standard, e.g., ‘tensile test piece shape 1 in accordance with annex B’.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Geometrische Form", + "IRI-based" : "GeometryShape", + "en" : "Geometry Shape" + }, + "attributes" : [ "external" ], + "id" : "292", + "superClasses" : [ "293" ] + }, { + "iri" : "https://w3id.org/pmd/tto/PercentageTotalExtensionAtMaximumForce", + "baseIri" : "https://w3id.org/pmd/tto", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/tto", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "total extension (elastic extension plus plastic extension) at maximum force, expressed as a percentage of the extensometer gauge length", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Symbol: A_gt", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "gesamte Verlängerung (elastische plus plastische Verlängerung) der Extensometer-Messlänge bei Höchstkraft, angegeben in Prozent, bezogen auf die Extensometer-Messlänge", + "type" : "label" + } ] + }, + "label" : { + "de" : "Gesamte Extensometer-Dehnung bei Höchstkraft", + "IRI-based" : "PercentageTotalExtensionAtMaximumForce", + "en" : "Percentage Total Extension At Maximum Force" + }, + "attributes" : [ "external" ], + "id" : "508", + "superClasses" : [ "330" ] + }, { + "iri" : "https://w3id.org/pmd/co/Image", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Image.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/image. Accessed 25 Nov. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A visual representation of something", + "type" : "label" + } ] + }, + "label" : { + "de" : "Bild", + "IRI-based" : "Image", + "en" : "Image" + }, + "attributes" : [ "external" ], + "id" : "194", + "superClasses" : [ "116" ] + }, { + "iri" : "https://w3id.org/pmd/co/EndTime", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The date and time when the plan/recipe is supposed to have been finished", + "type" : "label" + } ] + }, + "label" : { + "de" : "Endzeit", + "IRI-based" : "EndTime", + "en" : "End Time" + }, + "attributes" : [ "external" ], + "id" : "208", + "superClasses" : [ "160" ] + }, { + "iri" : "https://w3id.org/pmd/co/NodeSeries", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Processing Node typename, e.g. \"ProTherm500\"", + "type" : "label" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "en", + "value" : "Node Type", + "type" : "label" + }, { + "identifier" : "altLabel", + "language" : "de", + "value" : "Knotentyp", + "type" : "label" + } ] + }, + "label" : { + "de" : "Serie", + "IRI-based" : "NodeSeries", + "en" : "Node Series" + }, + "attributes" : [ "external" ], + "id" : "557", + "superClasses" : [ "235" ] + }, { + "iri" : "https://w3id.org/pmd/co/Distance", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Distance.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/distance. Accessed 5 Dec. 2022.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Spatial remoteness.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Abstand", + "IRI-based" : "Distance", + "en" : "Distance" + }, + "attributes" : [ "external" ], + "id" : "490", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/tto/PercentagePermanentElongation", + "baseIri" : "https://w3id.org/pmd/tto", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/tto", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "increase in the original gauge length of a test piece after removal of a specified stress, expressed as a percentage of the original gauge length", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Zunahme der Anfangsmesslänge einer Probe nach Entfernen einer festgelegten Zugspannung, angegeben in Prozent, bezogen auf die Anfangsmesslänge", + "type" : "label" + } ] + }, + "label" : { + "de" : "Bleibende Dehnung", + "IRI-based" : "PercentagePermanentElongation", + "en" : "Percentage Permanent Elongation" + }, + "attributes" : [ "external" ], + "id" : "253", + "superClasses" : [ "254" ] + }, { + "iri" : "https://w3id.org/pmd/co/PixelDensity", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The pixel density of an electronic image device.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Pixeldichte", + "IRI-based" : "PixelDensity", + "en" : "Pixel density" + }, + "attributes" : [ "external" ], + "id" : "491", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/XCoordinate", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“X-coordinate.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/x-coordinate. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Die X-Koordinate ist eine Koordinate, deren Wert durch Messung parallel zu einer X-Achse bestimmt wird.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "X-coordinate is a coordinate whose value is determined by measuring parallel to an x-axis.", + "type" : "label" + } ] + }, + "label" : { + "de" : "X Korrdinate", + "IRI-based" : "XCoordinate", + "en" : "X Coordinate" + }, + "subClasses" : [ "187" ], + "attributes" : [ "external" ], + "id" : "188", + "superClasses" : [ "182" ] + }, { + "iri" : "https://w3id.org/pmd/co/ParticleNumber", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "The particle number enables the explicit assignment of measured properties to a specific particle.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Die Partikelnummer ermöglicht die eindeutige Zuordnung der gemessenen Eigenschaften zu einem bestimmten Partikel.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Partikelnummer", + "IRI-based" : "ParticleNumber", + "en" : "Particle Number" + }, + "attributes" : [ "external" ], + "id" : "70", + "superClasses" : [ "69" ] + }, { + "iri" : "https://w3id.org/pmd/co/AgingInterval", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Timespan a Temperature during an Aging Process is hold.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Alterungsintervall", + "IRI-based" : "AgingInterval", + "en" : "Aging Interval" + }, + "attributes" : [ "external" ], + "id" : "260", + "superClasses" : [ "213" ] + }, { + "iri" : "https://w3id.org/pmd/co/CollectionInterfaceHint", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A label in support of identifying a network interface and/or address used by a process node to provide primary data stored in ontologies", + "type" : "label" + } ] + }, + "label" : { + "de" : "Datenschnittstellenhinweis", + "IRI-based" : "CollectionInterfaceHint", + "en" : "Collection Interface Hint" + }, + "attributes" : [ "external" ], + "id" : "552", + "superClasses" : [ "235" ] + }, { + "iri" : "https://w3id.org/pmd/co/LoadCell", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "https://en.wikipedia.org/wiki/Load_cell", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A load cell converts a force such as tension, compression, pressure, or torque into an electrical signal that can be measured and standardized. It is a force transducer. As the force applied to the load cell increases, the electrical signal changes proportionally. The most common types of load cell are pneumatic, hydraulic, and strain gauges.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Kraftmessdose", + "IRI-based" : "LoadCell", + "en" : "Load Cell" + }, + "attributes" : [ "external" ], + "id" : "256", + "superClasses" : [ "108" ] + }, { + "iri" : "http://www.w3.org/ns/prov#Usage", + "baseIri" : "http://www.w3.org/ns/prov", + "instances" : 0, + "annotations" : { + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#used", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-Usage", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Usage is the beginning of utilizing an entity by an activity. Before usage, the activity had not begun to utilize this entity and could not have been affected by the entity.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "constraints" : [ { + "identifier" : "constraints", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-constraints-20130430/#prov-dm-constraints-fig", + "type" : "label" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-Usage", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "Usage", + "undefined" : "Usage" + }, + "comment" : { + "en" : "An instance of prov:Usage provides additional descriptions about the binary prov:used relation from some prov:Activity to an prov:Entity that it used. For example, :keynote prov:used :podium; prov:qualifiedUsage [ a prov:Usage; prov:entity :podium; :foo :bar ]." + }, + "attributes" : [ "external" ], + "id" : "17", + "superClasses" : [ "37", "18" ] + }, { + "iri" : "https://w3id.org/pmd/co/DigitalEntity", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An entity with digital representation.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "DigitalEntity", + "en" : "Digital Entity" + }, + "subClasses" : [ "194", "198", "202", "206", "210" ], + "attributes" : [ "external" ], + "id" : "116", + "superClasses" : [ "47" ] + }, { + "iri" : "https://w3id.org/pmd/tto/TransitionPoint", + "baseIri" : "https://w3id.org/pmd/tto", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/tto", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Entität beschreibt einen einzelnen Punkt, an dem ein Übergang von einer Bedingung oder einem Zustand in einen anderen erfolgt, z. B. der Punkt, an dem verschiedene Phasen von Materie im Gleichgewicht miteinander existieren können (auch Inversionspunkt genannt) oder wenn Prozessparameter geändert werden, die zu einem Übergang des Prozesses während seiner Ausführung führen.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This entity describes a single point at which a transition from one condition or state to another occurs, e.g. the point at which different phases of matter are capable of existing together in equilibrium (also called inversion point) or if process parameters are changed that will lead to a transition of the process during its execution.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Umschaltpunkt", + "IRI-based" : "TransitionPoint", + "en" : "Transition Point" + }, + "subClasses" : [ "152" ], + "attributes" : [ "external" ], + "id" : "153", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/Mechanical", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Mechanical.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/mechanical. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Mechanisch bedeutet, sich auf die Prinzipien der Mechanik zu beziehen, von ihnen beherrscht zu werden oder sie zu befolgen. Hier speziell auf die mechanischen Eigenschaften eines Materials.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Mechanical is relating to, governed by, or in accordance with the principles of mechanics. Here specifically to the mechanical properties of a material.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Mechanisch", + "IRI-based" : "Mechanical", + "en" : "Mechanical" + }, + "attributes" : [ "external" ], + "id" : "264", + "superClasses" : [ "110" ] + }, { + "iri" : "https://w3id.org/pmd/co/WorkingRange", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This property describes the region between the limits within which a processing node (e.g., a machine) is capable of being used for its intended purpose, expressed by stating the lower and upper range values of interest.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Eigenschaft beschreibt den Bereich zwischen den Grenzen, innerhalb derer ein Prozessknoten (z. B. eine Maschine) für ihren vorgesehenen Zweck verwendet werden kann, ausgedrückt durch die Angabe der in Rede stehenden unteren und oberen Bereichswerte.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Arbeitsbereich", + "IRI-based" : "WorkingRange", + "en" : "Working Range" + }, + "attributes" : [ "external" ], + "id" : "496", + "superClasses" : [ "11" ] + }, { + "iri" : "https://w3id.org/pmd/co/CrystallineStructure", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Crystal structure.” Wikipedia The Free Encyclopedia, https://en.wikipedia.org/wiki/Crystal_structure. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "In der Kristallographie ist die Kristallstruktur eine Beschreibung der geordneten Anordnung von Atomen, Ionen oder Molekülen in einem kristallinen Material. Geordnete Strukturen ergeben sich aus der intrinsischen Natur der konstituierenden Teilchen, die symmetrische Muster bilden, die sich entlang der Hauptrichtungen des dreidimensionalen Raums in der Materie wiederholen.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "In crystallography, crystal structure is a description of the ordered arrangement of atoms, ions or molecules in a crystalline material. Ordered structures occur from the intrinsic nature of the constituent particles to form symmetric patterns that repeat along the principal directions of three-dimensional space in matter.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Kristalline Struktur", + "IRI-based" : "CrystallineStructure", + "en" : "Crystalline Structure" + }, + "attributes" : [ "external" ], + "id" : "97", + "superClasses" : [ "98" ] + }, { + "iri" : "https://w3id.org/pmd/co/NodeSerialNumber", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A unique identifier of a processing node, typically provided by the manufacturer (manufacturer serial number, s/n).", + "type" : "label" + } ] + }, + "label" : { + "de" : "Knoten-Seriennummer", + "IRI-based" : "NodeSerialNumber", + "en" : "Node Serial Number" + }, + "attributes" : [ "external" ], + "id" : "102", + "superClasses" : [ "99", "235" ] + }, { + "iri" : "https://w3id.org/pmd/co/MassFraction", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This value object describes one of several portions of the property of a body that is a measure of the amount of material it contains and causes it to have weight in a gravitational field.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Masse Anteil", + "IRI-based" : "MassFraction", + "en" : "Mass Fraction" + }, + "attributes" : [ "external" ], + "id" : "281", + "superClasses" : [ "228" ] + }, { + "iri" : "https://w3id.org/pmd/co/Circular", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "“Circular.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/circular. Accessed 13 Jan. 2023.", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Geformt wie ein Kreis.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Having the form of a circle.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Kreisförmig", + "IRI-based" : "Circular", + "en" : "Circular" + }, + "attributes" : [ "external" ], + "id" : "568", + "superClasses" : [ "90" ] + }, { + "iri" : "https://w3id.org/pmd/co/TemperatureMeasuringDevice", + "baseIri" : "https://w3id.org/pmd/co", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Entität beschreibt allgemein jedes Werkzeug, das zur Messung der Temperatur eines materiellen Objekts oder der Umgebung verwendet wird, z. B. ein Thermoelement und Thermometer.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This entity generically describes any tool that is used for the measurement of the temperature of a tangible object or the environment, e.g., a thermocouple and thermometers.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Temperaturmesswerkzeug", + "IRI-based" : "TemperatureMeasuringDevice", + "en" : "Temperature Measuring Device" + }, + "subClasses" : [ "162" ], + "attributes" : [ "external" ], + "id" : "163", + "superClasses" : [ "243" ] + }, { + "iri" : "https://w3id.org/pmd/tto/ExtensometerGaugeLength", + "baseIri" : "https://w3id.org/pmd/tto", + "instances" : 0, + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/tto", + "type" : "iri" + } ], + "definitionSource" : [ { + "identifier" : "definitionSource", + "language" : "en", + "value" : "DIN EN ISO 6892-1:2019", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Anfangsmesslänge des Dehnungsaufnehmers (Extensometer), die zum Messen der Verlängerung benutzt wird\n\nAnmerkung: Für die Bestimmung mehrerer Eigenschaften, die (teilweise oder vollständig) von der Verlängerung abhängig sind, z. B. R_p, A_e oder A_g, ist die Verwendung eines Extensometers zwingend erforderlich.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Symbol: L_e", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "initial gauge length of the extensometer used for measurement of extension\n\nNote: For the determination of several properties which are based (partly or complete) on extension, e. g. R_p, A_e or A_g, the use of an extensometer is mandatory.", + "type" : "label" + } ] + }, + "label" : { + "de" : "Extensometer-Messlänge", + "IRI-based" : "ExtensometerGaugeLength", + "en" : "Extensometer Gauge Length" + }, + "attributes" : [ "external" ], + "id" : "127", + "superClasses" : [ "119" ] + } ], + "property" : [ { + "id" : "0", + "type" : "rdfs:SubClassOf" + }, { + "id" : "3", + "type" : "rdfs:SubClassOf" + }, { + "id" : "6", + "type" : "owl:objectProperty" + }, { + "id" : "10", + "type" : "owl:objectProperty" + }, { + "id" : "14", + "type" : "rdfs:SubClassOf" + }, { + "id" : "16", + "type" : "rdfs:SubClassOf" + }, { + "id" : "19", + "type" : "rdfs:SubClassOf" + }, { + "id" : "21", + "type" : "rdfs:SubClassOf" + }, { + "id" : "23", + "type" : "rdfs:SubClassOf" + }, { + "id" : "26", + "type" : "rdfs:SubClassOf" + }, { + "id" : "28", + "type" : "rdfs:SubClassOf" + }, { + "id" : "30", + "type" : "rdfs:SubClassOf" + }, { + "id" : "32", + "type" : "rdfs:SubClassOf" + }, { + "id" : "34", + "type" : "rdfs:SubClassOf" + }, { + "id" : "36", + "type" : "rdfs:SubClassOf" + }, { + "id" : "38", + "type" : "rdfs:SubClassOf" + }, { + "id" : "45", + "type" : "rdfs:SubClassOf" + }, { + "id" : "46", + "type" : "owl:objectProperty" + }, { + "id" : "50", + "type" : "owl:objectProperty" + }, { + "id" : "53", + "type" : "owl:objectProperty" + }, { + "id" : "64", + "type" : "owl:objectProperty" + }, { + "id" : "73", + "type" : "owl:objectProperty" + }, { + "id" : "76", + "type" : "rdfs:SubClassOf" + }, { + "id" : "79", + "type" : "rdfs:SubClassOf" + }, { + "id" : "81", + "type" : "rdfs:SubClassOf" + }, { + "id" : "83", + "type" : "owl:datatypeProperty" + }, { + "id" : "85", + "type" : "rdfs:SubClassOf" + }, { + "id" : "86", + "type" : "rdfs:SubClassOf" + }, { + "id" : "93", + "type" : "rdfs:SubClassOf" + }, { + "id" : "96", + "type" : "rdfs:SubClassOf" + }, { + "id" : "103", + "type" : "rdfs:SubClassOf" + }, { + "id" : "105", + "type" : "rdfs:SubClassOf" + }, { + "id" : "111", + "type" : "rdfs:SubClassOf" + }, { + "id" : "112", + "type" : "rdfs:SubClassOf" + }, { + "id" : "115", + "type" : "rdfs:SubClassOf" + }, { + "id" : "117", + "type" : "rdfs:SubClassOf" + }, { + "id" : "120", + "type" : "rdfs:SubClassOf" + }, { + "id" : "122", + "type" : "rdfs:SubClassOf" + }, { + "id" : "124", + "type" : "rdfs:SubClassOf" + }, { + "id" : "126", + "type" : "rdfs:SubClassOf" + }, { + "id" : "128", + "type" : "rdfs:SubClassOf" + }, { + "id" : "130", + "type" : "rdfs:SubClassOf" + }, { + "id" : "131", + "type" : "rdfs:SubClassOf" + }, { + "id" : "133", + "type" : "rdfs:SubClassOf" + }, { + "id" : "135", + "type" : "rdfs:SubClassOf" + }, { + "id" : "137", + "type" : "owl:datatypeProperty" + }, { + "id" : "143", + "type" : "owl:objectProperty" + }, { + "id" : "147", + "type" : "owl:objectProperty" + }, { + "id" : "151", + "type" : "rdfs:SubClassOf" + }, { + "id" : "154", + "type" : "owl:objectProperty" + }, { + "id" : "158", + "type" : "rdfs:SubClassOf" + }, { + "id" : "161", + "type" : "rdfs:SubClassOf" + }, { + "id" : "164", + "type" : "owl:objectProperty" + }, { + "id" : "167", + "type" : "rdfs:SubClassOf" + }, { + "id" : "169", + "type" : "rdfs:SubClassOf" + }, { + "id" : "171", + "type" : "owl:objectProperty" + }, { + "id" : "173", + "type" : "rdfs:SubClassOf" + }, { + "id" : "176", + "type" : "rdfs:SubClassOf" + }, { + "id" : "179", + "type" : "rdfs:SubClassOf" + }, { + "id" : "181", + "type" : "rdfs:SubClassOf" + }, { + "id" : "184", + "type" : "rdfs:SubClassOf" + }, { + "id" : "186", + "type" : "rdfs:SubClassOf" + }, { + "id" : "191", + "type" : "rdfs:SubClassOf" + }, { + "id" : "193", + "type" : "rdfs:SubClassOf" + }, { + "id" : "195", + "type" : "rdfs:SubClassOf" + }, { + "id" : "197", + "type" : "rdfs:SubClassOf" + }, { + "id" : "199", + "type" : "rdfs:SubClassOf" + }, { + "id" : "201", + "type" : "rdfs:SubClassOf" + }, { + "id" : "203", + "type" : "rdfs:SubClassOf" + }, { + "id" : "205", + "type" : "rdfs:SubClassOf" + }, { + "id" : "207", + "type" : "rdfs:SubClassOf" + }, { + "id" : "209", + "type" : "rdfs:SubClassOf" + }, { + "id" : "212", + "type" : "rdfs:SubClassOf" + }, { + "id" : "224", + "type" : "rdfs:SubClassOf" + }, { + "id" : "226", + "type" : "rdfs:SubClassOf" + }, { + "id" : "229", + "type" : "rdfs:SubClassOf" + }, { + "id" : "231", + "type" : "rdfs:SubClassOf" + }, { + "id" : "233", + "type" : "rdfs:SubClassOf" + }, { + "id" : "238", + "type" : "rdfs:SubClassOf" + }, { + "id" : "240", + "type" : "rdfs:SubClassOf" + }, { + "id" : "242", + "type" : "rdfs:SubClassOf" + }, { + "id" : "244", + "type" : "rdfs:SubClassOf" + }, { + "id" : "247", + "type" : "rdfs:SubClassOf" + }, { + "id" : "248", + "type" : "rdfs:SubClassOf" + }, { + "id" : "250", + "type" : "rdfs:SubClassOf" + }, { + "id" : "252", + "type" : "rdfs:SubClassOf" + }, { + "id" : "255", + "type" : "rdfs:SubClassOf" + }, { + "id" : "257", + "type" : "rdfs:SubClassOf" + }, { + "id" : "259", + "type" : "rdfs:SubClassOf" + }, { + "id" : "261", + "type" : "rdfs:SubClassOf" + }, { + "id" : "271", + "type" : "rdfs:SubClassOf" + }, { + "id" : "273", + "type" : "rdfs:SubClassOf" + }, { + "id" : "275", + "type" : "rdfs:SubClassOf" + }, { + "id" : "277", + "type" : "rdfs:SubClassOf" + }, { + "id" : "157", + "type" : "owl:objectProperty" + }, { + "id" : "280", + "type" : "rdfs:SubClassOf" + }, { + "id" : "284", + "type" : "owl:objectProperty" + }, { + "id" : "286", + "type" : "owl:datatypeProperty" + }, { + "id" : "289", + "type" : "rdfs:SubClassOf" + }, { + "id" : "290", + "type" : "rdfs:SubClassOf" + }, { + "id" : "291", + "type" : "rdfs:SubClassOf" + }, { + "id" : "294", + "type" : "rdfs:SubClassOf" + }, { + "id" : "296", + "type" : "rdfs:SubClassOf" + }, { + "id" : "298", + "type" : "rdfs:SubClassOf" + }, { + "id" : "299", + "type" : "rdfs:SubClassOf" + }, { + "id" : "301", + "type" : "rdfs:SubClassOf" + }, { + "id" : "303", + "type" : "owl:datatypeProperty" + }, { + "id" : "307", + "type" : "owl:objectProperty" + }, { + "id" : "67", + "type" : "owl:objectProperty" + }, { + "id" : "315", + "type" : "owl:objectProperty" + }, { + "id" : "317", + "type" : "rdfs:SubClassOf" + }, { + "id" : "318", + "type" : "rdfs:SubClassOf" + }, { + "id" : "320", + "type" : "rdfs:SubClassOf" + }, { + "id" : "323", + "type" : "rdfs:SubClassOf" + }, { + "id" : "324", + "type" : "rdfs:SubClassOf" + }, { + "id" : "327", + "type" : "owl:objectProperty" + }, { + "id" : "331", + "type" : "rdfs:SubClassOf" + }, { + "id" : "333", + "type" : "rdfs:SubClassOf" + }, { + "id" : "337", + "type" : "rdfs:SubClassOf" + }, { + "id" : "338", + "type" : "rdfs:SubClassOf" + }, { + "id" : "340", + "type" : "rdfs:SubClassOf" + }, { + "id" : "342", + "type" : "rdfs:SubClassOf" + }, { + "id" : "345", + "type" : "rdfs:SubClassOf" + }, { + "id" : "347", + "type" : "rdfs:SubClassOf" + }, { + "id" : "349", + "type" : "rdfs:SubClassOf" + }, { + "id" : "350", + "type" : "rdfs:SubClassOf" + }, { + "id" : "352", + "type" : "rdfs:SubClassOf" + }, { + "id" : "353", + "type" : "rdfs:SubClassOf" + }, { + "id" : "354", + "type" : "rdfs:SubClassOf" + }, { + "id" : "355", + "type" : "rdfs:SubClassOf" + }, { + "id" : "357", + "type" : "rdfs:SubClassOf" + }, { + "id" : "358", + "type" : "rdfs:SubClassOf" + }, { + "id" : "360", + "type" : "rdfs:SubClassOf" + }, { + "id" : "362", + "type" : "rdfs:SubClassOf" + }, { + "id" : "364", + "type" : "owl:objectProperty" + }, { + "id" : "365", + "type" : "rdfs:SubClassOf" + }, { + "id" : "366", + "type" : "rdfs:SubClassOf" + }, { + "id" : "371", + "type" : "rdfs:SubClassOf" + }, { + "id" : "373", + "type" : "rdfs:SubClassOf" + }, { + "id" : "375", + "type" : "rdfs:SubClassOf" + }, { + "id" : "376", + "type" : "rdfs:SubClassOf" + }, { + "id" : "379", + "type" : "rdfs:SubClassOf" + }, { + "id" : "381", + "type" : "rdfs:SubClassOf" + }, { + "id" : "383", + "type" : "rdfs:SubClassOf" + }, { + "id" : "384", + "type" : "rdfs:SubClassOf" + }, { + "id" : "387", + "type" : "rdfs:SubClassOf" + }, { + "id" : "388", + "type" : "rdfs:SubClassOf" + }, { + "id" : "389", + "type" : "rdfs:SubClassOf" + }, { + "id" : "390", + "type" : "rdfs:SubClassOf" + }, { + "id" : "391", + "type" : "rdfs:SubClassOf" + }, { + "id" : "393", + "type" : "rdfs:SubClassOf" + }, { + "id" : "394", + "type" : "rdfs:SubClassOf" + }, { + "id" : "396", + "type" : "rdfs:SubClassOf" + }, { + "id" : "397", + "type" : "rdfs:SubClassOf" + }, { + "id" : "398", + "type" : "rdfs:SubClassOf" + }, { + "id" : "399", + "type" : "rdfs:SubClassOf" + }, { + "id" : "400", + "type" : "owl:datatypeProperty" + }, { + "id" : "404", + "type" : "owl:objectProperty" + }, { + "id" : "406", + "type" : "rdfs:SubClassOf" + }, { + "id" : "407", + "type" : "rdfs:SubClassOf" + }, { + "id" : "408", + "type" : "rdfs:SubClassOf" + }, { + "id" : "409", + "type" : "rdfs:SubClassOf" + }, { + "id" : "411", + "type" : "rdfs:SubClassOf" + }, { + "id" : "413", + "type" : "rdfs:SubClassOf" + }, { + "id" : "414", + "type" : "rdfs:SubClassOf" + }, { + "id" : "415", + "type" : "owl:objectProperty" + }, { + "id" : "418", + "type" : "rdfs:SubClassOf" + }, { + "id" : "419", + "type" : "rdfs:SubClassOf" + }, { + "id" : "421", + "type" : "rdfs:SubClassOf" + }, { + "id" : "422", + "type" : "rdfs:SubClassOf" + }, { + "id" : "424", + "type" : "rdfs:SubClassOf" + }, { + "id" : "425", + "type" : "rdfs:SubClassOf" + }, { + "id" : "430", + "type" : "rdfs:SubClassOf" + }, { + "id" : "431", + "type" : "rdfs:SubClassOf" + }, { + "id" : "433", + "type" : "rdfs:SubClassOf" + }, { + "id" : "435", + "type" : "rdfs:SubClassOf" + }, { + "id" : "437", + "type" : "rdfs:SubClassOf" + }, { + "id" : "438", + "type" : "rdfs:SubClassOf" + }, { + "id" : "440", + "type" : "rdfs:SubClassOf" + }, { + "id" : "441", + "type" : "rdfs:SubClassOf" + }, { + "id" : "443", + "type" : "rdfs:SubClassOf" + }, { + "id" : "445", + "type" : "owl:objectProperty" + }, { + "id" : "447", + "type" : "owl:objectProperty" + }, { + "id" : "450", + "type" : "owl:objectProperty" + }, { + "id" : "452", + "type" : "owl:objectProperty" + }, { + "id" : "456", + "type" : "rdfs:SubClassOf" + }, { + "id" : "457", + "type" : "rdfs:SubClassOf" + }, { + "id" : "458", + "type" : "rdfs:SubClassOf" + }, { + "id" : "459", + "type" : "rdfs:SubClassOf" + }, { + "id" : "461", + "type" : "rdfs:SubClassOf" + }, { + "id" : "462", + "type" : "rdfs:SubClassOf" + }, { + "id" : "464", + "type" : "rdfs:SubClassOf" + }, { + "id" : "465", + "type" : "owl:someValuesFrom" + }, { + "id" : "467", + "type" : "owl:objectProperty" + }, { + "id" : "453", + "type" : "owl:objectProperty" + }, { + "id" : "470", + "type" : "owl:someValuesFrom" + }, { + "id" : "471", + "type" : "owl:someValuesFrom" + }, { + "id" : "473", + "type" : "owl:objectProperty" + }, { + "id" : "474", + "type" : "owl:someValuesFrom" + }, { + "id" : "417", + "type" : "owl:objectProperty" + }, { + "id" : "475", + "type" : "owl:someValuesFrom" + }, { + "id" : "476", + "type" : "owl:someValuesFrom" + }, { + "id" : "477", + "type" : "owl:someValuesFrom" + }, { + "id" : "478", + "type" : "owl:someValuesFrom" + }, { + "id" : "480", + "type" : "owl:someValuesFrom" + }, { + "id" : "482", + "type" : "owl:someValuesFrom" + }, { + "id" : "483", + "type" : "owl:objectProperty" + }, { + "id" : "485", + "type" : "owl:objectProperty" + }, { + "id" : "487", + "type" : "owl:objectProperty" + }, { + "id" : "498", + "type" : "owl:someValuesFrom" + }, { + "id" : "500", + "type" : "owl:someValuesFrom" + }, { + "id" : "501", + "type" : "owl:someValuesFrom" + }, { + "id" : "503", + "type" : "owl:disjointWith" + }, { + "id" : "504", + "type" : "owl:disjointWith" + }, { + "id" : "505", + "type" : "owl:disjointWith" + }, { + "id" : "506", + "type" : "owl:disjointWith" + }, { + "id" : "509", + "type" : "owl:disjointWith" + }, { + "id" : "511", + "type" : "owl:disjointWith" + }, { + "id" : "512", + "type" : "owl:objectProperty" + }, { + "id" : "520", + "type" : "owl:objectProperty" + }, { + "id" : "522", + "type" : "owl:objectProperty" + }, { + "id" : "529", + "type" : "owl:objectProperty" + }, { + "id" : "530", + "type" : "owl:someValuesFrom" + }, { + "id" : "531", + "type" : "owl:someValuesFrom" + }, { + "id" : "533", + "type" : "owl:datatypeProperty" + }, { + "id" : "534", + "type" : "rdfs:SubClassOf" + }, { + "id" : "535", + "type" : "rdfs:SubClassOf" + }, { + "id" : "536", + "type" : "rdfs:SubClassOf" + }, { + "id" : "537", + "type" : "rdfs:SubClassOf" + }, { + "id" : "538", + "type" : "rdfs:SubClassOf" + }, { + "id" : "539", + "type" : "rdfs:SubClassOf" + }, { + "id" : "540", + "type" : "rdfs:SubClassOf" + }, { + "id" : "541", + "type" : "rdfs:SubClassOf" + }, { + "id" : "542", + "type" : "rdfs:SubClassOf" + }, { + "id" : "543", + "type" : "owl:objectProperty" + }, { + "id" : "544", + "type" : "rdfs:SubClassOf" + }, { + "id" : "545", + "type" : "rdfs:SubClassOf" + }, { + "id" : "546", + "type" : "rdfs:SubClassOf" + }, { + "id" : "548", + "type" : "owl:objectProperty" + }, { + "id" : "549", + "type" : "owl:datatypeProperty" + }, { + "id" : "551", + "type" : "rdfs:SubClassOf" + }, { + "id" : "553", + "type" : "rdfs:SubClassOf" + }, { + "id" : "554", + "type" : "owl:objectProperty" + }, { + "id" : "556", + "type" : "rdfs:SubClassOf" + }, { + "id" : "558", + "type" : "owl:objectProperty" + }, { + "id" : "144", + "type" : "owl:objectProperty" + }, { + "id" : "559", + "type" : "rdfs:SubClassOf" + }, { + "id" : "560", + "type" : "rdfs:SubClassOf" + }, { + "id" : "561", + "type" : "rdfs:SubClassOf" + }, { + "id" : "562", + "type" : "rdfs:SubClassOf" + }, { + "id" : "563", + "type" : "rdfs:SubClassOf" + }, { + "id" : "565", + "type" : "rdfs:SubClassOf" + }, { + "id" : "567", + "type" : "rdfs:SubClassOf" + }, { + "id" : "570", + "type" : "rdfs:SubClassOf" + }, { + "id" : "49", + "type" : "owl:objectProperty" + }, { + "id" : "56", + "type" : "owl:objectProperty" + }, { + "id" : "572", + "type" : "rdfs:SubClassOf" + }, { + "id" : "573", + "type" : "rdfs:SubClassOf" + }, { + "id" : "575", + "type" : "rdfs:SubClassOf" + }, { + "id" : "576", + "type" : "rdfs:SubClassOf" + }, { + "id" : "578", + "type" : "rdfs:SubClassOf" + }, { + "id" : "579", + "type" : "rdfs:SubClassOf" + }, { + "id" : "580", + "type" : "owl:datatypeProperty" + }, { + "id" : "582", + "type" : "rdfs:SubClassOf" + }, { + "id" : "584", + "type" : "rdfs:SubClassOf" + }, { + "id" : "586", + "type" : "owl:objectProperty" + }, { + "id" : "588", + "type" : "owl:objectProperty" + }, { + "id" : "589", + "type" : "owl:objectProperty" + }, { + "id" : "592", + "type" : "rdfs:SubClassOf" + }, { + "id" : "593", + "type" : "rdfs:SubClassOf" + }, { + "id" : "594", + "type" : "rdfs:SubClassOf" + }, { + "id" : "595", + "type" : "rdfs:SubClassOf" + }, { + "id" : "596", + "type" : "rdfs:SubClassOf" + }, { + "id" : "598", + "type" : "rdfs:SubClassOf" + }, { + "id" : "599", + "type" : "rdfs:SubClassOf" + }, { + "id" : "602", + "type" : "owl:objectProperty" + }, { + "id" : "603", + "type" : "owl:objectProperty" + }, { + "id" : "604", + "type" : "owl:objectProperty" + }, { + "id" : "605", + "type" : "rdfs:SubClassOf" + }, { + "id" : "606", + "type" : "rdfs:SubClassOf" + }, { + "id" : "607", + "type" : "rdfs:SubClassOf" + }, { + "id" : "608", + "type" : "rdfs:SubClassOf" + }, { + "id" : "609", + "type" : "rdfs:SubClassOf" + }, { + "id" : "610", + "type" : "rdfs:SubClassOf" + }, { + "id" : "611", + "type" : "rdfs:SubClassOf" + }, { + "id" : "612", + "type" : "owl:objectProperty" + }, { + "id" : "614", + "type" : "rdfs:SubClassOf" + }, { + "id" : "615", + "type" : "rdfs:SubClassOf" + }, { + "id" : "616", + "type" : "rdfs:SubClassOf" + }, { + "id" : "617", + "type" : "owl:objectProperty" + }, { + "id" : "619", + "type" : "owl:objectProperty" + }, { + "id" : "9", + "type" : "owl:objectProperty" + }, { + "id" : "624", + "type" : "owl:objectProperty" + }, { + "id" : "625", + "type" : "rdfs:SubClassOf" + }, { + "id" : "59", + "type" : "owl:objectProperty" + }, { + "id" : "626", + "type" : "rdfs:SubClassOf" + }, { + "id" : "627", + "type" : "rdfs:SubClassOf" + }, { + "id" : "628", + "type" : "rdfs:SubClassOf" + }, { + "id" : "630", + "type" : "rdfs:SubClassOf" + }, { + "id" : "634", + "type" : "owl:objectProperty" + }, { + "id" : "55", + "type" : "owl:objectProperty" + }, { + "id" : "58", + "type" : "owl:objectProperty" + }, { + "id" : "279", + "type" : "owl:objectProperty" + }, { + "id" : "638", + "type" : "owl:objectProperty" + }, { + "id" : "639", + "type" : "owl:datatypeProperty" + }, { + "id" : "640", + "type" : "rdfs:SubClassOf" + }, { + "id" : "641", + "type" : "rdfs:SubClassOf" + }, { + "id" : "642", + "type" : "rdfs:SubClassOf" + }, { + "id" : "643", + "type" : "owl:datatypeProperty" + }, { + "id" : "644", + "type" : "owl:objectProperty" + }, { + "id" : "646", + "type" : "owl:objectProperty" + }, { + "id" : "637", + "type" : "owl:objectProperty" + }, { + "id" : "620", + "type" : "owl:objectProperty" + }, { + "id" : "486", + "type" : "owl:objectProperty" + }, { + "id" : "622", + "type" : "owl:objectProperty" + }, { + "id" : "649", + "type" : "owl:objectProperty" + }, { + "id" : "484", + "type" : "owl:objectProperty" + }, { + "id" : "651", + "type" : "owl:objectProperty" + }, { + "id" : "449", + "type" : "owl:objectProperty" + }, { + "id" : "621", + "type" : "owl:objectProperty" + }, { + "id" : "653", + "type" : "owl:datatypeProperty" + }, { + "id" : "654", + "type" : "owl:objectProperty" + }, { + "id" : "655", + "type" : "owl:objectProperty" + }, { + "id" : "657", + "type" : "owl:datatypeProperty" + }, { + "id" : "658", + "type" : "owl:objectProperty" + }, { + "id" : "308", + "type" : "owl:objectProperty" + }, { + "id" : "661", + "type" : "owl:objectProperty" + }, { + "id" : "660", + "type" : "owl:objectProperty" + }, { + "id" : "623", + "type" : "owl:objectProperty" + }, { + "id" : "662", + "type" : "owl:objectProperty" + }, { + "id" : "663", + "type" : "owl:objectProperty" + }, { + "id" : "664", + "type" : "owl:objectProperty" + }, { + "id" : "666", + "type" : "owl:objectProperty" + }, { + "id" : "667", + "type" : "rdfs:SubClassOf" + }, { + "id" : "668", + "type" : "owl:objectProperty" + }, { + "id" : "669", + "type" : "rdfs:SubClassOf" + }, { + "id" : "670", + "type" : "rdfs:SubClassOf" + }, { + "id" : "671", + "type" : "rdfs:SubClassOf" + }, { + "id" : "650", + "type" : "owl:objectProperty" + }, { + "id" : "672", + "type" : "rdfs:SubClassOf" + }, { + "id" : "673", + "type" : "rdfs:SubClassOf" + }, { + "id" : "675", + "type" : "rdfs:SubClassOf" + }, { + "id" : "676", + "type" : "rdfs:SubClassOf" + }, { + "id" : "677", + "type" : "rdfs:SubClassOf" + }, { + "id" : "678", + "type" : "rdfs:SubClassOf" + }, { + "id" : "679", + "type" : "rdfs:SubClassOf" + }, { + "id" : "618", + "type" : "owl:objectProperty" + }, { + "id" : "680", + "type" : "rdfs:SubClassOf" + }, { + "id" : "681", + "type" : "rdfs:SubClassOf" + }, { + "id" : "682", + "type" : "rdfs:SubClassOf" + }, { + "id" : "683", + "type" : "owl:objectProperty" + }, { + "id" : "684", + "type" : "owl:objectProperty" + }, { + "id" : "685", + "type" : "rdfs:SubClassOf" + }, { + "id" : "686", + "type" : "rdfs:SubClassOf" + }, { + "id" : "687", + "type" : "rdfs:SubClassOf" + }, { + "id" : "688", + "type" : "rdfs:SubClassOf" + }, { + "id" : "689", + "type" : "rdfs:SubClassOf" + }, { + "id" : "690", + "type" : "rdfs:SubClassOf" + }, { + "id" : "691", + "type" : "rdfs:SubClassOf" + }, { + "id" : "692", + "type" : "rdfs:SubClassOf" + }, { + "id" : "693", + "type" : "rdfs:SubClassOf" + }, { + "id" : "451", + "type" : "owl:objectProperty" + }, { + "id" : "645", + "type" : "owl:objectProperty" + }, { + "id" : "695", + "type" : "rdfs:SubClassOf" + }, { + "id" : "696", + "type" : "rdfs:SubClassOf" + }, { + "id" : "697", + "type" : "rdfs:SubClassOf" + }, { + "id" : "698", + "type" : "rdfs:SubClassOf" + }, { + "id" : "699", + "type" : "rdfs:SubClassOf" + }, { + "id" : "700", + "type" : "rdfs:SubClassOf" + }, { + "id" : "701", + "type" : "rdfs:SubClassOf" + }, { + "id" : "702", + "type" : "rdfs:SubClassOf" + }, { + "id" : "703", + "type" : "rdfs:SubClassOf" + }, { + "id" : "704", + "type" : "rdfs:SubClassOf" + }, { + "id" : "705", + "type" : "rdfs:SubClassOf" + }, { + "id" : "706", + "type" : "rdfs:SubClassOf" + }, { + "id" : "707", + "type" : "rdfs:SubClassOf" + }, { + "id" : "708", + "type" : "rdfs:SubClassOf" + }, { + "id" : "709", + "type" : "rdfs:SubClassOf" + }, { + "id" : "710", + "type" : "rdfs:SubClassOf" + }, { + "id" : "711", + "type" : "rdfs:SubClassOf" + }, { + "id" : "712", + "type" : "rdfs:SubClassOf" + }, { + "id" : "713", + "type" : "rdfs:SubClassOf" + }, { + "id" : "714", + "type" : "owl:objectProperty" + }, { + "id" : "715", + "type" : "rdfs:SubClassOf" + }, { + "id" : "716", + "type" : "rdfs:SubClassOf" + }, { + "id" : "717", + "type" : "rdfs:SubClassOf" + }, { + "id" : "718", + "type" : "owl:objectProperty" + }, { + "id" : "719", + "type" : "owl:objectProperty" + }, { + "id" : "555", + "type" : "owl:objectProperty" + }, { + "id" : "720", + "type" : "rdfs:SubClassOf" + }, { + "id" : "721", + "type" : "rdfs:SubClassOf" + }, { + "id" : "722", + "type" : "rdfs:SubClassOf" + }, { + "id" : "723", + "type" : "rdfs:SubClassOf" + }, { + "id" : "724", + "type" : "rdfs:SubClassOf" + }, { + "id" : "489", + "type" : "owl:objectProperty" + }, { + "id" : "725", + "type" : "rdfs:SubClassOf" + }, { + "id" : "726", + "type" : "rdfs:SubClassOf" + }, { + "id" : "727", + "type" : "rdfs:SubClassOf" + }, { + "id" : "728", + "type" : "rdfs:SubClassOf" + }, { + "id" : "729", + "type" : "rdfs:SubClassOf" + }, { + "id" : "730", + "type" : "rdfs:SubClassOf" + }, { + "id" : "731", + "type" : "rdfs:SubClassOf" + }, { + "id" : "732", + "type" : "rdfs:SubClassOf" + }, { + "id" : "733", + "type" : "rdfs:SubClassOf" + }, { + "id" : "734", + "type" : "rdfs:SubClassOf" + }, { + "id" : "735", + "type" : "owl:objectProperty" + }, { + "id" : "57", + "type" : "owl:objectProperty" + }, { + "id" : "736", + "type" : "owl:objectProperty" + }, { + "id" : "737", + "type" : "owl:objectProperty" + }, { + "id" : "416", + "type" : "owl:objectProperty" + }, { + "id" : "613", + "type" : "owl:objectProperty" + }, { + "id" : "316", + "type" : "owl:objectProperty" + }, { + "id" : "738", + "type" : "owl:datatypeProperty" + }, { + "id" : "68", + "type" : "owl:objectProperty" + }, { + "id" : "665", + "type" : "owl:objectProperty" + }, { + "id" : "694", + "type" : "owl:objectProperty" + }, { + "id" : "52", + "type" : "owl:objectProperty" + }, { + "id" : "659", + "type" : "owl:objectProperty" + }, { + "id" : "172", + "type" : "owl:objectProperty" + }, { + "id" : "739", + "type" : "owl:disjointWith" + }, { + "id" : "740", + "type" : "owl:disjointWith" + }, { + "id" : "741", + "type" : "owl:someValuesFrom" + }, { + "id" : "742", + "type" : "owl:someValuesFrom" + }, { + "id" : "743", + "type" : "owl:someValuesFrom" + }, { + "id" : "744", + "type" : "owl:someValuesFrom" + }, { + "id" : "745", + "type" : "owl:someValuesFrom" + }, { + "id" : "746", + "type" : "owl:disjointWith" + }, { + "id" : "747", + "type" : "owl:objectProperty" + }, { + "id" : "749", + "type" : "owl:disjointWith" + }, { + "id" : "750", + "type" : "owl:disjointWith" + }, { + "id" : "751", + "type" : "owl:objectProperty" + }, { + "id" : "748", + "type" : "owl:objectProperty" + }, { + "id" : "752", + "type" : "owl:objectProperty" + }, { + "id" : "753", + "type" : "owl:objectProperty" + } ], + "propertyAttribute" : [ { + "range" : "2", + "domain" : "1", + "attributes" : [ "anonymous", "object" ], + "id" : "0" + }, { + "range" : "5", + "domain" : "4", + "attributes" : [ "anonymous", "object" ], + "id" : "3" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedInfluenceOf", + "inverse" : "9", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "8", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "qualifiedInfluenceOf", + "undefined" : "qualifiedInfluenceOf" + }, + "domain" : "7", + "attributes" : [ "external", "object" ], + "id" : "6" + }, { + "iri" : "https://w3id.org/pmd/co/resource", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "12", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "en", + "value" : "has resource", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "resource", + "en" : "resource" + }, + "domain" : "11", + "attributes" : [ "functional", "external", "object" ], + "id" : "10" + }, { + "range" : "2", + "domain" : "15", + "attributes" : [ "anonymous", "object" ], + "id" : "14" + }, { + "range" : "18", + "domain" : "17", + "attributes" : [ "anonymous", "object" ], + "id" : "16" + }, { + "range" : "2", + "domain" : "20", + "attributes" : [ "anonymous", "object" ], + "id" : "19" + }, { + "range" : "18", + "domain" : "22", + "attributes" : [ "anonymous", "object" ], + "id" : "21" + }, { + "range" : "25", + "domain" : "24", + "attributes" : [ "anonymous", "object" ], + "id" : "23" + }, { + "range" : "18", + "domain" : "27", + "attributes" : [ "anonymous", "object" ], + "id" : "26" + }, { + "range" : "25", + "domain" : "29", + "attributes" : [ "anonymous", "object" ], + "id" : "28" + }, { + "range" : "18", + "domain" : "31", + "attributes" : [ "anonymous", "object" ], + "id" : "30" + }, { + "range" : "7", + "domain" : "33", + "attributes" : [ "anonymous", "object" ], + "id" : "32" + }, { + "range" : "18", + "domain" : "35", + "attributes" : [ "anonymous", "object" ], + "id" : "34" + }, { + "range" : "7", + "domain" : "37", + "attributes" : [ "anonymous", "object" ], + "id" : "36" + }, { + "range" : "40", + "domain" : "39", + "attributes" : [ "anonymous", "object" ], + "id" : "38" + }, { + "range" : "7", + "domain" : "40", + "attributes" : [ "anonymous", "object" ], + "id" : "45" + }, { + "iri" : "http://www.w3.org/ns/prov#specializationOf", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "48", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "generalizationOf", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "alternate", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-specialization", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "An entity that is a specialization of another shares all aspects of the latter, and additionally presents more specific aspects of the same thing as the latter. In particular, the lifetime of the entity being specialized contains that of any specialization. Examples of aspects include a time period, an abstraction, and a context associated with the entity.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "constraints" : [ { + "identifier" : "constraints", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-constraints-20130430/#prov-dm-constraints-fig", + "type" : "label" + } ], + "seeAlso" : [ { + "identifier" : "seeAlso", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#alternateOf", + "type" : "iri" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-specialization", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "specializationOf", + "undefined" : "specializationOf" + }, + "superproperty" : [ "49" ], + "domain" : "47", + "attributes" : [ "external", "object" ], + "id" : "46" + }, { + "iri" : "http://www.w3.org/ns/prov#hadDelegate", + "inverse" : "52", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "51", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "hadDelegate", + "undefined" : "hadDelegate" + }, + "domain" : "51", + "attributes" : [ "external", "object" ], + "id" : "50" + }, { + "iri" : "http://www.w3.org/2002/07/owl#topObjectProperty", + "baseIri" : "http://www.w3.org/2002/07/owl", + "range" : "54", + "label" : { + "IRI-based" : "topObjectProperty" + }, + "domain" : "54", + "subproperty" : [ "55", "56", "57", "58", "59", "60", "61" ], + "attributes" : [ "external", "object" ], + "id" : "53" + }, { + "iri" : "https://w3id.org/pmd/co/belongsToProject", + "inverse" : "67", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "66", + "annotations" : { + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "belongs to process", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "Association between a process and a project.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "belongsToProject" + }, + "superproperty" : [ "68" ], + "domain" : "65", + "attributes" : [ "external", "object" ], + "id" : "64" + }, { + "iri" : "http://www.w3.org/ns/prov#atLocation", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "75", + "annotations" : { + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Location", + "type" : "iri" + } ], + "editorialNote" : [ { + "identifier" : "editorialNote", + "language" : "en", + "value" : "The naming of prov:atLocation parallels prov:atTime, and is not named prov:hadLocation to avoid conflicting with the convention that prov:had* properties are used on prov:Influence classes.", + "type" : "label" + }, { + "identifier" : "editorialNote", + "language" : "en", + "value" : "This property is not functional because the many values could be at a variety of granularies (In this building, in this room, in that chair).", + "type" : "label" + } ], + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "locationOf", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "atLocation", + "undefined" : "atLocation" + }, + "domain" : "74", + "comment" : { + "en" : "The Location of any resource.", + "undefined" : "This property has multiple RDFS domains to suit multiple OWL Profiles. See
    PROV-O OWL Profile." + }, + "attributes" : [ "external", "object" ], + "id" : "73" + }, { + "range" : "78", + "domain" : "77", + "attributes" : [ "anonymous", "object" ], + "id" : "76" + }, { + "range" : "47", + "domain" : "80", + "attributes" : [ "anonymous", "object" ], + "id" : "79" + }, { + "range" : "5", + "domain" : "82", + "attributes" : [ "anonymous", "object" ], + "id" : "81" + }, { + "iri" : "https://w3id.org/pmd/co/minValue", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "84", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "refers to all values equal or larger than the given one", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "minValue", + "en" : "min value" + }, + "domain" : "54", + "attributes" : [ "external", "datatype" ], + "id" : "83" + }, { + "range" : "47", + "domain" : "11", + "attributes" : [ "anonymous", "object" ], + "id" : "85" + }, { + "range" : "5", + "domain" : "87", + "attributes" : [ "anonymous", "object" ], + "id" : "86" + }, { + "range" : "95", + "domain" : "94", + "attributes" : [ "anonymous", "object" ], + "id" : "93" + }, { + "range" : "98", + "domain" : "97", + "attributes" : [ "anonymous", "object" ], + "id" : "96" + }, { + "range" : "104", + "domain" : "66", + "attributes" : [ "anonymous", "object" ], + "id" : "103" + }, { + "range" : "98", + "domain" : "106", + "attributes" : [ "anonymous", "object" ], + "id" : "105" + }, { + "range" : "104", + "domain" : "65", + "attributes" : [ "anonymous", "object" ], + "id" : "111" + }, { + "range" : "98", + "domain" : "113", + "attributes" : [ "anonymous", "object" ], + "id" : "112" + }, { + "range" : "47", + "domain" : "116", + "attributes" : [ "anonymous", "object" ], + "id" : "115" + }, { + "range" : "119", + "domain" : "118", + "attributes" : [ "anonymous", "object" ], + "id" : "117" + }, { + "range" : "47", + "domain" : "121", + "attributes" : [ "anonymous", "object" ], + "id" : "120" + }, { + "range" : "119", + "domain" : "123", + "attributes" : [ "anonymous", "object" ], + "id" : "122" + }, { + "range" : "47", + "domain" : "125", + "attributes" : [ "anonymous", "object" ], + "id" : "124" + }, { + "range" : "119", + "domain" : "127", + "attributes" : [ "anonymous", "object" ], + "id" : "126" + }, { + "range" : "47", + "domain" : "129", + "attributes" : [ "anonymous", "object" ], + "id" : "128" + }, { + "range" : "80", + "domain" : "114", + "attributes" : [ "anonymous", "object" ], + "id" : "130" + }, { + "range" : "47", + "domain" : "132", + "attributes" : [ "anonymous", "object" ], + "id" : "131" + }, { + "range" : "80", + "domain" : "134", + "attributes" : [ "anonymous", "object" ], + "id" : "133" + }, { + "range" : "47", + "domain" : "136", + "attributes" : [ "anonymous", "object" ], + "id" : "135" + }, { + "iri" : "http://www.w3.org/ns/prov#endedAtTime", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "138", + "annotations" : { + "editorialNote" : [ { + "identifier" : "editorialNote", + "language" : "en", + "value" : "It is the intent that the property chain holds: (prov:qualifiedEnd o prov:atTime) rdfs:subPropertyOf prov:endedAtTime.", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "starting-point", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#atTime", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#End", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "endedAtTime", + "undefined" : "endedAtTime" + }, + "domain" : "104", + "comment" : { + "en" : "The time at which an activity ended. See also prov:startedAtTime." + }, + "attributes" : [ "external", "datatype" ], + "id" : "137" + }, { + "iri" : "http://www.w3.org/ns/prov#agentOfInfluence", + "inverse" : "144", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "33", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "agentOfInfluence", + "undefined" : "agentOfInfluence" + }, + "domain" : "51", + "attributes" : [ "external", "object" ], + "id" : "143" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedCommunication", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "39", + "annotations" : { + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Communication", + "type" : "iri" + } ], + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "qualifiedCommunicationOf", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Communication", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "qualifiedCommunication", + "undefined" : "qualifiedCommunication" + }, + "superproperty" : [ "9" ], + "domain" : "104", + "comment" : { + "en" : "If this Activity prov:wasInformedBy Activity :a, then it can qualify how it was influenced using prov:qualifiedCommunication [ a prov:Communication; prov:activity :a; :foo :bar ]." + }, + "attributes" : [ "external", "object" ], + "id" : "147" + }, { + "range" : "153", + "domain" : "152", + "attributes" : [ "anonymous", "object" ], + "id" : "151" + }, { + "iri" : "https://w3id.org/pmd/co/relatesToElement", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "156", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "relatesToElement", + "en" : "relates to element" + }, + "superproperty" : [ "157" ], + "domain" : "155", + "attributes" : [ "external", "object" ], + "id" : "154" + }, { + "range" : "160", + "domain" : "159", + "attributes" : [ "anonymous", "object" ], + "id" : "158" + }, { + "range" : "163", + "domain" : "162", + "attributes" : [ "anonymous", "object" ], + "id" : "161" + }, { + "iri" : "https://w3id.org/pmd/co/component", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "165", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Die Objekt-Eigenschaft Komponente, die in Verbindung mit ProzessKnoten und seinen (modularen) Elementen verwendet wird. Sie ermöglicht die Darstellung der einzelnen, unterschiedlichen Teile von ProzessKnoten. Im Wesentlichen ist die \"Komponenten-Eigenschaft\" eine Möglichkeit, ein komplexes System in überschaubare und eindeutige Teile zu zerlegen, um die Rolle der einzelnen Teile innerhalb des Gesamtsystems zu verstehen und zu verwalten.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "The object property component, which is used in connection with ProcessingNode and its (modular) elements. It enables the representation of the individual, different parts of processing nodes. Essentially, the 'component property' is a way of breaking down a complex system into manageable and distinct parts in order to understand and manage the role of each part within the overall system.", + "type" : "label" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "en", + "value" : "has component", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "component", + "en" : "component" + }, + "domain" : "108", + "attributes" : [ "external", "object" ], + "id" : "164" + }, { + "range" : "95", + "domain" : "168", + "attributes" : [ "anonymous", "object" ], + "id" : "167" + }, { + "range" : "160", + "domain" : "170", + "attributes" : [ "anonymous", "object" ], + "id" : "169" + }, { + "iri" : "http://www.w3.org/ns/prov#entityOfInfluence", + "inverse" : "172", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "37", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "entityOfInfluence", + "undefined" : "entityOfInfluence" + }, + "domain" : "47", + "attributes" : [ "external", "object" ], + "id" : "171" + }, { + "range" : "175", + "domain" : "174", + "attributes" : [ "anonymous", "object" ], + "id" : "173" + }, { + "range" : "178", + "domain" : "177", + "attributes" : [ "anonymous", "object" ], + "id" : "176" + }, { + "range" : "175", + "domain" : "180", + "attributes" : [ "anonymous", "object" ], + "id" : "179" + }, { + "range" : "183", + "domain" : "182", + "attributes" : [ "anonymous", "object" ], + "id" : "181" + }, { + "range" : "175", + "domain" : "185", + "attributes" : [ "anonymous", "object" ], + "id" : "184" + }, { + "range" : "188", + "domain" : "187", + "attributes" : [ "anonymous", "object" ], + "id" : "186" + }, { + "range" : "175", + "domain" : "192", + "attributes" : [ "anonymous", "object" ], + "id" : "191" + }, { + "range" : "116", + "domain" : "194", + "attributes" : [ "anonymous", "object" ], + "id" : "193" + }, { + "range" : "175", + "domain" : "196", + "attributes" : [ "anonymous", "object" ], + "id" : "195" + }, { + "range" : "116", + "domain" : "198", + "attributes" : [ "anonymous", "object" ], + "id" : "197" + }, { + "range" : "160", + "domain" : "200", + "attributes" : [ "anonymous", "object" ], + "id" : "199" + }, { + "range" : "116", + "domain" : "202", + "attributes" : [ "anonymous", "object" ], + "id" : "201" + }, { + "range" : "160", + "domain" : "204", + "attributes" : [ "anonymous", "object" ], + "id" : "203" + }, { + "range" : "116", + "domain" : "206", + "attributes" : [ "anonymous", "object" ], + "id" : "205" + }, { + "range" : "160", + "domain" : "208", + "attributes" : [ "anonymous", "object" ], + "id" : "207" + }, { + "range" : "116", + "domain" : "210", + "attributes" : [ "anonymous", "object" ], + "id" : "209" + }, { + "range" : "160", + "domain" : "213", + "attributes" : [ "anonymous", "object" ], + "id" : "212" + }, { + "range" : "125", + "domain" : "225", + "attributes" : [ "anonymous", "object" ], + "id" : "224" + }, { + "range" : "228", + "domain" : "227", + "attributes" : [ "anonymous", "object" ], + "id" : "226" + }, { + "range" : "178", + "domain" : "230", + "attributes" : [ "anonymous", "object" ], + "id" : "229" + }, { + "range" : "108", + "domain" : "232", + "attributes" : [ "anonymous", "object" ], + "id" : "231" + }, { + "range" : "235", + "domain" : "234", + "attributes" : [ "anonymous", "object" ], + "id" : "233" + }, { + "range" : "108", + "domain" : "239", + "attributes" : [ "anonymous", "object" ], + "id" : "238" + }, { + "range" : "235", + "domain" : "241", + "attributes" : [ "anonymous", "object" ], + "id" : "240" + }, { + "range" : "108", + "domain" : "243", + "attributes" : [ "anonymous", "object" ], + "id" : "242" + }, { + "range" : "235", + "domain" : "245", + "attributes" : [ "anonymous", "object" ], + "id" : "244" + }, { + "range" : "108", + "domain" : "72", + "attributes" : [ "anonymous", "object" ], + "id" : "247" + }, { + "range" : "132", + "domain" : "249", + "attributes" : [ "anonymous", "object" ], + "id" : "248" + }, { + "range" : "108", + "domain" : "251", + "attributes" : [ "anonymous", "object" ], + "id" : "250" + }, { + "range" : "254", + "domain" : "253", + "attributes" : [ "anonymous", "object" ], + "id" : "252" + }, { + "range" : "108", + "domain" : "256", + "attributes" : [ "anonymous", "object" ], + "id" : "255" + }, { + "range" : "254", + "domain" : "258", + "attributes" : [ "anonymous", "object" ], + "id" : "257" + }, { + "range" : "213", + "domain" : "260", + "attributes" : [ "anonymous", "object" ], + "id" : "259" + }, { + "range" : "254", + "domain" : "262", + "attributes" : [ "anonymous", "object" ], + "id" : "261" + }, { + "range" : "228", + "domain" : "272", + "attributes" : [ "anonymous", "object" ], + "id" : "271" + }, { + "range" : "125", + "domain" : "274", + "attributes" : [ "anonymous", "object" ], + "id" : "273" + }, { + "range" : "228", + "domain" : "276", + "attributes" : [ "anonymous", "object" ], + "id" : "275" + }, { + "range" : "125", + "domain" : "278", + "attributes" : [ "anonymous", "object" ], + "id" : "277" + }, { + "iri" : "https://w3id.org/pmd/co/relatesTo", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "12", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Describes a general relationship between domain objects.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "relatesTo", + "en" : "relates to" + }, + "domain" : "11", + "subproperty" : [ "279", "154" ], + "attributes" : [ "external", "object" ], + "id" : "157" + }, { + "range" : "228", + "domain" : "281", + "attributes" : [ "anonymous", "object" ], + "id" : "280" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedDelegation", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "285", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "qualifiedDelegationOf", + "type" : "label" + } ], + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Delegation", + "type" : "iri" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#actedOnBehalfOf", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "qualifiedDelegation", + "undefined" : "qualifiedDelegation" + }, + "superproperty" : [ "9" ], + "domain" : "51", + "comment" : { + "en" : "If this Agent prov:actedOnBehalfOf Agent :ag, then it can qualify how with prov:qualifiedResponsibility [ a prov:Responsibility; prov:agent :ag; :foo :bar ]." + }, + "attributes" : [ "external", "object" ], + "id" : "284" + }, { + "iri" : "http://www.w3.org/2002/07/owl#topDataProperty", + "baseIri" : "http://www.w3.org/2002/07/owl", + "range" : "287", + "label" : { + "IRI-based" : "topDataProperty" + }, + "domain" : "54", + "attributes" : [ "external", "datatype" ], + "id" : "286" + }, { + "range" : "235", + "domain" : "102", + "attributes" : [ "anonymous", "object" ], + "id" : "289" + }, { + "range" : "11", + "domain" : "160", + "attributes" : [ "anonymous", "object" ], + "id" : "290" + }, { + "range" : "293", + "domain" : "292", + "attributes" : [ "anonymous", "object" ], + "id" : "291" + }, { + "range" : "11", + "domain" : "295", + "attributes" : [ "anonymous", "object" ], + "id" : "294" + }, { + "range" : "146", + "domain" : "297", + "attributes" : [ "anonymous", "object" ], + "id" : "296" + }, { + "range" : "11", + "domain" : "263", + "attributes" : [ "anonymous", "object" ], + "id" : "298" + }, { + "range" : "146", + "domain" : "300", + "attributes" : [ "anonymous", "object" ], + "id" : "299" + }, { + "range" : "11", + "domain" : "302", + "attributes" : [ "anonymous", "object" ], + "id" : "301" + }, { + "iri" : "http://www.w3.org/ns/prov#atTime", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "304", + "annotations" : { + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#InstantaneousEvent", + "type" : "iri" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#invalidatedAtTime", + "type" : "iri" + }, { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#generatedAtTime", + "type" : "iri" + }, { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#startedAtTime", + "type" : "iri" + }, { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#endedAtTime", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "atTime", + "undefined" : "atTime" + }, + "domain" : "18", + "comment" : { + "en" : "The time at which an InstantaneousEvent occurred, in the form of xsd:dateTime." + }, + "attributes" : [ "external", "datatype" ], + "id" : "303" + }, { + "iri" : "http://www.w3.org/ns/prov#wasInvalidatedBy", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "104", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "invalidated", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Invalidation", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#qualifiedInvalidation", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasInvalidatedBy", + "undefined" : "wasInvalidatedBy" + }, + "superproperty" : [ "308" ], + "domain" : "47", + "attributes" : [ "external", "object" ], + "id" : "307" + }, { + "iri" : "https://w3id.org/pmd/co/process", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "65", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Describes that a process is associated with a project.", + "type" : "label" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "en", + "value" : "has process", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "process", + "en" : "process" + }, + "domain" : "66", + "attributes" : [ "external", "object" ], + "id" : "67" + }, { + "iri" : "https://w3id.org/pmd/co/composedOf", + "inverse" : "316", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "129", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This property is used to describe the fact that and which objects are composed of other objects, i.e. it is used to describe the specific constituents or ingredients that form a particular entity or object. \nAs a prepositional phrase, it indicates the elements, parts, or components that make up a whole.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This property is used to describe which voxels and materials an object is composed of.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "composedOf", + "en" : "composed of" + }, + "domain" : "129", + "attributes" : [ "external", "object" ], + "id" : "315" + }, { + "range" : "190", + "domain" : "189", + "attributes" : [ "anonymous", "object" ], + "id" : "317" + }, { + "range" : "11", + "domain" : "319", + "attributes" : [ "anonymous", "object" ], + "id" : "318" + }, { + "range" : "322", + "domain" : "321", + "attributes" : [ "anonymous", "object" ], + "id" : "320" + }, { + "range" : "11", + "domain" : "283", + "attributes" : [ "anonymous", "object" ], + "id" : "323" + }, { + "range" : "326", + "domain" : "325", + "attributes" : [ "anonymous", "object" ], + "id" : "324" + }, { + "iri" : "https://w3id.org/pmd/co/subordinateProcess", + "inverse" : "57", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "65", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "undefined", + "value" : "has subordinate process", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This property is used to link a process to its subordinate processes.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "subordinateProcess", + "en" : "subordinate process" + }, + "domain" : "65", + "attributes" : [ "external", "object" ], + "id" : "327" + }, { + "range" : "11", + "domain" : "332", + "attributes" : [ "anonymous", "object" ], + "id" : "331" + }, { + "range" : "326", + "domain" : "334", + "attributes" : [ "anonymous", "object" ], + "id" : "333" + }, { + "range" : "11", + "domain" : "42", + "attributes" : [ "anonymous", "object" ], + "id" : "337" + }, { + "range" : "326", + "domain" : "339", + "attributes" : [ "anonymous", "object" ], + "id" : "338" + }, { + "range" : "11", + "domain" : "341", + "attributes" : [ "anonymous", "object" ], + "id" : "340" + }, { + "range" : "293", + "domain" : "343", + "attributes" : [ "anonymous", "object" ], + "id" : "342" + }, { + "range" : "11", + "domain" : "346", + "attributes" : [ "anonymous", "object" ], + "id" : "345" + }, { + "range" : "293", + "domain" : "348", + "attributes" : [ "anonymous", "object" ], + "id" : "347" + }, { + "range" : "11", + "domain" : "313", + "attributes" : [ "anonymous", "object" ], + "id" : "349" + }, { + "range" : "223", + "domain" : "351", + "attributes" : [ "anonymous", "object" ], + "id" : "350" + }, { + "range" : "11", + "domain" : "100", + "attributes" : [ "anonymous", "object" ], + "id" : "352" + }, { + "range" : "223", + "domain" : "222", + "attributes" : [ "anonymous", "object" ], + "id" : "353" + }, { + "range" : "11", + "domain" : "228", + "attributes" : [ "anonymous", "object" ], + "id" : "354" + }, { + "range" : "223", + "domain" : "356", + "attributes" : [ "anonymous", "object" ], + "id" : "355" + }, { + "range" : "11", + "domain" : "69", + "attributes" : [ "anonymous", "object" ], + "id" : "357" + }, { + "range" : "190", + "domain" : "359", + "attributes" : [ "anonymous", "object" ], + "id" : "358" + }, { + "range" : "11", + "domain" : "361", + "attributes" : [ "anonymous", "object" ], + "id" : "360" + }, { + "range" : "51", + "domain" : "363", + "attributes" : [ "anonymous", "object" ], + "id" : "362" + }, { + "iri" : "http://purl.obolibrary.org/obo/RO_0000087", + "baseIri" : "http://purl.obolibrary.org/obo", + "range" : "175", + "label" : { + "IRI-based" : "RO_0000087", + "en" : "has role" + }, + "domain" : "51", + "attributes" : [ "external", "object" ], + "id" : "364" + }, { + "range" : "11", + "domain" : "183", + "attributes" : [ "anonymous", "object" ], + "id" : "365" + }, { + "range" : "82", + "domain" : "367", + "attributes" : [ "anonymous", "object" ], + "id" : "366" + }, { + "range" : "11", + "domain" : "372", + "attributes" : [ "anonymous", "object" ], + "id" : "371" + }, { + "range" : "82", + "domain" : "374", + "attributes" : [ "anonymous", "object" ], + "id" : "373" + }, { + "range" : "11", + "domain" : "155", + "attributes" : [ "anonymous", "object" ], + "id" : "375" + }, { + "range" : "378", + "domain" : "377", + "attributes" : [ "anonymous", "object" ], + "id" : "376" + }, { + "range" : "11", + "domain" : "380", + "attributes" : [ "anonymous", "object" ], + "id" : "379" + }, { + "range" : "378", + "domain" : "382", + "attributes" : [ "anonymous", "object" ], + "id" : "381" + }, { + "range" : "11", + "domain" : "310", + "attributes" : [ "anonymous", "object" ], + "id" : "383" + }, { + "range" : "223", + "domain" : "385", + "attributes" : [ "anonymous", "object" ], + "id" : "384" + }, { + "range" : "263", + "domain" : "146", + "attributes" : [ "anonymous", "object" ], + "id" : "387" + }, { + "range" : "243", + "domain" : "328", + "attributes" : [ "anonymous", "object" ], + "id" : "388" + }, { + "range" : "11", + "domain" : "13", + "attributes" : [ "anonymous", "object" ], + "id" : "389" + }, { + "range" : "243", + "domain" : "163", + "attributes" : [ "anonymous", "object" ], + "id" : "390" + }, { + "range" : "11", + "domain" : "392", + "attributes" : [ "anonymous", "object" ], + "id" : "391" + }, { + "range" : "51", + "domain" : "88", + "attributes" : [ "anonymous", "object" ], + "id" : "393" + }, { + "range" : "11", + "domain" : "395", + "attributes" : [ "anonymous", "object" ], + "id" : "394" + }, { + "range" : "51", + "domain" : "108", + "attributes" : [ "anonymous", "object" ], + "id" : "396" + }, { + "range" : "11", + "domain" : "305", + "attributes" : [ "anonymous", "object" ], + "id" : "397" + }, { + "range" : "51", + "domain" : "95", + "attributes" : [ "anonymous", "object" ], + "id" : "398" + }, { + "range" : "11", + "domain" : "293", + "attributes" : [ "anonymous", "object" ], + "id" : "399" + }, { + "iri" : "https://w3id.org/pmd/co/fragmentPath", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "401", + "annotations" : { + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A path expression that addresses a specific element in a document.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "fragmentPath", + "en" : "fragment path" + }, + "domain" : "54", + "attributes" : [ "external", "datatype" ], + "id" : "400" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedRevision", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "339", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "revisedEntity", + "type" : "label" + } ], + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Revision", + "type" : "iri" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasRevisionOf", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "qualifiedRevision", + "undefined" : "qualifiedRevision" + }, + "superproperty" : [ "9" ], + "domain" : "47", + "comment" : { + "en" : "If this Entity prov:wasRevisionOf Entity :e, then it can qualify how it was revised using prov:qualifiedRevision [ a prov:Revision; prov:entity :e; :foo :bar ]." + }, + "attributes" : [ "external", "object" ], + "id" : "404" + }, { + "range" : "72", + "domain" : "71", + "attributes" : [ "anonymous", "object" ], + "id" : "406" + }, { + "range" : "263", + "domain" : "110", + "attributes" : [ "anonymous", "object" ], + "id" : "407" + }, { + "range" : "243", + "domain" : "246", + "attributes" : [ "anonymous", "object" ], + "id" : "408" + }, { + "range" : "263", + "domain" : "410", + "attributes" : [ "anonymous", "object" ], + "id" : "409" + }, { + "range" : "243", + "domain" : "412", + "attributes" : [ "anonymous", "object" ], + "id" : "411" + }, { + "range" : "263", + "domain" : "98", + "attributes" : [ "anonymous", "object" ], + "id" : "413" + }, { + "range" : "243", + "domain" : "314", + "attributes" : [ "anonymous", "object" ], + "id" : "414" + }, { + "iri" : "https://w3id.org/pmd/co/executedBy", + "inverse" : "416", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "108", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This property represents which process is executed by which process node.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "executedBy", + "en" : "executed by" + }, + "superproperty" : [ "417" ], + "domain" : "65", + "attributes" : [ "external", "object" ], + "id" : "415" + }, { + "range" : "263", + "domain" : "405", + "attributes" : [ "anonymous", "object" ], + "id" : "418" + }, { + "range" : "243", + "domain" : "420", + "attributes" : [ "anonymous", "object" ], + "id" : "419" + }, { + "range" : "65", + "domain" : "78", + "attributes" : [ "anonymous", "object" ], + "id" : "421" + }, { + "range" : "100", + "domain" : "423", + "attributes" : [ "anonymous", "object" ], + "id" : "422" + }, { + "range" : "65", + "domain" : "2", + "attributes" : [ "anonymous", "object" ], + "id" : "424" + }, { + "range" : "100", + "domain" : "426", + "attributes" : [ "anonymous", "object" ], + "id" : "425" + }, { + "range" : "65", + "domain" : "237", + "attributes" : [ "anonymous", "object" ], + "id" : "430" + }, { + "range" : "100", + "domain" : "432", + "attributes" : [ "anonymous", "object" ], + "id" : "431" + }, { + "range" : "65", + "domain" : "434", + "attributes" : [ "anonymous", "object" ], + "id" : "433" + }, { + "range" : "100", + "domain" : "436", + "attributes" : [ "anonymous", "object" ], + "id" : "435" + }, { + "range" : "182", + "domain" : "44", + "attributes" : [ "anonymous", "object" ], + "id" : "437" + }, { + "range" : "100", + "domain" : "439", + "attributes" : [ "anonymous", "object" ], + "id" : "438" + }, { + "range" : "182", + "domain" : "188", + "attributes" : [ "anonymous", "object" ], + "id" : "440" + }, { + "range" : "100", + "domain" : "442", + "attributes" : [ "anonymous", "object" ], + "id" : "441" + }, { + "range" : "263", + "domain" : "444", + "attributes" : [ "anonymous", "object" ], + "id" : "443" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedInvalidation", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "27", + "annotations" : { + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Invalidation", + "type" : "iri" + } ], + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "qualifiedInvalidationOf", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasInvalidatedBy", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "qualifiedInvalidation", + "undefined" : "qualifiedInvalidation" + }, + "superproperty" : [ "9" ], + "domain" : "47", + "comment" : { + "en" : "If this Entity prov:wasInvalidatedBy Activity :a, then it can qualify how it was invalidated using prov:qualifiedInvalidation [ a prov:Invalidation; prov:activity :a; :foo :bar ]." + }, + "attributes" : [ "external", "object" ], + "id" : "445" + }, { + "iri" : "http://www.w3.org/ns/prov#wasPlanOf", + "inverse" : "449", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "448", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasPlanOf", + "undefined" : "wasPlanOf" + }, + "domain" : "136", + "attributes" : [ "external", "object" ], + "id" : "447" + }, { + "iri" : "http://www.w3.org/ns/prov#wasPrimarySourceOf", + "inverse" : "451", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "47", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasPrimarySourceOf", + "undefined" : "wasPrimarySourceOf" + }, + "domain" : "47", + "attributes" : [ "external", "object" ], + "id" : "450" + }, { + "iri" : "http://www.w3.org/ns/prov#started", + "inverse" : "453", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "104", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "started", + "undefined" : "started" + }, + "domain" : "47", + "attributes" : [ "external", "object" ], + "id" : "452" + }, { + "range" : "40", + "domain" : "22", + "attributes" : [ "anonymous", "object" ], + "id" : "456" + }, { + "range" : "65", + "domain" : "149", + "attributes" : [ "anonymous", "object" ], + "id" : "457" + }, { + "range" : "40", + "domain" : "27", + "attributes" : [ "anonymous", "object" ], + "id" : "458" + }, { + "range" : "65", + "domain" : "460", + "attributes" : [ "anonymous", "object" ], + "id" : "459" + }, { + "range" : "100", + "domain" : "99", + "attributes" : [ "anonymous", "object" ], + "id" : "461" + }, { + "range" : "65", + "domain" : "463", + "attributes" : [ "anonymous", "object" ], + "id" : "462" + }, { + "range" : "100", + "domain" : "309", + "attributes" : [ "anonymous", "object" ], + "id" : "464" + }, { + "iri" : "https://w3id.org/pmd/co/relatesTo", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "223", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Describes a general relationship between domain objects.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "relatesTo", + "en" : "relates to" + }, + "domain" : "152", + "subproperty" : [ "279", "154" ], + "attributes" : [ "external", "object", "someValues" ], + "id" : "465" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedDerivation", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "326", + "annotations" : { + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Derivation", + "type" : "iri" + } ], + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "qualifiedDerivationOf", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasDerivedFrom", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "qualifiedDerivation", + "undefined" : "qualifiedDerivation" + }, + "superproperty" : [ "9" ], + "domain" : "47", + "comment" : { + "en" : "If this Entity prov:wasDerivedFrom Entity :e, then it can qualify how it was derived using prov:qualifiedDerivation [ a prov:Derivation; prov:entity :e; :foo :bar ]." + }, + "attributes" : [ "external", "object" ], + "id" : "467" + }, { + "iri" : "http://www.w3.org/ns/prov#wasStartedBy", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "47", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "started", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#qualifiedStart", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Start", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasStartedBy", + "undefined" : "wasStartedBy" + }, + "superproperty" : [ "308" ], + "domain" : "104", + "comment" : { + "en" : "Start is when an activity is deemed to have started. A start may refer to an entity, known as trigger, that initiated the activity." + }, + "attributes" : [ "external", "object" ], + "id" : "453" + }, { + "iri" : "https://w3id.org/pmd/co/relatesTo", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "127", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Describes a general relationship between domain objects.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "relatesTo", + "en" : "relates to" + }, + "domain" : "370", + "subproperty" : [ "279", "154" ], + "attributes" : [ "external", "object", "someValues" ], + "id" : "470" + }, { + "iri" : "https://w3id.org/pmd/co/relatesTo", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "127", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Describes a general relationship between domain objects.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "relatesTo", + "en" : "relates to" + }, + "domain" : "472", + "subproperty" : [ "279", "154" ], + "attributes" : [ "external", "object", "someValues" ], + "id" : "471" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedEnd", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "31", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "qualifiedEndOf", + "type" : "label" + } ], + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#End", + "type" : "iri" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasEndedBy", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "qualifiedEnd", + "undefined" : "qualifiedEnd" + }, + "superproperty" : [ "9" ], + "domain" : "104", + "comment" : { + "en" : "If this Activity prov:wasEndedBy Entity :e1, then it can qualify how it was ended using prov:qualifiedEnd [ a prov:End; prov:entity :e1; :foo :bar ]." + }, + "attributes" : [ "external", "object" ], + "id" : "473" + }, { + "iri" : "https://w3id.org/pmd/co/relatesTo", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "118", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Describes a general relationship between domain objects.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "relatesTo", + "en" : "relates to" + }, + "domain" : "258", + "subproperty" : [ "279", "154" ], + "attributes" : [ "external", "object", "someValues" ], + "id" : "474" + }, { + "iri" : "http://www.w3.org/ns/prov#wasAssociatedWith", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "51", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "wasAssociateFor", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "starting-point", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#qualifiedAssociation", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Association", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasAssociatedWith", + "undefined" : "wasAssociatedWith" + }, + "superproperty" : [ "308" ], + "domain" : "104", + "subproperty" : [ "415" ], + "comment" : { + "en" : "An prov:Agent that had some (unspecified) responsibility for the occurrence of this prov:Activity." + }, + "attributes" : [ "external", "object" ], + "id" : "417" + }, { + "iri" : "https://w3id.org/pmd/co/relatesTo", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "118", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Describes a general relationship between domain objects.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "relatesTo", + "en" : "relates to" + }, + "domain" : "262", + "subproperty" : [ "279", "154" ], + "attributes" : [ "external", "object", "someValues" ], + "id" : "475" + }, { + "iri" : "https://w3id.org/pmd/co/relatesTo", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "127", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Describes a general relationship between domain objects.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "relatesTo", + "en" : "relates to" + }, + "domain" : "466", + "subproperty" : [ "279", "154" ], + "attributes" : [ "external", "object", "someValues" ], + "id" : "476" + }, { + "iri" : "https://w3id.org/pmd/co/relatesTo", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "118", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Describes a general relationship between domain objects.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "relatesTo", + "en" : "relates to" + }, + "domain" : "253", + "subproperty" : [ "279", "154" ], + "attributes" : [ "external", "object", "someValues" ], + "id" : "477" + }, { + "iri" : "https://w3id.org/pmd/co/relatesTo", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "206", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Describes a general relationship between domain objects.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "relatesTo", + "en" : "relates to" + }, + "domain" : "182", + "subproperty" : [ "279", "154" ], + "attributes" : [ "external", "object", "someValues" ], + "id" : "478" + }, { + "iri" : "https://w3id.org/pmd/co/relatesTo", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "481", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Describes a general relationship between domain objects.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "relatesTo", + "en" : "relates to" + }, + "domain" : "377", + "subproperty" : [ "279", "154" ], + "attributes" : [ "external", "object", "someValues" ], + "id" : "480" + }, { + "iri" : "https://w3id.org/pmd/co/relatesTo", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "118", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Describes a general relationship between domain objects.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "relatesTo", + "en" : "relates to" + }, + "domain" : "254", + "subproperty" : [ "279", "154" ], + "attributes" : [ "external", "object", "someValues" ], + "id" : "482" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedQuotationOf", + "inverse" : "484", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "47", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "qualifiedQuotationOf", + "undefined" : "qualifiedQuotationOf" + }, + "domain" : "325", + "attributes" : [ "external", "object" ], + "id" : "483" + }, { + "iri" : "http://www.w3.org/ns/prov#wasRevisionOf", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "48", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "hadRevision", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#qualifiedRevision", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Revision", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasRevisionOf", + "undefined" : "wasRevisionOf" + }, + "superproperty" : [ "486" ], + "domain" : "47", + "comment" : { + "en" : "A revision is a derivation that revises an entity into a revised version." + }, + "attributes" : [ "external", "object" ], + "id" : "485" + }, { + "iri" : "http://www.w3.org/ns/prov#hadInfluence", + "inverse" : "489", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "7", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "hadInfluence", + "undefined" : "hadInfluence" + }, + "domain" : "488", + "attributes" : [ "external", "object" ], + "id" : "487" + }, { + "iri" : "https://w3id.org/pmd/co/fromValue", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "497", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "undefined", + "value" : "refers to the begin of a value range", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "fromValue", + "en" : "from value" + }, + "domain" : "496", + "attributes" : [ "external", "datatype", "someValues" ], + "id" : "498" + }, { + "iri" : "https://w3id.org/pmd/co/toValue", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "479", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "undefined", + "value" : "refers to the end of a value range", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "toValue", + "en" : "to value" + }, + "domain" : "496", + "attributes" : [ "external", "datatype", "someValues" ], + "id" : "500" + }, { + "iri" : "https://w3id.org/pmd/co/relatesTo", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "127", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Describes a general relationship between domain objects.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "relatesTo", + "en" : "relates to" + }, + "domain" : "502", + "subproperty" : [ "279", "154" ], + "attributes" : [ "external", "object", "someValues" ], + "id" : "501" + }, { + "range" : "428", + "domain" : "429", + "attributes" : [ "anonymous", "object" ], + "id" : "503" + }, { + "range" : "374", + "domain" : "367", + "attributes" : [ "anonymous", "object" ], + "id" : "504" + }, { + "range" : "225", + "domain" : "274", + "attributes" : [ "anonymous", "object" ], + "id" : "505" + }, { + "range" : "274", + "domain" : "278", + "attributes" : [ "anonymous", "object" ], + "id" : "506" + }, { + "range" : "510", + "domain" : "20", + "attributes" : [ "anonymous", "object" ], + "id" : "509" + }, { + "range" : "65", + "domain" : "283", + "attributes" : [ "anonymous", "object" ], + "id" : "511" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedAttribution", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "513", + "annotations" : { + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Attribution", + "type" : "iri" + } ], + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "qualifiedAttributionOf", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasAttributedTo", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "qualifiedAttribution", + "undefined" : "qualifiedAttribution" + }, + "superproperty" : [ "9" ], + "domain" : "47", + "comment" : { + "en" : "If this Entity prov:wasAttributedTo Agent :ag, then it can qualify how it was influenced using prov:qualifiedAttribution [ a prov:Attribution; prov:agent :ag; :foo :bar ]." + }, + "attributes" : [ "external", "object" ], + "id" : "512" + }, { + "iri" : "http://www.w3.org/ns/prov#revisedEntity", + "inverse" : "404", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "47", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "revisedEntity", + "undefined" : "revisedEntity" + }, + "domain" : "339", + "attributes" : [ "external", "object" ], + "id" : "520" + }, { + "iri" : "http://www.w3.org/ns/prov#generalizationOf", + "inverse" : "46", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "47", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "generalizationOf", + "undefined" : "generalizationOf" + }, + "domain" : "48", + "attributes" : [ "external", "object" ], + "id" : "522" + }, { + "iri" : "http://www.w3.org/ns/prov#hadGeneration", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "22", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "generatedAsDerivation", + "type" : "label" + } ], + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Generation", + "type" : "iri" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "hadGeneration", + "undefined" : "hadGeneration" + }, + "domain" : "326", + "comment" : { + "en" : "The _optional_ Generation involved in an Entity's Derivation." + }, + "attributes" : [ "external", "object" ], + "id" : "529" + }, { + "iri" : "https://w3id.org/pmd/co/relatesTo", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "481", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Describes a general relationship between domain objects.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "relatesTo", + "en" : "relates to" + }, + "domain" : "378", + "subproperty" : [ "279", "154" ], + "attributes" : [ "external", "object", "someValues" ], + "id" : "530" + }, { + "iri" : "https://w3id.org/pmd/co/relatesTo", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "481", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Describes a general relationship between domain objects.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "relatesTo", + "en" : "relates to" + }, + "domain" : "382", + "subproperty" : [ "279", "154" ], + "attributes" : [ "external", "object", "someValues" ], + "id" : "531" + }, { + "iri" : "http://www.w3.org/ns/prov#startedAtTime", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "514", + "annotations" : { + "editorialNote" : [ { + "identifier" : "editorialNote", + "language" : "en", + "value" : "It is the intent that the property chain holds: (prov:qualifiedStart o prov:atTime) rdfs:subPropertyOf prov:startedAtTime.", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "starting-point", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#atTime", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Start", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "startedAtTime", + "undefined" : "startedAtTime" + }, + "domain" : "104", + "comment" : { + "en" : "The time at which an activity started. See also prov:endedAtTime." + }, + "attributes" : [ "external", "datatype" ], + "id" : "533" + }, { + "range" : "214", + "domain" : "217", + "attributes" : [ "anonymous", "object" ], + "id" : "534" + }, { + "range" : "33", + "domain" : "285", + "attributes" : [ "anonymous", "object" ], + "id" : "535" + }, { + "range" : "214", + "domain" : "216", + "attributes" : [ "anonymous", "object" ], + "id" : "536" + }, { + "range" : "37", + "domain" : "17", + "attributes" : [ "anonymous", "object" ], + "id" : "537" + }, { + "range" : "44", + "domain" : "43", + "attributes" : [ "anonymous", "object" ], + "id" : "538" + }, { + "range" : "37", + "domain" : "326", + "attributes" : [ "anonymous", "object" ], + "id" : "539" + }, { + "range" : "214", + "domain" : "218", + "attributes" : [ "anonymous", "object" ], + "id" : "540" + }, { + "range" : "37", + "domain" : "31", + "attributes" : [ "anonymous", "object" ], + "id" : "541" + }, { + "range" : "37", + "domain" : "35", + "attributes" : [ "anonymous", "object" ], + "id" : "542" + }, { + "iri" : "http://www.w3.org/ns/prov#wasQuotedFrom", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "47", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "quotedAs", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Quotation", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#qualifiedQuotation", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasQuotedFrom", + "undefined" : "wasQuotedFrom" + }, + "superproperty" : [ "486" ], + "domain" : "47", + "comment" : { + "en" : "An entity is derived from an original entity by copying, or 'quoting', some or all of it." + }, + "attributes" : [ "external", "object" ], + "id" : "543" + }, { + "range" : "481", + "domain" : "523", + "attributes" : [ "anonymous", "object" ], + "id" : "544" + }, { + "range" : "214", + "domain" : "215", + "attributes" : [ "anonymous", "object" ], + "id" : "545" + }, { + "range" : "481", + "domain" : "547", + "attributes" : [ "anonymous", "object" ], + "id" : "546" + }, { + "iri" : "http://www.w3.org/ns/prov#locationOf", + "inverse" : "73", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "74", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "locationOf", + "undefined" : "locationOf" + }, + "domain" : "75", + "attributes" : [ "external", "object" ], + "id" : "548" + }, { + "iri" : "https://w3id.org/pmd/co/jsonPath", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "550", + "annotations" : { + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A path expression that allows the elements of a JSON document to be specifically addressed.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "jsonPath", + "en" : "json path" + }, + "domain" : "54", + "attributes" : [ "external", "datatype" ], + "id" : "549" + }, { + "range" : "235", + "domain" : "552", + "attributes" : [ "anonymous", "object" ], + "id" : "551" + }, { + "range" : "235", + "domain" : "101", + "attributes" : [ "anonymous", "object" ], + "id" : "553" + }, { + "iri" : "http://www.w3.org/ns/prov#used", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "47", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "wasUsedBy", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "starting-point", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#qualifiedUsage", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Usage", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "used", + "undefined" : "used" + }, + "superproperty" : [ "308" ], + "domain" : "104", + "subproperty" : [ "555" ], + "comment" : { + "en" : "A prov:Entity that was used by this prov:Activity. For example, :baking prov:used :spoon, :egg, :oven ." + }, + "attributes" : [ "external", "object" ], + "id" : "554" + }, { + "range" : "235", + "domain" : "557", + "attributes" : [ "anonymous", "object" ], + "id" : "556" + }, { + "iri" : "http://www.w3.org/ns/prov#hadUsage", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "17", + "annotations" : { + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Usage", + "type" : "iri" + } ], + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "wasUsedInDerivation", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "hadUsage", + "undefined" : "hadUsage" + }, + "domain" : "326", + "comment" : { + "en" : "The _optional_ Usage involved in an Entity's Derivation." + }, + "attributes" : [ "external", "object" ], + "id" : "558" + }, { + "iri" : "http://www.w3.org/ns/prov#agent", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "51", + "annotations" : { + "editorialNote" : [ { + "identifier" : "editorialNote", + "language" : "en", + "value" : "This property behaves in spirit like rdf:object; it references the object of a prov:wasInfluencedBy triple.", + "type" : "label" + } ], + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "agentOfInfluence", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "editorsDefinition" : [ { + "identifier" : "editorsDefinition", + "language" : "en", + "value" : "The prov:agent property references an prov:Agent which influenced a resource. This property applies to an prov:AgentInfluence, which is given by a subproperty of prov:qualifiedInfluence from the influenced prov:Entity, prov:Activity or prov:Agent.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "agent", + "undefined" : "agent" + }, + "superproperty" : [ "489" ], + "domain" : "33", + "attributes" : [ "external", "object" ], + "id" : "144" + }, { + "range" : "92", + "domain" : "211", + "attributes" : [ "anonymous", "object" ], + "id" : "559" + }, { + "range" : "92", + "domain" : "91", + "attributes" : [ "anonymous", "object" ], + "id" : "560" + }, { + "range" : "99", + "domain" : "101", + "attributes" : [ "anonymous", "object" ], + "id" : "561" + }, { + "range" : "69", + "domain" : "70", + "attributes" : [ "anonymous", "object" ], + "id" : "562" + }, { + "range" : "148", + "domain" : "150", + "attributes" : [ "anonymous", "object" ], + "id" : "563" + }, { + "range" : "99", + "domain" : "102", + "attributes" : [ "anonymous", "object" ], + "id" : "565" + }, { + "range" : "90", + "domain" : "568", + "attributes" : [ "anonymous", "object" ], + "id" : "567" + }, { + "range" : "90", + "domain" : "219", + "attributes" : [ "anonymous", "object" ], + "id" : "570" + }, { + "iri" : "http://www.w3.org/ns/prov#alternateOf", + "inverse" : "49", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "47", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "alternateOf", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "alternate", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-alternate", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Two alternate entities present aspects of the same thing. These aspects may be the same or different, and the alternate entities may or may not overlap in time.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "constraints" : [ { + "identifier" : "constraints", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-constraints-20130430/#prov-dm-constraints-fig", + "type" : "label" + } ], + "seeAlso" : [ { + "identifier" : "seeAlso", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#specializationOf", + "type" : "iri" + } ], + "n" : [ { + "identifier" : "n", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-n-20130430/#expression-alternate", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "alternateOf", + "undefined" : "alternateOf" + }, + "domain" : "47", + "subproperty" : [ "46" ], + "attributes" : [ "external", "object" ], + "id" : "49" + }, { + "iri" : "https://w3id.org/pmd/co/characteristic", + "inverse" : "60", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "11", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "en", + "value" : "has characteristic", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "de", + "value" : "Die Objekteigenschaft characterisitc, wird in Verbindung mit ProzessKnoten, Prozess und Objekt verwendet und dient zur Herstellung einer Verbindung mit dem WerteObjekt. Diese Eigenschaft ermöglicht die Abbildung von Beziehungen zwischen ProzessKnoten, Prozessen und Objekten und den dazugehörigen Werten oder Attributen (Metadaten), die in WerteObjekt ausgedrückt sind.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "The object property characteristic, in conjunction with ProcessingNode, Process and Object, is used to establish a connection with ValueObjects. This property enables the representation of relationships between ProcessingNodes, Processes and Objects and the associated values or attributes (metadata) that are stored in ValueObjects.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "characteristic", + "en" : "characteristic" + }, + "superproperty" : [ "53" ], + "domain" : "524", + "attributes" : [ "external", "object" ], + "id" : "56" + }, { + "range" : "90", + "domain" : "564", + "attributes" : [ "anonymous", "object" ], + "id" : "572" + }, { + "range" : "251", + "domain" : "574", + "attributes" : [ "anonymous", "object" ], + "id" : "573" + }, { + "range" : "234", + "domain" : "306", + "attributes" : [ "anonymous", "object" ], + "id" : "575" + }, { + "range" : "336", + "domain" : "577", + "attributes" : [ "anonymous", "object" ], + "id" : "576" + }, { + "range" : "336", + "domain" : "335", + "attributes" : [ "anonymous", "object" ], + "id" : "578" + }, { + "range" : "455", + "domain" : "454", + "attributes" : [ "anonymous", "object" ], + "id" : "579" + }, { + "iri" : "https://w3id.org/pmd/co/xPath", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "581", + "annotations" : { + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A non-XML-based path expression that allows the elements of an XML document to be specifically addressed.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "xPath", + "en" : "x path" + }, + "domain" : "54", + "attributes" : [ "external", "datatype" ], + "id" : "580" + }, { + "range" : "33", + "domain" : "513", + "attributes" : [ "anonymous", "object" ], + "id" : "582" + }, { + "range" : "33", + "domain" : "448", + "attributes" : [ "anonymous", "object" ], + "id" : "584" + }, { + "iri" : "https://w3id.org/pmd/co/state", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "587", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "state", + "en" : "state" + }, + "domain" : "517", + "attributes" : [ "external", "object" ], + "id" : "586" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedGeneration", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "22", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "qualifiedGenerationOf", + "type" : "label" + } ], + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Generation", + "type" : "iri" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasGeneratedBy", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "qualifiedGeneration", + "undefined" : "qualifiedGeneration" + }, + "superproperty" : [ "9" ], + "domain" : "47", + "comment" : { + "en" : "If this Activity prov:generated Entity :e, then it can qualify how it performed the Generation using prov:qualifiedGeneration [ a prov:Generation; prov:entity :e; :foo :bar ]." + }, + "attributes" : [ "external", "object" ], + "id" : "588" + }, { + "iri" : "http://www.w3.org/ns/prov#hadDerivation", + "inverse" : "486", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "47", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "hadDerivation", + "undefined" : "hadDerivation" + }, + "domain" : "47", + "attributes" : [ "external", "object" ], + "id" : "589" + }, { + "range" : "142", + "domain" : "141", + "attributes" : [ "anonymous", "object" ], + "id" : "592" + }, { + "range" : "142", + "domain" : "119", + "attributes" : [ "anonymous", "object" ], + "id" : "593" + }, { + "range" : "149", + "domain" : "148", + "attributes" : [ "anonymous", "object" ], + "id" : "594" + }, { + "range" : "149", + "domain" : "427", + "attributes" : [ "anonymous", "object" ], + "id" : "595" + }, { + "range" : "368", + "domain" : "369", + "attributes" : [ "anonymous", "object" ], + "id" : "596" + }, { + "range" : "142", + "domain" : "402", + "attributes" : [ "anonymous", "object" ], + "id" : "598" + }, { + "range" : "368", + "domain" : "370", + "attributes" : [ "anonymous", "object" ], + "id" : "599" + }, { + "iri" : "http://www.w3.org/ns/prov#activity", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "104", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "activityOfInfluence", + "type" : "label" + } ], + "editorialNote" : [ { + "identifier" : "editorialNote", + "language" : "en", + "value" : "This property behaves in spirit like rdf:object; it references the object of a prov:wasInfluencedBy triple.", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "editorsDefinition" : [ { + "identifier" : "editorsDefinition", + "language" : "undefined", + "value" : "The prov:activity property references an prov:Activity which influenced a resource. This property applies to an prov:ActivityInfluence, which is given by a subproperty of prov:qualifiedInfluence from the influenced prov:Entity, prov:Activity or prov:Agent.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "activity", + "undefined" : "activity" + }, + "superproperty" : [ "489" ], + "domain" : "40", + "attributes" : [ "external", "object" ], + "id" : "602" + }, { + "iri" : "http://www.w3.org/ns/prov#hadMember", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "47", + "annotations" : { + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Collection", + "type" : "iri" + } ], + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "wasMemberOf", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "hadMember", + "undefined" : "hadMember" + }, + "superproperty" : [ "308" ], + "domain" : "132", + "attributes" : [ "external", "object" ], + "id" : "603" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedGenerationOf", + "inverse" : "588", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "47", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "qualifiedGenerationOf", + "undefined" : "qualifiedGenerationOf" + }, + "domain" : "22", + "attributes" : [ "external", "object" ], + "id" : "604" + }, { + "range" : "283", + "domain" : "344", + "attributes" : [ "anonymous", "object" ], + "id" : "605" + }, { + "range" : "310", + "domain" : "312", + "attributes" : [ "anonymous", "object" ], + "id" : "606" + }, { + "range" : "283", + "domain" : "282", + "attributes" : [ "anonymous", "object" ], + "id" : "607" + }, { + "range" : "283", + "domain" : "336", + "attributes" : [ "anonymous", "object" ], + "id" : "608" + }, { + "range" : "110", + "domain" : "270", + "attributes" : [ "anonymous", "object" ], + "id" : "609" + }, { + "range" : "110", + "domain" : "139", + "attributes" : [ "anonymous", "object" ], + "id" : "610" + }, { + "range" : "310", + "domain" : "311", + "attributes" : [ "anonymous", "object" ], + "id" : "611" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedAssociationOf", + "inverse" : "613", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "104", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "qualifiedAssociationOf", + "undefined" : "qualifiedAssociationOf" + }, + "domain" : "448", + "attributes" : [ "external", "object" ], + "id" : "612" + }, { + "range" : "288", + "domain" : "25", + "attributes" : [ "anonymous", "object" ], + "id" : "614" + }, { + "range" : "110", + "domain" : "269", + "attributes" : [ "anonymous", "object" ], + "id" : "615" + }, { + "range" : "110", + "domain" : "268", + "attributes" : [ "anonymous", "object" ], + "id" : "616" + }, { + "iri" : "http://www.w3.org/ns/prov#ended", + "inverse" : "618", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "104", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "ended", + "undefined" : "ended" + }, + "domain" : "47", + "attributes" : [ "external", "object" ], + "id" : "617" + }, { + "iri" : "http://www.w3.org/ns/prov#wasUsedBy", + "inverse" : "554", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "104", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasUsedBy", + "undefined" : "wasUsedBy" + }, + "domain" : "47", + "subproperty" : [ "620" ], + "attributes" : [ "external", "object" ], + "id" : "619" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedInfluence", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "7", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "qualifiedInfluenceOf", + "type" : "label" + } ], + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Influence", + "type" : "iri" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasInfluencedBy", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "qualifiedInfluence", + "undefined" : "qualifiedInfluence" + }, + "domain" : "8", + "subproperty" : [ "512", "467", "621", "445", "284", "622", "484", "588", "147", "473", "613", "404", "623" ], + "comment" : { + "en" : "Because prov:qualifiedInfluence is a broad relation, the more specific relations (qualifiedCommunication, qualifiedDelegation, qualifiedEnd, etc.) should be used when applicable." + }, + "attributes" : [ "external", "object" ], + "id" : "9" + }, { + "iri" : "http://www.w3.org/ns/prov#informed", + "inverse" : "68", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "104", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "informed", + "undefined" : "informed" + }, + "domain" : "104", + "attributes" : [ "external", "object" ], + "id" : "624" + }, { + "range" : "110", + "domain" : "267", + "attributes" : [ "anonymous", "object" ], + "id" : "625" + }, { + "iri" : "http://www.w3.org/ns/oa#hasSource", + "baseIri" : "http://www.w3.org/ns/oa", + "range" : "54", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/oa#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "hasSource" + }, + "superproperty" : [ "53" ], + "domain" : "54", + "attributes" : [ "external", "object" ], + "id" : "59" + }, { + "range" : "110", + "domain" : "264", + "attributes" : [ "anonymous", "object" ], + "id" : "626" + }, { + "range" : "110", + "domain" : "109", + "attributes" : [ "anonymous", "object" ], + "id" : "627" + }, { + "range" : "110", + "domain" : "266", + "attributes" : [ "anonymous", "object" ], + "id" : "628" + }, { + "range" : "110", + "domain" : "265", + "attributes" : [ "anonymous", "object" ], + "id" : "630" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedEndOf", + "inverse" : "473", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "104", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "qualifiedEndOf", + "undefined" : "qualifiedEndOf" + }, + "domain" : "31", + "attributes" : [ "external", "object" ], + "id" : "634" + }, { + "iri" : "http://www.w3.org/ns/oa#hasSelector", + "baseIri" : "http://www.w3.org/ns/oa", + "range" : "54", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/oa#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "hasSelector" + }, + "superproperty" : [ "53" ], + "domain" : "54", + "attributes" : [ "external", "object" ], + "id" : "55" + }, { + "iri" : "https://w3id.org/pmd/co/participantOf", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "54", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "en", + "value" : "is participant of", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "participantOf", + "en" : "participant of" + }, + "superproperty" : [ "53" ], + "domain" : "54", + "subproperty" : [ "620", "637" ], + "attributes" : [ "external", "object" ], + "id" : "58" + }, { + "iri" : "https://w3id.org/pmd/tto/relatesToExtension", + "baseIri" : "https://w3id.org/pmd/tto", + "range" : "502", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/tto", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "relatesToExtension", + "en" : "relates to extension" + }, + "superproperty" : [ "157" ], + "domain" : "369", + "attributes" : [ "external", "object" ], + "id" : "279" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedCommunicationOf", + "inverse" : "147", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "104", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "qualifiedCommunicationOf", + "undefined" : "qualifiedCommunicationOf" + }, + "domain" : "39", + "attributes" : [ "external", "object" ], + "id" : "638" + }, { + "iri" : "http://www.w3.org/ns/prov#generatedAtTime", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "518", + "annotations" : { + "editorialNote" : [ { + "identifier" : "editorialNote", + "language" : "en", + "value" : "It is the intent that the property chain holds: (prov:qualifiedGeneration o prov:atTime) rdfs:subPropertyOf prov:generatedAtTime.", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#atTime", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Generation", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "generatedAtTime", + "undefined" : "generatedAtTime" + }, + "domain" : "47", + "comment" : { + "en" : "The time at which an entity was completely created and is available for use." + }, + "attributes" : [ "external", "datatype" ], + "id" : "639" + }, { + "range" : "149", + "domain" : "63", + "attributes" : [ "anonymous", "object" ], + "id" : "640" + }, { + "range" : "149", + "domain" : "428", + "attributes" : [ "anonymous", "object" ], + "id" : "641" + }, { + "range" : "149", + "domain" : "429", + "attributes" : [ "anonymous", "object" ], + "id" : "642" + }, { + "iri" : "http://www.w3.org/ns/prov#value", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "591", + "annotations" : { + "editorialNote" : [ { + "identifier" : "editorialNote", + "language" : "en", + "value" : "This property serves the same purpose as rdf:value, but has been reintroduced to avoid some of the definitional ambiguity in the RDF specification (specifically, 'may be used in describing structured values').", + "type" : "label" + }, { + "identifier" : "editorialNote", + "language" : "undefined", + "value" : "The editor's definition comes from http://www.w3.org/TR/rdf-primer/#rdfvalue", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-attribute-value", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Provides a value that is a direct representation of an entity.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "value", + "undefined" : "value" + }, + "domain" : "47", + "attributes" : [ "external", "datatype" ], + "id" : "643" + }, { + "iri" : "http://www.w3.org/ns/prov#invalidated", + "inverse" : "307", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "47", + "annotations" : { + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Invalidation", + "type" : "iri" + } ], + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "wasInvalidatedBy", + "type" : "label" + } ], + "editorialNote" : [ { + "identifier" : "editorialNote", + "language" : "en", + "value" : "prov:invalidated is one of few inverse property defined, to allow Activity-oriented assertions in addition to Entity-oriented assertions.", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "invalidated", + "undefined" : "invalidated" + }, + "superproperty" : [ "645" ], + "domain" : "104", + "attributes" : [ "external", "object" ], + "id" : "644" + }, { + "iri" : "http://purl.org/spar/datacite/hasIdentifier", + "baseIri" : "http://purl.org/spar/datacite", + "range" : "631", + "label" : { + "IRI-based" : "hasIdentifier" + }, + "domain" : "590", + "attributes" : [ "external", "object" ], + "id" : "646" + }, { + "iri" : "https://w3id.org/pmd/co/outputOf", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "54", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "en", + "value" : "is output of", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "outputOf", + "en" : "output of" + }, + "superproperty" : [ "58" ], + "domain" : "54", + "attributes" : [ "external", "object" ], + "id" : "637" + }, { + "iri" : "https://w3id.org/pmd/co/inputOf", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "54", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "undefined", + "value" : "is input of", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "inputOf", + "en" : "input of" + }, + "superproperty" : [ "58", "619" ], + "domain" : "54", + "attributes" : [ "external", "object" ], + "id" : "620" + }, { + "iri" : "http://www.w3.org/ns/prov#wasDerivedFrom", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "47", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "hadDerivation", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A derivation is a transformation of an entity into another, an update of an entity resulting in a new one, or the construction of a new entity based on a pre-existing entity.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "starting-point", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Derivation", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#qualifiedDerivation", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasDerivedFrom", + "undefined" : "wasDerivedFrom" + }, + "superproperty" : [ "308" ], + "domain" : "47", + "subproperty" : [ "451", "485", "543" ], + "comment" : { + "en" : "The more specific subproperties of prov:wasDerivedFrom (i.e., prov:wasQuotedFrom, prov:wasRevisionOf, prov:hadPrimarySource) should be used when applicable." + }, + "attributes" : [ "external", "object" ], + "id" : "486" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedStart", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "35", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "qualifiedStartOf", + "type" : "label" + } ], + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Start", + "type" : "iri" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasStartedBy", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "qualifiedStart", + "undefined" : "qualifiedStart" + }, + "superproperty" : [ "9" ], + "domain" : "104", + "comment" : { + "en" : "If this Activity prov:wasStartedBy Entity :e1, then it can qualify how it was started using prov:qualifiedStart [ a prov:Start; prov:entity :e1; :foo :bar ]." + }, + "attributes" : [ "external", "object" ], + "id" : "622" + }, { + "iri" : "https://w3id.org/pmd/co/nextProcess", + "inverse" : "650", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "65", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "en", + "value" : "has next process", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This property is used to indicate the process that was run after the current process.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "nextProcess", + "en" : "next process" + }, + "superproperty" : [ "68" ], + "domain" : "65", + "attributes" : [ "external", "object" ], + "id" : "649" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedQuotation", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "325", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "qualifiedQuotationOf", + "type" : "label" + } ], + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Quotation", + "type" : "iri" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasQuotedFrom", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "qualifiedQuotation", + "undefined" : "qualifiedQuotation" + }, + "superproperty" : [ "9" ], + "domain" : "47", + "comment" : { + "en" : "If this Entity prov:wasQuotedFrom Entity :e, then it can qualify how using prov:qualifiedQuotation [ a prov:Quotation; prov:entity :e; :foo :bar ]." + }, + "attributes" : [ "external", "object" ], + "id" : "484" + }, { + "iri" : "https://w3id.org/pmd/co/hasFunction", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "54", + "label" : { + "IRI-based" : "hasFunction" + }, + "domain" : "54", + "attributes" : [ "external", "object" ], + "id" : "651" + }, { + "iri" : "http://www.w3.org/ns/prov#hadPlan", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "136", + "annotations" : { + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Plan", + "type" : "iri" + } ], + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "wasPlanOf", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "hadPlan", + "undefined" : "hadPlan" + }, + "domain" : "448", + "comment" : { + "en" : "The _optional_ Plan adopted by an Agent in Association with some Activity. Plan specifications are out of the scope of this specification." + }, + "attributes" : [ "external", "object" ], + "id" : "449" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedUsage", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "17", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "qualifiedUsingActivity", + "type" : "label" + } ], + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Usage", + "type" : "iri" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#used", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "qualifiedUsage", + "undefined" : "qualifiedUsage" + }, + "superproperty" : [ "9" ], + "domain" : "104", + "comment" : { + "en" : "If this Activity prov:used Entity :e, then it can qualify how it used it using prov:qualifiedUsage [ a prov:Usage; prov:entity :e; :foo :bar ]." + }, + "attributes" : [ "external", "object" ], + "id" : "621" + }, { + "iri" : "https://w3id.org/pmd/co/value", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "516", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Provides the actual value a value object is referring to.", + "type" : "label" + } ] + }, + "label" : { + "de" : "hat Wert", + "IRI-based" : "value", + "en" : "value" + }, + "domain" : "11", + "attributes" : [ "external", "datatype" ], + "id" : "653" + }, { + "iri" : "http://www.w3.org/ns/prov#wasUsedInDerivation", + "inverse" : "558", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "326", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasUsedInDerivation", + "undefined" : "wasUsedInDerivation" + }, + "domain" : "17", + "attributes" : [ "external", "object" ], + "id" : "654" + }, { + "iri" : "https://w3id.org/pmd/co/isResourceOf", + "inverse" : "10", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "11", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "isResourceOf", + "undefined" : "is resource of" + }, + "domain" : "12", + "attributes" : [ "external", "object" ], + "id" : "655" + }, { + "iri" : "https://w3id.org/pmd/co/maxValue", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "566", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "refers to all values equal or smaller than the given one", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "maxValue", + "en" : "max value" + }, + "domain" : "54", + "attributes" : [ "external", "datatype" ], + "id" : "657" + }, { + "iri" : "http://www.w3.org/ns/prov#wasAssociateFor", + "inverse" : "417", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "104", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasAssociateFor", + "undefined" : "wasAssociateFor" + }, + "domain" : "51", + "attributes" : [ "external", "object" ], + "id" : "658" + }, { + "iri" : "http://www.w3.org/ns/prov#wasInfluencedBy", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "527", + "annotations" : { + "editorialNote" : [ { + "identifier" : "editorialNote", + "language" : "en", + "value" : "The sub-properties of prov:wasInfluencedBy can be elaborated in more detail using the Qualification Pattern. For example, the binary relation :baking prov:used :spoon can be qualified by asserting :baking prov:qualifiedUsage [ a prov:Usage; prov:entity :spoon; prov:atLocation :kitchen ] .\n\nSubproperties of prov:wasInfluencedBy may also be asserted directly without being qualified.\n\nprov:wasInfluencedBy should not be used without also using one of its subproperties. \n", + "type" : "label" + } ], + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Influence", + "type" : "iri" + } ], + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "influenced", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Influence", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#qualifiedInfluence", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasInfluencedBy", + "undefined" : "wasInfluencedBy" + }, + "domain" : "528", + "subproperty" : [ "618", "659", "486", "660", "554", "417", "453", "52", "68", "307", "603" ], + "comment" : { + "en" : "Because prov:wasInfluencedBy is a broad relation, its more specific subproperties (e.g. prov:wasInformedBy, prov:actedOnBehalfOf, prov:wasEndedBy, etc.) should be used when applicable.", + "undefined" : "This property has multiple RDFS domains to suit multiple OWL Profiles. See PROV-O OWL Profile." + }, + "attributes" : [ "external", "object" ], + "id" : "308" + }, { + "iri" : "http://www.w3.org/ns/prov#hadRevision", + "inverse" : "485", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "47", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "hadRevision", + "undefined" : "hadRevision" + }, + "domain" : "48", + "attributes" : [ "external", "object" ], + "id" : "661" + }, { + "iri" : "http://www.w3.org/ns/prov#wasAttributedTo", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "51", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "contributed", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Attribution is the ascribing of an entity to an agent.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "starting-point", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Attribution", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#qualifiedAttribution", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasAttributedTo", + "undefined" : "wasAttributedTo" + }, + "superproperty" : [ "308" ], + "domain" : "47", + "comment" : { + "en" : "Attribution is the ascribing of an entity to an agent." + }, + "attributes" : [ "external", "object" ], + "id" : "660" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedPrimarySource", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "334", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "qualifiedSourceOf", + "type" : "label" + } ], + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#PrimarySource", + "type" : "iri" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#hadPrimarySource", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "qualifiedPrimarySource", + "undefined" : "qualifiedPrimarySource" + }, + "superproperty" : [ "9" ], + "domain" : "47", + "comment" : { + "en" : "If this Entity prov:hadPrimarySource Entity :e, then it can qualify how using prov:qualifiedPrimarySource [ a prov:PrimarySource; prov:entity :e; :foo :bar ]." + }, + "attributes" : [ "external", "object" ], + "id" : "623" + }, { + "iri" : "http://www.w3.org/ns/prov#wasMemberOf", + "inverse" : "603", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "132", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasMemberOf", + "undefined" : "wasMemberOf" + }, + "domain" : "47", + "attributes" : [ "external", "object" ], + "id" : "662" + }, { + "iri" : "http://www.w3.org/ns/prov#hadActivity", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "104", + "annotations" : { + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Activity", + "type" : "iri" + } ], + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "wasActivityOfInfluence", + "type" : "label" + } ], + "editorialNote" : [ { + "identifier" : "editorialNote", + "language" : "en", + "value" : "The multiple rdfs:domain assertions are intended. One is simpler and works for OWL-RL, the union is more specific but is not recognized by OWL-RL.", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "hadActivity", + "undefined" : "hadActivity" + }, + "domain" : "571", + "comment" : { + "en" : "The _optional_ Activity of an Influence, which used, generated, invalidated, or was the responsibility of some Entity. This property is _not_ used by ActivityInfluence (use prov:activity instead).", + "undefined" : "This property has multiple RDFS domains to suit multiple OWL Profiles. See PROV-O OWL Profile." + }, + "attributes" : [ "external", "object" ], + "id" : "663" + }, { + "iri" : "https://w3id.org/pmd/co/participant", + "inverse" : "58", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "519", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "A relation between a process and an object, in which the objects is somehow involved in the process.", + "type" : "label" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "undefined", + "value" : "has participant", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "participant", + "en" : "participant" + }, + "domain" : "65", + "subproperty" : [ "555", "665" ], + "attributes" : [ "external", "object" ], + "id" : "664" + }, { + "iri" : "http://www.w3.org/ns/prov#quotedAs", + "inverse" : "543", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "47", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "quotedAs", + "undefined" : "quotedAs" + }, + "domain" : "47", + "attributes" : [ "external", "object" ], + "id" : "666" + }, { + "range" : "330", + "domain" : "466", + "attributes" : [ "anonymous", "object" ], + "id" : "667" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedInvalidationOf", + "inverse" : "445", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "47", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "qualifiedInvalidationOf", + "undefined" : "qualifiedInvalidationOf" + }, + "domain" : "27", + "attributes" : [ "external", "object" ], + "id" : "668" + }, { + "range" : "330", + "domain" : "508", + "attributes" : [ "anonymous", "object" ], + "id" : "669" + }, { + "range" : "330", + "domain" : "329", + "attributes" : [ "anonymous", "object" ], + "id" : "670" + }, { + "range" : "237", + "domain" : "236", + "attributes" : [ "anonymous", "object" ], + "id" : "671" + }, { + "iri" : "https://w3id.org/pmd/co/previousProcess", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "65", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This property is used to indicate that which process was previously run.", + "type" : "label" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "undefined", + "value" : "has previous process", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "previousProcess", + "en" : "previous process" + }, + "domain" : "65", + "attributes" : [ "external", "object" ], + "id" : "650" + }, { + "range" : "237", + "domain" : "510", + "attributes" : [ "anonymous", "object" ], + "id" : "672" + }, { + "range" : "129", + "domain" : "525", + "attributes" : [ "anonymous", "object" ], + "id" : "673" + }, { + "range" : "129", + "domain" : "5", + "attributes" : [ "anonymous", "object" ], + "id" : "675" + }, { + "range" : "129", + "domain" : "178", + "attributes" : [ "anonymous", "object" ], + "id" : "676" + }, { + "range" : "108", + "domain" : "386", + "attributes" : [ "anonymous", "object" ], + "id" : "677" + }, { + "range" : "108", + "domain" : "107", + "attributes" : [ "anonymous", "object" ], + "id" : "678" + }, { + "range" : "330", + "domain" : "472", + "attributes" : [ "anonymous", "object" ], + "id" : "679" + }, { + "iri" : "http://www.w3.org/ns/prov#wasEndedBy", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "47", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "ended", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#End", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#qualifiedEnd", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasEndedBy", + "undefined" : "wasEndedBy" + }, + "superproperty" : [ "308" ], + "domain" : "104", + "comment" : { + "en" : "End is when an activity is deemed to have ended. An end may refer to an entity, known as trigger, that terminated the activity." + }, + "attributes" : [ "external", "object" ], + "id" : "618" + }, { + "range" : "11", + "domain" : "278", + "attributes" : [ "anonymous", "object" ], + "id" : "680" + }, { + "range" : "11", + "domain" : "90", + "attributes" : [ "anonymous", "object" ], + "id" : "681" + }, { + "range" : "11", + "domain" : "322", + "attributes" : [ "anonymous", "object" ], + "id" : "682" + }, { + "iri" : "http://www.w3.org/ns/prov#wasActivityOfInfluence", + "inverse" : "663", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "571", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasActivityOfInfluence", + "undefined" : "wasActivityOfInfluence" + }, + "domain" : "104", + "attributes" : [ "external", "object" ], + "id" : "683" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedAttributionOf", + "inverse" : "512", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "47", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "qualifiedAttributionOf", + "undefined" : "qualifiedAttributionOf" + }, + "domain" : "513", + "attributes" : [ "external", "object" ], + "id" : "684" + }, { + "range" : "11", + "domain" : "495", + "attributes" : [ "anonymous", "object" ], + "id" : "685" + }, { + "range" : "11", + "domain" : "153", + "attributes" : [ "anonymous", "object" ], + "id" : "686" + }, { + "range" : "11", + "domain" : "496", + "attributes" : [ "anonymous", "object" ], + "id" : "687" + }, { + "range" : "11", + "domain" : "288", + "attributes" : [ "anonymous", "object" ], + "id" : "688" + }, { + "range" : "330", + "domain" : "507", + "attributes" : [ "anonymous", "object" ], + "id" : "689" + }, { + "range" : "330", + "domain" : "502", + "attributes" : [ "anonymous", "object" ], + "id" : "690" + }, { + "range" : "11", + "domain" : "190", + "attributes" : [ "anonymous", "object" ], + "id" : "691" + }, { + "range" : "90", + "domain" : "89", + "attributes" : [ "anonymous", "object" ], + "id" : "692" + }, { + "range" : "11", + "domain" : "494", + "attributes" : [ "anonymous", "object" ], + "id" : "693" + }, { + "iri" : "http://www.w3.org/ns/prov#hadPrimarySource", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "47", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "wasPrimarySourceOf", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "derivations", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#qualifiedPrimarySource", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#PrimarySource", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "hadPrimarySource", + "undefined" : "hadPrimarySource" + }, + "superproperty" : [ "486" ], + "domain" : "47", + "attributes" : [ "external", "object" ], + "id" : "451" + }, { + "iri" : "http://www.w3.org/ns/prov#influenced", + "inverse" : "308", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "528", + "annotations" : { + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Influence", + "type" : "iri" + } ], + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "wasInfluencedBy", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "influenced", + "undefined" : "influenced" + }, + "domain" : "527", + "subproperty" : [ "694", "644" ], + "attributes" : [ "external", "object" ], + "id" : "645" + }, { + "range" : "369", + "domain" : "585", + "attributes" : [ "anonymous", "object" ], + "id" : "695" + }, { + "range" : "11", + "domain" : "378", + "attributes" : [ "anonymous", "object" ], + "id" : "696" + }, { + "range" : "302", + "domain" : "521", + "attributes" : [ "anonymous", "object" ], + "id" : "697" + }, { + "range" : "11", + "domain" : "493", + "attributes" : [ "anonymous", "object" ], + "id" : "698" + }, { + "range" : "302", + "domain" : "600", + "attributes" : [ "anonymous", "object" ], + "id" : "699" + }, { + "range" : "11", + "domain" : "142", + "attributes" : [ "anonymous", "object" ], + "id" : "700" + }, { + "range" : "302", + "domain" : "601", + "attributes" : [ "anonymous", "object" ], + "id" : "701" + }, { + "range" : "11", + "domain" : "220", + "attributes" : [ "anonymous", "object" ], + "id" : "702" + }, { + "range" : "302", + "domain" : "468", + "attributes" : [ "anonymous", "object" ], + "id" : "703" + }, { + "range" : "11", + "domain" : "223", + "attributes" : [ "anonymous", "object" ], + "id" : "704" + }, { + "range" : "302", + "domain" : "629", + "attributes" : [ "anonymous", "object" ], + "id" : "705" + }, { + "range" : "11", + "domain" : "403", + "attributes" : [ "anonymous", "object" ], + "id" : "706" + }, { + "range" : "63", + "domain" : "62", + "attributes" : [ "anonymous", "object" ], + "id" : "707" + }, { + "range" : "11", + "domain" : "221", + "attributes" : [ "anonymous", "object" ], + "id" : "708" + }, { + "range" : "63", + "domain" : "140", + "attributes" : [ "anonymous", "object" ], + "id" : "709" + }, { + "range" : "11", + "domain" : "254", + "attributes" : [ "anonymous", "object" ], + "id" : "710" + }, { + "range" : "232", + "domain" : "499", + "attributes" : [ "anonymous", "object" ], + "id" : "711" + }, { + "range" : "11", + "domain" : "92", + "attributes" : [ "anonymous", "object" ], + "id" : "712" + }, { + "range" : "239", + "domain" : "499", + "attributes" : [ "anonymous", "object" ], + "id" : "713" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedStartOf", + "inverse" : "622", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "104", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "qualifiedStartOf", + "undefined" : "qualifiedStartOf" + }, + "domain" : "35", + "attributes" : [ "external", "object" ], + "id" : "714" + }, { + "range" : "11", + "domain" : "235", + "attributes" : [ "anonymous", "object" ], + "id" : "715" + }, { + "range" : "369", + "domain" : "583", + "attributes" : [ "anonymous", "object" ], + "id" : "716" + }, { + "range" : "11", + "domain" : "214", + "attributes" : [ "anonymous", "object" ], + "id" : "717" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedDerivationOf", + "inverse" : "467", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "47", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "qualifiedDerivationOf", + "undefined" : "qualifiedDerivationOf" + }, + "domain" : "326", + "attributes" : [ "external", "object" ], + "id" : "718" + }, { + "iri" : "https://w3id.org/pmd/co/unit", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "12", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "en", + "value" : "has unit", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "Unit of measurement.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "unit", + "en" : "unit" + }, + "domain" : "11", + "comment" : { + "undefined" : "Examples for rdsf:range are units from qudt or wikidata or own defindes units." + }, + "attributes" : [ "external", "object" ], + "id" : "719" + }, { + "iri" : "https://w3id.org/pmd/co/input", + "inverse" : "620", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "54", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "undefined", + "value" : "has input", + "type" : "label" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This property is used to link the processes to their input objects.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "input", + "en" : "input" + }, + "superproperty" : [ "664", "554" ], + "domain" : "54", + "attributes" : [ "external", "object" ], + "id" : "555" + }, { + "range" : "146", + "domain" : "145", + "attributes" : [ "anonymous", "object" ], + "id" : "720" + }, { + "range" : "11", + "domain" : "490", + "attributes" : [ "anonymous", "object" ], + "id" : "721" + }, { + "range" : "146", + "domain" : "632", + "attributes" : [ "anonymous", "object" ], + "id" : "722" + }, { + "range" : "11", + "domain" : "455", + "attributes" : [ "anonymous", "object" ], + "id" : "723" + }, { + "range" : "146", + "domain" : "648", + "attributes" : [ "anonymous", "object" ], + "id" : "724" + }, { + "iri" : "http://www.w3.org/ns/prov#influencer", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "488", + "annotations" : { + "editorialNote" : [ { + "identifier" : "editorialNote", + "language" : "en", + "value" : "This property and its subproperties are used in the same way as the rdf:object property, i.e. to reference the object of an unqualified prov:wasInfluencedBy or prov:influenced triple.", + "type" : "label" + } ], + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "hadInfluence", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "dm" : [ { + "identifier" : "dm", + "language" : "undefined", + "value" : "http://www.w3.org/TR/2013/REC-prov-dm-20130430/#term-influence", + "type" : "label" + } ], + "editorsDefinition" : [ { + "identifier" : "editorsDefinition", + "language" : "en", + "value" : "This property is used as part of the qualified influence pattern. Subclasses of prov:Influence use these subproperties to reference the resource (Entity, Agent, or Activity) whose influence is being qualified.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "influencer", + "undefined" : "influencer" + }, + "domain" : "7", + "subproperty" : [ "144", "172", "602" ], + "comment" : { + "en" : "Subproperties of prov:influencer are used to cite the object of an unqualified PROV-O triple whose predicate is a subproperty of prov:wasInfluencedBy (e.g. prov:used, prov:wasGeneratedBy). prov:influencer is used much like rdf:object is used." + }, + "attributes" : [ "external", "object" ], + "id" : "489" + }, { + "range" : "11", + "domain" : "481", + "attributes" : [ "anonymous", "object" ], + "id" : "725" + }, { + "range" : "42", + "domain" : "652", + "attributes" : [ "anonymous", "object" ], + "id" : "726" + }, { + "range" : "11", + "domain" : "368", + "attributes" : [ "anonymous", "object" ], + "id" : "727" + }, { + "range" : "42", + "domain" : "597", + "attributes" : [ "anonymous", "object" ], + "id" : "728" + }, { + "range" : "11", + "domain" : "330", + "attributes" : [ "anonymous", "object" ], + "id" : "729" + }, { + "range" : "42", + "domain" : "41", + "attributes" : [ "anonymous", "object" ], + "id" : "730" + }, { + "range" : "11", + "domain" : "491", + "attributes" : [ "anonymous", "object" ], + "id" : "731" + }, { + "range" : "42", + "domain" : "635", + "attributes" : [ "anonymous", "object" ], + "id" : "732" + }, { + "range" : "11", + "domain" : "492", + "attributes" : [ "anonymous", "object" ], + "id" : "733" + }, { + "range" : "42", + "domain" : "166", + "attributes" : [ "anonymous", "object" ], + "id" : "734" + }, { + "iri" : "http://www.w3.org/ns/prov#contributed", + "inverse" : "660", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "47", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "contributed", + "undefined" : "contributed" + }, + "domain" : "51", + "attributes" : [ "external", "object" ], + "id" : "735" + }, { + "iri" : "https://w3id.org/pmd/co/superordinateProcess", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "54", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This property is used to link a process to its super ordinated processes.", + "type" : "label" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "en", + "value" : "has superordinate process", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "superordinateProcess", + "en" : "superordinate process" + }, + "superproperty" : [ "53" ], + "domain" : "54", + "attributes" : [ "external", "object" ], + "id" : "57" + }, { + "iri" : "http://www.w3.org/ns/prov#generatedAsDerivation", + "inverse" : "529", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "326", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "generatedAsDerivation", + "undefined" : "generatedAsDerivation" + }, + "domain" : "22", + "attributes" : [ "external", "object" ], + "id" : "736" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedDelegationOf", + "inverse" : "284", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "51", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "qualifiedDelegationOf", + "undefined" : "qualifiedDelegationOf" + }, + "domain" : "285", + "attributes" : [ "external", "object" ], + "id" : "737" + }, { + "iri" : "https://w3id.org/pmd/co/executes", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "65", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This property represents which ProcessingNode executes a Process.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "executes", + "en" : "executes" + }, + "domain" : "108", + "attributes" : [ "external", "object" ], + "id" : "416" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedAssociation", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "448", + "annotations" : { + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Association", + "type" : "iri" + } ], + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "qualifiedAssociationOf", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "unqualifiedForm" : [ { + "identifier" : "unqualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#wasAssociatedWith", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "qualifiedAssociation", + "undefined" : "qualifiedAssociation" + }, + "superproperty" : [ "9" ], + "domain" : "104", + "comment" : { + "en" : "If this Activity prov:wasAssociatedWith Agent :ag, then it can qualify the Association using prov:qualifiedAssociation [ a prov:Association; prov:agent :ag; :foo :bar ]." + }, + "attributes" : [ "external", "object" ], + "id" : "613" + }, { + "iri" : "https://w3id.org/pmd/co/composes", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "129", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This property is used to describe which objects a voxel or a material contributes to compose.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "en", + "value" : "This property is used to describe the fact that and which objects compose other objects, i.e. it is used to describe the specific constituents or ingredients forming a particular entity or object. \nAs a prepositional phrase, it indicates the elements, parts, or components that make up a whole of another object.", + "type" : "label" + }, { + "identifier" : "definition", + "language" : "de", + "value" : "Diese Eigenschaft wird verwendet, um die Tatsache zu beschreiben, dass und welche Objekte andere Objekte zusammensetzen, d. h. sie wird verwendet, um die spezifischen Bestandteile oder Zutaten zu beschreiben, aus denen ein bestimmtes Gebilde oder Objekt besteht. \nAls Präpositionalphrase bezeichnet sie die Elemente, Teile oder Komponenten, aus denen sich ein anderes Objekt zusammensetzt.", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "composes", + "en" : "composes" + }, + "domain" : "129", + "attributes" : [ "external", "object" ], + "id" : "316" + }, { + "iri" : "http://www.w3.org/ns/prov#invalidatedAtTime", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "515", + "annotations" : { + "editorialNote" : [ { + "identifier" : "editorialNote", + "language" : "en", + "value" : "It is the intent that the property chain holds: (prov:qualifiedInvalidation o prov:atTime) rdfs:subPropertyOf prov:invalidatedAtTime.", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Invalidation", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#atTime", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "invalidatedAtTime", + "undefined" : "invalidatedAtTime" + }, + "domain" : "47", + "comment" : { + "en" : "The time at which an entity was invalidated (i.e., no longer usable)." + }, + "attributes" : [ "external", "datatype" ], + "id" : "738" + }, { + "iri" : "http://www.w3.org/ns/prov#wasInformedBy", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "104", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "informed", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "starting-point", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Communication", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#qualifiedCommunication", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasInformedBy", + "undefined" : "wasInformedBy" + }, + "superproperty" : [ "308" ], + "domain" : "104", + "subproperty" : [ "64", "649" ], + "comment" : { + "en" : "An activity a2 is dependent on or informed by another activity a1, by way of some unspecified entity that is generated by a1 and used by a2." + }, + "attributes" : [ "external", "object" ], + "id" : "68" + }, { + "iri" : "https://w3id.org/pmd/co/output", + "inverse" : "637", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "54", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "definition" : [ { + "identifier" : "definition", + "language" : "en", + "value" : "This property is used to link the processes to their output objects", + "type" : "label" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "undefined", + "value" : "has output", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "output", + "en" : "output" + }, + "superproperty" : [ "664", "694" ], + "domain" : "54", + "attributes" : [ "external", "object" ], + "id" : "665" + }, { + "iri" : "http://www.w3.org/ns/prov#generated", + "inverse" : "659", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "47", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "wasGeneratedBy", + "type" : "label" + } ], + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Generation", + "type" : "iri" + } ], + "editorialNote" : [ { + "identifier" : "editorialNote", + "language" : "en", + "value" : "prov:generated is one of few inverse property defined, to allow Activity-oriented assertions in addition to Entity-oriented assertions.", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "expanded", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "generated", + "undefined" : "generated" + }, + "superproperty" : [ "645" ], + "domain" : "104", + "subproperty" : [ "665" ], + "attributes" : [ "external", "object" ], + "id" : "694" + }, { + "iri" : "http://www.w3.org/ns/prov#actedOnBehalfOf", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "51", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "hadDelegate", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "starting-point", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#qualifiedDelegation", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Delegation", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "actedOnBehalfOf", + "undefined" : "actedOnBehalfOf" + }, + "superproperty" : [ "308" ], + "domain" : "51", + "comment" : { + "en" : "An object property to express the accountability of an agent towards another agent. The subordinate agent acted on behalf of the responsible agent in an actual activity. " + }, + "attributes" : [ "external", "object" ], + "id" : "52" + }, { + "iri" : "http://www.w3.org/ns/prov#wasGeneratedBy", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "104", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "generated", + "type" : "label" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "entities-activities", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "starting-point", + "type" : "label" + } ], + "qualifiedForm" : [ { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#qualifiedGeneration", + "type" : "iri" + }, { + "identifier" : "qualifiedForm", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Generation", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasGeneratedBy", + "undefined" : "wasGeneratedBy" + }, + "superproperty" : [ "308" ], + "domain" : "47", + "attributes" : [ "external", "object" ], + "id" : "659" + }, { + "iri" : "http://www.w3.org/ns/prov#entity", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "47", + "annotations" : { + "editorialNote" : [ { + "identifier" : "editorialNote", + "language" : "en", + "value" : "This property behaves in spirit like rdf:object; it references the object of a prov:wasInfluencedBy triple.", + "type" : "label" + } ], + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "entityOfInfluence", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "editorsDefinition" : [ { + "identifier" : "editorsDefinition", + "language" : "undefined", + "value" : "The prov:entity property references an prov:Entity which influenced a resource. This property applies to an prov:EntityInfluence, which is given by a subproperty of prov:qualifiedInfluence from the influenced prov:Entity, prov:Activity or prov:Agent.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "entity", + "undefined" : "entity" + }, + "superproperty" : [ "489" ], + "domain" : "37", + "attributes" : [ "external", "object" ], + "id" : "172" + }, { + "range" : "18", + "domain" : "51", + "attributes" : [ "anonymous", "object" ], + "id" : "739" + }, { + "range" : "18", + "domain" : "47", + "attributes" : [ "anonymous", "object" ], + "id" : "740" + }, { + "iri" : "http://purl.org/dc/terms/isPartOf", + "baseIri" : "http://purl.org/dc/terms", + "range" : "155", + "label" : { + "IRI-based" : "isPartOf" + }, + "superproperty" : [ "53" ], + "domain" : "395", + "attributes" : [ "external", "object", "someValues" ], + "id" : "741" + }, { + "iri" : "http://purl.obolibrary.org/obo/RO_0000087", + "baseIri" : "http://purl.obolibrary.org/obo", + "range" : "95", + "label" : { + "IRI-based" : "RO_0000087", + "en" : "has role" + }, + "domain" : "174", + "attributes" : [ "external", "object", "someValues" ], + "id" : "742" + }, { + "iri" : "https://w3id.org/pmd/co/characteristicOf", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "386", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "undefined", + "value" : "is characteristic of", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "characteristicOf", + "en" : "characteristic of" + }, + "superproperty" : [ "53" ], + "domain" : "214", + "attributes" : [ "external", "object", "someValues" ], + "id" : "743" + }, { + "iri" : "http://purl.obolibrary.org/obo/RO_0000087", + "baseIri" : "http://purl.obolibrary.org/obo", + "range" : "95", + "label" : { + "IRI-based" : "RO_0000087", + "en" : "has role" + }, + "domain" : "196", + "attributes" : [ "external", "object", "someValues" ], + "id" : "744" + }, { + "iri" : "https://w3id.org/pmd/co/characteristicOf", + "baseIri" : "https://w3id.org/pmd/co", + "range" : "256", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "https://w3id.org/pmd/co", + "type" : "iri" + } ], + "altLabel" : [ { + "identifier" : "altLabel", + "language" : "undefined", + "value" : "is characteristic of", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "characteristicOf", + "en" : "characteristic of" + }, + "superproperty" : [ "53" ], + "domain" : "319", + "attributes" : [ "external", "object", "someValues" ], + "id" : "745" + }, { + "range" : "225", + "domain" : "278", + "attributes" : [ "anonymous", "object" ], + "id" : "746" + }, { + "iri" : "http://www.w3.org/ns/prov#wasRoleIn", + "inverse" : "748", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "569", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "wasRoleIn", + "undefined" : "wasRoleIn" + }, + "domain" : "175", + "attributes" : [ "external", "object" ], + "id" : "747" + }, { + "range" : "47", + "domain" : "104", + "attributes" : [ "anonymous", "object" ], + "id" : "749" + }, { + "range" : "37", + "domain" : "40", + "attributes" : [ "anonymous", "object" ], + "id" : "750" + }, { + "iri" : "http://www.w3.org/ns/prov#activityOfInfluence", + "inverse" : "602", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "40", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "activityOfInfluence", + "undefined" : "activityOfInfluence" + }, + "domain" : "104", + "attributes" : [ "external", "object" ], + "id" : "751" + }, { + "iri" : "http://www.w3.org/ns/prov#hadRole", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "175", + "annotations" : { + "inverse" : [ { + "identifier" : "inverse", + "language" : "undefined", + "value" : "wasRoleIn", + "type" : "label" + } ], + "sharesDefinitionWith" : [ { + "identifier" : "sharesDefinitionWith", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov#Role", + "type" : "iri" + } ], + "component" : [ { + "identifier" : "component", + "language" : "undefined", + "value" : "agents-responsibility", + "type" : "label" + } ], + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + }, { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o#", + "type" : "iri" + } ], + "editorsDefinition" : [ { + "identifier" : "editorsDefinition", + "language" : "en", + "value" : "prov:hadRole references the Role (i.e. the function of an entity with respect to an activity), in the context of an instantaneous usage, generation, association, start, and end.", + "type" : "label" + } ], + "category" : [ { + "identifier" : "category", + "language" : "undefined", + "value" : "qualified", + "type" : "label" + } ] + }, + "label" : { + "IRI-based" : "hadRole", + "undefined" : "hadRole" + }, + "domain" : "569", + "comment" : { + "en" : "The _optional_ Role that an Entity assumed in the context of an Activity. For example, :baking prov:used :spoon; prov:qualified [ a prov:Usage; prov:entity :spoon; prov:hadRole roles:mixing_implement ].", + "undefined" : "This property has multiple RDFS domains to suit multiple OWL Profiles. See PROV-O OWL Profile." + }, + "attributes" : [ "external", "object" ], + "id" : "748" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedUsingActivity", + "inverse" : "621", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "104", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "qualifiedUsingActivity", + "undefined" : "qualifiedUsingActivity" + }, + "domain" : "17", + "attributes" : [ "external", "object" ], + "id" : "752" + }, { + "iri" : "http://www.w3.org/ns/prov#qualifiedSourceOf", + "inverse" : "623", + "baseIri" : "http://www.w3.org/ns/prov", + "range" : "47", + "annotations" : { + "isDefinedBy" : [ { + "identifier" : "isDefinedBy", + "language" : "undefined", + "value" : "http://www.w3.org/ns/prov-o-inverses#", + "type" : "iri" + } ] + }, + "label" : { + "IRI-based" : "qualifiedSourceOf", + "undefined" : "qualifiedSourceOf" + }, + "domain" : "334", + "attributes" : [ "external", "object" ], + "id" : "753" + } ] +} \ No newline at end of file diff --git a/tto/webvowl/data/template.json b/tto/webvowl/data/template.json new file mode 100644 index 0000000..003d011 --- /dev/null +++ b/tto/webvowl/data/template.json @@ -0,0 +1,163 @@ +{ + "namespace": [ + { + "name": "", + "iri": "" + } + ], + "header": { + "languages": [ + "all", + "occurring", + "languages" + ], + "title": { + "language": "label" + }, + "iri": "", + "version": "", + "author": [ + "Author One", + "Author Two" + ], + "description": { + "language": "label" + }, + "other": { + "someIdentifier": [ + { + "identifier": "someIdentifier", + "language": "undefined", + "value": "http://an.iri/", + "type": "iri" + } + ], + "someOtherIdentifier": [ + { + "identifier": "someOtherIdentifier", + "language": "undefined", + "value": "Some person", + "type": "label" + } + ] + } + }, + "metrics": { + "classCount": 40, + "datatypeCount": 13, + "objectPropertyCount": 23, + "datatypePropertyCount": 13, + "propertyCount": 36, + "nodeCount": 53, + "axiomCount": 216, + "individualCount": 8 + }, + "class": [ + { + "id": "", + "type": "" + } + ], + "classAttribute": [ + { + "id": "", + "label": "", + "iri": "", + "individuals": [ + { + "iri": "", + "labels": { + "language": "label" + }, + "annotations": {} + } + ], + "comment": "", + "equivalent": [ + "" + ], + "union": [ + "" + ], + "intersection": [ + "" + ], + "complement": [ + "" + ], + "attributes": [ + "deprecated", + "external", + "datatype", + "object", + "rdf" + ] + } + ], + "datatype": [ + { + "id": "", + "type": "" + } + ], + "datatypeAttribute": [ + { + "id": "", + "label": { + "language": "label" + }, + "iri": "", + "individuals": [ + { + "iri": "", + "labels": { + "language": "label" + }, + "annotations": {} + } + ], + "comment": "", + "equivalent": [ + "" + ] + } + ], + "property": [ + { + "id": "" + } + ], + "propertyAttribute": [ + { + "id": "", + "domain": "", + "range": "", + "inverse": "", + "label": { + "language": "label" + }, + "type": "", + "comment": "", + "cardinality": "", + "minCardinality": "", + "maxCardinality": "", + "subproperty": [ + "" + ], + "equivalent": [ + "" + ], + "attributes": [ + "deprecated", + "external", + "datatype", + "object", + "rdf", + "transitive", + "functional", + "inverse functional", + "symmetric" + ] + } + ] +} diff --git a/tto/webvowl/favicon.ico b/tto/webvowl/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..a857d51f1c78d8be8fe2103fde3a10b9a72b041b GIT binary patch literal 1150 zcmZ{iTS(MF6vpSDMI@zZq!kjD5lIgVRzmkE>Ln?=j=Cg=A2Q=;BWM3#W7MP z4OJ>kDK(AIMUUUlNiAY5G~ADT4`TD^KT8_Ohu^q3+sPs_m<2K*IxH|v#-41e7dK;P#seDD5<=IR4*mZa&J>`|7t0Yd|ZNFMV^(Tu4PXs)p070(cT z!?_f^eR>stth4Tx_DRfLmW9@fxmak561{^wOJBD@=O%G|eu)J=ogRGq;DxWH4!xh= z@eUb`We(&Z^`+KH+K#5I(Dl(;dm3I}*$?#hqqD9Ct+!9=G~Qf0#5-8DzLm8+&pK1v zMLdUh{?#`W|INMS#$jEe~o`qM<7dT(J;9K4tKUTz-2=hhc!xn87uCUtA9+ykHIIoj@=L3^bY(rf8C zb+d?AL1<7QstXeM2J(1@MZbZ8en{=<^Ipostpi&T9x_VKKBkraA%Ih5$fyyJJfz1` zk2d~akaZ*9;?dNV2n!i0+8boJUpg=vTosV+>66AGdF5;zOj?e@ + + + + + + + + + + + + + + WebVOWL + + + +
    +
    + + + + + + + +
    + + + + + +
    + +
    + + +
    + +
    +
    >
    + +
    + +
    + + +
    +
    +
    +

    +

    +

    +

    +

    -

    +
    +
    + + +
    +
    +
    +
    + + + + +
    + + + + + + + diff --git a/tto/webvowl/js/d3.min.js b/tto/webvowl/js/d3.min.js new file mode 100644 index 0000000..1664873 --- /dev/null +++ b/tto/webvowl/js/d3.min.js @@ -0,0 +1,5 @@ +!function(){function n(n){return n&&(n.ownerDocument||n.document||n).documentElement}function t(n){return n&&(n.ownerDocument&&n.ownerDocument.defaultView||n.document&&n||n.defaultView)}function e(n,t){return t>n?-1:n>t?1:n>=t?0:NaN}function r(n){return null===n?NaN:+n}function i(n){return!isNaN(n)}function u(n){return{left:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)<0?r=u+1:i=u}return r},right:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)>0?i=u:r=u+1}return r}}}function o(n){return n.length}function a(n){for(var t=1;n*t%1;)t*=10;return t}function l(n,t){for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}function c(){this._=Object.create(null)}function f(n){return(n+="")===bo||n[0]===_o?_o+n:n}function s(n){return(n+="")[0]===_o?n.slice(1):n}function h(n){return f(n)in this._}function p(n){return(n=f(n))in this._&&delete this._[n]}function g(){var n=[];for(var t in this._)n.push(s(t));return n}function v(){var n=0;for(var t in this._)++n;return n}function d(){for(var n in this._)return!1;return!0}function y(){this._=Object.create(null)}function m(n){return n}function M(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function x(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.slice(1);for(var e=0,r=wo.length;r>e;++e){var i=wo[e]+t;if(i in n)return i}}function b(){}function _(){}function w(n){function t(){for(var t,r=e,i=-1,u=r.length;++ie;e++)for(var i,u=n[e],o=0,a=u.length;a>o;o++)(i=u[o])&&t(i,o,e);return n}function Z(n){return ko(n,qo),n}function V(n){var t,e;return function(r,i,u){var o,a=n[u].update,l=a.length;for(u!=e&&(e=u,t=0),i>=t&&(t=i+1);!(o=a[t])&&++t0&&(n=n.slice(0,a));var c=To.get(n);return c&&(n=c,l=B),a?t?i:r:t?b:u}function $(n,t){return function(e){var r=ao.event;ao.event=e,t[0]=this.__data__;try{n.apply(this,t)}finally{ao.event=r}}}function B(n,t){var e=$(n,t);return function(n){var t=this,r=n.relatedTarget;r&&(r===t||8&r.compareDocumentPosition(t))||e.call(t,n)}}function W(e){var r=".dragsuppress-"+ ++Do,i="click"+r,u=ao.select(t(e)).on("touchmove"+r,S).on("dragstart"+r,S).on("selectstart"+r,S);if(null==Ro&&(Ro="onselectstart"in e?!1:x(e.style,"userSelect")),Ro){var o=n(e).style,a=o[Ro];o[Ro]="none"}return function(n){if(u.on(r,null),Ro&&(o[Ro]=a),n){var t=function(){u.on(i,null)};u.on(i,function(){S(),t()},!0),setTimeout(t,0)}}}function J(n,e){e.changedTouches&&(e=e.changedTouches[0]);var r=n.ownerSVGElement||n;if(r.createSVGPoint){var i=r.createSVGPoint();if(0>Po){var u=t(n);if(u.scrollX||u.scrollY){r=ao.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var o=r[0][0].getScreenCTM();Po=!(o.f||o.e),r.remove()}}return Po?(i.x=e.pageX,i.y=e.pageY):(i.x=e.clientX,i.y=e.clientY),i=i.matrixTransform(n.getScreenCTM().inverse()),[i.x,i.y]}var a=n.getBoundingClientRect();return[e.clientX-a.left-n.clientLeft,e.clientY-a.top-n.clientTop]}function G(){return ao.event.changedTouches[0].identifier}function K(n){return n>0?1:0>n?-1:0}function Q(n,t,e){return(t[0]-n[0])*(e[1]-n[1])-(t[1]-n[1])*(e[0]-n[0])}function nn(n){return n>1?0:-1>n?Fo:Math.acos(n)}function tn(n){return n>1?Io:-1>n?-Io:Math.asin(n)}function en(n){return((n=Math.exp(n))-1/n)/2}function rn(n){return((n=Math.exp(n))+1/n)/2}function un(n){return((n=Math.exp(2*n))-1)/(n+1)}function on(n){return(n=Math.sin(n/2))*n}function an(){}function ln(n,t,e){return this instanceof ln?(this.h=+n,this.s=+t,void(this.l=+e)):arguments.length<2?n instanceof ln?new ln(n.h,n.s,n.l):_n(""+n,wn,ln):new ln(n,t,e)}function cn(n,t,e){function r(n){return n>360?n-=360:0>n&&(n+=360),60>n?u+(o-u)*n/60:180>n?o:240>n?u+(o-u)*(240-n)/60:u}function i(n){return Math.round(255*r(n))}var u,o;return n=isNaN(n)?0:(n%=360)<0?n+360:n,t=isNaN(t)?0:0>t?0:t>1?1:t,e=0>e?0:e>1?1:e,o=.5>=e?e*(1+t):e+t-e*t,u=2*e-o,new mn(i(n+120),i(n),i(n-120))}function fn(n,t,e){return this instanceof fn?(this.h=+n,this.c=+t,void(this.l=+e)):arguments.length<2?n instanceof fn?new fn(n.h,n.c,n.l):n instanceof hn?gn(n.l,n.a,n.b):gn((n=Sn((n=ao.rgb(n)).r,n.g,n.b)).l,n.a,n.b):new fn(n,t,e)}function sn(n,t,e){return isNaN(n)&&(n=0),isNaN(t)&&(t=0),new hn(e,Math.cos(n*=Yo)*t,Math.sin(n)*t)}function hn(n,t,e){return this instanceof hn?(this.l=+n,this.a=+t,void(this.b=+e)):arguments.length<2?n instanceof hn?new hn(n.l,n.a,n.b):n instanceof fn?sn(n.h,n.c,n.l):Sn((n=mn(n)).r,n.g,n.b):new hn(n,t,e)}function pn(n,t,e){var r=(n+16)/116,i=r+t/500,u=r-e/200;return i=vn(i)*na,r=vn(r)*ta,u=vn(u)*ea,new mn(yn(3.2404542*i-1.5371385*r-.4985314*u),yn(-.969266*i+1.8760108*r+.041556*u),yn(.0556434*i-.2040259*r+1.0572252*u))}function gn(n,t,e){return n>0?new fn(Math.atan2(e,t)*Zo,Math.sqrt(t*t+e*e),n):new fn(NaN,NaN,n)}function vn(n){return n>.206893034?n*n*n:(n-4/29)/7.787037}function dn(n){return n>.008856?Math.pow(n,1/3):7.787037*n+4/29}function yn(n){return Math.round(255*(.00304>=n?12.92*n:1.055*Math.pow(n,1/2.4)-.055))}function mn(n,t,e){return this instanceof mn?(this.r=~~n,this.g=~~t,void(this.b=~~e)):arguments.length<2?n instanceof mn?new mn(n.r,n.g,n.b):_n(""+n,mn,cn):new mn(n,t,e)}function Mn(n){return new mn(n>>16,n>>8&255,255&n)}function xn(n){return Mn(n)+""}function bn(n){return 16>n?"0"+Math.max(0,n).toString(16):Math.min(255,n).toString(16)}function _n(n,t,e){var r,i,u,o=0,a=0,l=0;if(r=/([a-z]+)\((.*)\)/.exec(n=n.toLowerCase()))switch(i=r[2].split(","),r[1]){case"hsl":return e(parseFloat(i[0]),parseFloat(i[1])/100,parseFloat(i[2])/100);case"rgb":return t(Nn(i[0]),Nn(i[1]),Nn(i[2]))}return(u=ua.get(n))?t(u.r,u.g,u.b):(null==n||"#"!==n.charAt(0)||isNaN(u=parseInt(n.slice(1),16))||(4===n.length?(o=(3840&u)>>4,o=o>>4|o,a=240&u,a=a>>4|a,l=15&u,l=l<<4|l):7===n.length&&(o=(16711680&u)>>16,a=(65280&u)>>8,l=255&u)),t(o,a,l))}function wn(n,t,e){var r,i,u=Math.min(n/=255,t/=255,e/=255),o=Math.max(n,t,e),a=o-u,l=(o+u)/2;return a?(i=.5>l?a/(o+u):a/(2-o-u),r=n==o?(t-e)/a+(e>t?6:0):t==o?(e-n)/a+2:(n-t)/a+4,r*=60):(r=NaN,i=l>0&&1>l?0:r),new ln(r,i,l)}function Sn(n,t,e){n=kn(n),t=kn(t),e=kn(e);var r=dn((.4124564*n+.3575761*t+.1804375*e)/na),i=dn((.2126729*n+.7151522*t+.072175*e)/ta),u=dn((.0193339*n+.119192*t+.9503041*e)/ea);return hn(116*i-16,500*(r-i),200*(i-u))}function kn(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function Nn(n){var t=parseFloat(n);return"%"===n.charAt(n.length-1)?Math.round(2.55*t):t}function En(n){return"function"==typeof n?n:function(){return n}}function An(n){return function(t,e,r){return 2===arguments.length&&"function"==typeof e&&(r=e,e=null),Cn(t,e,n,r)}}function Cn(n,t,e,r){function i(){var n,t=l.status;if(!t&&Ln(l)||t>=200&&300>t||304===t){try{n=e.call(u,l)}catch(r){return void o.error.call(u,r)}o.load.call(u,n)}else o.error.call(u,l)}var u={},o=ao.dispatch("beforesend","progress","load","error"),a={},l=new XMLHttpRequest,c=null;return!this.XDomainRequest||"withCredentials"in l||!/^(http(s)?:)?\/\//.test(n)||(l=new XDomainRequest),"onload"in l?l.onload=l.onerror=i:l.onreadystatechange=function(){l.readyState>3&&i()},l.onprogress=function(n){var t=ao.event;ao.event=n;try{o.progress.call(u,l)}finally{ao.event=t}},u.header=function(n,t){return n=(n+"").toLowerCase(),arguments.length<2?a[n]:(null==t?delete a[n]:a[n]=t+"",u)},u.mimeType=function(n){return arguments.length?(t=null==n?null:n+"",u):t},u.responseType=function(n){return arguments.length?(c=n,u):c},u.response=function(n){return e=n,u},["get","post"].forEach(function(n){u[n]=function(){return u.send.apply(u,[n].concat(co(arguments)))}}),u.send=function(e,r,i){if(2===arguments.length&&"function"==typeof r&&(i=r,r=null),l.open(e,n,!0),null==t||"accept"in a||(a.accept=t+",*/*"),l.setRequestHeader)for(var f in a)l.setRequestHeader(f,a[f]);return null!=t&&l.overrideMimeType&&l.overrideMimeType(t),null!=c&&(l.responseType=c),null!=i&&u.on("error",i).on("load",function(n){i(null,n)}),o.beforesend.call(u,l),l.send(null==r?null:r),u},u.abort=function(){return l.abort(),u},ao.rebind(u,o,"on"),null==r?u:u.get(zn(r))}function zn(n){return 1===n.length?function(t,e){n(null==t?e:null)}:n}function Ln(n){var t=n.responseType;return t&&"text"!==t?n.response:n.responseText}function qn(n,t,e){var r=arguments.length;2>r&&(t=0),3>r&&(e=Date.now());var i=e+t,u={c:n,t:i,n:null};return aa?aa.n=u:oa=u,aa=u,la||(ca=clearTimeout(ca),la=1,fa(Tn)),u}function Tn(){var n=Rn(),t=Dn()-n;t>24?(isFinite(t)&&(clearTimeout(ca),ca=setTimeout(Tn,t)),la=0):(la=1,fa(Tn))}function Rn(){for(var n=Date.now(),t=oa;t;)n>=t.t&&t.c(n-t.t)&&(t.c=null),t=t.n;return n}function Dn(){for(var n,t=oa,e=1/0;t;)t.c?(t.t8?function(n){return n/e}:function(n){return n*e},symbol:n}}function jn(n){var t=n.decimal,e=n.thousands,r=n.grouping,i=n.currency,u=r&&e?function(n,t){for(var i=n.length,u=[],o=0,a=r[0],l=0;i>0&&a>0&&(l+a+1>t&&(a=Math.max(1,t-l)),u.push(n.substring(i-=a,i+a)),!((l+=a+1)>t));)a=r[o=(o+1)%r.length];return u.reverse().join(e)}:m;return function(n){var e=ha.exec(n),r=e[1]||" ",o=e[2]||">",a=e[3]||"-",l=e[4]||"",c=e[5],f=+e[6],s=e[7],h=e[8],p=e[9],g=1,v="",d="",y=!1,m=!0;switch(h&&(h=+h.substring(1)),(c||"0"===r&&"="===o)&&(c=r="0",o="="),p){case"n":s=!0,p="g";break;case"%":g=100,d="%",p="f";break;case"p":g=100,d="%",p="r";break;case"b":case"o":case"x":case"X":"#"===l&&(v="0"+p.toLowerCase());case"c":m=!1;case"d":y=!0,h=0;break;case"s":g=-1,p="r"}"$"===l&&(v=i[0],d=i[1]),"r"!=p||h||(p="g"),null!=h&&("g"==p?h=Math.max(1,Math.min(21,h)):"e"!=p&&"f"!=p||(h=Math.max(0,Math.min(20,h)))),p=pa.get(p)||Fn;var M=c&&s;return function(n){var e=d;if(y&&n%1)return"";var i=0>n||0===n&&0>1/n?(n=-n,"-"):"-"===a?"":a;if(0>g){var l=ao.formatPrefix(n,h);n=l.scale(n),e=l.symbol+d}else n*=g;n=p(n,h);var x,b,_=n.lastIndexOf(".");if(0>_){var w=m?n.lastIndexOf("e"):-1;0>w?(x=n,b=""):(x=n.substring(0,w),b=n.substring(w))}else x=n.substring(0,_),b=t+n.substring(_+1);!c&&s&&(x=u(x,1/0));var S=v.length+x.length+b.length+(M?0:i.length),k=f>S?new Array(S=f-S+1).join(r):"";return M&&(x=u(k+x,k.length?f-b.length:1/0)),i+=v,n=x+b,("<"===o?i+n+k:">"===o?k+i+n:"^"===o?k.substring(0,S>>=1)+i+n+k.substring(S):i+(M?n:k+n))+e}}}function Fn(n){return n+""}function Hn(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function On(n,t,e){function r(t){var e=n(t),r=u(e,1);return r-t>t-e?e:r}function i(e){return t(e=n(new va(e-1)),1),e}function u(n,e){return t(n=new va(+n),e),n}function o(n,r,u){var o=i(n),a=[];if(u>1)for(;r>o;)e(o)%u||a.push(new Date(+o)),t(o,1);else for(;r>o;)a.push(new Date(+o)),t(o,1);return a}function a(n,t,e){try{va=Hn;var r=new Hn;return r._=n,o(r,t,e)}finally{va=Date}}n.floor=n,n.round=r,n.ceil=i,n.offset=u,n.range=o;var l=n.utc=In(n);return l.floor=l,l.round=In(r),l.ceil=In(i),l.offset=In(u),l.range=a,n}function In(n){return function(t,e){try{va=Hn;var r=new Hn;return r._=t,n(r,e)._}finally{va=Date}}}function Yn(n){function t(n){function t(t){for(var e,i,u,o=[],a=-1,l=0;++aa;){if(r>=c)return-1;if(i=t.charCodeAt(a++),37===i){if(o=t.charAt(a++),u=C[o in ya?t.charAt(a++):o],!u||(r=u(n,e,r))<0)return-1}else if(i!=e.charCodeAt(r++))return-1}return r}function r(n,t,e){_.lastIndex=0;var r=_.exec(t.slice(e));return r?(n.w=w.get(r[0].toLowerCase()),e+r[0].length):-1}function i(n,t,e){x.lastIndex=0;var r=x.exec(t.slice(e));return r?(n.w=b.get(r[0].toLowerCase()),e+r[0].length):-1}function u(n,t,e){N.lastIndex=0;var r=N.exec(t.slice(e));return r?(n.m=E.get(r[0].toLowerCase()),e+r[0].length):-1}function o(n,t,e){S.lastIndex=0;var r=S.exec(t.slice(e));return r?(n.m=k.get(r[0].toLowerCase()),e+r[0].length):-1}function a(n,t,r){return e(n,A.c.toString(),t,r)}function l(n,t,r){return e(n,A.x.toString(),t,r)}function c(n,t,r){return e(n,A.X.toString(),t,r)}function f(n,t,e){var r=M.get(t.slice(e,e+=2).toLowerCase());return null==r?-1:(n.p=r,e)}var s=n.dateTime,h=n.date,p=n.time,g=n.periods,v=n.days,d=n.shortDays,y=n.months,m=n.shortMonths;t.utc=function(n){function e(n){try{va=Hn;var t=new va;return t._=n,r(t)}finally{va=Date}}var r=t(n);return e.parse=function(n){try{va=Hn;var t=r.parse(n);return t&&t._}finally{va=Date}},e.toString=r.toString,e},t.multi=t.utc.multi=ct;var M=ao.map(),x=Vn(v),b=Xn(v),_=Vn(d),w=Xn(d),S=Vn(y),k=Xn(y),N=Vn(m),E=Xn(m);g.forEach(function(n,t){M.set(n.toLowerCase(),t)});var A={a:function(n){return d[n.getDay()]},A:function(n){return v[n.getDay()]},b:function(n){return m[n.getMonth()]},B:function(n){return y[n.getMonth()]},c:t(s),d:function(n,t){return Zn(n.getDate(),t,2)},e:function(n,t){return Zn(n.getDate(),t,2)},H:function(n,t){return Zn(n.getHours(),t,2)},I:function(n,t){return Zn(n.getHours()%12||12,t,2)},j:function(n,t){return Zn(1+ga.dayOfYear(n),t,3)},L:function(n,t){return Zn(n.getMilliseconds(),t,3)},m:function(n,t){return Zn(n.getMonth()+1,t,2)},M:function(n,t){return Zn(n.getMinutes(),t,2)},p:function(n){return g[+(n.getHours()>=12)]},S:function(n,t){return Zn(n.getSeconds(),t,2)},U:function(n,t){return Zn(ga.sundayOfYear(n),t,2)},w:function(n){return n.getDay()},W:function(n,t){return Zn(ga.mondayOfYear(n),t,2)},x:t(h),X:t(p),y:function(n,t){return Zn(n.getFullYear()%100,t,2)},Y:function(n,t){return Zn(n.getFullYear()%1e4,t,4)},Z:at,"%":function(){return"%"}},C={a:r,A:i,b:u,B:o,c:a,d:tt,e:tt,H:rt,I:rt,j:et,L:ot,m:nt,M:it,p:f,S:ut,U:Bn,w:$n,W:Wn,x:l,X:c,y:Gn,Y:Jn,Z:Kn,"%":lt};return t}function Zn(n,t,e){var r=0>n?"-":"",i=(r?-n:n)+"",u=i.length;return r+(e>u?new Array(e-u+1).join(t)+i:i)}function Vn(n){return new RegExp("^(?:"+n.map(ao.requote).join("|")+")","i")}function Xn(n){for(var t=new c,e=-1,r=n.length;++e68?1900:2e3)}function nt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.m=r[0]-1,e+r[0].length):-1}function tt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.d=+r[0],e+r[0].length):-1}function et(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.j=+r[0],e+r[0].length):-1}function rt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.H=+r[0],e+r[0].length):-1}function it(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.M=+r[0],e+r[0].length):-1}function ut(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.S=+r[0],e+r[0].length):-1}function ot(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.L=+r[0],e+r[0].length):-1}function at(n){var t=n.getTimezoneOffset(),e=t>0?"-":"+",r=xo(t)/60|0,i=xo(t)%60;return e+Zn(r,"0",2)+Zn(i,"0",2)}function lt(n,t,e){Ma.lastIndex=0;var r=Ma.exec(t.slice(e,e+1));return r?e+r[0].length:-1}function ct(n){for(var t=n.length,e=-1;++e=0?1:-1,a=o*e,l=Math.cos(t),c=Math.sin(t),f=u*c,s=i*l+f*Math.cos(a),h=f*o*Math.sin(a);ka.add(Math.atan2(h,s)),r=n,i=l,u=c}var t,e,r,i,u;Na.point=function(o,a){Na.point=n,r=(t=o)*Yo,i=Math.cos(a=(e=a)*Yo/2+Fo/4),u=Math.sin(a)},Na.lineEnd=function(){n(t,e)}}function dt(n){var t=n[0],e=n[1],r=Math.cos(e);return[r*Math.cos(t),r*Math.sin(t),Math.sin(e)]}function yt(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}function mt(n,t){return[n[1]*t[2]-n[2]*t[1],n[2]*t[0]-n[0]*t[2],n[0]*t[1]-n[1]*t[0]]}function Mt(n,t){n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}function xt(n,t){return[n[0]*t,n[1]*t,n[2]*t]}function bt(n){var t=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);n[0]/=t,n[1]/=t,n[2]/=t}function _t(n){return[Math.atan2(n[1],n[0]),tn(n[2])]}function wt(n,t){return xo(n[0]-t[0])a;++a)i.point((e=n[a])[0],e[1]);return void i.lineEnd()}var l=new Tt(e,n,null,!0),c=new Tt(e,null,l,!1);l.o=c,u.push(l),o.push(c),l=new Tt(r,n,null,!1),c=new Tt(r,null,l,!0),l.o=c,u.push(l),o.push(c)}}),o.sort(t),qt(u),qt(o),u.length){for(var a=0,l=e,c=o.length;c>a;++a)o[a].e=l=!l;for(var f,s,h=u[0];;){for(var p=h,g=!0;p.v;)if((p=p.n)===h)return;f=p.z,i.lineStart();do{if(p.v=p.o.v=!0,p.e){if(g)for(var a=0,c=f.length;c>a;++a)i.point((s=f[a])[0],s[1]);else r(p.x,p.n.x,1,i);p=p.n}else{if(g){f=p.p.z;for(var a=f.length-1;a>=0;--a)i.point((s=f[a])[0],s[1])}else r(p.x,p.p.x,-1,i);p=p.p}p=p.o,f=p.z,g=!g}while(!p.v);i.lineEnd()}}}function qt(n){if(t=n.length){for(var t,e,r=0,i=n[0];++r0){for(b||(u.polygonStart(),b=!0),u.lineStart();++o1&&2&t&&e.push(e.pop().concat(e.shift())),p.push(e.filter(Dt))}var p,g,v,d=t(u),y=i.invert(r[0],r[1]),m={point:o,lineStart:l,lineEnd:c,polygonStart:function(){m.point=f,m.lineStart=s,m.lineEnd=h,p=[],g=[]},polygonEnd:function(){m.point=o,m.lineStart=l,m.lineEnd=c,p=ao.merge(p);var n=Ot(y,g);p.length?(b||(u.polygonStart(),b=!0),Lt(p,Ut,n,e,u)):n&&(b||(u.polygonStart(),b=!0),u.lineStart(),e(null,null,1,u),u.lineEnd()),b&&(u.polygonEnd(),b=!1),p=g=null},sphere:function(){u.polygonStart(),u.lineStart(),e(null,null,1,u),u.lineEnd(),u.polygonEnd()}},M=Pt(),x=t(M),b=!1;return m}}function Dt(n){return n.length>1}function Pt(){var n,t=[];return{lineStart:function(){t.push(n=[])},point:function(t,e){n.push([t,e])},lineEnd:b,buffer:function(){var e=t;return t=[],n=null,e},rejoin:function(){t.length>1&&t.push(t.pop().concat(t.shift()))}}}function Ut(n,t){return((n=n.x)[0]<0?n[1]-Io-Uo:Io-n[1])-((t=t.x)[0]<0?t[1]-Io-Uo:Io-t[1])}function jt(n){var t,e=NaN,r=NaN,i=NaN;return{lineStart:function(){n.lineStart(),t=1},point:function(u,o){var a=u>0?Fo:-Fo,l=xo(u-e);xo(l-Fo)0?Io:-Io),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(a,r),n.point(u,r),t=0):i!==a&&l>=Fo&&(xo(e-i)Uo?Math.atan((Math.sin(t)*(u=Math.cos(r))*Math.sin(e)-Math.sin(r)*(i=Math.cos(t))*Math.sin(n))/(i*u*o)):(t+r)/2}function Ht(n,t,e,r){var i;if(null==n)i=e*Io,r.point(-Fo,i),r.point(0,i),r.point(Fo,i),r.point(Fo,0),r.point(Fo,-i),r.point(0,-i),r.point(-Fo,-i),r.point(-Fo,0),r.point(-Fo,i);else if(xo(n[0]-t[0])>Uo){var u=n[0]a;++a){var c=t[a],f=c.length;if(f)for(var s=c[0],h=s[0],p=s[1]/2+Fo/4,g=Math.sin(p),v=Math.cos(p),d=1;;){d===f&&(d=0),n=c[d];var y=n[0],m=n[1]/2+Fo/4,M=Math.sin(m),x=Math.cos(m),b=y-h,_=b>=0?1:-1,w=_*b,S=w>Fo,k=g*M;if(ka.add(Math.atan2(k*_*Math.sin(w),v*x+k*Math.cos(w))),u+=S?b+_*Ho:b,S^h>=e^y>=e){var N=mt(dt(s),dt(n));bt(N);var E=mt(i,N);bt(E);var A=(S^b>=0?-1:1)*tn(E[2]);(r>A||r===A&&(N[0]||N[1]))&&(o+=S^b>=0?1:-1)}if(!d++)break;h=y,g=M,v=x,s=n}}return(-Uo>u||Uo>u&&-Uo>ka)^1&o}function It(n){function t(n,t){return Math.cos(n)*Math.cos(t)>u}function e(n){var e,u,l,c,f;return{lineStart:function(){c=l=!1,f=1},point:function(s,h){var p,g=[s,h],v=t(s,h),d=o?v?0:i(s,h):v?i(s+(0>s?Fo:-Fo),h):0;if(!e&&(c=l=v)&&n.lineStart(),v!==l&&(p=r(e,g),(wt(e,p)||wt(g,p))&&(g[0]+=Uo,g[1]+=Uo,v=t(g[0],g[1]))),v!==l)f=0,v?(n.lineStart(),p=r(g,e),n.point(p[0],p[1])):(p=r(e,g),n.point(p[0],p[1]),n.lineEnd()),e=p;else if(a&&e&&o^v){var y;d&u||!(y=r(g,e,!0))||(f=0,o?(n.lineStart(),n.point(y[0][0],y[0][1]),n.point(y[1][0],y[1][1]),n.lineEnd()):(n.point(y[1][0],y[1][1]),n.lineEnd(),n.lineStart(),n.point(y[0][0],y[0][1])))}!v||e&&wt(e,g)||n.point(g[0],g[1]),e=g,l=v,u=d},lineEnd:function(){l&&n.lineEnd(),e=null},clean:function(){return f|(c&&l)<<1}}}function r(n,t,e){var r=dt(n),i=dt(t),o=[1,0,0],a=mt(r,i),l=yt(a,a),c=a[0],f=l-c*c;if(!f)return!e&&n;var s=u*l/f,h=-u*c/f,p=mt(o,a),g=xt(o,s),v=xt(a,h);Mt(g,v);var d=p,y=yt(g,d),m=yt(d,d),M=y*y-m*(yt(g,g)-1);if(!(0>M)){var x=Math.sqrt(M),b=xt(d,(-y-x)/m);if(Mt(b,g),b=_t(b),!e)return b;var _,w=n[0],S=t[0],k=n[1],N=t[1];w>S&&(_=w,w=S,S=_);var E=S-w,A=xo(E-Fo)E;if(!A&&k>N&&(_=k,k=N,N=_),C?A?k+N>0^b[1]<(xo(b[0]-w)Fo^(w<=b[0]&&b[0]<=S)){var z=xt(d,(-y+x)/m);return Mt(z,g),[b,_t(z)]}}}function i(t,e){var r=o?n:Fo-n,i=0;return-r>t?i|=1:t>r&&(i|=2),-r>e?i|=4:e>r&&(i|=8),i}var u=Math.cos(n),o=u>0,a=xo(u)>Uo,l=ve(n,6*Yo);return Rt(t,e,l,o?[0,-n]:[-Fo,n-Fo])}function Yt(n,t,e,r){return function(i){var u,o=i.a,a=i.b,l=o.x,c=o.y,f=a.x,s=a.y,h=0,p=1,g=f-l,v=s-c;if(u=n-l,g||!(u>0)){if(u/=g,0>g){if(h>u)return;p>u&&(p=u)}else if(g>0){if(u>p)return;u>h&&(h=u)}if(u=e-l,g||!(0>u)){if(u/=g,0>g){if(u>p)return;u>h&&(h=u)}else if(g>0){if(h>u)return;p>u&&(p=u)}if(u=t-c,v||!(u>0)){if(u/=v,0>v){if(h>u)return;p>u&&(p=u)}else if(v>0){if(u>p)return;u>h&&(h=u)}if(u=r-c,v||!(0>u)){if(u/=v,0>v){if(u>p)return;u>h&&(h=u)}else if(v>0){if(h>u)return;p>u&&(p=u)}return h>0&&(i.a={x:l+h*g,y:c+h*v}),1>p&&(i.b={x:l+p*g,y:c+p*v}),i}}}}}}function Zt(n,t,e,r){function i(r,i){return xo(r[0]-n)0?0:3:xo(r[0]-e)0?2:1:xo(r[1]-t)0?1:0:i>0?3:2}function u(n,t){return o(n.x,t.x)}function o(n,t){var e=i(n,1),r=i(t,1);return e!==r?e-r:0===e?t[1]-n[1]:1===e?n[0]-t[0]:2===e?n[1]-t[1]:t[0]-n[0]}return function(a){function l(n){for(var t=0,e=d.length,r=n[1],i=0;e>i;++i)for(var u,o=1,a=d[i],l=a.length,c=a[0];l>o;++o)u=a[o],c[1]<=r?u[1]>r&&Q(c,u,n)>0&&++t:u[1]<=r&&Q(c,u,n)<0&&--t,c=u;return 0!==t}function c(u,a,l,c){var f=0,s=0;if(null==u||(f=i(u,l))!==(s=i(a,l))||o(u,a)<0^l>0){do c.point(0===f||3===f?n:e,f>1?r:t);while((f=(f+l+4)%4)!==s)}else c.point(a[0],a[1])}function f(i,u){return i>=n&&e>=i&&u>=t&&r>=u}function s(n,t){f(n,t)&&a.point(n,t)}function h(){C.point=g,d&&d.push(y=[]),S=!0,w=!1,b=_=NaN}function p(){v&&(g(m,M),x&&w&&E.rejoin(),v.push(E.buffer())),C.point=s,w&&a.lineEnd()}function g(n,t){n=Math.max(-Ha,Math.min(Ha,n)),t=Math.max(-Ha,Math.min(Ha,t));var e=f(n,t);if(d&&y.push([n,t]),S)m=n,M=t,x=e,S=!1,e&&(a.lineStart(),a.point(n,t));else if(e&&w)a.point(n,t);else{var r={a:{x:b,y:_},b:{x:n,y:t}};A(r)?(w||(a.lineStart(),a.point(r.a.x,r.a.y)),a.point(r.b.x,r.b.y),e||a.lineEnd(),k=!1):e&&(a.lineStart(),a.point(n,t),k=!1)}b=n,_=t,w=e}var v,d,y,m,M,x,b,_,w,S,k,N=a,E=Pt(),A=Yt(n,t,e,r),C={point:s,lineStart:h,lineEnd:p,polygonStart:function(){a=E,v=[],d=[],k=!0},polygonEnd:function(){a=N,v=ao.merge(v);var t=l([n,r]),e=k&&t,i=v.length;(e||i)&&(a.polygonStart(),e&&(a.lineStart(),c(null,null,1,a),a.lineEnd()),i&&Lt(v,u,t,c,a),a.polygonEnd()),v=d=y=null}};return C}}function Vt(n){var t=0,e=Fo/3,r=ae(n),i=r(t,e);return i.parallels=function(n){return arguments.length?r(t=n[0]*Fo/180,e=n[1]*Fo/180):[t/Fo*180,e/Fo*180]},i}function Xt(n,t){function e(n,t){var e=Math.sqrt(u-2*i*Math.sin(t))/i;return[e*Math.sin(n*=i),o-e*Math.cos(n)]}var r=Math.sin(n),i=(r+Math.sin(t))/2,u=1+r*(2*i-r),o=Math.sqrt(u)/i;return e.invert=function(n,t){var e=o-t;return[Math.atan2(n,e)/i,tn((u-(n*n+e*e)*i*i)/(2*i))]},e}function $t(){function n(n,t){Ia+=i*n-r*t,r=n,i=t}var t,e,r,i;$a.point=function(u,o){$a.point=n,t=r=u,e=i=o},$a.lineEnd=function(){n(t,e)}}function Bt(n,t){Ya>n&&(Ya=n),n>Va&&(Va=n),Za>t&&(Za=t),t>Xa&&(Xa=t)}function Wt(){function n(n,t){o.push("M",n,",",t,u)}function t(n,t){o.push("M",n,",",t),a.point=e}function e(n,t){o.push("L",n,",",t)}function r(){a.point=n}function i(){o.push("Z")}var u=Jt(4.5),o=[],a={point:n,lineStart:function(){a.point=t},lineEnd:r,polygonStart:function(){a.lineEnd=i},polygonEnd:function(){a.lineEnd=r,a.point=n},pointRadius:function(n){return u=Jt(n),a},result:function(){if(o.length){var n=o.join("");return o=[],n}}};return a}function Jt(n){return"m0,"+n+"a"+n+","+n+" 0 1,1 0,"+-2*n+"a"+n+","+n+" 0 1,1 0,"+2*n+"z"}function Gt(n,t){Ca+=n,za+=t,++La}function Kt(){function n(n,r){var i=n-t,u=r-e,o=Math.sqrt(i*i+u*u);qa+=o*(t+n)/2,Ta+=o*(e+r)/2,Ra+=o,Gt(t=n,e=r)}var t,e;Wa.point=function(r,i){Wa.point=n,Gt(t=r,e=i)}}function Qt(){Wa.point=Gt}function ne(){function n(n,t){var e=n-r,u=t-i,o=Math.sqrt(e*e+u*u);qa+=o*(r+n)/2,Ta+=o*(i+t)/2,Ra+=o,o=i*n-r*t,Da+=o*(r+n),Pa+=o*(i+t),Ua+=3*o,Gt(r=n,i=t)}var t,e,r,i;Wa.point=function(u,o){Wa.point=n,Gt(t=r=u,e=i=o)},Wa.lineEnd=function(){n(t,e)}}function te(n){function t(t,e){n.moveTo(t+o,e),n.arc(t,e,o,0,Ho)}function e(t,e){n.moveTo(t,e),a.point=r}function r(t,e){n.lineTo(t,e)}function i(){a.point=t}function u(){n.closePath()}var o=4.5,a={point:t,lineStart:function(){a.point=e},lineEnd:i,polygonStart:function(){a.lineEnd=u},polygonEnd:function(){a.lineEnd=i,a.point=t},pointRadius:function(n){return o=n,a},result:b};return a}function ee(n){function t(n){return(a?r:e)(n)}function e(t){return ue(t,function(e,r){e=n(e,r),t.point(e[0],e[1])})}function r(t){function e(e,r){e=n(e,r),t.point(e[0],e[1])}function r(){M=NaN,S.point=u,t.lineStart()}function u(e,r){var u=dt([e,r]),o=n(e,r);i(M,x,m,b,_,w,M=o[0],x=o[1],m=e,b=u[0],_=u[1],w=u[2],a,t),t.point(M,x)}function o(){S.point=e,t.lineEnd()}function l(){ +r(),S.point=c,S.lineEnd=f}function c(n,t){u(s=n,h=t),p=M,g=x,v=b,d=_,y=w,S.point=u}function f(){i(M,x,m,b,_,w,p,g,s,v,d,y,a,t),S.lineEnd=o,o()}var s,h,p,g,v,d,y,m,M,x,b,_,w,S={point:e,lineStart:r,lineEnd:o,polygonStart:function(){t.polygonStart(),S.lineStart=l},polygonEnd:function(){t.polygonEnd(),S.lineStart=r}};return S}function i(t,e,r,a,l,c,f,s,h,p,g,v,d,y){var m=f-t,M=s-e,x=m*m+M*M;if(x>4*u&&d--){var b=a+p,_=l+g,w=c+v,S=Math.sqrt(b*b+_*_+w*w),k=Math.asin(w/=S),N=xo(xo(w)-1)u||xo((m*z+M*L)/x-.5)>.3||o>a*p+l*g+c*v)&&(i(t,e,r,a,l,c,A,C,N,b/=S,_/=S,w,d,y),y.point(A,C),i(A,C,N,b,_,w,f,s,h,p,g,v,d,y))}}var u=.5,o=Math.cos(30*Yo),a=16;return t.precision=function(n){return arguments.length?(a=(u=n*n)>0&&16,t):Math.sqrt(u)},t}function re(n){var t=ee(function(t,e){return n([t*Zo,e*Zo])});return function(n){return le(t(n))}}function ie(n){this.stream=n}function ue(n,t){return{point:t,sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}function oe(n){return ae(function(){return n})()}function ae(n){function t(n){return n=a(n[0]*Yo,n[1]*Yo),[n[0]*h+l,c-n[1]*h]}function e(n){return n=a.invert((n[0]-l)/h,(c-n[1])/h),n&&[n[0]*Zo,n[1]*Zo]}function r(){a=Ct(o=se(y,M,x),u);var n=u(v,d);return l=p-n[0]*h,c=g+n[1]*h,i()}function i(){return f&&(f.valid=!1,f=null),t}var u,o,a,l,c,f,s=ee(function(n,t){return n=u(n,t),[n[0]*h+l,c-n[1]*h]}),h=150,p=480,g=250,v=0,d=0,y=0,M=0,x=0,b=Fa,_=m,w=null,S=null;return t.stream=function(n){return f&&(f.valid=!1),f=le(b(o,s(_(n)))),f.valid=!0,f},t.clipAngle=function(n){return arguments.length?(b=null==n?(w=n,Fa):It((w=+n)*Yo),i()):w},t.clipExtent=function(n){return arguments.length?(S=n,_=n?Zt(n[0][0],n[0][1],n[1][0],n[1][1]):m,i()):S},t.scale=function(n){return arguments.length?(h=+n,r()):h},t.translate=function(n){return arguments.length?(p=+n[0],g=+n[1],r()):[p,g]},t.center=function(n){return arguments.length?(v=n[0]%360*Yo,d=n[1]%360*Yo,r()):[v*Zo,d*Zo]},t.rotate=function(n){return arguments.length?(y=n[0]%360*Yo,M=n[1]%360*Yo,x=n.length>2?n[2]%360*Yo:0,r()):[y*Zo,M*Zo,x*Zo]},ao.rebind(t,s,"precision"),function(){return u=n.apply(this,arguments),t.invert=u.invert&&e,r()}}function le(n){return ue(n,function(t,e){n.point(t*Yo,e*Yo)})}function ce(n,t){return[n,t]}function fe(n,t){return[n>Fo?n-Ho:-Fo>n?n+Ho:n,t]}function se(n,t,e){return n?t||e?Ct(pe(n),ge(t,e)):pe(n):t||e?ge(t,e):fe}function he(n){return function(t,e){return t+=n,[t>Fo?t-Ho:-Fo>t?t+Ho:t,e]}}function pe(n){var t=he(n);return t.invert=he(-n),t}function ge(n,t){function e(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*r+a*i;return[Math.atan2(l*u-f*o,a*r-c*i),tn(f*u+l*o)]}var r=Math.cos(n),i=Math.sin(n),u=Math.cos(t),o=Math.sin(t);return e.invert=function(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*u-l*o;return[Math.atan2(l*u+c*o,a*r+f*i),tn(f*r-a*i)]},e}function ve(n,t){var e=Math.cos(n),r=Math.sin(n);return function(i,u,o,a){var l=o*t;null!=i?(i=de(e,i),u=de(e,u),(o>0?u>i:i>u)&&(i+=o*Ho)):(i=n+o*Ho,u=n-.5*l);for(var c,f=i;o>0?f>u:u>f;f-=l)a.point((c=_t([e,-r*Math.cos(f),-r*Math.sin(f)]))[0],c[1])}}function de(n,t){var e=dt(t);e[0]-=n,bt(e);var r=nn(-e[1]);return((-e[2]<0?-r:r)+2*Math.PI-Uo)%(2*Math.PI)}function ye(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[n,t]})}}function me(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[t,n]})}}function Me(n){return n.source}function xe(n){return n.target}function be(n,t,e,r){var i=Math.cos(t),u=Math.sin(t),o=Math.cos(r),a=Math.sin(r),l=i*Math.cos(n),c=i*Math.sin(n),f=o*Math.cos(e),s=o*Math.sin(e),h=2*Math.asin(Math.sqrt(on(r-t)+i*o*on(e-n))),p=1/Math.sin(h),g=h?function(n){var t=Math.sin(n*=h)*p,e=Math.sin(h-n)*p,r=e*l+t*f,i=e*c+t*s,o=e*u+t*a;return[Math.atan2(i,r)*Zo,Math.atan2(o,Math.sqrt(r*r+i*i))*Zo]}:function(){return[n*Zo,t*Zo]};return g.distance=h,g}function _e(){function n(n,i){var u=Math.sin(i*=Yo),o=Math.cos(i),a=xo((n*=Yo)-t),l=Math.cos(a);Ja+=Math.atan2(Math.sqrt((a=o*Math.sin(a))*a+(a=r*u-e*o*l)*a),e*u+r*o*l),t=n,e=u,r=o}var t,e,r;Ga.point=function(i,u){t=i*Yo,e=Math.sin(u*=Yo),r=Math.cos(u),Ga.point=n},Ga.lineEnd=function(){Ga.point=Ga.lineEnd=b}}function we(n,t){function e(t,e){var r=Math.cos(t),i=Math.cos(e),u=n(r*i);return[u*i*Math.sin(t),u*Math.sin(e)]}return e.invert=function(n,e){var r=Math.sqrt(n*n+e*e),i=t(r),u=Math.sin(i),o=Math.cos(i);return[Math.atan2(n*u,r*o),Math.asin(r&&e*u/r)]},e}function Se(n,t){function e(n,t){o>0?-Io+Uo>t&&(t=-Io+Uo):t>Io-Uo&&(t=Io-Uo);var e=o/Math.pow(i(t),u);return[e*Math.sin(u*n),o-e*Math.cos(u*n)]}var r=Math.cos(n),i=function(n){return Math.tan(Fo/4+n/2)},u=n===t?Math.sin(n):Math.log(r/Math.cos(t))/Math.log(i(t)/i(n)),o=r*Math.pow(i(n),u)/u;return u?(e.invert=function(n,t){var e=o-t,r=K(u)*Math.sqrt(n*n+e*e);return[Math.atan2(n,e)/u,2*Math.atan(Math.pow(o/r,1/u))-Io]},e):Ne}function ke(n,t){function e(n,t){var e=u-t;return[e*Math.sin(i*n),u-e*Math.cos(i*n)]}var r=Math.cos(n),i=n===t?Math.sin(n):(r-Math.cos(t))/(t-n),u=r/i+n;return xo(i)i;i++){for(;r>1&&Q(n[e[r-2]],n[e[r-1]],n[i])<=0;)--r;e[r++]=i}return e.slice(0,r)}function qe(n,t){return n[0]-t[0]||n[1]-t[1]}function Te(n,t,e){return(e[0]-t[0])*(n[1]-t[1])<(e[1]-t[1])*(n[0]-t[0])}function Re(n,t,e,r){var i=n[0],u=e[0],o=t[0]-i,a=r[0]-u,l=n[1],c=e[1],f=t[1]-l,s=r[1]-c,h=(a*(l-c)-s*(i-u))/(s*o-a*f);return[i+h*o,l+h*f]}function De(n){var t=n[0],e=n[n.length-1];return!(t[0]-e[0]||t[1]-e[1])}function Pe(){rr(this),this.edge=this.site=this.circle=null}function Ue(n){var t=cl.pop()||new Pe;return t.site=n,t}function je(n){Be(n),ol.remove(n),cl.push(n),rr(n)}function Fe(n){var t=n.circle,e=t.x,r=t.cy,i={x:e,y:r},u=n.P,o=n.N,a=[n];je(n);for(var l=u;l.circle&&xo(e-l.circle.x)f;++f)c=a[f],l=a[f-1],nr(c.edge,l.site,c.site,i);l=a[0],c=a[s-1],c.edge=Ke(l.site,c.site,null,i),$e(l),$e(c)}function He(n){for(var t,e,r,i,u=n.x,o=n.y,a=ol._;a;)if(r=Oe(a,o)-u,r>Uo)a=a.L;else{if(i=u-Ie(a,o),!(i>Uo)){r>-Uo?(t=a.P,e=a):i>-Uo?(t=a,e=a.N):t=e=a;break}if(!a.R){t=a;break}a=a.R}var l=Ue(n);if(ol.insert(t,l),t||e){if(t===e)return Be(t),e=Ue(t.site),ol.insert(l,e),l.edge=e.edge=Ke(t.site,l.site),$e(t),void $e(e);if(!e)return void(l.edge=Ke(t.site,l.site));Be(t),Be(e);var c=t.site,f=c.x,s=c.y,h=n.x-f,p=n.y-s,g=e.site,v=g.x-f,d=g.y-s,y=2*(h*d-p*v),m=h*h+p*p,M=v*v+d*d,x={x:(d*m-p*M)/y+f,y:(h*M-v*m)/y+s};nr(e.edge,c,g,x),l.edge=Ke(c,n,null,x),e.edge=Ke(n,g,null,x),$e(t),$e(e)}}function Oe(n,t){var e=n.site,r=e.x,i=e.y,u=i-t;if(!u)return r;var o=n.P;if(!o)return-(1/0);e=o.site;var a=e.x,l=e.y,c=l-t;if(!c)return a;var f=a-r,s=1/u-1/c,h=f/c;return s?(-h+Math.sqrt(h*h-2*s*(f*f/(-2*c)-l+c/2+i-u/2)))/s+r:(r+a)/2}function Ie(n,t){var e=n.N;if(e)return Oe(e,t);var r=n.site;return r.y===t?r.x:1/0}function Ye(n){this.site=n,this.edges=[]}function Ze(n){for(var t,e,r,i,u,o,a,l,c,f,s=n[0][0],h=n[1][0],p=n[0][1],g=n[1][1],v=ul,d=v.length;d--;)if(u=v[d],u&&u.prepare())for(a=u.edges,l=a.length,o=0;l>o;)f=a[o].end(),r=f.x,i=f.y,c=a[++o%l].start(),t=c.x,e=c.y,(xo(r-t)>Uo||xo(i-e)>Uo)&&(a.splice(o,0,new tr(Qe(u.site,f,xo(r-s)Uo?{x:s,y:xo(t-s)Uo?{x:xo(e-g)Uo?{x:h,y:xo(t-h)Uo?{x:xo(e-p)=-jo)){var p=l*l+c*c,g=f*f+s*s,v=(s*p-c*g)/h,d=(l*g-f*p)/h,s=d+a,y=fl.pop()||new Xe;y.arc=n,y.site=i,y.x=v+o,y.y=s+Math.sqrt(v*v+d*d),y.cy=s,n.circle=y;for(var m=null,M=ll._;M;)if(y.yd||d>=a)return;if(h>g){if(u){if(u.y>=c)return}else u={x:d,y:l};e={x:d,y:c}}else{if(u){if(u.yr||r>1)if(h>g){if(u){if(u.y>=c)return}else u={x:(l-i)/r,y:l};e={x:(c-i)/r,y:c}}else{if(u){if(u.yp){if(u){if(u.x>=a)return}else u={x:o,y:r*o+i};e={x:a,y:r*a+i}}else{if(u){if(u.xu||s>o||r>h||i>p)){if(g=n.point){var g,v=t-n.x,d=e-n.y,y=v*v+d*d;if(l>y){var m=Math.sqrt(l=y);r=t-m,i=e-m,u=t+m,o=e+m,a=g}}for(var M=n.nodes,x=.5*(f+h),b=.5*(s+p),_=t>=x,w=e>=b,S=w<<1|_,k=S+4;k>S;++S)if(n=M[3&S])switch(3&S){case 0:c(n,f,s,x,b);break;case 1:c(n,x,s,h,b);break;case 2:c(n,f,b,x,p);break;case 3:c(n,x,b,h,p)}}}(n,r,i,u,o),a}function vr(n,t){n=ao.rgb(n),t=ao.rgb(t);var e=n.r,r=n.g,i=n.b,u=t.r-e,o=t.g-r,a=t.b-i;return function(n){return"#"+bn(Math.round(e+u*n))+bn(Math.round(r+o*n))+bn(Math.round(i+a*n))}}function dr(n,t){var e,r={},i={};for(e in n)e in t?r[e]=Mr(n[e],t[e]):i[e]=n[e];for(e in t)e in n||(i[e]=t[e]);return function(n){for(e in r)i[e]=r[e](n);return i}}function yr(n,t){return n=+n,t=+t,function(e){return n*(1-e)+t*e}}function mr(n,t){var e,r,i,u=hl.lastIndex=pl.lastIndex=0,o=-1,a=[],l=[];for(n+="",t+="";(e=hl.exec(n))&&(r=pl.exec(t));)(i=r.index)>u&&(i=t.slice(u,i),a[o]?a[o]+=i:a[++o]=i),(e=e[0])===(r=r[0])?a[o]?a[o]+=r:a[++o]=r:(a[++o]=null,l.push({i:o,x:yr(e,r)})),u=pl.lastIndex;return ur;++r)a[(e=l[r]).i]=e.x(n);return a.join("")})}function Mr(n,t){for(var e,r=ao.interpolators.length;--r>=0&&!(e=ao.interpolators[r](n,t)););return e}function xr(n,t){var e,r=[],i=[],u=n.length,o=t.length,a=Math.min(n.length,t.length);for(e=0;a>e;++e)r.push(Mr(n[e],t[e]));for(;u>e;++e)i[e]=n[e];for(;o>e;++e)i[e]=t[e];return function(n){for(e=0;a>e;++e)i[e]=r[e](n);return i}}function br(n){return function(t){return 0>=t?0:t>=1?1:n(t)}}function _r(n){return function(t){return 1-n(1-t)}}function wr(n){return function(t){return.5*(.5>t?n(2*t):2-n(2-2*t))}}function Sr(n){return n*n}function kr(n){return n*n*n}function Nr(n){if(0>=n)return 0;if(n>=1)return 1;var t=n*n,e=t*n;return 4*(.5>n?e:3*(n-t)+e-.75)}function Er(n){return function(t){return Math.pow(t,n)}}function Ar(n){return 1-Math.cos(n*Io)}function Cr(n){return Math.pow(2,10*(n-1))}function zr(n){return 1-Math.sqrt(1-n*n)}function Lr(n,t){var e;return arguments.length<2&&(t=.45),arguments.length?e=t/Ho*Math.asin(1/n):(n=1,e=t/4),function(r){return 1+n*Math.pow(2,-10*r)*Math.sin((r-e)*Ho/t)}}function qr(n){return n||(n=1.70158),function(t){return t*t*((n+1)*t-n)}}function Tr(n){return 1/2.75>n?7.5625*n*n:2/2.75>n?7.5625*(n-=1.5/2.75)*n+.75:2.5/2.75>n?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375}function Rr(n,t){n=ao.hcl(n),t=ao.hcl(t);var e=n.h,r=n.c,i=n.l,u=t.h-e,o=t.c-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.c:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return sn(e+u*n,r+o*n,i+a*n)+""}}function Dr(n,t){n=ao.hsl(n),t=ao.hsl(t);var e=n.h,r=n.s,i=n.l,u=t.h-e,o=t.s-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.s:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return cn(e+u*n,r+o*n,i+a*n)+""}}function Pr(n,t){n=ao.lab(n),t=ao.lab(t);var e=n.l,r=n.a,i=n.b,u=t.l-e,o=t.a-r,a=t.b-i;return function(n){return pn(e+u*n,r+o*n,i+a*n)+""}}function Ur(n,t){return t-=n,function(e){return Math.round(n+t*e)}}function jr(n){var t=[n.a,n.b],e=[n.c,n.d],r=Hr(t),i=Fr(t,e),u=Hr(Or(e,t,-i))||0;t[0]*e[1]180?t+=360:t-n>180&&(n+=360),r.push({i:e.push(Ir(e)+"rotate(",null,")")-2,x:yr(n,t)})):t&&e.push(Ir(e)+"rotate("+t+")")}function Vr(n,t,e,r){n!==t?r.push({i:e.push(Ir(e)+"skewX(",null,")")-2,x:yr(n,t)}):t&&e.push(Ir(e)+"skewX("+t+")")}function Xr(n,t,e,r){if(n[0]!==t[0]||n[1]!==t[1]){var i=e.push(Ir(e)+"scale(",null,",",null,")");r.push({i:i-4,x:yr(n[0],t[0])},{i:i-2,x:yr(n[1],t[1])})}else 1===t[0]&&1===t[1]||e.push(Ir(e)+"scale("+t+")")}function $r(n,t){var e=[],r=[];return n=ao.transform(n),t=ao.transform(t),Yr(n.translate,t.translate,e,r),Zr(n.rotate,t.rotate,e,r),Vr(n.skew,t.skew,e,r),Xr(n.scale,t.scale,e,r),n=t=null,function(n){for(var t,i=-1,u=r.length;++i=0;)e.push(i[r])}function oi(n,t){for(var e=[n],r=[];null!=(n=e.pop());)if(r.push(n),(u=n.children)&&(i=u.length))for(var i,u,o=-1;++oe;++e)(t=n[e][1])>i&&(r=e,i=t);return r}function yi(n){return n.reduce(mi,0)}function mi(n,t){return n+t[1]}function Mi(n,t){return xi(n,Math.ceil(Math.log(t.length)/Math.LN2+1))}function xi(n,t){for(var e=-1,r=+n[0],i=(n[1]-r)/t,u=[];++e<=t;)u[e]=i*e+r;return u}function bi(n){return[ao.min(n),ao.max(n)]}function _i(n,t){return n.value-t.value}function wi(n,t){var e=n._pack_next;n._pack_next=t,t._pack_prev=n,t._pack_next=e,e._pack_prev=t}function Si(n,t){n._pack_next=t,t._pack_prev=n}function ki(n,t){var e=t.x-n.x,r=t.y-n.y,i=n.r+t.r;return.999*i*i>e*e+r*r}function Ni(n){function t(n){f=Math.min(n.x-n.r,f),s=Math.max(n.x+n.r,s),h=Math.min(n.y-n.r,h),p=Math.max(n.y+n.r,p)}if((e=n.children)&&(c=e.length)){var e,r,i,u,o,a,l,c,f=1/0,s=-(1/0),h=1/0,p=-(1/0);if(e.forEach(Ei),r=e[0],r.x=-r.r,r.y=0,t(r),c>1&&(i=e[1],i.x=i.r,i.y=0,t(i),c>2))for(u=e[2],zi(r,i,u),t(u),wi(r,u),r._pack_prev=u,wi(u,i),i=r._pack_next,o=3;c>o;o++){zi(r,i,u=e[o]);var g=0,v=1,d=1;for(a=i._pack_next;a!==i;a=a._pack_next,v++)if(ki(a,u)){g=1;break}if(1==g)for(l=r._pack_prev;l!==a._pack_prev&&!ki(l,u);l=l._pack_prev,d++);g?(d>v||v==d&&i.ro;o++)u=e[o],u.x-=y,u.y-=m,M=Math.max(M,u.r+Math.sqrt(u.x*u.x+u.y*u.y));n.r=M,e.forEach(Ai)}}function Ei(n){n._pack_next=n._pack_prev=n}function Ai(n){delete n._pack_next,delete n._pack_prev}function Ci(n,t,e,r){var i=n.children;if(n.x=t+=r*n.x,n.y=e+=r*n.y,n.r*=r,i)for(var u=-1,o=i.length;++u=0;)t=i[u],t.z+=e,t.m+=e,e+=t.s+(r+=t.c)}function Pi(n,t,e){return n.a.parent===t.parent?n.a:e}function Ui(n){return 1+ao.max(n,function(n){return n.y})}function ji(n){return n.reduce(function(n,t){return n+t.x},0)/n.length}function Fi(n){var t=n.children;return t&&t.length?Fi(t[0]):n}function Hi(n){var t,e=n.children;return e&&(t=e.length)?Hi(e[t-1]):n}function Oi(n){return{x:n.x,y:n.y,dx:n.dx,dy:n.dy}}function Ii(n,t){var e=n.x+t[3],r=n.y+t[0],i=n.dx-t[1]-t[3],u=n.dy-t[0]-t[2];return 0>i&&(e+=i/2,i=0),0>u&&(r+=u/2,u=0),{x:e,y:r,dx:i,dy:u}}function Yi(n){var t=n[0],e=n[n.length-1];return e>t?[t,e]:[e,t]}function Zi(n){return n.rangeExtent?n.rangeExtent():Yi(n.range())}function Vi(n,t,e,r){var i=e(n[0],n[1]),u=r(t[0],t[1]);return function(n){return u(i(n))}}function Xi(n,t){var e,r=0,i=n.length-1,u=n[r],o=n[i];return u>o&&(e=r,r=i,i=e,e=u,u=o,o=e),n[r]=t.floor(u),n[i]=t.ceil(o),n}function $i(n){return n?{floor:function(t){return Math.floor(t/n)*n},ceil:function(t){return Math.ceil(t/n)*n}}:Sl}function Bi(n,t,e,r){var i=[],u=[],o=0,a=Math.min(n.length,t.length)-1;for(n[a]2?Bi:Vi,l=r?Wr:Br;return o=i(n,t,l,e),a=i(t,n,l,Mr),u}function u(n){return o(n)}var o,a;return u.invert=function(n){return a(n)},u.domain=function(t){return arguments.length?(n=t.map(Number),i()):n},u.range=function(n){return arguments.length?(t=n,i()):t},u.rangeRound=function(n){return u.range(n).interpolate(Ur)},u.clamp=function(n){return arguments.length?(r=n,i()):r},u.interpolate=function(n){return arguments.length?(e=n,i()):e},u.ticks=function(t){return Qi(n,t)},u.tickFormat=function(t,e){return nu(n,t,e)},u.nice=function(t){return Gi(n,t),i()},u.copy=function(){return Wi(n,t,e,r)},i()}function Ji(n,t){return ao.rebind(n,t,"range","rangeRound","interpolate","clamp")}function Gi(n,t){return Xi(n,$i(Ki(n,t)[2])),Xi(n,$i(Ki(n,t)[2])),n}function Ki(n,t){null==t&&(t=10);var e=Yi(n),r=e[1]-e[0],i=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),u=t/r*i;return.15>=u?i*=10:.35>=u?i*=5:.75>=u&&(i*=2),e[0]=Math.ceil(e[0]/i)*i,e[1]=Math.floor(e[1]/i)*i+.5*i,e[2]=i,e}function Qi(n,t){return ao.range.apply(ao,Ki(n,t))}function nu(n,t,e){var r=Ki(n,t);if(e){var i=ha.exec(e);if(i.shift(),"s"===i[8]){var u=ao.formatPrefix(Math.max(xo(r[0]),xo(r[1])));return i[7]||(i[7]="."+tu(u.scale(r[2]))),i[8]="f",e=ao.format(i.join("")),function(n){return e(u.scale(n))+u.symbol}}i[7]||(i[7]="."+eu(i[8],r)),e=i.join("")}else e=",."+tu(r[2])+"f";return ao.format(e)}function tu(n){return-Math.floor(Math.log(n)/Math.LN10+.01)}function eu(n,t){var e=tu(t[2]);return n in kl?Math.abs(e-tu(Math.max(xo(t[0]),xo(t[1]))))+ +("e"!==n):e-2*("%"===n)}function ru(n,t,e,r){function i(n){return(e?Math.log(0>n?0:n):-Math.log(n>0?0:-n))/Math.log(t)}function u(n){return e?Math.pow(t,n):-Math.pow(t,-n)}function o(t){return n(i(t))}return o.invert=function(t){return u(n.invert(t))},o.domain=function(t){return arguments.length?(e=t[0]>=0,n.domain((r=t.map(Number)).map(i)),o):r},o.base=function(e){return arguments.length?(t=+e,n.domain(r.map(i)),o):t},o.nice=function(){var t=Xi(r.map(i),e?Math:El);return n.domain(t),r=t.map(u),o},o.ticks=function(){var n=Yi(r),o=[],a=n[0],l=n[1],c=Math.floor(i(a)),f=Math.ceil(i(l)),s=t%1?2:t;if(isFinite(f-c)){if(e){for(;f>c;c++)for(var h=1;s>h;h++)o.push(u(c)*h);o.push(u(c))}else for(o.push(u(c));c++0;h--)o.push(u(c)*h);for(c=0;o[c]l;f--);o=o.slice(c,f)}return o},o.tickFormat=function(n,e){if(!arguments.length)return Nl;arguments.length<2?e=Nl:"function"!=typeof e&&(e=ao.format(e));var r=Math.max(1,t*n/o.ticks().length);return function(n){var o=n/u(Math.round(i(n)));return t-.5>o*t&&(o*=t),r>=o?e(n):""}},o.copy=function(){return ru(n.copy(),t,e,r)},Ji(o,n)}function iu(n,t,e){function r(t){return n(i(t))}var i=uu(t),u=uu(1/t);return r.invert=function(t){return u(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain((e=t.map(Number)).map(i)),r):e},r.ticks=function(n){return Qi(e,n)},r.tickFormat=function(n,t){return nu(e,n,t)},r.nice=function(n){return r.domain(Gi(e,n))},r.exponent=function(o){return arguments.length?(i=uu(t=o),u=uu(1/t),n.domain(e.map(i)),r):t},r.copy=function(){return iu(n.copy(),t,e)},Ji(r,n)}function uu(n){return function(t){return 0>t?-Math.pow(-t,n):Math.pow(t,n)}}function ou(n,t){function e(e){return u[((i.get(e)||("range"===t.t?i.set(e,n.push(e)):NaN))-1)%u.length]}function r(t,e){return ao.range(n.length).map(function(n){return t+e*n})}var i,u,o;return e.domain=function(r){if(!arguments.length)return n;n=[],i=new c;for(var u,o=-1,a=r.length;++oe?[NaN,NaN]:[e>0?a[e-1]:n[0],et?NaN:t/u+n,[t,t+1/u]},r.copy=function(){return lu(n,t,e)},i()}function cu(n,t){function e(e){return e>=e?t[ao.bisect(n,e)]:void 0}return e.domain=function(t){return arguments.length?(n=t,e):n},e.range=function(n){return arguments.length?(t=n,e):t},e.invertExtent=function(e){return e=t.indexOf(e),[n[e-1],n[e]]},e.copy=function(){return cu(n,t)},e}function fu(n){function t(n){return+n}return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=e.map(t),t):n},t.ticks=function(t){return Qi(n,t)},t.tickFormat=function(t,e){return nu(n,t,e)},t.copy=function(){return fu(n)},t}function su(){return 0}function hu(n){return n.innerRadius}function pu(n){return n.outerRadius}function gu(n){return n.startAngle}function vu(n){return n.endAngle}function du(n){return n&&n.padAngle}function yu(n,t,e,r){return(n-e)*t-(t-r)*n>0?0:1}function mu(n,t,e,r,i){var u=n[0]-t[0],o=n[1]-t[1],a=(i?r:-r)/Math.sqrt(u*u+o*o),l=a*o,c=-a*u,f=n[0]+l,s=n[1]+c,h=t[0]+l,p=t[1]+c,g=(f+h)/2,v=(s+p)/2,d=h-f,y=p-s,m=d*d+y*y,M=e-r,x=f*p-h*s,b=(0>y?-1:1)*Math.sqrt(Math.max(0,M*M*m-x*x)),_=(x*y-d*b)/m,w=(-x*d-y*b)/m,S=(x*y+d*b)/m,k=(-x*d+y*b)/m,N=_-g,E=w-v,A=S-g,C=k-v;return N*N+E*E>A*A+C*C&&(_=S,w=k),[[_-l,w-c],[_*e/M,w*e/M]]}function Mu(n){function t(t){function o(){c.push("M",u(n(f),a))}for(var l,c=[],f=[],s=-1,h=t.length,p=En(e),g=En(r);++s1?n.join("L"):n+"Z"}function bu(n){return n.join("L")+"Z"}function _u(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t1&&i.push("H",r[0]),i.join("")}function wu(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t1){a=t[1],u=n[l],l++,r+="C"+(i[0]+o[0])+","+(i[1]+o[1])+","+(u[0]-a[0])+","+(u[1]-a[1])+","+u[0]+","+u[1];for(var c=2;c9&&(i=3*t/Math.sqrt(i),o[a]=i*e,o[a+1]=i*r));for(a=-1;++a<=l;)i=(n[Math.min(l,a+1)][0]-n[Math.max(0,a-1)][0])/(6*(1+o[a]*o[a])),u.push([i||0,o[a]*i||0]);return u}function Fu(n){return n.length<3?xu(n):n[0]+Au(n,ju(n))}function Hu(n){for(var t,e,r,i=-1,u=n.length;++i=t?o(n-t):void(f.c=o)}function o(e){var i=g.active,u=g[i];u&&(u.timer.c=null,u.timer.t=NaN,--g.count,delete g[i],u.event&&u.event.interrupt.call(n,n.__data__,u.index));for(var o in g)if(r>+o){var c=g[o];c.timer.c=null,c.timer.t=NaN,--g.count,delete g[o]}f.c=a,qn(function(){return f.c&&a(e||1)&&(f.c=null,f.t=NaN),1},0,l),g.active=r,v.event&&v.event.start.call(n,n.__data__,t),p=[],v.tween.forEach(function(e,r){(r=r.call(n,n.__data__,t))&&p.push(r)}),h=v.ease,s=v.duration}function a(i){for(var u=i/s,o=h(u),a=p.length;a>0;)p[--a].call(n,o);return u>=1?(v.event&&v.event.end.call(n,n.__data__,t),--g.count?delete g[r]:delete n[e],1):void 0}var l,f,s,h,p,g=n[e]||(n[e]={active:0,count:0}),v=g[r];v||(l=i.time,f=qn(u,0,l),v=g[r]={tween:new c,time:l,timer:f,delay:i.delay,duration:i.duration,ease:i.ease,index:t},i=null,++g.count)}function no(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate("+(isFinite(r)?r:e(n))+",0)"})}function to(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate(0,"+(isFinite(r)?r:e(n))+")"})}function eo(n){return n.toISOString()}function ro(n,t,e){function r(t){return n(t)}function i(n,e){var r=n[1]-n[0],i=r/e,u=ao.bisect(Kl,i);return u==Kl.length?[t.year,Ki(n.map(function(n){return n/31536e6}),e)[2]]:u?t[i/Kl[u-1]1?{floor:function(t){for(;e(t=n.floor(t));)t=io(t-1);return t},ceil:function(t){for(;e(t=n.ceil(t));)t=io(+t+1);return t}}:n))},r.ticks=function(n,t){var e=Yi(r.domain()),u=null==n?i(e,10):"number"==typeof n?i(e,n):!n.range&&[{range:n},t];return u&&(n=u[0],t=u[1]),n.range(e[0],io(+e[1]+1),1>t?1:t)},r.tickFormat=function(){return e},r.copy=function(){return ro(n.copy(),t,e)},Ji(r,n)}function io(n){return new Date(n)}function uo(n){return JSON.parse(n.responseText)}function oo(n){var t=fo.createRange();return t.selectNode(fo.body),t.createContextualFragment(n.responseText)}var ao={version:"3.5.17"},lo=[].slice,co=function(n){return lo.call(n)},fo=this.document;if(fo)try{co(fo.documentElement.childNodes)[0].nodeType}catch(so){co=function(n){for(var t=n.length,e=new Array(t);t--;)e[t]=n[t];return e}}if(Date.now||(Date.now=function(){return+new Date}),fo)try{fo.createElement("DIV").style.setProperty("opacity",0,"")}catch(ho){var po=this.Element.prototype,go=po.setAttribute,vo=po.setAttributeNS,yo=this.CSSStyleDeclaration.prototype,mo=yo.setProperty;po.setAttribute=function(n,t){go.call(this,n,t+"")},po.setAttributeNS=function(n,t,e){vo.call(this,n,t,e+"")},yo.setProperty=function(n,t,e){mo.call(this,n,t+"",e)}}ao.ascending=e,ao.descending=function(n,t){return n>t?-1:t>n?1:t>=n?0:NaN},ao.min=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i=r){e=r;break}for(;++ir&&(e=r)}else{for(;++i=r){e=r;break}for(;++ir&&(e=r)}return e},ao.max=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i=r){e=r;break}for(;++ie&&(e=r)}else{for(;++i=r){e=r;break}for(;++ie&&(e=r)}return e},ao.extent=function(n,t){var e,r,i,u=-1,o=n.length;if(1===arguments.length){for(;++u=r){e=i=r;break}for(;++ur&&(e=r),r>i&&(i=r))}else{for(;++u=r){e=i=r;break}for(;++ur&&(e=r),r>i&&(i=r))}return[e,i]},ao.sum=function(n,t){var e,r=0,u=n.length,o=-1;if(1===arguments.length)for(;++o1?l/(f-1):void 0},ao.deviation=function(){var n=ao.variance.apply(this,arguments);return n?Math.sqrt(n):n};var Mo=u(e);ao.bisectLeft=Mo.left,ao.bisect=ao.bisectRight=Mo.right,ao.bisector=function(n){return u(1===n.length?function(t,r){return e(n(t),r)}:n)},ao.shuffle=function(n,t,e){(u=arguments.length)<3&&(e=n.length,2>u&&(t=0));for(var r,i,u=e-t;u;)i=Math.random()*u--|0,r=n[u+t],n[u+t]=n[i+t],n[i+t]=r;return n},ao.permute=function(n,t){for(var e=t.length,r=new Array(e);e--;)r[e]=n[t[e]];return r},ao.pairs=function(n){for(var t,e=0,r=n.length-1,i=n[0],u=new Array(0>r?0:r);r>e;)u[e]=[t=i,i=n[++e]];return u},ao.transpose=function(n){if(!(i=n.length))return[];for(var t=-1,e=ao.min(n,o),r=new Array(e);++t=0;)for(r=n[i],t=r.length;--t>=0;)e[--o]=r[t];return e};var xo=Math.abs;ao.range=function(n,t,e){if(arguments.length<3&&(e=1,arguments.length<2&&(t=n,n=0)),(t-n)/e===1/0)throw new Error("infinite range");var r,i=[],u=a(xo(e)),o=-1;if(n*=u,t*=u,e*=u,0>e)for(;(r=n+e*++o)>t;)i.push(r/u);else for(;(r=n+e*++o)=u.length)return r?r.call(i,o):e?o.sort(e):o;for(var l,f,s,h,p=-1,g=o.length,v=u[a++],d=new c;++p=u.length)return n;var r=[],i=o[e++];return n.forEach(function(n,i){r.push({key:n,values:t(i,e)})}),i?r.sort(function(n,t){return i(n.key,t.key)}):r}var e,r,i={},u=[],o=[];return i.map=function(t,e){return n(e,t,0)},i.entries=function(e){return t(n(ao.map,e,0),0)},i.key=function(n){return u.push(n),i},i.sortKeys=function(n){return o[u.length-1]=n,i},i.sortValues=function(n){return e=n,i},i.rollup=function(n){return r=n,i},i},ao.set=function(n){var t=new y;if(n)for(var e=0,r=n.length;r>e;++e)t.add(n[e]);return t},l(y,{has:h,add:function(n){return this._[f(n+="")]=!0,n},remove:p,values:g,size:v,empty:d,forEach:function(n){for(var t in this._)n.call(this,s(t))}}),ao.behavior={},ao.rebind=function(n,t){for(var e,r=1,i=arguments.length;++r=0&&(r=n.slice(e+1),n=n.slice(0,e)),n)return arguments.length<2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},ao.event=null,ao.requote=function(n){return n.replace(So,"\\$&")};var So=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,ko={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},No=function(n,t){return t.querySelector(n)},Eo=function(n,t){return t.querySelectorAll(n)},Ao=function(n,t){var e=n.matches||n[x(n,"matchesSelector")];return(Ao=function(n,t){return e.call(n,t)})(n,t)};"function"==typeof Sizzle&&(No=function(n,t){return Sizzle(n,t)[0]||null},Eo=Sizzle,Ao=Sizzle.matchesSelector),ao.selection=function(){return ao.select(fo.documentElement)};var Co=ao.selection.prototype=[];Co.select=function(n){var t,e,r,i,u=[];n=A(n);for(var o=-1,a=this.length;++o=0&&"xmlns"!==(e=n.slice(0,t))&&(n=n.slice(t+1)),Lo.hasOwnProperty(e)?{space:Lo[e],local:n}:n}},Co.attr=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node();return n=ao.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(z(t,n[t]));return this}return this.each(z(n,t))},Co.classed=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node(),r=(n=T(n)).length,i=-1;if(t=e.classList){for(;++ii){if("string"!=typeof n){2>i&&(e="");for(r in n)this.each(P(r,n[r],e));return this}if(2>i){var u=this.node();return t(u).getComputedStyle(u,null).getPropertyValue(n)}r=""}return this.each(P(n,e,r))},Co.property=function(n,t){if(arguments.length<2){if("string"==typeof n)return this.node()[n];for(t in n)this.each(U(t,n[t]));return this}return this.each(U(n,t))},Co.text=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.textContent=null==t?"":t}:null==n?function(){this.textContent=""}:function(){this.textContent=n}):this.node().textContent},Co.html=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.innerHTML=null==t?"":t}:null==n?function(){this.innerHTML=""}:function(){this.innerHTML=n}):this.node().innerHTML},Co.append=function(n){return n=j(n),this.select(function(){return this.appendChild(n.apply(this,arguments))})},Co.insert=function(n,t){return n=j(n),t=A(t),this.select(function(){return this.insertBefore(n.apply(this,arguments),t.apply(this,arguments)||null)})},Co.remove=function(){return this.each(F)},Co.data=function(n,t){function e(n,e){var r,i,u,o=n.length,s=e.length,h=Math.min(o,s),p=new Array(s),g=new Array(s),v=new Array(o);if(t){var d,y=new c,m=new Array(o);for(r=-1;++rr;++r)g[r]=H(e[r]);for(;o>r;++r)v[r]=n[r]}g.update=p,g.parentNode=p.parentNode=v.parentNode=n.parentNode,a.push(g),l.push(p),f.push(v)}var r,i,u=-1,o=this.length;if(!arguments.length){for(n=new Array(o=(r=this[0]).length);++uu;u++){i.push(t=[]),t.parentNode=(e=this[u]).parentNode;for(var a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return E(i)},Co.order=function(){for(var n=-1,t=this.length;++n=0;)(e=r[i])&&(u&&u!==e.nextSibling&&u.parentNode.insertBefore(e,u),u=e);return this},Co.sort=function(n){n=I.apply(this,arguments);for(var t=-1,e=this.length;++tn;n++)for(var e=this[n],r=0,i=e.length;i>r;r++){var u=e[r];if(u)return u}return null},Co.size=function(){var n=0;return Y(this,function(){++n}),n};var qo=[];ao.selection.enter=Z,ao.selection.enter.prototype=qo,qo.append=Co.append,qo.empty=Co.empty,qo.node=Co.node,qo.call=Co.call,qo.size=Co.size,qo.select=function(n){for(var t,e,r,i,u,o=[],a=-1,l=this.length;++ar){if("string"!=typeof n){2>r&&(t=!1);for(e in n)this.each(X(e,n[e],t));return this}if(2>r)return(r=this.node()["__on"+n])&&r._;e=!1}return this.each(X(n,t,e))};var To=ao.map({mouseenter:"mouseover",mouseleave:"mouseout"});fo&&To.forEach(function(n){"on"+n in fo&&To.remove(n)});var Ro,Do=0;ao.mouse=function(n){return J(n,k())};var Po=this.navigator&&/WebKit/.test(this.navigator.userAgent)?-1:0;ao.touch=function(n,t,e){if(arguments.length<3&&(e=t,t=k().changedTouches),t)for(var r,i=0,u=t.length;u>i;++i)if((r=t[i]).identifier===e)return J(n,r)},ao.behavior.drag=function(){function n(){this.on("mousedown.drag",u).on("touchstart.drag",o)}function e(n,t,e,u,o){return function(){function a(){var n,e,r=t(h,v);r&&(n=r[0]-M[0],e=r[1]-M[1],g|=n|e,M=r,p({type:"drag",x:r[0]+c[0],y:r[1]+c[1],dx:n,dy:e}))}function l(){t(h,v)&&(y.on(u+d,null).on(o+d,null),m(g),p({type:"dragend"}))}var c,f=this,s=ao.event.target.correspondingElement||ao.event.target,h=f.parentNode,p=r.of(f,arguments),g=0,v=n(),d=".drag"+(null==v?"":"-"+v),y=ao.select(e(s)).on(u+d,a).on(o+d,l),m=W(s),M=t(h,v);i?(c=i.apply(f,arguments),c=[c.x-M[0],c.y-M[1]]):c=[0,0],p({type:"dragstart"})}}var r=N(n,"drag","dragstart","dragend"),i=null,u=e(b,ao.mouse,t,"mousemove","mouseup"),o=e(G,ao.touch,m,"touchmove","touchend");return n.origin=function(t){return arguments.length?(i=t,n):i},ao.rebind(n,r,"on")},ao.touches=function(n,t){return arguments.length<2&&(t=k().touches),t?co(t).map(function(t){var e=J(n,t);return e.identifier=t.identifier,e}):[]};var Uo=1e-6,jo=Uo*Uo,Fo=Math.PI,Ho=2*Fo,Oo=Ho-Uo,Io=Fo/2,Yo=Fo/180,Zo=180/Fo,Vo=Math.SQRT2,Xo=2,$o=4;ao.interpolateZoom=function(n,t){var e,r,i=n[0],u=n[1],o=n[2],a=t[0],l=t[1],c=t[2],f=a-i,s=l-u,h=f*f+s*s;if(jo>h)r=Math.log(c/o)/Vo,e=function(n){return[i+n*f,u+n*s,o*Math.exp(Vo*n*r)]};else{var p=Math.sqrt(h),g=(c*c-o*o+$o*h)/(2*o*Xo*p),v=(c*c-o*o-$o*h)/(2*c*Xo*p),d=Math.log(Math.sqrt(g*g+1)-g),y=Math.log(Math.sqrt(v*v+1)-v);r=(y-d)/Vo,e=function(n){var t=n*r,e=rn(d),a=o/(Xo*p)*(e*un(Vo*t+d)-en(d));return[i+a*f,u+a*s,o*e/rn(Vo*t+d)]}}return e.duration=1e3*r,e},ao.behavior.zoom=function(){function n(n){n.on(L,s).on(Wo+".zoom",p).on("dblclick.zoom",g).on(R,h)}function e(n){return[(n[0]-k.x)/k.k,(n[1]-k.y)/k.k]}function r(n){return[n[0]*k.k+k.x,n[1]*k.k+k.y]}function i(n){k.k=Math.max(A[0],Math.min(A[1],n))}function u(n,t){t=r(t),k.x+=n[0]-t[0],k.y+=n[1]-t[1]}function o(t,e,r,o){t.__chart__={x:k.x,y:k.y,k:k.k},i(Math.pow(2,o)),u(d=e,r),t=ao.select(t),C>0&&(t=t.transition().duration(C)),t.call(n.event)}function a(){b&&b.domain(x.range().map(function(n){return(n-k.x)/k.k}).map(x.invert)),w&&w.domain(_.range().map(function(n){return(n-k.y)/k.k}).map(_.invert))}function l(n){z++||n({type:"zoomstart"})}function c(n){a(),n({type:"zoom",scale:k.k,translate:[k.x,k.y]})}function f(n){--z||(n({type:"zoomend"}),d=null)}function s(){function n(){a=1,u(ao.mouse(i),h),c(o)}function r(){s.on(q,null).on(T,null),p(a),f(o)}var i=this,o=D.of(i,arguments),a=0,s=ao.select(t(i)).on(q,n).on(T,r),h=e(ao.mouse(i)),p=W(i);Il.call(i),l(o)}function h(){function n(){var n=ao.touches(g);return p=k.k,n.forEach(function(n){n.identifier in d&&(d[n.identifier]=e(n))}),n}function t(){var t=ao.event.target;ao.select(t).on(x,r).on(b,a),_.push(t);for(var e=ao.event.changedTouches,i=0,u=e.length;u>i;++i)d[e[i].identifier]=null;var l=n(),c=Date.now();if(1===l.length){if(500>c-M){var f=l[0];o(g,f,d[f.identifier],Math.floor(Math.log(k.k)/Math.LN2)+1),S()}M=c}else if(l.length>1){var f=l[0],s=l[1],h=f[0]-s[0],p=f[1]-s[1];y=h*h+p*p}}function r(){var n,t,e,r,o=ao.touches(g);Il.call(g);for(var a=0,l=o.length;l>a;++a,r=null)if(e=o[a],r=d[e.identifier]){if(t)break;n=e,t=r}if(r){var f=(f=e[0]-n[0])*f+(f=e[1]-n[1])*f,s=y&&Math.sqrt(f/y);n=[(n[0]+e[0])/2,(n[1]+e[1])/2],t=[(t[0]+r[0])/2,(t[1]+r[1])/2],i(s*p)}M=null,u(n,t),c(v)}function a(){if(ao.event.touches.length){for(var t=ao.event.changedTouches,e=0,r=t.length;r>e;++e)delete d[t[e].identifier];for(var i in d)return void n()}ao.selectAll(_).on(m,null),w.on(L,s).on(R,h),N(),f(v)}var p,g=this,v=D.of(g,arguments),d={},y=0,m=".zoom-"+ao.event.changedTouches[0].identifier,x="touchmove"+m,b="touchend"+m,_=[],w=ao.select(g),N=W(g);t(),l(v),w.on(L,null).on(R,t)}function p(){var n=D.of(this,arguments);m?clearTimeout(m):(Il.call(this),v=e(d=y||ao.mouse(this)),l(n)),m=setTimeout(function(){m=null,f(n)},50),S(),i(Math.pow(2,.002*Bo())*k.k),u(d,v),c(n)}function g(){var n=ao.mouse(this),t=Math.log(k.k)/Math.LN2;o(this,n,e(n),ao.event.shiftKey?Math.ceil(t)-1:Math.floor(t)+1)}var v,d,y,m,M,x,b,_,w,k={x:0,y:0,k:1},E=[960,500],A=Jo,C=250,z=0,L="mousedown.zoom",q="mousemove.zoom",T="mouseup.zoom",R="touchstart.zoom",D=N(n,"zoomstart","zoom","zoomend");return Wo||(Wo="onwheel"in fo?(Bo=function(){return-ao.event.deltaY*(ao.event.deltaMode?120:1)},"wheel"):"onmousewheel"in fo?(Bo=function(){return ao.event.wheelDelta},"mousewheel"):(Bo=function(){return-ao.event.detail},"MozMousePixelScroll")),n.event=function(n){n.each(function(){var n=D.of(this,arguments),t=k;Hl?ao.select(this).transition().each("start.zoom",function(){k=this.__chart__||{x:0,y:0,k:1},l(n)}).tween("zoom:zoom",function(){var e=E[0],r=E[1],i=d?d[0]:e/2,u=d?d[1]:r/2,o=ao.interpolateZoom([(i-k.x)/k.k,(u-k.y)/k.k,e/k.k],[(i-t.x)/t.k,(u-t.y)/t.k,e/t.k]);return function(t){var r=o(t),a=e/r[2];this.__chart__=k={x:i-r[0]*a,y:u-r[1]*a,k:a},c(n)}}).each("interrupt.zoom",function(){f(n)}).each("end.zoom",function(){f(n)}):(this.__chart__=k,l(n),c(n),f(n))})},n.translate=function(t){return arguments.length?(k={x:+t[0],y:+t[1],k:k.k},a(),n):[k.x,k.y]},n.scale=function(t){return arguments.length?(k={x:k.x,y:k.y,k:null},i(+t),a(),n):k.k},n.scaleExtent=function(t){return arguments.length?(A=null==t?Jo:[+t[0],+t[1]],n):A},n.center=function(t){return arguments.length?(y=t&&[+t[0],+t[1]],n):y},n.size=function(t){return arguments.length?(E=t&&[+t[0],+t[1]],n):E},n.duration=function(t){return arguments.length?(C=+t,n):C},n.x=function(t){return arguments.length?(b=t,x=t.copy(),k={x:0,y:0,k:1},n):b},n.y=function(t){return arguments.length?(w=t,_=t.copy(),k={x:0,y:0,k:1},n):w},ao.rebind(n,D,"on")};var Bo,Wo,Jo=[0,1/0];ao.color=an,an.prototype.toString=function(){return this.rgb()+""},ao.hsl=ln;var Go=ln.prototype=new an;Go.brighter=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,this.l/n)},Go.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,n*this.l)},Go.rgb=function(){return cn(this.h,this.s,this.l)},ao.hcl=fn;var Ko=fn.prototype=new an;Ko.brighter=function(n){return new fn(this.h,this.c,Math.min(100,this.l+Qo*(arguments.length?n:1)))},Ko.darker=function(n){return new fn(this.h,this.c,Math.max(0,this.l-Qo*(arguments.length?n:1)))},Ko.rgb=function(){return sn(this.h,this.c,this.l).rgb()},ao.lab=hn;var Qo=18,na=.95047,ta=1,ea=1.08883,ra=hn.prototype=new an;ra.brighter=function(n){return new hn(Math.min(100,this.l+Qo*(arguments.length?n:1)),this.a,this.b)},ra.darker=function(n){return new hn(Math.max(0,this.l-Qo*(arguments.length?n:1)),this.a,this.b)},ra.rgb=function(){return pn(this.l,this.a,this.b)},ao.rgb=mn;var ia=mn.prototype=new an;ia.brighter=function(n){n=Math.pow(.7,arguments.length?n:1);var t=this.r,e=this.g,r=this.b,i=30;return t||e||r?(t&&i>t&&(t=i),e&&i>e&&(e=i),r&&i>r&&(r=i),new mn(Math.min(255,t/n),Math.min(255,e/n),Math.min(255,r/n))):new mn(i,i,i)},ia.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new mn(n*this.r,n*this.g,n*this.b)},ia.hsl=function(){return wn(this.r,this.g,this.b)},ia.toString=function(){return"#"+bn(this.r)+bn(this.g)+bn(this.b)};var ua=ao.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});ua.forEach(function(n,t){ua.set(n,Mn(t))}),ao.functor=En,ao.xhr=An(m),ao.dsv=function(n,t){function e(n,e,u){arguments.length<3&&(u=e,e=null);var o=Cn(n,t,null==e?r:i(e),u);return o.row=function(n){return arguments.length?o.response(null==(e=n)?r:i(n)):e},o}function r(n){return e.parse(n.responseText)}function i(n){return function(t){return e.parse(t.responseText,n)}}function u(t){return t.map(o).join(n)}function o(n){return a.test(n)?'"'+n.replace(/\"/g,'""')+'"':n}var a=new RegExp('["'+n+"\n]"),l=n.charCodeAt(0);return e.parse=function(n,t){var r;return e.parseRows(n,function(n,e){if(r)return r(n,e-1);var i=new Function("d","return {"+n.map(function(n,t){return JSON.stringify(n)+": d["+t+"]"}).join(",")+"}");r=t?function(n,e){return t(i(n),e)}:i})},e.parseRows=function(n,t){function e(){if(f>=c)return o;if(i)return i=!1,u;var t=f;if(34===n.charCodeAt(t)){for(var e=t;e++f;){var r=n.charCodeAt(f++),a=1;if(10===r)i=!0;else if(13===r)i=!0,10===n.charCodeAt(f)&&(++f,++a);else if(r!==l)continue;return n.slice(t,f-a)}return n.slice(t)}for(var r,i,u={},o={},a=[],c=n.length,f=0,s=0;(r=e())!==o;){for(var h=[];r!==u&&r!==o;)h.push(r),r=e();t&&null==(h=t(h,s++))||a.push(h)}return a},e.format=function(t){if(Array.isArray(t[0]))return e.formatRows(t);var r=new y,i=[];return t.forEach(function(n){for(var t in n)r.has(t)||i.push(r.add(t))}),[i.map(o).join(n)].concat(t.map(function(t){return i.map(function(n){return o(t[n])}).join(n)})).join("\n")},e.formatRows=function(n){return n.map(u).join("\n")},e},ao.csv=ao.dsv(",","text/csv"),ao.tsv=ao.dsv(" ","text/tab-separated-values");var oa,aa,la,ca,fa=this[x(this,"requestAnimationFrame")]||function(n){setTimeout(n,17)};ao.timer=function(){qn.apply(this,arguments)},ao.timer.flush=function(){Rn(),Dn()},ao.round=function(n,t){return t?Math.round(n*(t=Math.pow(10,t)))/t:Math.round(n)};var sa=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"].map(Un);ao.formatPrefix=function(n,t){var e=0;return(n=+n)&&(0>n&&(n*=-1),t&&(n=ao.round(n,Pn(n,t))),e=1+Math.floor(1e-12+Math.log(n)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((e-1)/3)))),sa[8+e/3]};var ha=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,pa=ao.map({b:function(n){return n.toString(2)},c:function(n){return String.fromCharCode(n)},o:function(n){return n.toString(8)},x:function(n){return n.toString(16)},X:function(n){return n.toString(16).toUpperCase()},g:function(n,t){return n.toPrecision(t)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},r:function(n,t){return(n=ao.round(n,Pn(n,t))).toFixed(Math.max(0,Math.min(20,Pn(n*(1+1e-15),t))))}}),ga=ao.time={},va=Date;Hn.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){da.setUTCDate.apply(this._,arguments)},setDay:function(){da.setUTCDay.apply(this._,arguments)},setFullYear:function(){da.setUTCFullYear.apply(this._,arguments)},setHours:function(){da.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){da.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){da.setUTCMinutes.apply(this._,arguments)},setMonth:function(){da.setUTCMonth.apply(this._,arguments)},setSeconds:function(){da.setUTCSeconds.apply(this._,arguments)},setTime:function(){da.setTime.apply(this._,arguments)}};var da=Date.prototype;ga.year=On(function(n){return n=ga.day(n),n.setMonth(0,1),n},function(n,t){n.setFullYear(n.getFullYear()+t)},function(n){return n.getFullYear()}),ga.years=ga.year.range,ga.years.utc=ga.year.utc.range,ga.day=On(function(n){var t=new va(2e3,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t},function(n,t){n.setDate(n.getDate()+t)},function(n){return n.getDate()-1}),ga.days=ga.day.range,ga.days.utc=ga.day.utc.range,ga.dayOfYear=function(n){var t=ga.year(n);return Math.floor((n-t-6e4*(n.getTimezoneOffset()-t.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(n,t){t=7-t;var e=ga[n]=On(function(n){return(n=ga.day(n)).setDate(n.getDate()-(n.getDay()+t)%7),n},function(n,t){n.setDate(n.getDate()+7*Math.floor(t))},function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)-(e!==t)});ga[n+"s"]=e.range,ga[n+"s"].utc=e.utc.range,ga[n+"OfYear"]=function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)}}),ga.week=ga.sunday,ga.weeks=ga.sunday.range,ga.weeks.utc=ga.sunday.utc.range,ga.weekOfYear=ga.sundayOfYear;var ya={"-":"",_:" ",0:"0"},ma=/^\s*\d+/,Ma=/^%/;ao.locale=function(n){return{numberFormat:jn(n),timeFormat:Yn(n)}};var xa=ao.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"], +shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});ao.format=xa.numberFormat,ao.geo={},ft.prototype={s:0,t:0,add:function(n){st(n,this.t,ba),st(ba.s,this.s,this),this.s?this.t+=ba.t:this.s=ba.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var ba=new ft;ao.geo.stream=function(n,t){n&&_a.hasOwnProperty(n.type)?_a[n.type](n,t):ht(n,t)};var _a={Feature:function(n,t){ht(n.geometry,t)},FeatureCollection:function(n,t){for(var e=n.features,r=-1,i=e.length;++rn?4*Fo+n:n,Na.lineStart=Na.lineEnd=Na.point=b}};ao.geo.bounds=function(){function n(n,t){M.push(x=[f=n,h=n]),s>t&&(s=t),t>p&&(p=t)}function t(t,e){var r=dt([t*Yo,e*Yo]);if(y){var i=mt(y,r),u=[i[1],-i[0],0],o=mt(u,i);bt(o),o=_t(o);var l=t-g,c=l>0?1:-1,v=o[0]*Zo*c,d=xo(l)>180;if(d^(v>c*g&&c*t>v)){var m=o[1]*Zo;m>p&&(p=m)}else if(v=(v+360)%360-180,d^(v>c*g&&c*t>v)){var m=-o[1]*Zo;s>m&&(s=m)}else s>e&&(s=e),e>p&&(p=e);d?g>t?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t):h>=f?(f>t&&(f=t),t>h&&(h=t)):t>g?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t)}else n(t,e);y=r,g=t}function e(){b.point=t}function r(){x[0]=f,x[1]=h,b.point=n,y=null}function i(n,e){if(y){var r=n-g;m+=xo(r)>180?r+(r>0?360:-360):r}else v=n,d=e;Na.point(n,e),t(n,e)}function u(){Na.lineStart()}function o(){i(v,d),Na.lineEnd(),xo(m)>Uo&&(f=-(h=180)),x[0]=f,x[1]=h,y=null}function a(n,t){return(t-=n)<0?t+360:t}function l(n,t){return n[0]-t[0]}function c(n,t){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:nka?(f=-(h=180),s=-(p=90)):m>Uo?p=90:-Uo>m&&(s=-90),x[0]=f,x[1]=h}};return function(n){p=h=-(f=s=1/0),M=[],ao.geo.stream(n,b);var t=M.length;if(t){M.sort(l);for(var e,r=1,i=M[0],u=[i];t>r;++r)e=M[r],c(e[0],i)||c(e[1],i)?(a(i[0],e[1])>a(i[0],i[1])&&(i[1]=e[1]),a(e[0],i[1])>a(i[0],i[1])&&(i[0]=e[0])):u.push(i=e);for(var o,e,g=-(1/0),t=u.length-1,r=0,i=u[t];t>=r;i=e,++r)e=u[r],(o=a(i[1],e[0]))>g&&(g=o,f=e[0],h=i[1])}return M=x=null,f===1/0||s===1/0?[[NaN,NaN],[NaN,NaN]]:[[f,s],[h,p]]}}(),ao.geo.centroid=function(n){Ea=Aa=Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,ja);var t=Da,e=Pa,r=Ua,i=t*t+e*e+r*r;return jo>i&&(t=qa,e=Ta,r=Ra,Uo>Aa&&(t=Ca,e=za,r=La),i=t*t+e*e+r*r,jo>i)?[NaN,NaN]:[Math.atan2(e,t)*Zo,tn(r/Math.sqrt(i))*Zo]};var Ea,Aa,Ca,za,La,qa,Ta,Ra,Da,Pa,Ua,ja={sphere:b,point:St,lineStart:Nt,lineEnd:Et,polygonStart:function(){ja.lineStart=At},polygonEnd:function(){ja.lineStart=Nt}},Fa=Rt(zt,jt,Ht,[-Fo,-Fo/2]),Ha=1e9;ao.geo.clipExtent=function(){var n,t,e,r,i,u,o={stream:function(n){return i&&(i.valid=!1),i=u(n),i.valid=!0,i},extent:function(a){return arguments.length?(u=Zt(n=+a[0][0],t=+a[0][1],e=+a[1][0],r=+a[1][1]),i&&(i.valid=!1,i=null),o):[[n,t],[e,r]]}};return o.extent([[0,0],[960,500]])},(ao.geo.conicEqualArea=function(){return Vt(Xt)}).raw=Xt,ao.geo.albers=function(){return ao.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},ao.geo.albersUsa=function(){function n(n){var u=n[0],o=n[1];return t=null,e(u,o),t||(r(u,o),t)||i(u,o),t}var t,e,r,i,u=ao.geo.albers(),o=ao.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),a=ao.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),l={point:function(n,e){t=[n,e]}};return n.invert=function(n){var t=u.scale(),e=u.translate(),r=(n[0]-e[0])/t,i=(n[1]-e[1])/t;return(i>=.12&&.234>i&&r>=-.425&&-.214>r?o:i>=.166&&.234>i&&r>=-.214&&-.115>r?a:u).invert(n)},n.stream=function(n){var t=u.stream(n),e=o.stream(n),r=a.stream(n);return{point:function(n,i){t.point(n,i),e.point(n,i),r.point(n,i)},sphere:function(){t.sphere(),e.sphere(),r.sphere()},lineStart:function(){t.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){t.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){t.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){t.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},n.precision=function(t){return arguments.length?(u.precision(t),o.precision(t),a.precision(t),n):u.precision()},n.scale=function(t){return arguments.length?(u.scale(t),o.scale(.35*t),a.scale(t),n.translate(u.translate())):u.scale()},n.translate=function(t){if(!arguments.length)return u.translate();var c=u.scale(),f=+t[0],s=+t[1];return e=u.translate(t).clipExtent([[f-.455*c,s-.238*c],[f+.455*c,s+.238*c]]).stream(l).point,r=o.translate([f-.307*c,s+.201*c]).clipExtent([[f-.425*c+Uo,s+.12*c+Uo],[f-.214*c-Uo,s+.234*c-Uo]]).stream(l).point,i=a.translate([f-.205*c,s+.212*c]).clipExtent([[f-.214*c+Uo,s+.166*c+Uo],[f-.115*c-Uo,s+.234*c-Uo]]).stream(l).point,n},n.scale(1070)};var Oa,Ia,Ya,Za,Va,Xa,$a={point:b,lineStart:b,lineEnd:b,polygonStart:function(){Ia=0,$a.lineStart=$t},polygonEnd:function(){$a.lineStart=$a.lineEnd=$a.point=b,Oa+=xo(Ia/2)}},Ba={point:Bt,lineStart:b,lineEnd:b,polygonStart:b,polygonEnd:b},Wa={point:Gt,lineStart:Kt,lineEnd:Qt,polygonStart:function(){Wa.lineStart=ne},polygonEnd:function(){Wa.point=Gt,Wa.lineStart=Kt,Wa.lineEnd=Qt}};ao.geo.path=function(){function n(n){return n&&("function"==typeof a&&u.pointRadius(+a.apply(this,arguments)),o&&o.valid||(o=i(u)),ao.geo.stream(n,o)),u.result()}function t(){return o=null,n}var e,r,i,u,o,a=4.5;return n.area=function(n){return Oa=0,ao.geo.stream(n,i($a)),Oa},n.centroid=function(n){return Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,i(Wa)),Ua?[Da/Ua,Pa/Ua]:Ra?[qa/Ra,Ta/Ra]:La?[Ca/La,za/La]:[NaN,NaN]},n.bounds=function(n){return Va=Xa=-(Ya=Za=1/0),ao.geo.stream(n,i(Ba)),[[Ya,Za],[Va,Xa]]},n.projection=function(n){return arguments.length?(i=(e=n)?n.stream||re(n):m,t()):e},n.context=function(n){return arguments.length?(u=null==(r=n)?new Wt:new te(n),"function"!=typeof a&&u.pointRadius(a),t()):r},n.pointRadius=function(t){return arguments.length?(a="function"==typeof t?t:(u.pointRadius(+t),+t),n):a},n.projection(ao.geo.albersUsa()).context(null)},ao.geo.transform=function(n){return{stream:function(t){var e=new ie(t);for(var r in n)e[r]=n[r];return e}}},ie.prototype={point:function(n,t){this.stream.point(n,t)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},ao.geo.projection=oe,ao.geo.projectionMutator=ae,(ao.geo.equirectangular=function(){return oe(ce)}).raw=ce.invert=ce,ao.geo.rotation=function(n){function t(t){return t=n(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t}return n=se(n[0]%360*Yo,n[1]*Yo,n.length>2?n[2]*Yo:0),t.invert=function(t){return t=n.invert(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t},t},fe.invert=ce,ao.geo.circle=function(){function n(){var n="function"==typeof r?r.apply(this,arguments):r,t=se(-n[0]*Yo,-n[1]*Yo,0).invert,i=[];return e(null,null,1,{point:function(n,e){i.push(n=t(n,e)),n[0]*=Zo,n[1]*=Zo}}),{type:"Polygon",coordinates:[i]}}var t,e,r=[0,0],i=6;return n.origin=function(t){return arguments.length?(r=t,n):r},n.angle=function(r){return arguments.length?(e=ve((t=+r)*Yo,i*Yo),n):t},n.precision=function(r){return arguments.length?(e=ve(t*Yo,(i=+r)*Yo),n):i},n.angle(90)},ao.geo.distance=function(n,t){var e,r=(t[0]-n[0])*Yo,i=n[1]*Yo,u=t[1]*Yo,o=Math.sin(r),a=Math.cos(r),l=Math.sin(i),c=Math.cos(i),f=Math.sin(u),s=Math.cos(u);return Math.atan2(Math.sqrt((e=s*o)*e+(e=c*f-l*s*a)*e),l*f+c*s*a)},ao.geo.graticule=function(){function n(){return{type:"MultiLineString",coordinates:t()}}function t(){return ao.range(Math.ceil(u/d)*d,i,d).map(h).concat(ao.range(Math.ceil(c/y)*y,l,y).map(p)).concat(ao.range(Math.ceil(r/g)*g,e,g).filter(function(n){return xo(n%d)>Uo}).map(f)).concat(ao.range(Math.ceil(a/v)*v,o,v).filter(function(n){return xo(n%y)>Uo}).map(s))}var e,r,i,u,o,a,l,c,f,s,h,p,g=10,v=g,d=90,y=360,m=2.5;return n.lines=function(){return t().map(function(n){return{type:"LineString",coordinates:n}})},n.outline=function(){return{type:"Polygon",coordinates:[h(u).concat(p(l).slice(1),h(i).reverse().slice(1),p(c).reverse().slice(1))]}},n.extent=function(t){return arguments.length?n.majorExtent(t).minorExtent(t):n.minorExtent()},n.majorExtent=function(t){return arguments.length?(u=+t[0][0],i=+t[1][0],c=+t[0][1],l=+t[1][1],u>i&&(t=u,u=i,i=t),c>l&&(t=c,c=l,l=t),n.precision(m)):[[u,c],[i,l]]},n.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],a=+t[0][1],o=+t[1][1],r>e&&(t=r,r=e,e=t),a>o&&(t=a,a=o,o=t),n.precision(m)):[[r,a],[e,o]]},n.step=function(t){return arguments.length?n.majorStep(t).minorStep(t):n.minorStep()},n.majorStep=function(t){return arguments.length?(d=+t[0],y=+t[1],n):[d,y]},n.minorStep=function(t){return arguments.length?(g=+t[0],v=+t[1],n):[g,v]},n.precision=function(t){return arguments.length?(m=+t,f=ye(a,o,90),s=me(r,e,m),h=ye(c,l,90),p=me(u,i,m),n):m},n.majorExtent([[-180,-90+Uo],[180,90-Uo]]).minorExtent([[-180,-80-Uo],[180,80+Uo]])},ao.geo.greatArc=function(){function n(){return{type:"LineString",coordinates:[t||r.apply(this,arguments),e||i.apply(this,arguments)]}}var t,e,r=Me,i=xe;return n.distance=function(){return ao.geo.distance(t||r.apply(this,arguments),e||i.apply(this,arguments))},n.source=function(e){return arguments.length?(r=e,t="function"==typeof e?null:e,n):r},n.target=function(t){return arguments.length?(i=t,e="function"==typeof t?null:t,n):i},n.precision=function(){return arguments.length?n:0},n},ao.geo.interpolate=function(n,t){return be(n[0]*Yo,n[1]*Yo,t[0]*Yo,t[1]*Yo)},ao.geo.length=function(n){return Ja=0,ao.geo.stream(n,Ga),Ja};var Ja,Ga={sphere:b,point:b,lineStart:_e,lineEnd:b,polygonStart:b,polygonEnd:b},Ka=we(function(n){return Math.sqrt(2/(1+n))},function(n){return 2*Math.asin(n/2)});(ao.geo.azimuthalEqualArea=function(){return oe(Ka)}).raw=Ka;var Qa=we(function(n){var t=Math.acos(n);return t&&t/Math.sin(t)},m);(ao.geo.azimuthalEquidistant=function(){return oe(Qa)}).raw=Qa,(ao.geo.conicConformal=function(){return Vt(Se)}).raw=Se,(ao.geo.conicEquidistant=function(){return Vt(ke)}).raw=ke;var nl=we(function(n){return 1/n},Math.atan);(ao.geo.gnomonic=function(){return oe(nl)}).raw=nl,Ne.invert=function(n,t){return[n,2*Math.atan(Math.exp(t))-Io]},(ao.geo.mercator=function(){return Ee(Ne)}).raw=Ne;var tl=we(function(){return 1},Math.asin);(ao.geo.orthographic=function(){return oe(tl)}).raw=tl;var el=we(function(n){return 1/(1+n)},function(n){return 2*Math.atan(n)});(ao.geo.stereographic=function(){return oe(el)}).raw=el,Ae.invert=function(n,t){return[-t,2*Math.atan(Math.exp(n))-Io]},(ao.geo.transverseMercator=function(){var n=Ee(Ae),t=n.center,e=n.rotate;return n.center=function(n){return n?t([-n[1],n[0]]):(n=t(),[n[1],-n[0]])},n.rotate=function(n){return n?e([n[0],n[1],n.length>2?n[2]+90:90]):(n=e(),[n[0],n[1],n[2]-90])},e([0,0,90])}).raw=Ae,ao.geom={},ao.geom.hull=function(n){function t(n){if(n.length<3)return[];var t,i=En(e),u=En(r),o=n.length,a=[],l=[];for(t=0;o>t;t++)a.push([+i.call(this,n[t],t),+u.call(this,n[t],t),t]);for(a.sort(qe),t=0;o>t;t++)l.push([a[t][0],-a[t][1]]);var c=Le(a),f=Le(l),s=f[0]===c[0],h=f[f.length-1]===c[c.length-1],p=[];for(t=c.length-1;t>=0;--t)p.push(n[a[c[t]][2]]);for(t=+s;t=r&&c.x<=u&&c.y>=i&&c.y<=o?[[r,o],[u,o],[u,i],[r,i]]:[];f.point=n[a]}),t}function e(n){return n.map(function(n,t){return{x:Math.round(u(n,t)/Uo)*Uo,y:Math.round(o(n,t)/Uo)*Uo,i:t}})}var r=Ce,i=ze,u=r,o=i,a=sl;return n?t(n):(t.links=function(n){return ar(e(n)).edges.filter(function(n){return n.l&&n.r}).map(function(t){return{source:n[t.l.i],target:n[t.r.i]}})},t.triangles=function(n){var t=[];return ar(e(n)).cells.forEach(function(e,r){for(var i,u,o=e.site,a=e.edges.sort(Ve),l=-1,c=a.length,f=a[c-1].edge,s=f.l===o?f.r:f.l;++l=c,h=r>=f,p=h<<1|s;n.leaf=!1,n=n.nodes[p]||(n.nodes[p]=hr()),s?i=c:a=c,h?o=f:l=f,u(n,t,e,r,i,o,a,l)}var f,s,h,p,g,v,d,y,m,M=En(a),x=En(l);if(null!=t)v=t,d=e,y=r,m=i;else if(y=m=-(v=d=1/0),s=[],h=[],g=n.length,o)for(p=0;g>p;++p)f=n[p],f.xy&&(y=f.x),f.y>m&&(m=f.y),s.push(f.x),h.push(f.y);else for(p=0;g>p;++p){var b=+M(f=n[p],p),_=+x(f,p);v>b&&(v=b),d>_&&(d=_),b>y&&(y=b),_>m&&(m=_),s.push(b),h.push(_)}var w=y-v,S=m-d;w>S?m=d+w:y=v+S;var k=hr();if(k.add=function(n){u(k,n,+M(n,++p),+x(n,p),v,d,y,m)},k.visit=function(n){pr(n,k,v,d,y,m)},k.find=function(n){return gr(k,n[0],n[1],v,d,y,m)},p=-1,null==t){for(;++p=0?n.slice(0,t):n,r=t>=0?n.slice(t+1):"in";return e=vl.get(e)||gl,r=dl.get(r)||m,br(r(e.apply(null,lo.call(arguments,1))))},ao.interpolateHcl=Rr,ao.interpolateHsl=Dr,ao.interpolateLab=Pr,ao.interpolateRound=Ur,ao.transform=function(n){var t=fo.createElementNS(ao.ns.prefix.svg,"g");return(ao.transform=function(n){if(null!=n){t.setAttribute("transform",n);var e=t.transform.baseVal.consolidate()}return new jr(e?e.matrix:yl)})(n)},jr.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var yl={a:1,b:0,c:0,d:1,e:0,f:0};ao.interpolateTransform=$r,ao.layout={},ao.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++ea*a/y){if(v>l){var c=t.charge/l;n.px-=u*c,n.py-=o*c}return!0}if(t.point&&l&&v>l){var c=t.pointCharge/l;n.px-=u*c,n.py-=o*c}}return!t.charge}}function t(n){n.px=ao.event.x,n.py=ao.event.y,l.resume()}var e,r,i,u,o,a,l={},c=ao.dispatch("start","tick","end"),f=[1,1],s=.9,h=ml,p=Ml,g=-30,v=xl,d=.1,y=.64,M=[],x=[];return l.tick=function(){if((i*=.99)<.005)return e=null,c.end({type:"end",alpha:i=0}),!0;var t,r,l,h,p,v,y,m,b,_=M.length,w=x.length;for(r=0;w>r;++r)l=x[r],h=l.source,p=l.target,m=p.x-h.x,b=p.y-h.y,(v=m*m+b*b)&&(v=i*o[r]*((v=Math.sqrt(v))-u[r])/v,m*=v,b*=v,p.x-=m*(y=h.weight+p.weight?h.weight/(h.weight+p.weight):.5),p.y-=b*y,h.x+=m*(y=1-y),h.y+=b*y);if((y=i*d)&&(m=f[0]/2,b=f[1]/2,r=-1,y))for(;++r<_;)l=M[r],l.x+=(m-l.x)*y,l.y+=(b-l.y)*y;if(g)for(ri(t=ao.geom.quadtree(M),i,a),r=-1;++r<_;)(l=M[r]).fixed||t.visit(n(l));for(r=-1;++r<_;)l=M[r],l.fixed?(l.x=l.px,l.y=l.py):(l.x-=(l.px-(l.px=l.x))*s,l.y-=(l.py-(l.py=l.y))*s);c.tick({type:"tick",alpha:i})},l.nodes=function(n){return arguments.length?(M=n,l):M},l.links=function(n){return arguments.length?(x=n,l):x},l.size=function(n){return arguments.length?(f=n,l):f},l.linkDistance=function(n){return arguments.length?(h="function"==typeof n?n:+n,l):h},l.distance=l.linkDistance,l.linkStrength=function(n){return arguments.length?(p="function"==typeof n?n:+n,l):p},l.friction=function(n){return arguments.length?(s=+n,l):s},l.charge=function(n){return arguments.length?(g="function"==typeof n?n:+n,l):g},l.chargeDistance=function(n){return arguments.length?(v=n*n,l):Math.sqrt(v)},l.gravity=function(n){return arguments.length?(d=+n,l):d},l.theta=function(n){return arguments.length?(y=n*n,l):Math.sqrt(y)},l.alpha=function(n){return arguments.length?(n=+n,i?n>0?i=n:(e.c=null,e.t=NaN,e=null,c.end({type:"end",alpha:i=0})):n>0&&(c.start({type:"start",alpha:i=n}),e=qn(l.tick)),l):i},l.start=function(){function n(n,r){if(!e){for(e=new Array(i),l=0;i>l;++l)e[l]=[];for(l=0;c>l;++l){var u=x[l];e[u.source.index].push(u.target),e[u.target.index].push(u.source)}}for(var o,a=e[t],l=-1,f=a.length;++lt;++t)(r=M[t]).index=t,r.weight=0;for(t=0;c>t;++t)r=x[t],"number"==typeof r.source&&(r.source=M[r.source]),"number"==typeof r.target&&(r.target=M[r.target]),++r.source.weight,++r.target.weight;for(t=0;i>t;++t)r=M[t],isNaN(r.x)&&(r.x=n("x",s)),isNaN(r.y)&&(r.y=n("y",v)),isNaN(r.px)&&(r.px=r.x),isNaN(r.py)&&(r.py=r.y);if(u=[],"function"==typeof h)for(t=0;c>t;++t)u[t]=+h.call(this,x[t],t);else for(t=0;c>t;++t)u[t]=h;if(o=[],"function"==typeof p)for(t=0;c>t;++t)o[t]=+p.call(this,x[t],t);else for(t=0;c>t;++t)o[t]=p;if(a=[],"function"==typeof g)for(t=0;i>t;++t)a[t]=+g.call(this,M[t],t);else for(t=0;i>t;++t)a[t]=g;return l.resume()},l.resume=function(){return l.alpha(.1)},l.stop=function(){return l.alpha(0)},l.drag=function(){return r||(r=ao.behavior.drag().origin(m).on("dragstart.force",Qr).on("drag.force",t).on("dragend.force",ni)),arguments.length?void this.on("mouseover.force",ti).on("mouseout.force",ei).call(r):r},ao.rebind(l,c,"on")};var ml=20,Ml=1,xl=1/0;ao.layout.hierarchy=function(){function n(i){var u,o=[i],a=[];for(i.depth=0;null!=(u=o.pop());)if(a.push(u),(c=e.call(n,u,u.depth))&&(l=c.length)){for(var l,c,f;--l>=0;)o.push(f=c[l]),f.parent=u,f.depth=u.depth+1;r&&(u.value=0),u.children=c}else r&&(u.value=+r.call(n,u,u.depth)||0),delete u.children;return oi(i,function(n){var e,i;t&&(e=n.children)&&e.sort(t),r&&(i=n.parent)&&(i.value+=n.value)}),a}var t=ci,e=ai,r=li;return n.sort=function(e){return arguments.length?(t=e,n):t},n.children=function(t){return arguments.length?(e=t,n):e},n.value=function(t){return arguments.length?(r=t,n):r},n.revalue=function(t){return r&&(ui(t,function(n){n.children&&(n.value=0)}),oi(t,function(t){var e;t.children||(t.value=+r.call(n,t,t.depth)||0),(e=t.parent)&&(e.value+=t.value)})),t},n},ao.layout.partition=function(){function n(t,e,r,i){var u=t.children;if(t.x=e,t.y=t.depth*i,t.dx=r,t.dy=i,u&&(o=u.length)){var o,a,l,c=-1;for(r=t.value?r/t.value:0;++cs?-1:1),g=ao.sum(c),v=g?(s-l*p)/g:0,d=ao.range(l),y=[];return null!=e&&d.sort(e===bl?function(n,t){return c[t]-c[n]}:function(n,t){return e(o[n],o[t])}),d.forEach(function(n){y[n]={data:o[n],value:a=c[n],startAngle:f,endAngle:f+=a*v+p,padAngle:h}}),y}var t=Number,e=bl,r=0,i=Ho,u=0;return n.value=function(e){return arguments.length?(t=e,n):t},n.sort=function(t){return arguments.length?(e=t,n):e},n.startAngle=function(t){return arguments.length?(r=t,n):r},n.endAngle=function(t){return arguments.length?(i=t,n):i},n.padAngle=function(t){return arguments.length?(u=t,n):u},n};var bl={};ao.layout.stack=function(){function n(a,l){if(!(h=a.length))return a;var c=a.map(function(e,r){return t.call(n,e,r)}),f=c.map(function(t){return t.map(function(t,e){return[u.call(n,t,e),o.call(n,t,e)]})}),s=e.call(n,f,l);c=ao.permute(c,s),f=ao.permute(f,s);var h,p,g,v,d=r.call(n,f,l),y=c[0].length;for(g=0;y>g;++g)for(i.call(n,c[0][g],v=d[g],f[0][g][1]),p=1;h>p;++p)i.call(n,c[p][g],v+=f[p-1][g][1],f[p][g][1]);return a}var t=m,e=gi,r=vi,i=pi,u=si,o=hi;return n.values=function(e){return arguments.length?(t=e,n):t},n.order=function(t){return arguments.length?(e="function"==typeof t?t:_l.get(t)||gi,n):e},n.offset=function(t){return arguments.length?(r="function"==typeof t?t:wl.get(t)||vi,n):r},n.x=function(t){return arguments.length?(u=t,n):u},n.y=function(t){return arguments.length?(o=t,n):o},n.out=function(t){return arguments.length?(i=t,n):i},n};var _l=ao.map({"inside-out":function(n){var t,e,r=n.length,i=n.map(di),u=n.map(yi),o=ao.range(r).sort(function(n,t){return i[n]-i[t]}),a=0,l=0,c=[],f=[];for(t=0;r>t;++t)e=o[t],l>a?(a+=u[e],c.push(e)):(l+=u[e],f.push(e));return f.reverse().concat(c)},reverse:function(n){return ao.range(n.length).reverse()},"default":gi}),wl=ao.map({silhouette:function(n){var t,e,r,i=n.length,u=n[0].length,o=[],a=0,l=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];r>a&&(a=r),o.push(r)}for(e=0;u>e;++e)l[e]=(a-o[e])/2;return l},wiggle:function(n){var t,e,r,i,u,o,a,l,c,f=n.length,s=n[0],h=s.length,p=[];for(p[0]=l=c=0,e=1;h>e;++e){for(t=0,i=0;f>t;++t)i+=n[t][e][1];for(t=0,u=0,a=s[e][0]-s[e-1][0];f>t;++t){for(r=0,o=(n[t][e][1]-n[t][e-1][1])/(2*a);t>r;++r)o+=(n[r][e][1]-n[r][e-1][1])/a;u+=o*n[t][e][1]}p[e]=l-=i?u/i*a:0,c>l&&(c=l)}for(e=0;h>e;++e)p[e]-=c;return p},expand:function(n){var t,e,r,i=n.length,u=n[0].length,o=1/i,a=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];if(r)for(t=0;i>t;t++)n[t][e][1]/=r;else for(t=0;i>t;t++)n[t][e][1]=o}for(e=0;u>e;++e)a[e]=0;return a},zero:vi});ao.layout.histogram=function(){function n(n,u){for(var o,a,l=[],c=n.map(e,this),f=r.call(this,c,u),s=i.call(this,f,c,u),u=-1,h=c.length,p=s.length-1,g=t?1:1/h;++u0)for(u=-1;++u=f[0]&&a<=f[1]&&(o=l[ao.bisect(s,a,1,p)-1],o.y+=g,o.push(n[u]));return l}var t=!0,e=Number,r=bi,i=Mi;return n.value=function(t){return arguments.length?(e=t,n):e},n.range=function(t){return arguments.length?(r=En(t),n):r},n.bins=function(t){return arguments.length?(i="number"==typeof t?function(n){return xi(n,t)}:En(t),n):i},n.frequency=function(e){return arguments.length?(t=!!e,n):t},n},ao.layout.pack=function(){function n(n,u){var o=e.call(this,n,u),a=o[0],l=i[0],c=i[1],f=null==t?Math.sqrt:"function"==typeof t?t:function(){return t};if(a.x=a.y=0,oi(a,function(n){n.r=+f(n.value)}),oi(a,Ni),r){var s=r*(t?1:Math.max(2*a.r/l,2*a.r/c))/2;oi(a,function(n){n.r+=s}),oi(a,Ni),oi(a,function(n){n.r-=s})}return Ci(a,l/2,c/2,t?1:1/Math.max(2*a.r/l,2*a.r/c)),o}var t,e=ao.layout.hierarchy().sort(_i),r=0,i=[1,1];return n.size=function(t){return arguments.length?(i=t,n):i},n.radius=function(e){return arguments.length?(t=null==e||"function"==typeof e?e:+e,n):t},n.padding=function(t){return arguments.length?(r=+t,n):r},ii(n,e)},ao.layout.tree=function(){function n(n,i){var f=o.call(this,n,i),s=f[0],h=t(s);if(oi(h,e),h.parent.m=-h.z,ui(h,r),c)ui(s,u);else{var p=s,g=s,v=s;ui(s,function(n){n.xg.x&&(g=n),n.depth>v.depth&&(v=n)});var d=a(p,g)/2-p.x,y=l[0]/(g.x+a(g,p)/2+d),m=l[1]/(v.depth||1);ui(s,function(n){n.x=(n.x+d)*y,n.y=n.depth*m})}return f}function t(n){for(var t,e={A:null,children:[n]},r=[e];null!=(t=r.pop());)for(var i,u=t.children,o=0,a=u.length;a>o;++o)r.push((u[o]=i={_:u[o],parent:t,children:(i=u[o].children)&&i.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:o}).a=i);return e.children[0]}function e(n){var t=n.children,e=n.parent.children,r=n.i?e[n.i-1]:null;if(t.length){Di(n);var u=(t[0].z+t[t.length-1].z)/2;r?(n.z=r.z+a(n._,r._),n.m=n.z-u):n.z=u}else r&&(n.z=r.z+a(n._,r._));n.parent.A=i(n,r,n.parent.A||e[0])}function r(n){n._.x=n.z+n.parent.m,n.m+=n.parent.m}function i(n,t,e){if(t){for(var r,i=n,u=n,o=t,l=i.parent.children[0],c=i.m,f=u.m,s=o.m,h=l.m;o=Ti(o),i=qi(i),o&&i;)l=qi(l),u=Ti(u),u.a=n,r=o.z+s-i.z-c+a(o._,i._),r>0&&(Ri(Pi(o,n,e),n,r),c+=r,f+=r),s+=o.m,c+=i.m,h+=l.m,f+=u.m;o&&!Ti(u)&&(u.t=o,u.m+=s-f),i&&!qi(l)&&(l.t=i,l.m+=c-h,e=n)}return e}function u(n){n.x*=l[0],n.y=n.depth*l[1]}var o=ao.layout.hierarchy().sort(null).value(null),a=Li,l=[1,1],c=null;return n.separation=function(t){return arguments.length?(a=t,n):a},n.size=function(t){return arguments.length?(c=null==(l=t)?u:null,n):c?null:l},n.nodeSize=function(t){return arguments.length?(c=null==(l=t)?null:u,n):c?l:null},ii(n,o)},ao.layout.cluster=function(){function n(n,u){var o,a=t.call(this,n,u),l=a[0],c=0;oi(l,function(n){var t=n.children;t&&t.length?(n.x=ji(t),n.y=Ui(t)):(n.x=o?c+=e(n,o):0,n.y=0,o=n)});var f=Fi(l),s=Hi(l),h=f.x-e(f,s)/2,p=s.x+e(s,f)/2;return oi(l,i?function(n){n.x=(n.x-l.x)*r[0],n.y=(l.y-n.y)*r[1]}:function(n){n.x=(n.x-h)/(p-h)*r[0],n.y=(1-(l.y?n.y/l.y:1))*r[1]}),a}var t=ao.layout.hierarchy().sort(null).value(null),e=Li,r=[1,1],i=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(i=null==(r=t),n):i?null:r},n.nodeSize=function(t){return arguments.length?(i=null!=(r=t),n):i?r:null},ii(n,t)},ao.layout.treemap=function(){function n(n,t){for(var e,r,i=-1,u=n.length;++it?0:t),e.area=isNaN(r)||0>=r?0:r}function t(e){var u=e.children;if(u&&u.length){var o,a,l,c=s(e),f=[],h=u.slice(),g=1/0,v="slice"===p?c.dx:"dice"===p?c.dy:"slice-dice"===p?1&e.depth?c.dy:c.dx:Math.min(c.dx,c.dy);for(n(h,c.dx*c.dy/e.value),f.area=0;(l=h.length)>0;)f.push(o=h[l-1]),f.area+=o.area,"squarify"!==p||(a=r(f,v))<=g?(h.pop(),g=a):(f.area-=f.pop().area,i(f,v,c,!1),v=Math.min(c.dx,c.dy),f.length=f.area=0,g=1/0);f.length&&(i(f,v,c,!0),f.length=f.area=0),u.forEach(t)}}function e(t){var r=t.children;if(r&&r.length){var u,o=s(t),a=r.slice(),l=[];for(n(a,o.dx*o.dy/t.value),l.area=0;u=a.pop();)l.push(u),l.area+=u.area,null!=u.z&&(i(l,u.z?o.dx:o.dy,o,!a.length),l.length=l.area=0);r.forEach(e)}}function r(n,t){for(var e,r=n.area,i=0,u=1/0,o=-1,a=n.length;++oe&&(u=e),e>i&&(i=e));return r*=r,t*=t,r?Math.max(t*i*g/r,r/(t*u*g)):1/0}function i(n,t,e,r){var i,u=-1,o=n.length,a=e.x,c=e.y,f=t?l(n.area/t):0; +if(t==e.dx){for((r||f>e.dy)&&(f=e.dy);++ue.dx)&&(f=e.dx);++ue&&(t=1),1>e&&(n=0),function(){var e,r,i;do e=2*Math.random()-1,r=2*Math.random()-1,i=e*e+r*r;while(!i||i>1);return n+t*e*Math.sqrt(-2*Math.log(i)/i)}},logNormal:function(){var n=ao.random.normal.apply(ao,arguments);return function(){return Math.exp(n())}},bates:function(n){var t=ao.random.irwinHall(n);return function(){return t()/n}},irwinHall:function(n){return function(){for(var t=0,e=0;n>e;e++)t+=Math.random();return t}}},ao.scale={};var Sl={floor:m,ceil:m};ao.scale.linear=function(){return Wi([0,1],[0,1],Mr,!1)};var kl={s:1,g:1,p:1,r:1,e:1};ao.scale.log=function(){return ru(ao.scale.linear().domain([0,1]),10,!0,[1,10])};var Nl=ao.format(".0e"),El={floor:function(n){return-Math.ceil(-n)},ceil:function(n){return-Math.floor(-n)}};ao.scale.pow=function(){return iu(ao.scale.linear(),1,[0,1])},ao.scale.sqrt=function(){return ao.scale.pow().exponent(.5)},ao.scale.ordinal=function(){return ou([],{t:"range",a:[[]]})},ao.scale.category10=function(){return ao.scale.ordinal().range(Al)},ao.scale.category20=function(){return ao.scale.ordinal().range(Cl)},ao.scale.category20b=function(){return ao.scale.ordinal().range(zl)},ao.scale.category20c=function(){return ao.scale.ordinal().range(Ll)};var Al=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(xn),Cl=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(xn),zl=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(xn),Ll=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(xn);ao.scale.quantile=function(){return au([],[])},ao.scale.quantize=function(){return lu(0,1,[0,1])},ao.scale.threshold=function(){return cu([.5],[0,1])},ao.scale.identity=function(){return fu([0,1])},ao.svg={},ao.svg.arc=function(){function n(){var n=Math.max(0,+e.apply(this,arguments)),c=Math.max(0,+r.apply(this,arguments)),f=o.apply(this,arguments)-Io,s=a.apply(this,arguments)-Io,h=Math.abs(s-f),p=f>s?0:1;if(n>c&&(g=c,c=n,n=g),h>=Oo)return t(c,p)+(n?t(n,1-p):"")+"Z";var g,v,d,y,m,M,x,b,_,w,S,k,N=0,E=0,A=[];if((y=(+l.apply(this,arguments)||0)/2)&&(d=u===ql?Math.sqrt(n*n+c*c):+u.apply(this,arguments),p||(E*=-1),c&&(E=tn(d/c*Math.sin(y))),n&&(N=tn(d/n*Math.sin(y)))),c){m=c*Math.cos(f+E),M=c*Math.sin(f+E),x=c*Math.cos(s-E),b=c*Math.sin(s-E);var C=Math.abs(s-f-2*E)<=Fo?0:1;if(E&&yu(m,M,x,b)===p^C){var z=(f+s)/2;m=c*Math.cos(z),M=c*Math.sin(z),x=b=null}}else m=M=0;if(n){_=n*Math.cos(s-N),w=n*Math.sin(s-N),S=n*Math.cos(f+N),k=n*Math.sin(f+N);var L=Math.abs(f-s+2*N)<=Fo?0:1;if(N&&yu(_,w,S,k)===1-p^L){var q=(f+s)/2;_=n*Math.cos(q),w=n*Math.sin(q),S=k=null}}else _=w=0;if(h>Uo&&(g=Math.min(Math.abs(c-n)/2,+i.apply(this,arguments)))>.001){v=c>n^p?0:1;var T=g,R=g;if(Fo>h){var D=null==S?[_,w]:null==x?[m,M]:Re([m,M],[S,k],[x,b],[_,w]),P=m-D[0],U=M-D[1],j=x-D[0],F=b-D[1],H=1/Math.sin(Math.acos((P*j+U*F)/(Math.sqrt(P*P+U*U)*Math.sqrt(j*j+F*F)))/2),O=Math.sqrt(D[0]*D[0]+D[1]*D[1]);R=Math.min(g,(n-O)/(H-1)),T=Math.min(g,(c-O)/(H+1))}if(null!=x){var I=mu(null==S?[_,w]:[S,k],[m,M],c,T,p),Y=mu([x,b],[_,w],c,T,p);g===T?A.push("M",I[0],"A",T,",",T," 0 0,",v," ",I[1],"A",c,",",c," 0 ",1-p^yu(I[1][0],I[1][1],Y[1][0],Y[1][1]),",",p," ",Y[1],"A",T,",",T," 0 0,",v," ",Y[0]):A.push("M",I[0],"A",T,",",T," 0 1,",v," ",Y[0])}else A.push("M",m,",",M);if(null!=S){var Z=mu([m,M],[S,k],n,-R,p),V=mu([_,w],null==x?[m,M]:[x,b],n,-R,p);g===R?A.push("L",V[0],"A",R,",",R," 0 0,",v," ",V[1],"A",n,",",n," 0 ",p^yu(V[1][0],V[1][1],Z[1][0],Z[1][1]),",",1-p," ",Z[1],"A",R,",",R," 0 0,",v," ",Z[0]):A.push("L",V[0],"A",R,",",R," 0 0,",v," ",Z[0])}else A.push("L",_,",",w)}else A.push("M",m,",",M),null!=x&&A.push("A",c,",",c," 0 ",C,",",p," ",x,",",b),A.push("L",_,",",w),null!=S&&A.push("A",n,",",n," 0 ",L,",",1-p," ",S,",",k);return A.push("Z"),A.join("")}function t(n,t){return"M0,"+n+"A"+n+","+n+" 0 1,"+t+" 0,"+-n+"A"+n+","+n+" 0 1,"+t+" 0,"+n}var e=hu,r=pu,i=su,u=ql,o=gu,a=vu,l=du;return n.innerRadius=function(t){return arguments.length?(e=En(t),n):e},n.outerRadius=function(t){return arguments.length?(r=En(t),n):r},n.cornerRadius=function(t){return arguments.length?(i=En(t),n):i},n.padRadius=function(t){return arguments.length?(u=t==ql?ql:En(t),n):u},n.startAngle=function(t){return arguments.length?(o=En(t),n):o},n.endAngle=function(t){return arguments.length?(a=En(t),n):a},n.padAngle=function(t){return arguments.length?(l=En(t),n):l},n.centroid=function(){var n=(+e.apply(this,arguments)+ +r.apply(this,arguments))/2,t=(+o.apply(this,arguments)+ +a.apply(this,arguments))/2-Io;return[Math.cos(t)*n,Math.sin(t)*n]},n};var ql="auto";ao.svg.line=function(){return Mu(m)};var Tl=ao.map({linear:xu,"linear-closed":bu,step:_u,"step-before":wu,"step-after":Su,basis:zu,"basis-open":Lu,"basis-closed":qu,bundle:Tu,cardinal:Eu,"cardinal-open":ku,"cardinal-closed":Nu,monotone:Fu});Tl.forEach(function(n,t){t.key=n,t.closed=/-closed$/.test(n)});var Rl=[0,2/3,1/3,0],Dl=[0,1/3,2/3,0],Pl=[0,1/6,2/3,1/6];ao.svg.line.radial=function(){var n=Mu(Hu);return n.radius=n.x,delete n.x,n.angle=n.y,delete n.y,n},wu.reverse=Su,Su.reverse=wu,ao.svg.area=function(){return Ou(m)},ao.svg.area.radial=function(){var n=Ou(Hu);return n.radius=n.x,delete n.x,n.innerRadius=n.x0,delete n.x0,n.outerRadius=n.x1,delete n.x1,n.angle=n.y,delete n.y,n.startAngle=n.y0,delete n.y0,n.endAngle=n.y1,delete n.y1,n},ao.svg.chord=function(){function n(n,a){var l=t(this,u,n,a),c=t(this,o,n,a);return"M"+l.p0+r(l.r,l.p1,l.a1-l.a0)+(e(l,c)?i(l.r,l.p1,l.r,l.p0):i(l.r,l.p1,c.r,c.p0)+r(c.r,c.p1,c.a1-c.a0)+i(c.r,c.p1,l.r,l.p0))+"Z"}function t(n,t,e,r){var i=t.call(n,e,r),u=a.call(n,i,r),o=l.call(n,i,r)-Io,f=c.call(n,i,r)-Io;return{r:u,a0:o,a1:f,p0:[u*Math.cos(o),u*Math.sin(o)],p1:[u*Math.cos(f),u*Math.sin(f)]}}function e(n,t){return n.a0==t.a0&&n.a1==t.a1}function r(n,t,e){return"A"+n+","+n+" 0 "+ +(e>Fo)+",1 "+t}function i(n,t,e,r){return"Q 0,0 "+r}var u=Me,o=xe,a=Iu,l=gu,c=vu;return n.radius=function(t){return arguments.length?(a=En(t),n):a},n.source=function(t){return arguments.length?(u=En(t),n):u},n.target=function(t){return arguments.length?(o=En(t),n):o},n.startAngle=function(t){return arguments.length?(l=En(t),n):l},n.endAngle=function(t){return arguments.length?(c=En(t),n):c},n},ao.svg.diagonal=function(){function n(n,i){var u=t.call(this,n,i),o=e.call(this,n,i),a=(u.y+o.y)/2,l=[u,{x:u.x,y:a},{x:o.x,y:a},o];return l=l.map(r),"M"+l[0]+"C"+l[1]+" "+l[2]+" "+l[3]}var t=Me,e=xe,r=Yu;return n.source=function(e){return arguments.length?(t=En(e),n):t},n.target=function(t){return arguments.length?(e=En(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},ao.svg.diagonal.radial=function(){var n=ao.svg.diagonal(),t=Yu,e=n.projection;return n.projection=function(n){return arguments.length?e(Zu(t=n)):t},n},ao.svg.symbol=function(){function n(n,r){return(Ul.get(t.call(this,n,r))||$u)(e.call(this,n,r))}var t=Xu,e=Vu;return n.type=function(e){return arguments.length?(t=En(e),n):t},n.size=function(t){return arguments.length?(e=En(t),n):e},n};var Ul=ao.map({circle:$u,cross:function(n){var t=Math.sqrt(n/5)/2;return"M"+-3*t+","+-t+"H"+-t+"V"+-3*t+"H"+t+"V"+-t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+-t+"V"+t+"H"+-3*t+"Z"},diamond:function(n){var t=Math.sqrt(n/(2*Fl)),e=t*Fl;return"M0,"+-t+"L"+e+",0 0,"+t+" "+-e+",0Z"},square:function(n){var t=Math.sqrt(n)/2;return"M"+-t+","+-t+"L"+t+","+-t+" "+t+","+t+" "+-t+","+t+"Z"},"triangle-down":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+e+"L"+t+","+-e+" "+-t+","+-e+"Z"},"triangle-up":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+-e+"L"+t+","+e+" "+-t+","+e+"Z"}});ao.svg.symbolTypes=Ul.keys();var jl=Math.sqrt(3),Fl=Math.tan(30*Yo);Co.transition=function(n){for(var t,e,r=Hl||++Zl,i=Ku(n),u=[],o=Ol||{time:Date.now(),ease:Nr,delay:0,duration:250},a=-1,l=this.length;++au;u++){i.push(t=[]);for(var e=this[u],a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return Wu(i,this.namespace,this.id)},Yl.tween=function(n,t){var e=this.id,r=this.namespace;return arguments.length<2?this.node()[r][e].tween.get(n):Y(this,null==t?function(t){t[r][e].tween.remove(n)}:function(i){i[r][e].tween.set(n,t)})},Yl.attr=function(n,t){function e(){this.removeAttribute(a)}function r(){this.removeAttributeNS(a.space,a.local)}function i(n){return null==n?e:(n+="",function(){var t,e=this.getAttribute(a);return e!==n&&(t=o(e,n),function(n){this.setAttribute(a,t(n))})})}function u(n){return null==n?r:(n+="",function(){var t,e=this.getAttributeNS(a.space,a.local);return e!==n&&(t=o(e,n),function(n){this.setAttributeNS(a.space,a.local,t(n))})})}if(arguments.length<2){for(t in n)this.attr(t,n[t]);return this}var o="transform"==n?$r:Mr,a=ao.ns.qualify(n);return Ju(this,"attr."+n,t,a.local?u:i)},Yl.attrTween=function(n,t){function e(n,e){var r=t.call(this,n,e,this.getAttribute(i));return r&&function(n){this.setAttribute(i,r(n))}}function r(n,e){var r=t.call(this,n,e,this.getAttributeNS(i.space,i.local));return r&&function(n){this.setAttributeNS(i.space,i.local,r(n))}}var i=ao.ns.qualify(n);return this.tween("attr."+n,i.local?r:e)},Yl.style=function(n,e,r){function i(){this.style.removeProperty(n)}function u(e){return null==e?i:(e+="",function(){var i,u=t(this).getComputedStyle(this,null).getPropertyValue(n);return u!==e&&(i=Mr(u,e),function(t){this.style.setProperty(n,i(t),r)})})}var o=arguments.length;if(3>o){if("string"!=typeof n){2>o&&(e="");for(r in n)this.style(r,n[r],e);return this}r=""}return Ju(this,"style."+n,e,u)},Yl.styleTween=function(n,e,r){function i(i,u){var o=e.call(this,i,u,t(this).getComputedStyle(this,null).getPropertyValue(n));return o&&function(t){this.style.setProperty(n,o(t),r)}}return arguments.length<3&&(r=""),this.tween("style."+n,i)},Yl.text=function(n){return Ju(this,"text",n,Gu)},Yl.remove=function(){var n=this.namespace;return this.each("end.transition",function(){var t;this[n].count<2&&(t=this.parentNode)&&t.removeChild(this)})},Yl.ease=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].ease:("function"!=typeof n&&(n=ao.ease.apply(ao,arguments)),Y(this,function(r){r[e][t].ease=n}))},Yl.delay=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].delay:Y(this,"function"==typeof n?function(r,i,u){r[e][t].delay=+n.call(r,r.__data__,i,u)}:(n=+n,function(r){r[e][t].delay=n}))},Yl.duration=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].duration:Y(this,"function"==typeof n?function(r,i,u){r[e][t].duration=Math.max(1,n.call(r,r.__data__,i,u))}:(n=Math.max(1,n),function(r){r[e][t].duration=n}))},Yl.each=function(n,t){var e=this.id,r=this.namespace;if(arguments.length<2){var i=Ol,u=Hl;try{Hl=e,Y(this,function(t,i,u){Ol=t[r][e],n.call(t,t.__data__,i,u)})}finally{Ol=i,Hl=u}}else Y(this,function(i){var u=i[r][e];(u.event||(u.event=ao.dispatch("start","end","interrupt"))).on(n,t)});return this},Yl.transition=function(){for(var n,t,e,r,i=this.id,u=++Zl,o=this.namespace,a=[],l=0,c=this.length;c>l;l++){a.push(n=[]);for(var t=this[l],f=0,s=t.length;s>f;f++)(e=t[f])&&(r=e[o][i],Qu(e,f,o,u,{time:r.time,ease:r.ease,delay:r.delay+r.duration,duration:r.duration})),n.push(e)}return Wu(a,o,u)},ao.svg.axis=function(){function n(n){n.each(function(){var n,c=ao.select(this),f=this.__chart__||e,s=this.__chart__=e.copy(),h=null==l?s.ticks?s.ticks.apply(s,a):s.domain():l,p=null==t?s.tickFormat?s.tickFormat.apply(s,a):m:t,g=c.selectAll(".tick").data(h,s),v=g.enter().insert("g",".domain").attr("class","tick").style("opacity",Uo),d=ao.transition(g.exit()).style("opacity",Uo).remove(),y=ao.transition(g.order()).style("opacity",1),M=Math.max(i,0)+o,x=Zi(s),b=c.selectAll(".domain").data([0]),_=(b.enter().append("path").attr("class","domain"),ao.transition(b));v.append("line"),v.append("text");var w,S,k,N,E=v.select("line"),A=y.select("line"),C=g.select("text").text(p),z=v.select("text"),L=y.select("text"),q="top"===r||"left"===r?-1:1;if("bottom"===r||"top"===r?(n=no,w="x",k="y",S="x2",N="y2",C.attr("dy",0>q?"0em":".71em").style("text-anchor","middle"),_.attr("d","M"+x[0]+","+q*u+"V0H"+x[1]+"V"+q*u)):(n=to,w="y",k="x",S="y2",N="x2",C.attr("dy",".32em").style("text-anchor",0>q?"end":"start"),_.attr("d","M"+q*u+","+x[0]+"H0V"+x[1]+"H"+q*u)),E.attr(N,q*i),z.attr(k,q*M),A.attr(S,0).attr(N,q*i),L.attr(w,0).attr(k,q*M),s.rangeBand){var T=s,R=T.rangeBand()/2;f=s=function(n){return T(n)+R}}else f.rangeBand?f=s:d.call(n,s,f);v.call(n,f,s),y.call(n,s,s)})}var t,e=ao.scale.linear(),r=Vl,i=6,u=6,o=3,a=[10],l=null;return n.scale=function(t){return arguments.length?(e=t,n):e},n.orient=function(t){return arguments.length?(r=t in Xl?t+"":Vl,n):r},n.ticks=function(){return arguments.length?(a=co(arguments),n):a},n.tickValues=function(t){return arguments.length?(l=t,n):l},n.tickFormat=function(e){return arguments.length?(t=e,n):t},n.tickSize=function(t){var e=arguments.length;return e?(i=+t,u=+arguments[e-1],n):i},n.innerTickSize=function(t){return arguments.length?(i=+t,n):i},n.outerTickSize=function(t){return arguments.length?(u=+t,n):u},n.tickPadding=function(t){return arguments.length?(o=+t,n):o},n.tickSubdivide=function(){return arguments.length&&n},n};var Vl="bottom",Xl={top:1,right:1,bottom:1,left:1};ao.svg.brush=function(){function n(t){t.each(function(){var t=ao.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",u).on("touchstart.brush",u),o=t.selectAll(".background").data([0]);o.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),t.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var a=t.selectAll(".resize").data(v,m);a.exit().remove(),a.enter().append("g").attr("class",function(n){return"resize "+n}).style("cursor",function(n){return $l[n]}).append("rect").attr("x",function(n){return/[ew]$/.test(n)?-3:null}).attr("y",function(n){return/^[ns]/.test(n)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),a.style("display",n.empty()?"none":null);var l,s=ao.transition(t),h=ao.transition(o);c&&(l=Zi(c),h.attr("x",l[0]).attr("width",l[1]-l[0]),r(s)),f&&(l=Zi(f),h.attr("y",l[0]).attr("height",l[1]-l[0]),i(s)),e(s)})}function e(n){n.selectAll(".resize").attr("transform",function(n){return"translate("+s[+/e$/.test(n)]+","+h[+/^s/.test(n)]+")"})}function r(n){n.select(".extent").attr("x",s[0]),n.selectAll(".extent,.n>rect,.s>rect").attr("width",s[1]-s[0])}function i(n){n.select(".extent").attr("y",h[0]),n.selectAll(".extent,.e>rect,.w>rect").attr("height",h[1]-h[0])}function u(){function u(){32==ao.event.keyCode&&(C||(M=null,L[0]-=s[1],L[1]-=h[1],C=2),S())}function v(){32==ao.event.keyCode&&2==C&&(L[0]+=s[1],L[1]+=h[1],C=0,S())}function d(){var n=ao.mouse(b),t=!1;x&&(n[0]+=x[0],n[1]+=x[1]),C||(ao.event.altKey?(M||(M=[(s[0]+s[1])/2,(h[0]+h[1])/2]),L[0]=s[+(n[0]f?(i=r,r=f):i=f),v[0]!=r||v[1]!=i?(e?a=null:o=null,v[0]=r,v[1]=i,!0):void 0}function m(){d(),k.style("pointer-events","all").selectAll(".resize").style("display",n.empty()?"none":null),ao.select("body").style("cursor",null),q.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),z(),w({type:"brushend"})}var M,x,b=this,_=ao.select(ao.event.target),w=l.of(b,arguments),k=ao.select(b),N=_.datum(),E=!/^(n|s)$/.test(N)&&c,A=!/^(e|w)$/.test(N)&&f,C=_.classed("extent"),z=W(b),L=ao.mouse(b),q=ao.select(t(b)).on("keydown.brush",u).on("keyup.brush",v);if(ao.event.changedTouches?q.on("touchmove.brush",d).on("touchend.brush",m):q.on("mousemove.brush",d).on("mouseup.brush",m),k.interrupt().selectAll("*").interrupt(),C)L[0]=s[0]-L[0],L[1]=h[0]-L[1];else if(N){var T=+/w$/.test(N),R=+/^n/.test(N);x=[s[1-T]-L[0],h[1-R]-L[1]],L[0]=s[T],L[1]=h[R]}else ao.event.altKey&&(M=L.slice());k.style("pointer-events","none").selectAll(".resize").style("display",null),ao.select("body").style("cursor",_.style("cursor")),w({type:"brushstart"}),d()}var o,a,l=N(n,"brushstart","brush","brushend"),c=null,f=null,s=[0,0],h=[0,0],p=!0,g=!0,v=Bl[0];return n.event=function(n){n.each(function(){var n=l.of(this,arguments),t={x:s,y:h,i:o,j:a},e=this.__chart__||t;this.__chart__=t,Hl?ao.select(this).transition().each("start.brush",function(){o=e.i,a=e.j,s=e.x,h=e.y,n({type:"brushstart"})}).tween("brush:brush",function(){var e=xr(s,t.x),r=xr(h,t.y);return o=a=null,function(i){s=t.x=e(i),h=t.y=r(i),n({type:"brush",mode:"resize"})}}).each("end.brush",function(){o=t.i,a=t.j,n({type:"brush",mode:"resize"}),n({type:"brushend"})}):(n({type:"brushstart"}),n({type:"brush",mode:"resize"}),n({type:"brushend"}))})},n.x=function(t){return arguments.length?(c=t,v=Bl[!c<<1|!f],n):c},n.y=function(t){return arguments.length?(f=t,v=Bl[!c<<1|!f],n):f},n.clamp=function(t){return arguments.length?(c&&f?(p=!!t[0],g=!!t[1]):c?p=!!t:f&&(g=!!t),n):c&&f?[p,g]:c?p:f?g:null},n.extent=function(t){var e,r,i,u,l;return arguments.length?(c&&(e=t[0],r=t[1],f&&(e=e[0],r=r[0]),o=[e,r],c.invert&&(e=c(e),r=c(r)),e>r&&(l=e,e=r,r=l),e==s[0]&&r==s[1]||(s=[e,r])),f&&(i=t[0],u=t[1],c&&(i=i[1],u=u[1]),a=[i,u],f.invert&&(i=f(i),u=f(u)),i>u&&(l=i,i=u,u=l),i==h[0]&&u==h[1]||(h=[i,u])),n):(c&&(o?(e=o[0],r=o[1]):(e=s[0],r=s[1],c.invert&&(e=c.invert(e),r=c.invert(r)),e>r&&(l=e,e=r,r=l))),f&&(a?(i=a[0],u=a[1]):(i=h[0],u=h[1],f.invert&&(i=f.invert(i),u=f.invert(u)),i>u&&(l=i,i=u,u=l))),c&&f?[[e,i],[r,u]]:c?[e,r]:f&&[i,u])},n.clear=function(){return n.empty()||(s=[0,0],h=[0,0],o=a=null),n},n.empty=function(){return!!c&&s[0]==s[1]||!!f&&h[0]==h[1]},ao.rebind(n,l,"on")};var $l={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},Bl=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]],Wl=ga.format=xa.timeFormat,Jl=Wl.utc,Gl=Jl("%Y-%m-%dT%H:%M:%S.%LZ");Wl.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?eo:Gl,eo.parse=function(n){var t=new Date(n);return isNaN(t)?null:t},eo.toString=Gl.toString,ga.second=On(function(n){return new va(1e3*Math.floor(n/1e3))},function(n,t){n.setTime(n.getTime()+1e3*Math.floor(t))},function(n){return n.getSeconds()}),ga.seconds=ga.second.range,ga.seconds.utc=ga.second.utc.range,ga.minute=On(function(n){return new va(6e4*Math.floor(n/6e4))},function(n,t){n.setTime(n.getTime()+6e4*Math.floor(t))},function(n){return n.getMinutes()}),ga.minutes=ga.minute.range,ga.minutes.utc=ga.minute.utc.range,ga.hour=On(function(n){var t=n.getTimezoneOffset()/60;return new va(36e5*(Math.floor(n/36e5-t)+t))},function(n,t){n.setTime(n.getTime()+36e5*Math.floor(t))},function(n){return n.getHours()}),ga.hours=ga.hour.range,ga.hours.utc=ga.hour.utc.range,ga.month=On(function(n){return n=ga.day(n),n.setDate(1),n},function(n,t){n.setMonth(n.getMonth()+t)},function(n){return n.getMonth()}),ga.months=ga.month.range,ga.months.utc=ga.month.utc.range;var Kl=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Ql=[[ga.second,1],[ga.second,5],[ga.second,15],[ga.second,30],[ga.minute,1],[ga.minute,5],[ga.minute,15],[ga.minute,30],[ga.hour,1],[ga.hour,3],[ga.hour,6],[ga.hour,12],[ga.day,1],[ga.day,2],[ga.week,1],[ga.month,1],[ga.month,3],[ga.year,1]],nc=Wl.multi([[".%L",function(n){return n.getMilliseconds()}],[":%S",function(n){return n.getSeconds()}],["%I:%M",function(n){return n.getMinutes()}],["%I %p",function(n){return n.getHours()}],["%a %d",function(n){return n.getDay()&&1!=n.getDate()}],["%b %d",function(n){return 1!=n.getDate()}],["%B",function(n){return n.getMonth()}],["%Y",zt]]),tc={range:function(n,t,e){return ao.range(Math.ceil(n/e)*e,+t,e).map(io)},floor:m,ceil:m};Ql.year=ga.year,ga.scale=function(){return ro(ao.scale.linear(),Ql,nc)};var ec=Ql.map(function(n){return[n[0].utc,n[1]]}),rc=Jl.multi([[".%L",function(n){return n.getUTCMilliseconds()}],[":%S",function(n){return n.getUTCSeconds()}],["%I:%M",function(n){return n.getUTCMinutes()}],["%I %p",function(n){return n.getUTCHours()}],["%a %d",function(n){return n.getUTCDay()&&1!=n.getUTCDate()}],["%b %d",function(n){return 1!=n.getUTCDate()}],["%B",function(n){return n.getUTCMonth()}],["%Y",zt]]);ec.year=ga.year.utc,ga.scale.utc=function(){return ro(ao.scale.linear(),ec,rc)},ao.text=An(function(n){return n.responseText}),ao.json=function(n,t){return Cn(n,"application/json",uo,t)},ao.html=function(n,t){return Cn(n,"text/html",oo,t)},ao.xml=An(function(n){return n.responseXML}),"function"==typeof define&&define.amd?(this.d3=ao,define(ao)):"object"==typeof module&&module.exports?module.exports=ao:this.d3=ao}(); \ No newline at end of file diff --git a/tto/webvowl/js/webvowl.app.js b/tto/webvowl/js/webvowl.app.js new file mode 100644 index 0000000..d82eddd --- /dev/null +++ b/tto/webvowl/js/webvowl.app.js @@ -0,0 +1,9457 @@ +webvowl.app = +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; + +/******/ // The require function +/******/ function __webpack_require__(moduleId) { + +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; + +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; + +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); + +/******/ // Flag the module as loaded +/******/ module.loaded = true; + +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } + + +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; + +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; + +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; + +/******/ // Load entry module and return exports +/******/ return __webpack_require__(0); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ 0: +/***/ (function(module, exports, __webpack_require__) { + + __webpack_require__(319); + __webpack_require__(321); + + module.exports = __webpack_require__(322); + + +/***/ }), + +/***/ 6: +/***/ (function(module, exports) { + + module.exports = d3; + +/***/ }), + +/***/ 91: +/***/ (function(module, exports, __webpack_require__) { + + var Symbol = __webpack_require__(92), + getRawTag = __webpack_require__(95), + objectToString = __webpack_require__(96); + + /** `Object#toString` result references. */ + var nullTag = '[object Null]', + undefinedTag = '[object Undefined]'; + + /** Built-in value references. */ + var symToStringTag = Symbol ? Symbol.toStringTag : undefined; + + /** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag && symToStringTag in Object(value)) + ? getRawTag(value) + : objectToString(value); + } + + module.exports = baseGetTag; + + +/***/ }), + +/***/ 92: +/***/ (function(module, exports, __webpack_require__) { + + var root = __webpack_require__(93); + + /** Built-in value references. */ + var Symbol = root.Symbol; + + module.exports = Symbol; + + +/***/ }), + +/***/ 93: +/***/ (function(module, exports, __webpack_require__) { + + var freeGlobal = __webpack_require__(94); + + /** Detect free variable `self`. */ + var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + + /** Used as a reference to the global object. */ + var root = freeGlobal || freeSelf || Function('return this')(); + + module.exports = root; + + +/***/ }), + +/***/ 94: +/***/ (function(module, exports) { + + /* WEBPACK VAR INJECTION */(function(global) {/** Detect free variable `global` from Node.js. */ + var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + + module.exports = freeGlobal; + + /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()))) + +/***/ }), + +/***/ 95: +/***/ (function(module, exports, __webpack_require__) { + + var Symbol = __webpack_require__(92); + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString = objectProto.toString; + + /** Built-in value references. */ + var symToStringTag = Symbol ? Symbol.toStringTag : undefined; + + /** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ + function getRawTag(value) { + var isOwn = hasOwnProperty.call(value, symToStringTag), + tag = value[symToStringTag]; + + try { + value[symToStringTag] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; + } + } + return result; + } + + module.exports = getRawTag; + + +/***/ }), + +/***/ 96: +/***/ (function(module, exports) { + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString = objectProto.toString; + + /** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ + function objectToString(value) { + return nativeObjectToString.call(value); + } + + module.exports = objectToString; + + +/***/ }), + +/***/ 103: +/***/ (function(module, exports, __webpack_require__) { + + var baseGetTag = __webpack_require__(91), + isObjectLike = __webpack_require__(104); + + /** `Object#toString` result references. */ + var symbolTag = '[object Symbol]'; + + /** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ + function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && baseGetTag(value) == symbolTag); + } + + module.exports = isSymbol; + + +/***/ }), + +/***/ 104: +/***/ (function(module, exports) { + + /** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ + function isObjectLike(value) { + return value != null && typeof value == 'object'; + } + + module.exports = isObjectLike; + + +/***/ }), + +/***/ 112: +/***/ (function(module, exports) { + + /** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ + var isArray = Array.isArray; + + module.exports = isArray; + + +/***/ }), + +/***/ 154: +/***/ (function(module, exports) { + + /** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; + } + + module.exports = arrayMap; + + +/***/ }), + +/***/ 219: +/***/ (function(module, exports, __webpack_require__) { + + var baseToString = __webpack_require__(220); + + /** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ + function toString(value) { + return value == null ? '' : baseToString(value); + } + + module.exports = toString; + + +/***/ }), + +/***/ 220: +/***/ (function(module, exports, __webpack_require__) { + + var Symbol = __webpack_require__(92), + arrayMap = __webpack_require__(154), + isArray = __webpack_require__(112), + isSymbol = __webpack_require__(103); + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0; + + /** Used to convert symbols to primitives and strings. */ + var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + + /** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ + function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isArray(value)) { + // Recursively convert values (susceptible to call stack limits). + return arrayMap(value, baseToString) + ''; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + } + + module.exports = baseToString; + + +/***/ }), + +/***/ 319: +/***/ (function(module, exports) { + + // removed by extract-text-webpack-plugin + +/***/ }), + +/***/ 321: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/* Taken from here: http://stackoverflow.com/a/17907562 */ + function getInternetExplorerVersion(){ + var ua, + re, + rv = -1; + + // check for edge + var isEdge = /(?:\b(MS)?IE\s+|\bTrident\/7\.0;.*\s+rv:|\bEdge\/)(\d+)/.test(navigator.userAgent); + if ( isEdge ) { + rv = parseInt("12"); + return rv; + } + + var isIE11 = /Trident.*rv[ :]*11\./.test(navigator.userAgent); + if ( isIE11 ) { + rv = parseInt("11"); + return rv; + } + if ( navigator.appName === "Microsoft Internet Explorer" ) { + ua = navigator.userAgent; + re = new RegExp("MSIE ([0-9]{1,}[\\.0-9]{0,})"); + if ( re.exec(ua) !== null ) { + rv = parseFloat(RegExp.$1); + } + } else if ( navigator.appName === "Netscape" ) { + ua = navigator.userAgent; + re = new RegExp("Trident/.*rv:([0-9]{1,}[\\.0-9]{0,})"); + if ( re.exec(ua) !== null ) { + rv = parseFloat(RegExp.$1); + } + } + return rv; + } + + function showBrowserWarningIfRequired(){ + var version = getInternetExplorerVersion(); + console.log("Browser Version =" + version); + if ( version > 0 && version <= 11 ) { + d3.select("#browserCheck").classed("hidden", false); + d3.select("#killWarning").classed("hidden", true); + d3.select("#optionsArea").classed("hidden", true); + d3.select("#logo").classed("hidden", true); + } + if ( version == 12 ) { + d3.select("#logo").classed("hidden", false); + d3.select("#browserCheck").classed("hidden", false); + // connect the button; + var pb_kill = d3.select("#killWarning"); + pb_kill.on("click", function (){ + console.log("hide the warning please"); + d3.select("#browserCheck").classed("hidden", true); + d3.select("#logo").style("padding", "10px"); + }); + } + else { + d3.select("#logo").classed("hidden", false); + d3.select("#browserCheck").classed("hidden", true); + } + + } + + module.exports = showBrowserWarningIfRequired; + showBrowserWarningIfRequired(); + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 322: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {String.prototype.replaceAll = function ( search, replacement ){ + var target = this; + return target.split(search).join(replacement); + }; + module.exports = function (){ + var newOntologyCounter = 1; + var app = {}, + graph = webvowl.graph(), + options = graph.graphOptions(), + languageTools = webvowl.util.languageTools(), + GRAPH_SELECTOR = "#graph", + // Modules for the webvowl app + exportMenu = __webpack_require__(323)(graph), + filterMenu = __webpack_require__(325)(graph), + gravityMenu = __webpack_require__(326)(graph), + modeMenu = __webpack_require__(327)(graph), + debugMenu = __webpack_require__(328)(graph), + ontologyMenu = __webpack_require__(329)(graph), + pauseMenu = __webpack_require__(333)(graph), + resetMenu = __webpack_require__(334)(graph), + searchMenu = __webpack_require__(335)(graph), + navigationMenu = __webpack_require__(336)(graph), + zoomSlider = __webpack_require__(337)(graph), + sidebar = __webpack_require__(338)(graph), + leftSidebar = __webpack_require__(339)(graph), + editSidebar = __webpack_require__(340)(graph), + configMenu = __webpack_require__(341)(graph), + loadingModule = __webpack_require__(342)(graph), + warningModule = __webpack_require__(343)(graph), + directInputMod = __webpack_require__(344)(graph), + + + // Graph modules + colorExternalsSwitch = webvowl.modules.colorExternalsSwitch(graph), + compactNotationSwitch = webvowl.modules.compactNotationSwitch(graph), + datatypeFilter = webvowl.modules.datatypeFilter(), + disjointFilter = webvowl.modules.disjointFilter(), + focuser = webvowl.modules.focuser(graph), + emptyLiteralFilter = webvowl.modules.emptyLiteralFilter(), + nodeDegreeFilter = webvowl.modules.nodeDegreeFilter(filterMenu), + nodeScalingSwitch = webvowl.modules.nodeScalingSwitch(graph), + objectPropertyFilter = webvowl.modules.objectPropertyFilter(), + pickAndPin = webvowl.modules.pickAndPin(), + selectionDetailDisplayer = webvowl.modules.selectionDetailsDisplayer(sidebar.updateSelectionInformation), + statistics = webvowl.modules.statistics(), + subclassFilter = webvowl.modules.subclassFilter(), + setOperatorFilter = webvowl.modules.setOperatorFilter(); + + + app.getOptions = function (){ + return webvowl.opts; + }; + app.getGraph = function (){ + return webvowl.gr; + }; + // app.afterInitializationCallback=undefined; + + + var executeFileDrop = false; + var wasMessageToShow = false; + var firstTime = false; + + function addFileDropEvents( selector ){ + var node = d3.select(selector); + + node.node().ondragover = function ( e ){ + e.preventDefault(); + + d3.select("#dragDropContainer").classed("hidden", false); + // get svg size + var w = graph.options().width(); + var h = graph.options().height(); + + // get event position; (using clientX and clientY); + var cx = e.clientX; + var cy = e.clientY; + + if ( firstTime === false ) { + var state = d3.select("#loading-info").classed("hidden"); + wasMessageToShow = !state; + firstTime = true; + d3.select("#loading-info").classed("hidden", true); // hide it so it does not conflict with drop event + var bb=d3.select("#drag_msg").node().getBoundingClientRect(); + var hs = bb.height; + var ws = bb.width; + + var icon_scale=Math.min(hs,ws); + icon_scale/=100; + + d3.select("#drag_icon_group").attr("transform", "translate ( " + 0.25 * ws + " " + 0.25 * hs + ")"); + d3.select("#drag_icon").attr("transform","matrix ("+icon_scale+",0,0,"+icon_scale+",0,0)"); + d3.select("#drag_icon_drop").attr("transform","matrix ("+icon_scale+",0,0,"+icon_scale+",0,0)"); + } + + + if ( (cx > 0.25 * w && cx < 0.75 * w) && (cy > 0.25 * h && cy < 0.75 * h) ) { + + d3.select("#drag_msg_text").node().innerHTML = "Drop it here."; + d3.select("#drag_msg").style("background-color", "#67bc0f"); + d3.select("#drag_msg").style("color", "#000000"); + executeFileDrop = true; + // d3.select("#drag_svg").transition() + // .duration(100) + // // .attr("-webkit-transform", "rotate(90)") + // // .attr("-moz-transform", "rotate(90)") + // // .attr("-o-transform", "rotate(90)") + // .attr("transform", "rotate(90)"); + + d3.select("#drag_icon").classed("hidden",true); + d3.select("#drag_icon_drop").classed("hidden",false); + + + } else { + d3.select("#drag_msg_text").node().innerHTML = "Drag ontology file here."; + d3.select("#drag_msg").style("background-color", "#fefefe"); + d3.select("#drag_msg").style("color", "#000000"); + executeFileDrop = false; + + d3.select("#drag_icon").classed("hidden",false); + d3.select("#drag_icon_drop").classed("hidden",true); + + + // d3.select("#drag_svg").transition() + // .duration(100) + // // .attr("-webkit-transform", "rotate(0)") + // // .attr("-moz-transform", "rotate(0)") + // // .attr("-o-transform", "rotate(0)") + // .attr("transform", "rotate(0)"); + // + } + + }; + node.node().ondrop = function ( ev ){ + ev.preventDefault(); + firstTime = false; + if ( executeFileDrop ) { + if ( ev.dataTransfer.items ) { + if ( ev.dataTransfer.items.length === 1 ) { + if ( ev.dataTransfer.items[0].kind === 'file' ) { + var file = ev.dataTransfer.items[0].getAsFile(); + graph.options().loadingModule().fromFileDrop(file.name, file); + } + } + else { + // >> WARNING not multiple file uploaded; + graph.options().warningModule().showMultiFileUploadWarning(); + } + } + } + d3.select("#dragDropContainer").classed("hidden", true); + }; + + node.node().ondragleave = function ( e ){ + var w = graph.options().width(); + var h = graph.options().height(); + + // get event position; (using clientX and clientY); + var cx = e.clientX; + var cy = e.clientY; + + var hidden = false; + firstTime = false; + + if ( cx < 0.1 * w || cx > 0.9 * w ) hidden = true; + if ( cy < 0.1 * h || cy > 0.9 * h ) hidden = true; + d3.select("#dragDropContainer").classed("hidden", hidden); + + d3.select("#loading-info").classed("hidden", !wasMessageToShow); // show it again + // check if it should be visible + var should_show=graph.options().loadingModule().getMessageVisibilityStatus(); + if (should_show===false){ + d3.select("#loading-info").classed("hidden", true); // hide it + } + }; + + } + + + app.initialize = function (){ + addFileDropEvents(GRAPH_SELECTOR); + + window.requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame || function ( f ){ + return setTimeout(f, 1000 / 60); + }; // simulate calling code 60 + window.cancelAnimationFrame = window.cancelAnimationFrame || window.mozCancelAnimationFrame || function ( requestID ){ + clearTimeout(requestID); + }; //fall back + + options.graphContainerSelector(GRAPH_SELECTOR); + options.selectionModules().push(focuser); + options.selectionModules().push(selectionDetailDisplayer); + options.selectionModules().push(pickAndPin); + + options.filterModules().push(emptyLiteralFilter); + options.filterModules().push(statistics); + + options.filterModules().push(nodeDegreeFilter); + options.filterModules().push(datatypeFilter); + options.filterModules().push(objectPropertyFilter); + options.filterModules().push(subclassFilter); + options.filterModules().push(disjointFilter); + options.filterModules().push(setOperatorFilter); + options.filterModules().push(nodeScalingSwitch); + options.filterModules().push(compactNotationSwitch); + options.filterModules().push(colorExternalsSwitch); + + d3.select(window).on("resize", adjustSize); + + exportMenu.setup(); + gravityMenu.setup(); + filterMenu.setup(datatypeFilter, objectPropertyFilter, subclassFilter, disjointFilter, setOperatorFilter, nodeDegreeFilter); + modeMenu.setup(pickAndPin, nodeScalingSwitch, compactNotationSwitch, colorExternalsSwitch); + pauseMenu.setup(); + sidebar.setup(); + loadingModule.setup(); + leftSidebar.setup(); + editSidebar.setup(); + debugMenu.setup(); + var agentVersion = getInternetExplorerVersion(); + if ( agentVersion > 0 && agentVersion <= 11 ) { + console.log("Agent version " + agentVersion); + console.log("This agent is not supported"); + d3.select("#browserCheck").classed("hidden", false); + d3.select("#killWarning").classed("hidden", true); + d3.select("#optionsArea").classed("hidden", true); + d3.select("#logo").classed("hidden", true); + } else { + d3.select("#logo").classed("hidden", false); + if ( agentVersion === 12 ) { + // allow Mircosoft Edge Browser but with warning + d3.select("#browserCheck").classed("hidden", false); + d3.select("#killWarning").classed("hidden", false); + } else { + d3.select("#browserCheck").classed("hidden", true); + } + + resetMenu.setup([gravityMenu, filterMenu, modeMenu, focuser, selectionDetailDisplayer, pauseMenu]); + searchMenu.setup(); + navigationMenu.setup(); + zoomSlider.setup(); + + // give the options the pointer to the some menus for import and export + options.literalFilter(emptyLiteralFilter); + options.nodeDegreeFilter(nodeDegreeFilter); + options.loadingModule(loadingModule); + options.filterMenu(filterMenu); + options.modeMenu(modeMenu); + options.gravityMenu(gravityMenu); + options.pausedMenu(pauseMenu); + options.pickAndPinModule(pickAndPin); + options.resetMenu(resetMenu); + options.searchMenu(searchMenu); + options.ontologyMenu(ontologyMenu); + options.navigationMenu(navigationMenu); + options.sidebar(sidebar); + options.leftSidebar(leftSidebar); + options.editSidebar(editSidebar); + options.exportMenu(exportMenu); + options.graphObject(graph); + options.zoomSlider(zoomSlider); + options.warningModule(warningModule); + options.directInputModule(directInputMod); + options.datatypeFilter(datatypeFilter); + options.objectPropertyFilter(objectPropertyFilter); + options.subclassFilter(subclassFilter); + options.setOperatorFilter(setOperatorFilter); + options.disjointPropertyFilter(disjointFilter); + options.focuserModule(focuser); + options.colorExternalsModule(colorExternalsSwitch); + options.compactNotationModule(compactNotationSwitch); + + ontologyMenu.setup(loadOntologyFromText); + configMenu.setup(); + + leftSidebar.showSidebar(0); + leftSidebar.hideCollapseButton(true); + + + graph.start(); + + var modeOp = d3.select("#modeOfOperationString"); + modeOp.style("font-size", "0.6em"); + modeOp.style("font-style", "italic"); + + adjustSize(); + var defZoom; + var w = graph.options().width(); + var h = graph.options().height(); + defZoom = Math.min(w, h) / 1000; + + var hideDebugOptions = true; + if ( hideDebugOptions === false ) { + graph.setForceTickFunctionWithFPS(); + } + + graph.setDefaultZoom(defZoom); + d3.selectAll(".debugOption").classed("hidden", hideDebugOptions); + + // prevent backspace reloading event + var htmlBody = d3.select("body"); + d3.select(document).on("keydown", function ( e ){ + if ( d3.event.keyCode === 8 && d3.event.target === htmlBody.node() ) { + // we could add here an alert + d3.event.preventDefault(); + } + // using ctrl+Shift+d as debug option + if ( d3.event.ctrlKey && d3.event.shiftKey && d3.event.keyCode === 68 ) { + graph.options().executeHiddenDebugFeatuers(); + d3.event.preventDefault(); + } + }); + if ( d3.select("#maxLabelWidthSliderOption") ) { + var setValue = !graph.options().dynamicLabelWidth(); + d3.select("#maxLabelWidthSlider").node().disabled = setValue; + d3.select("#maxLabelWidthvalueLabel").classed("disabledLabelForSlider", setValue); + d3.select("#maxLabelWidthDescriptionLabel").classed("disabledLabelForSlider", setValue); + } + + d3.select("#blockGraphInteractions").style("position", "absolute") + .style("top", "0") + .style("background-color", "#bdbdbd") + .style("opacity", "0.5") + .style("pointer-events", "auto") + .style("width", graph.options().width() + "px") + .style("height", graph.options().height() + "px") + .on("click", function (){ + d3.event.preventDefault(); + d3.event.stopPropagation(); + }) + .on("dblclick", function (){ + d3.event.preventDefault(); + d3.event.stopPropagation(); + }); + + d3.select("#direct-text-input").on("click", function (){ + directInputMod.setDirectInputMode(); + }); + d3.select("#blockGraphInteractions").node().draggable = false; + options.prefixModule(webvowl.util.prefixTools(graph)); + adjustSize(); + sidebar.updateOntologyInformation(undefined, statistics); + loadingModule.parseUrlAndLoadOntology(); // loads automatically the ontology provided by the parameters + options.debugMenu(debugMenu); + debugMenu.updateSettings(); + + // connect the reloadCachedVersionButton + d3.select("#reloadSvgIcon").on("click", function (){ + if ( d3.select("#reloadSvgIcon").node().disabled === true ) { + graph.options().ontologyMenu().clearCachedVersion(); + return; + } + d3.select("#reloadCachedOntology").classed("hidden", true); + graph.options().ontologyMenu().reloadCachedOntology(); + + }); + // add the initialized objects + webvowl.opts = options; + webvowl.gr = graph; + + } + }; + + + function loadOntologyFromText( jsonText, filename, alternativeFilename ){ + d3.select("#reloadCachedOntology").classed("hidden", true); + pauseMenu.reset(); + graph.options().navigationMenu().hideAllMenus(); + + if ( (jsonText === undefined && filename === undefined) || (jsonText.length === 0) ) { + loadingModule.notValidJsonFile(); + return; + } + graph.editorMode(); // updates the checkbox + var data; + if ( jsonText ) { + // validate JSON FILE + var validJSON; + try { + data = JSON.parse(jsonText); + validJSON = true; + } catch ( e ) { + validJSON = false; + } + if ( validJSON === false ) { + // the server output is not a valid json file + loadingModule.notValidJsonFile(); + return; + } + + if ( !filename ) { + // First look if an ontology title exists, otherwise take the alternative filename + var ontologyNames = data.header ? data.header.title : undefined; + var ontologyName = languageTools.textInLanguage(ontologyNames); + + if ( ontologyName ) { + filename = ontologyName; + } else { + filename = alternativeFilename; + } + } + } + + + // check if we have graph data + var classCount = 0; + if ( data.class !== undefined ) { + classCount = data.class.length; + } + + var loadEmptyOntologyForEditing = false; + if ( location.hash.indexOf("#new_ontology") !== -1 ) { + loadEmptyOntologyForEditing = true; + newOntologyCounter++; + d3.select("#empty").node().href = "#opts=editorMode=true;#new_ontology" + newOntologyCounter; + } + if ( classCount === 0 && graph.editorMode() === false && loadEmptyOntologyForEditing === false ) { + // generate message for the user; + loadingModule.emptyGraphContentError(); + } else { + loadingModule.validJsonFile(); + ontologyMenu.setCachedOntology(filename, jsonText); + exportMenu.setJsonText(jsonText); + options.data(data); + graph.options().loadingModule().setPercentMode(); + if ( loadEmptyOntologyForEditing === true ) { + graph.editorMode(true); + + } + graph.load(); + sidebar.updateOntologyInformation(data, statistics); + exportMenu.setFilename(filename); + graph.updateZoomSliderValueFromOutside(); + adjustSize(); + + var flagOfCheckBox = d3.select("#editorModeModuleCheckbox").node().checked; + graph.editorMode(flagOfCheckBox);// update gui + + } + } + + function adjustSize(){ + var graphContainer = d3.select(GRAPH_SELECTOR), + svg = graphContainer.select("svg"), + height = window.innerHeight - 40, + width = window.innerWidth - (window.innerWidth * 0.22); + + if ( sidebar.getSidebarVisibility() === "0" ) { + height = window.innerHeight - 40; + width = window.innerWidth; + } + + directInputMod.updateLayout(); + d3.select("#blockGraphInteractions").style("width", window.innerWidth + "px"); + d3.select("#blockGraphInteractions").style("height", window.innerHeight + "px"); + + d3.select("#WarningErrorMessagesContainer").style("width", width + "px"); + d3.select("#WarningErrorMessagesContainer").style("height", height + "px"); + + d3.select("#WarningErrorMessages").style("max-height", (height - 12) + "px"); + + graphContainer.style("height", height + "px"); + svg.attr("width", width) + .attr("height", height); + + options.width(width) + .height(height); + + graph.updateStyle(); + + if ( isTouchDevice() === true ) { + if ( graph.isEditorMode() === true ) + d3.select("#modeOfOperationString").node().innerHTML = "touch able device detected"; + graph.setTouchDevice(true); + + } else { + if ( graph.isEditorMode() === true ) + d3.select("#modeOfOperationString").node().innerHTML = "point & click device detected"; + graph.setTouchDevice(false); + } + + d3.select("#loadingInfo-container").style("height", 0.5 * (height - 80) + "px"); + loadingModule.checkForScreenSize(); + + adjustSliderSize(); + // update also the padding options of loading and the logo positions; + var warningDiv = d3.select("#browserCheck"); + if ( warningDiv.classed("hidden") === false ) { + var offset = 10 + warningDiv.node().getBoundingClientRect().height; + d3.select("#logo").style("padding", offset + "px 10px"); + } else { + // remove the dynamic padding from the logo element; + d3.select("#logo").style("padding", "10px"); + } + + // scrollbar tests; + var element = d3.select("#menuElementContainer").node(); + var maxScrollLeft = element.scrollWidth - element.clientWidth; + var leftButton = d3.select("#scrollLeftButton"); + var rightButton = d3.select("#scrollRightButton"); + if ( maxScrollLeft > 0 ) { + // show both and then check how far is bar; + rightButton.classed("hidden", false); + leftButton.classed("hidden", false); + navigationMenu.updateScrollButtonVisibility(); + } else { + // hide both; + rightButton.classed("hidden", true); + leftButton.classed("hidden", true); + } + + // adjust height of the leftSidebar element; + editSidebar.updateElementWidth(); + + + var hs = d3.select("#drag_msg").node().getBoundingClientRect().height; + var ws = d3.select("#drag_msg").node().getBoundingClientRect().width; + d3.select("#drag_icon_group").attr("transform", "translate ( " + 0.25 * ws + " " + 0.25 * hs + ")"); + + } + + function adjustSliderSize(){ + // TODO: refactor and put this into the slider it self + var height = window.innerHeight - 40; + var fullHeight = height; + var zoomOutPos = height - 30; + var sliderHeight = 150; + + // assuming DOM elements are generated in the index.html + // todo: refactor for independent usage of graph and app + if ( fullHeight < 150 ) { + // hide the slider button; + d3.select("#zoomSliderParagraph").classed("hidden", true); + d3.select("#zoomOutButton").classed("hidden", true); + d3.select("#zoomInButton").classed("hidden", true); + d3.select("#centerGraphButton").classed("hidden", true); + return; + } + d3.select("#zoomSliderParagraph").classed("hidden", false); + d3.select("#zoomOutButton").classed("hidden", false); + d3.select("#zoomInButton").classed("hidden", false); + d3.select("#centerGraphButton").classed("hidden", false); + + var zoomInPos = zoomOutPos - 20; + var centerPos = zoomInPos - 20; + if ( fullHeight < 280 ) { + // hide the slider button; + d3.select("#zoomSliderParagraph").classed("hidden", true);//var sliderPos=zoomOutPos-sliderHeight; + d3.select("#zoomOutButton").style("top", zoomOutPos + "px"); + d3.select("#zoomInButton").style("top", zoomInPos + "px"); + d3.select("#centerGraphButton").style("top", centerPos + "px"); + return; + } + + var sliderPos = zoomOutPos - sliderHeight; + zoomInPos = sliderPos - 20; + centerPos = zoomInPos - 20; + d3.select("#zoomSliderParagraph").classed("hidden", false); + d3.select("#zoomOutButton").style("top", zoomOutPos + "px"); + d3.select("#zoomInButton").style("top", zoomInPos + "px"); + d3.select("#centerGraphButton").style("top", centerPos + "px"); + d3.select("#zoomSliderParagraph").style("top", sliderPos + "px"); + } + + function isTouchDevice(){ + try { + document.createEvent("TouchEvent"); + return true; + } catch ( e ) { + return false; + } + } + + + function getInternetExplorerVersion(){ + var ua, + re, + rv = -1; + + // check for edge + var isEdge = /(?:\b(MS)?IE\s+|\bTrident\/7\.0;.*\s+rv:|\bEdge\/)(\d+)/.test(navigator.userAgent); + if ( isEdge ) { + rv = parseInt("12"); + return rv; + } + + var isIE11 = /Trident.*rv[ :]*11\./.test(navigator.userAgent); + if ( isIE11 ) { + rv = parseInt("11"); + return rv; + } + if ( navigator.appName === "Microsoft Internet Explorer" ) { + ua = navigator.userAgent; + re = new RegExp("MSIE ([0-9]{1,}[\\.0-9]{0,})"); + if ( re.exec(ua) !== null ) { + rv = parseFloat(RegExp.$1); + } + } else if ( navigator.appName === "Netscape" ) { + ua = navigator.userAgent; + re = new RegExp("Trident/.*rv:([0-9]{1,}[\\.0-9]{0,})"); + if ( re.exec(ua) !== null ) { + rv = parseFloat(RegExp.$1); + } + } + return rv; + } + + return app; + } + ; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 323: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains the logic for the export button. + * @returns {{}} + */ + module.exports = function ( graph ){ + + var exportMenu = {}, + exportSvgButton, + exportFilename, + exportJsonButton, + exportTurtleButton, + exportTexButton, + copyButton, + exportableJsonText; + + var exportTTLModule = __webpack_require__(324)(graph); + + + String.prototype.replaceAll = function ( search, replacement ){ + var target = this; + return target.split(search).join(replacement); + }; + + + /** + * Adds the export button to the website. + */ + exportMenu.setup = function (){ + exportSvgButton = d3.select("#exportSvg") + .on("click", exportSvg); + exportJsonButton = d3.select("#exportJson") + .on("click", exportJson); + + copyButton = d3.select("#copyBt") + .on("click", copyUrl); + + exportTexButton = d3.select("#exportTex") + .on("click", exportTex); + + exportTurtleButton = d3.select("#exportTurtle") + .on("click", exportTurtle); + + var menuEntry = d3.select("#m_export"); + menuEntry.on("mouseover", function (){ + var searchMenu = graph.options().searchMenu(); + searchMenu.hideSearchEntries(); + exportMenu.exportAsUrl(); + }); + }; + function exportTurtle(){ + var success = exportTTLModule.requestExport(); + var result = exportTTLModule.resultingTTL_Content(); + var ontoTitle = "NewOntology"; + console.log("Exporter was successful: " + success); + if ( success ) { + // console.log("The result is : " + result); + // var ontoTitle=graph.options().getGeneralMetaObjectProperty('title'); + // if (ontoTitle===undefined || ontoTitle.length===0) + // ontoTitle="NewOntology"; + // else{ + // // language object -.- + // ontoTitle.replace(" ","_") + // } + + // TODO: show TEXT in warning module? + + + // // write the data + var dataURI = "data:text/json;charset=utf-8," + encodeURIComponent(result); + + exportTurtleButton.attr("href", dataURI) + .attr("download", ontoTitle + ".ttl"); + + // okay restore old href? + // exportTurtleButton.attr("href", oldHref); + } else { + console.log("ShowWarning!"); + graph.options().warningModule().showExporterWarning(); + console.log("Stay on the page! " + window.location.href); + exportTurtleButton.attr("href", window.location.href); + d3.event.preventDefault(); // prevent the href to be called ( reloads the page otherwise ) + } + } + + exportMenu.setFilename = function ( filename ){ + exportFilename = filename || "export"; + }; + + exportMenu.setJsonText = function ( jsonText ){ + exportableJsonText = jsonText; + }; + + function copyUrl(){ + d3.select("#exportedUrl").node().focus(); + d3.select("#exportedUrl").node().select(); + document.execCommand("copy"); + graph.options().navigationMenu().hideAllMenus(); + d3.event.preventDefault(); // prevent the href to be called ( reloads the page otherwise ) + } + + function prepareOptionString( defOpts, currOpts ){ + var setOptions = 0; + var optsString = "opts="; + + for ( var name in defOpts ) { + // define key and value ; + if ( defOpts.hasOwnProperty(name) ) {// for travis warning + var def_value = defOpts[name]; + var cur_value = currOpts[name]; + if ( def_value !== cur_value ) { + optsString += name + "=" + cur_value + ";"; + setOptions++; + } + } + } + optsString += ""; + if ( setOptions === 0 ) { + return ""; + } + return optsString; + } + + exportMenu.exportAsUrl = function (){ + var currObj = {}; + currObj.sidebar = graph.options().sidebar().getSidebarVisibility(); + + // identify default value given by ontology; + var defOntValue = graph.options().filterMenu().getDefaultDegreeValue(); + var currentValue = graph.options().filterMenu().getDegreeSliderValue(); + if ( parseInt(defOntValue) === parseInt(currentValue) ) { + currObj.doc = -1; + } else { + currObj.doc = currentValue; + } + + currObj.cd = graph.options().classDistance(); + currObj.dd = graph.options().datatypeDistance(); + if ( graph.editorMode() === true ) { + currObj.editorMode = "true"; + } else { + currObj.editorMode = "false"; + } + currObj.filter_datatypes = String(graph.options().filterMenu().getCheckBoxValue("datatypeFilterCheckbox")); + currObj.filter_sco = String(graph.options().filterMenu().getCheckBoxValue("subclassFilterCheckbox")); + currObj.filter_disjoint = String(graph.options().filterMenu().getCheckBoxValue("disjointFilterCheckbox")); + currObj.filter_setOperator = String(graph.options().filterMenu().getCheckBoxValue("setoperatorFilterCheckbox")); + currObj.filter_objectProperties = String(graph.options().filterMenu().getCheckBoxValue("objectPropertyFilterCheckbox")); + currObj.mode_dynamic = String(graph.options().dynamicLabelWidth()); + currObj.mode_scaling = String(graph.options().modeMenu().getCheckBoxValue("nodescalingModuleCheckbox")); + currObj.mode_compact = String(graph.options().modeMenu().getCheckBoxValue("compactnotationModuleCheckbox")); + currObj.mode_colorExt = String(graph.options().modeMenu().getCheckBoxValue("colorexternalsModuleCheckbox")); + currObj.mode_multiColor = String(graph.options().modeMenu().colorModeState()); + currObj.mode_pnp = String(graph.options().modeMenu().getCheckBoxValue("pickandpinModuleCheckbox")); + currObj.debugFeatures = String(!graph.options().getHideDebugFeatures()); + currObj.rect = 0; + + var defObj = graph.options().initialConfig(); + var optsString = prepareOptionString(defObj, currObj); + var urlString = String(location); + var htmlElement; + // when everything is default then there is nothing to write + if ( optsString.length === 0 ) { + // building up parameter list; + + // remove the all options form location + var hashCode = location.hash; + urlString = urlString.split(hashCode)[0]; + + var lPos = hashCode.lastIndexOf("#"); + if ( lPos === -1 ) { + htmlElement = d3.select("#exportedUrl").node(); + htmlElement.value = String(location); + htmlElement.title = String(location); + return; // nothing to change in the location String + } + var newURL = hashCode.slice(lPos, hashCode.length); + htmlElement = d3.select("#exportedUrl").node(); + htmlElement.value = urlString + newURL; + htmlElement.title = urlString + newURL; + return; + } + + // generate the options string; + var numParameters = (urlString.match(/#/g) || []).length; + var newUrlString; + if ( numParameters === undefined || numParameters === 0 ) { + newUrlString = urlString + "#" + optsString; + } + if ( numParameters > 0 ) { + var tokens = urlString.split("#"); + var i; + if ( tokens[1].indexOf("opts=") >= 0 ) { + tokens[1] = optsString; + newUrlString = tokens[0]; + } else { + newUrlString = tokens[0] + "#"; + newUrlString += optsString; + } + // append parameters + for ( i = 1; i < tokens.length; i++ ) { + if ( tokens[i].length > 0 ) { + newUrlString += "#" + tokens[i]; + } + } + } + // building up parameter list; + htmlElement = d3.select("#exportedUrl").node(); + htmlElement.value = newUrlString; + htmlElement.title = newUrlString; + + }; + + function exportSvg(){ + graph.options().navigationMenu().hideAllMenus(); + // Get the d3js SVG element + var graphSvg = d3.select(graph.options().graphContainerSelector()).select("svg"), + graphSvgCode, + escapedGraphSvgCode, + dataURI; + + // inline the styles, so that the exported svg code contains the css rules + inlineVowlStyles(); + hideNonExportableElements(); + + graphSvgCode = graphSvg.attr("version", 1.1) + .attr("xmlns", "http://www.w3.org/2000/svg") + .node().parentNode.innerHTML; + + // Insert the reference to VOWL + graphSvgCode = "\n" + graphSvgCode; + + escapedGraphSvgCode = escapeUnicodeCharacters(graphSvgCode); + //btoa(); Creates a base-64 encoded ASCII string from a "string" of binary data. + dataURI = "data:image/svg+xml;base64," + btoa(escapedGraphSvgCode); + + + exportSvgButton.attr("href", dataURI) + .attr("download", exportFilename + ".svg"); + + // remove graphic styles for interaction to go back to normal + removeVowlInlineStyles(); + showNonExportableElements(); + graph.lazyRefresh(); + } + + function escapeUnicodeCharacters( text ){ + var textSnippets = [], + i, textLength = text.length, + character, + charCode; + + for ( i = 0; i < textLength; i++ ) { + character = text.charAt(i); + charCode = character.charCodeAt(0); + + if ( charCode < 128 ) { + textSnippets.push(character); + } else { + textSnippets.push("&#" + charCode + ";"); + } + } + + return textSnippets.join(""); + } + + function inlineVowlStyles(){ + setStyleSensitively(".text", [{ name: "font-family", value: "Helvetica, Arial, sans-serif" }, { + name: "font-size", + value: "12px" + }]); + setStyleSensitively(".subtext", [{ name: "font-size", value: "9px" }]); + setStyleSensitively(".text.instance-count", [{ name: "fill", value: "#666" }]); + setStyleSensitively(".external + text .instance-count", [{ name: "fill", value: "#aaa" }]); + setStyleSensitively(".cardinality", [{ name: "font-size", value: "10px" }]); + setStyleSensitively(".text, .embedded", [{ name: "pointer-events", value: "none" }]); + setStyleSensitively(".class, .object, .disjoint, .objectproperty, .disjointwith, .equivalentproperty, .transitiveproperty, .functionalproperty, .inversefunctionalproperty, .symmetricproperty, .allvaluesfromproperty, .somevaluesfromproperty", [{ + name: "fill", + value: "#acf" + }]); + setStyleSensitively(".label .datatype, .datatypeproperty", [{ name: "fill", value: "#9c6" }]); + setStyleSensitively(".rdf, .rdfproperty", [{ name: "fill", value: "#c9c" }]); + setStyleSensitively(".literal, .node .datatype", [{ name: "fill", value: "#fc3" }]); + setStyleSensitively(".deprecated, .deprecatedproperty", [{ name: "fill", value: "#ccc" }]); + setStyleSensitively(".external, .externalproperty", [{ name: "fill", value: "#36c" }]); + setStyleSensitively("path, .nofill", [{ name: "fill", value: "none" }]); + setStyleSensitively("marker path", [{ name: "fill", value: "#000" }]); + setStyleSensitively(".class, path, line, .fineline", [{ name: "stroke", value: "#000" }]); + setStyleSensitively(".white, .subclass, .subclassproperty, .external + text", [{ name: "fill", value: "#fff" }]); + setStyleSensitively(".class.hovered, .property.hovered, .cardinality.hovered, .cardinality.focused, circle.pin, .filled.hovered, .filled.focused", [{ + name: "fill", + value: "#f00" + }, { name: "cursor", value: "pointer" }]); + setStyleSensitively(".focused, path.hovered", [{ name: "stroke", value: "#f00" }]); + setStyleSensitively(".indirect-highlighting, .feature:hover", [{ name: "fill", value: "#f90" }]); + setStyleSensitively(".values-from", [{ name: "stroke", value: "#69c" }]); + setStyleSensitively(".symbol, .values-from.filled", [{ name: "fill", value: "#69c" }]); + setStyleSensitively(".class, path, line", [{ name: "stroke-width", value: "2" }]); + setStyleSensitively(".fineline", [{ name: "stroke-width", value: "1" }]); + setStyleSensitively(".dashed, .anonymous", [{ name: "stroke-dasharray", value: "8" }]); + setStyleSensitively(".dotted", [{ name: "stroke-dasharray", value: "3" }]); + setStyleSensitively("rect.focused, circle.focused", [{ name: "stroke-width", value: "4px" }]); + setStyleSensitively(".nostroke", [{ name: "stroke", value: "none" }]); + setStyleSensitively("marker path", [{ name: "stroke-dasharray", value: "100" }]); + } + + function setStyleSensitively( selector, styles ){ + var elements = d3.selectAll(selector); + if ( elements.empty() ) { + return; + } + + styles.forEach(function ( style ){ + elements.each(function (){ + var element = d3.select(this); + if ( !shouldntChangeInlineCss(element, style.name) ) { + element.style(style.name, style.value); + } + }); + }); + } + + function shouldntChangeInlineCss( element, style ){ + return style === "fill" && hasBackgroundColorSet(element); + } + + function hasBackgroundColorSet( element ){ + var data = element.datum(); + if ( data === undefined ) { + return false; + } + return data.backgroundColor && !!data.backgroundColor(); + } + + /** + * For example the pin of the pick&pin module should be invisible in the exported graphic. + */ + function hideNonExportableElements(){ + d3.selectAll(".hidden-in-export").style("display", "none"); + } + + function removeVowlInlineStyles(){ + d3.selectAll(".text, .subtext, .text.instance-count, .external + text .instance-count, .cardinality, .text, .embedded, .class, .object, .disjoint, .objectproperty, .disjointwith, .equivalentproperty, .transitiveproperty, .functionalproperty, .inversefunctionalproperty, .symmetricproperty, .allvaluesfromproperty, .somevaluesfromproperty, .label .datatype, .datatypeproperty, .rdf, .rdfproperty, .literal, .node .datatype, .deprecated, .deprecatedproperty, .external, .externalproperty, path, .nofill, .symbol, .values-from.filled, marker path, .class, path, line, .fineline, .white, .subclass, .subclassproperty, .external + text, .class.hovered, .property.hovered, .cardinality.hovered, .cardinality.focused, circle.pin, .filled.hovered, .filled.focused, .focused, path.hovered, .indirect-highlighting, .feature:hover, .values-from, .class, path, line, .fineline, .dashed, .anonymous, .dotted, rect.focused, circle.focused, .nostroke, marker path") + .each(function (){ + var element = d3.select(this); + + var inlineStyles = element.node().style; + for ( var styleName in inlineStyles ) { + if ( inlineStyles.hasOwnProperty(styleName) ) { + if ( shouldntChangeInlineCss(element, styleName) ) { + continue; + } + element.style(styleName, null); + } + } + + if ( element.datum && element.datum() !== undefined && element.datum().type ) { + if ( element.datum().type() === "rdfs:subClassOf" ) { + element.style("fill", null); + } + } + }); + + // repair svg icons in the menu; + var scrollContainer = d3.select("#menuElementContainer").node(); + var controlElements = scrollContainer.children; + var numEntries = controlElements.length; + + for ( var i = 0; i < numEntries; i++ ) { + var currentMenu = controlElements[i].id; + d3.select("#" + currentMenu).select("path").style("stroke-width", "0"); + d3.select("#" + currentMenu).select("path").style("fill", "#fff"); + } + + d3.select("#magnifyingGlass").style("stroke-width", "0"); + d3.select("#magnifyingGlass").style("fill", "#666"); + + } + + function showNonExportableElements(){ + d3.selectAll(".hidden-in-export").style("display", null); + } + + exportMenu.createJSON_exportObject = function (){ + var i, j, k; // an index variable for the for-loops + + /** get data for exporter **/ + if (!graph.options().data()) {return {};} // return an empty json object + // extract onotology information; + var unfilteredData = graph.getUnfilteredData(); + var ontologyComment = graph.options().data()._comment; + var metaObj = graph.options().getGeneralMetaObject(); + var header = graph.options().data().header; + + if ( metaObj.iri && metaObj.iri !== header.iri ) { + header.iri = metaObj.iri; + } + if ( metaObj.title && metaObj.title !== header.title ) { + header.title = metaObj.title; + } + if ( metaObj.version && metaObj.version !== header.version ) { + header.version = metaObj.version; + } + if ( metaObj.author && metaObj.author !== header.author ) { + header.author = metaObj.author; + } + if ( metaObj.description && metaObj.description !== header.description ) { + header.description = metaObj.description; + } + + + var exportText = {}; + exportText._comment = ontologyComment; + exportText.header = header; + exportText.namespace = graph.options().data().namespace; + if ( exportText.namespace === undefined ) { + exportText.namespace = []; // just an empty namespace array + } + // we do have now the unfiltered data which needs to be transfered to class/classAttribute and property/propertyAttribute + + + // var classAttributeString='classAttribute:[ \n'; + var nodes = unfilteredData.nodes; + var nLen = nodes.length; // hope for compiler unroll + var classObjects = []; + var classAttributeObjects = []; + for ( i = 0; i < nLen; i++ ) { + var classObj = {}; + var classAttr = {}; + classObj.id = nodes[i].id(); + classObj.type = nodes[i].type(); + classObjects.push(classObj); + + // define the attributes object + classAttr.id = nodes[i].id(); + classAttr.iri = nodes[i].iri(); + classAttr.baseIri = nodes[i].baseIri(); + classAttr.label = nodes[i].label(); + + if ( nodes[i].attributes().length > 0 ) { + classAttr.attributes = nodes[i].attributes(); + } + if ( nodes[i].comment() ) { + classAttr.comment = nodes[i].comment(); + } + if ( nodes[i].annotations() ) { + classAttr.annotations = nodes[i].annotations(); + } + if ( nodes[i].description() ) { + classAttr.description = nodes[i].description(); + } + + + if ( nodes[i].individuals().length > 0 ) { + var classIndividualElements = []; + var nIndividuals = nodes[i].individuals(); + for ( j = 0; j < nIndividuals.length; j++ ) { + var indObj = {}; + indObj.iri = nIndividuals[j].iri(); + indObj.baseIri = nIndividuals[j].baseIri(); + indObj.labels = nIndividuals[j].label(); + if ( nIndividuals[j].annotations() ) { + indObj.annotations = nIndividuals[j].annotations(); + } + if ( nIndividuals[j].description() ) { + indObj.description = nIndividuals[j].description(); + } + if ( nIndividuals[j].comment() ) { + indObj.comment = nIndividuals[j].comment(); + } + classIndividualElements.push(indObj); + } + classAttr.individuals = classIndividualElements; + } + + var equalsForAttributes = undefined; + if ( nodes[i].equivalents().length > 0 ) { + equalsForAttributes = []; + var equals = nodes[i].equivalents(); + for ( j = 0; j < equals.length; j++ ) { + var eqObj = {}; + var eqAttr = {}; + eqObj.id = equals[j].id(); + equalsForAttributes.push(equals[j].id()); + eqObj.type = equals[j].type(); + classObjects.push(eqObj); + + eqAttr.id = equals[j].id(); + eqAttr.iri = equals[j].iri(); + eqAttr.baseIri = equals[j].baseIri(); + eqAttr.label = equals[j].label(); + + if ( equals[j].attributes().length > 0 ) { + eqAttr.attributes = equals[j].attributes(); + } + if ( equals[j].comment() ) { + eqAttr.comment = equals[j].comment(); + } + if ( equals[j].individuals().length > 0 ) { + eqAttr.individuals = equals[j].individuals(); + } + if ( equals[j].annotations() ) { + eqAttr.annotations = equals[j].annotations(); + } + if ( equals[j].description() ) { + eqAttr.description = equals[j].description(); + } + + if ( equals[j].individuals().length > 0 ) { + var e_classIndividualElements = []; + var e_nIndividuals = equals[i].individuals(); + for ( k = 0; k < e_nIndividuals.length; k++ ) { + var e_indObj = {}; + e_indObj.iri = e_nIndividuals[k].iri(); + e_indObj.baseIri = e_nIndividuals[k].baseIri(); + e_indObj.labels = e_nIndividuals[k].label(); + + if ( e_nIndividuals[k].annotations() ) { + e_indObj.annotations = e_nIndividuals[k].annotations(); + } + if ( e_nIndividuals[k].description() ) { + e_indObj.description = e_nIndividuals[k].description(); + } + if ( e_nIndividuals[k].comment() ) { + e_indObj.comment = e_nIndividuals[k].comment(); + } + e_classIndividualElements.push(e_indObj); + } + eqAttr.individuals = e_classIndividualElements; + } + + classAttributeObjects.push(eqAttr); + } + } + if ( equalsForAttributes && equalsForAttributes.length > 0 ) { + classAttr.equivalent = equalsForAttributes; + } + + // classAttr.subClasses=nodes[i].subClasses(); // not needed + // classAttr.instances=nodes[i].instances(); + + // + // .complement(element.complement) + // .disjointUnion(element.disjointUnion) + // .description(element.description) + // .equivalents(element.equivalent) + // .intersection(element.intersection) + // .type(element.type) Ignore, because we predefined it + // .union(element.union) + classAttributeObjects.push(classAttr); + } + + /** -- properties -- **/ + var properties = unfilteredData.properties; + var pLen = properties.length; // hope for compiler unroll + var propertyObjects = []; + var propertyAttributeObjects = []; + + for ( i = 0; i < pLen; i++ ) { + var pObj = {}; + var pAttr = {}; + pObj.id = properties[i].id(); + pObj.type = properties[i].type(); + propertyObjects.push(pObj); + + // // define the attributes object + pAttr.id = properties[i].id(); + pAttr.iri = properties[i].iri(); + pAttr.baseIri = properties[i].baseIri(); + pAttr.label = properties[i].label(); + + if ( properties[i].attributes().length > 0 ) { + pAttr.attributes = properties[i].attributes(); + } + if ( properties[i].comment() ) { + pAttr.comment = properties[i].comment(); + } + + if ( properties[i].annotations() ) { + pAttr.annotations = properties[i].annotations(); + } + if ( properties[i].maxCardinality() ) { + pAttr.maxCardinality = properties[i].maxCardinality(); + } + if ( properties[i].minCardinality() ) { + pAttr.minCardinality = properties[i].minCardinality(); + } + if ( properties[i].cardinality() ) { + pAttr.cardinality = properties[i].cardinality(); + } + if ( properties[i].description() ) { + pAttr.description = properties[i].description(); + } + + pAttr.domain = properties[i].domain().id(); + pAttr.range = properties[i].range().id(); + // sub properties; + if ( properties[i].subproperties() ) { + var subProps = properties[i].subproperties(); + var subPropsIdArray = []; + for ( j = 0; j < subProps.length; j++ ) { + if ( subProps[j].id ) + subPropsIdArray.push(subProps[j].id()); + } + pAttr.subproperty = subPropsIdArray; + } + + // super properties + if ( properties[i].superproperties() ) { + var superProps = properties[i].superproperties(); + var superPropsIdArray = []; + for ( j = 0; j < superProps.length; j++ ) { + if ( superProps[j].id ) + superPropsIdArray.push(superProps[j].id()); + } + pAttr.superproperty = superPropsIdArray; + } + + // check for inverse element + if ( properties[i].inverse() ) { + if ( properties[i].inverse().id ) + pAttr.inverse = properties[i].inverse().id(); + } + propertyAttributeObjects.push(pAttr); + } + + exportText.class = classObjects; + exportText.classAttribute = classAttributeObjects; + exportText.property = propertyObjects; + exportText.propertyAttribute = propertyAttributeObjects; + + + var nodeElements = graph.graphNodeElements(); // get visible nodes + var propElements = graph.graphLabelElements(); // get visible labels + // var jsonObj = JSON.parse(exportableJsonText); // reparse the original input json + + /** modify comment **/ + var comment = exportText._comment; + var additionalString = " [Additional Information added by WebVOWL Exporter Version: " + "1.1.7" + "]"; + // adding new string to comment only if it does not exist + if ( comment.indexOf(additionalString) === -1 ) { + exportText._comment = comment + " [Additional Information added by WebVOWL Exporter Version: " + "1.1.7" + "]"; + } + + var classAttribute = exportText.classAttribute; + var propAttribute = exportText.propertyAttribute; + /** remove previously stored variables **/ + for ( i = 0; i < classAttribute.length; i++ ) { + var classObj_del = classAttribute[i]; + delete classObj_del.pos; + delete classObj_del.pinned; + } + var propertyObj; + for ( i = 0; i < propAttribute.length; i++ ) { + propertyObj = propAttribute[i]; + delete propertyObj.pos; + delete propertyObj.pinned; + } + /** add new variables to jsonObj **/ + // class attribute variables + nodeElements.each(function ( node ){ + var nodeId = node.id(); + for ( i = 0; i < classAttribute.length; i++ ) { + var classObj = classAttribute[i]; + if ( classObj.id === nodeId ) { + // store relative positions + classObj.pos = [parseFloat(node.x.toFixed(2)), parseFloat(node.y.toFixed(2))]; + if ( node.pinned() ) + classObj.pinned = true; + break; + } + } + }); + // property attribute variables + for ( j = 0; j < propElements.length; j++ ) { + var correspondingProp = propElements[j].property(); + for ( i = 0; i < propAttribute.length; i++ ) { + propertyObj = propAttribute[i]; + if ( propertyObj.id === correspondingProp.id() ) { + propertyObj.pos = [parseFloat(propElements[j].x.toFixed(2)), parseFloat(propElements[j].y.toFixed(2))]; + if ( propElements[j].pinned() ) + propertyObj.pinned = true; + break; + } + } + } + /** create the variable for settings and set their values **/ + exportText.settings = {}; + + // Global Settings + var zoom = graph.scaleFactor(); + var paused = graph.paused(); + var translation = [parseFloat(graph.translation()[0].toFixed(2)), parseFloat(graph.translation()[1].toFixed(2))]; + exportText.settings.global = {}; + exportText.settings.global.zoom = zoom.toFixed(2); + exportText.settings.global.translation = translation; + exportText.settings.global.paused = paused; + + // shared variable declaration + var cb_text; + var isEnabled; + var cb_obj; + + // Gravity Settings + var classDistance = graph.options().classDistance(); + var datatypeDistance = graph.options().datatypeDistance(); + exportText.settings.gravity = {}; + exportText.settings.gravity.classDistance = classDistance; + exportText.settings.gravity.datatypeDistance = datatypeDistance; + + // Filter Settings + var fMenu = graph.options().filterMenu(); + var fContainer = fMenu.getCheckBoxContainer(); + var cbCont = []; + for ( i = 0; i < fContainer.length; i++ ) { + cb_text = fContainer[i].checkbox.attr("id"); + isEnabled = fContainer[i].checkbox.property("checked"); + cb_obj = {}; + cb_obj.id = cb_text; + cb_obj.checked = isEnabled; + cbCont.push(cb_obj); + } + var degreeSliderVal = fMenu.getDegreeSliderValue(); + exportText.settings.filter = {}; + exportText.settings.filter.checkBox = cbCont; + exportText.settings.filter.degreeSliderValue = degreeSliderVal; + + // Modes Settings + var mMenu = graph.options().modeMenu(); + var mContainer = mMenu.getCheckBoxContainer(); + var cb_modes = []; + for ( i = 0; i < mContainer.length; i++ ) { + cb_text = mContainer[i].attr("id"); + isEnabled = mContainer[i].property("checked"); + cb_obj = {}; + cb_obj.id = cb_text; + cb_obj.checked = isEnabled; + cb_modes.push(cb_obj); + } + var colorSwitchState = mMenu.colorModeState(); + exportText.settings.modes = {}; + exportText.settings.modes.checkBox = cb_modes; + exportText.settings.modes.colorSwitchState = colorSwitchState; + + var exportObj = {}; + // todo: [ ] find better way for ordering the objects + // hack for ordering of objects, so settings is after metrics + exportObj._comment = exportText._comment; + exportObj.header = exportText.header; + exportObj.namespace = exportText.namespace; + exportObj.metrics = exportText.metrics; + exportObj.settings = exportText.settings; + exportObj.class = exportText.class; + exportObj.classAttribute = exportText.classAttribute; + exportObj.property = exportText.property; + exportObj.propertyAttribute = exportText.propertyAttribute; + + return exportObj; + }; + + function exportJson(){ + graph.options().navigationMenu().hideAllMenus(); + /** check if there is data **/ + if ( !exportableJsonText ) { + alert("No graph data available."); + // Stop the redirection to the path of the href attribute + d3.event.preventDefault(); + return; + } + + var exportObj = exportMenu.createJSON_exportObject(); + + // make a string again; + var exportText = JSON.stringify(exportObj, null, ' '); + // write the data + var dataURI = "data:text/json;charset=utf-8," + encodeURIComponent(exportText); + var jsonExportFileName = exportFilename; + + if ( !jsonExportFileName.endsWith(".json") ) + jsonExportFileName += ".json"; + exportJsonButton.attr("href", dataURI) + .attr("download", jsonExportFileName); + } + + var curveFunction = d3.svg.line() + .x(function ( d ){ + return d.x; + }) + .y(function ( d ){ + return d.y; + }) + .interpolate("cardinal"); + var loopFunction = d3.svg.line() + .x(function ( d ){ + return d.x; + }) + .y(function ( d ){ + return d.y; + }) + .interpolate("cardinal") + .tension(-1); + + function exportTex(){ + var zoom = graph.scaleFactor(); + var grTranslate = graph.translation(); + var bbox = graph.getBoundingBoxForTex(); + var comment = " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n"; + comment += " % Generated with the experimental alpha version of the TeX exporter of WebVOWL (version 1.1.3) %%% \n"; + comment += " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\n"; + comment += " % The content can be used as import in other TeX documents. \n"; + comment += " % Parent document has to use the following packages \n"; + comment += " % \\usepackage{tikz} \n"; + comment += " % \\usepackage{helvet} \n"; + comment += " % \\usetikzlibrary{decorations.markings,decorations.shapes,decorations,arrows,automata,backgrounds,petri,shapes.geometric} \n"; + comment += " % \\usepackage{xcolor} \n\n"; + comment += " %%%%%%%%%%%%%%% Example Parent Document %%%%%%%%%%%%%%%%%%%%%%%\n"; + comment += " %\\documentclass{article} \n"; + comment += " %\\usepackage{tikz} \n"; + comment += " %\\usepackage{helvet} \n"; + comment += " %\\usetikzlibrary{decorations.markings,decorations.shapes,decorations,arrows,automata,backgrounds,petri,shapes.geometric} \n"; + comment += " %\\usepackage{xcolor} \n\n"; + comment += " %\\begin{document} \n"; + comment += " %\\section{Example} \n"; + comment += " % This is an example. \n"; + comment += " % \\begin{figure} \n"; + comment += " % \\input{} % << tex file name for the graph \n"; + comment += " % \\caption{A generated graph with TKIZ using alpha version of the TeX exporter of WebVOWL (version 1.1.3) } \n"; + comment += " % \\end{figure} \n"; + comment += " %\\end{document} \n"; + comment += " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\n"; + + + var texString = comment + "\\definecolor{imageBGCOLOR}{HTML}{FFFFFF} \n" + + "\\definecolor{owlClassColor}{HTML}{AACCFF}\n" + + "\\definecolor{owlObjectPropertyColor}{HTML}{AACCFF}\n" + + "\\definecolor{owlExternalClassColor}{HTML}{AACCFF}\n" + + "\\definecolor{owlDatatypePropertyColor}{HTML}{99CC66}\n" + + "\\definecolor{owlDatatypeColor}{HTML}{FFCC33}\n" + + "\\definecolor{owlThingColor}{HTML}{FFFFFF}\n" + + "\\definecolor{valuesFrom}{HTML}{6699CC}\n" + + "\\definecolor{rdfPropertyColor}{HTML}{CC99CC}\n" + + "\\definecolor{unionColor}{HTML}{6699cc}\n" + + "\\begin{center} \n" + + "\\resizebox{\\linewidth}{!}{\n" + + + "\\begin{tikzpicture}[framed]\n" + + "\\clip (" + bbox[0] + "pt , " + bbox[1] + "pt ) rectangle (" + bbox[2] + "pt , " + bbox[3] + "pt);\n" + + "\\tikzstyle{dashed}=[dash pattern=on 4pt off 4pt] \n" + + "\\tikzstyle{dotted}=[dash pattern=on 2pt off 2pt] \n" + + "\\fontfamily{sans-serif}{\\fontsize{12}{12}\\selectfont}\n \n"; + + + texString += "\\tikzset{triangleBlack/.style = {fill=black, draw=black, line width=1pt,scale=0.7,regular polygon, regular polygon sides=3} }\n"; + texString += "\\tikzset{triangleWhite/.style = {fill=white, draw=black, line width=1pt,scale=0.7,regular polygon, regular polygon sides=3} }\n"; + texString += "\\tikzset{triangleBlue/.style = {fill=valuesFrom, draw=valuesFrom, line width=1pt,scale=0.7,regular polygon, regular polygon sides=3} }\n"; + + texString += "\\tikzset{Diamond/.style = {fill=white, draw=black, line width=2pt,scale=1.2,regular polygon, regular polygon sides=4} }\n"; + + + texString += "\\tikzset{Literal/.style={rectangle,align=center,\n" + + "font={\\fontsize{12pt}{12}\\selectfont \\sffamily },\n" + + "black, draw=black, dashed, line width=1pt, fill=owlDatatypeColor, minimum width=80pt,\n" + + "minimum height = 20pt}}\n\n"; + + texString += "\\tikzset{Datatype/.style={rectangle,align=center,\n" + + "font={\\fontsize{12pt}{12}\\selectfont \\sffamily },\n" + + "black, draw=black, line width=1pt, fill=owlDatatypeColor, minimum width=80pt,\n" + + "minimum height = 20pt}}\n\n"; + + + texString += "\\tikzset{owlClass/.style={circle, inner sep=0mm,align=center, \n" + + "font={\\fontsize{12pt}{12}\\selectfont \\sffamily },\n" + + "black, draw=black, line width=1pt, fill=owlClassColor, minimum size=101pt}}\n\n"; + + texString += "\\tikzset{anonymousClass/.style={circle, inner sep=0mm,align=center, \n" + + "font={\\fontsize{12pt}{12}\\selectfont \\sffamily },\n" + + "black, dashed, draw=black, line width=1pt, fill=owlClassColor, minimum size=101pt}}\n\n"; + + + texString += "\\tikzset{owlThing/.style={circle, inner sep=0mm,align=center,\n" + + "font={\\fontsize{12pt}{12}\\selectfont \\sffamily },\n" + + "black, dashed, draw=black, line width=1pt, fill=owlThingColor, minimum size=62pt}}\n\n"; + + + texString += "\\tikzset{owlObjectProperty/.style={rectangle,align=center,\n" + + "inner sep=0mm,\n" + + "font={\\fontsize{12pt}{12}\\selectfont \\sffamily },\n" + + "fill=owlObjectPropertyColor, minimum width=80pt,\n" + + "minimum height = 25pt}}\n\n"; + + texString += "\\tikzset{rdfProperty/.style={rectangle,align=center,\n" + + "inner sep=0mm,\n" + + "font={\\fontsize{12pt}{12}\\selectfont \\sffamily },\n" + + "fill=rdfPropertyColor, minimum width=80pt,\n" + + "minimum height = 25pt}}\n\n"; + + + texString += "\\tikzset{owlDatatypeProperty/.style={rectangle,align=center,\n" + + "fill=owlDatatypePropertyColor, minimum width=80pt,\n" + + "inner sep=0mm,\n" + + "font={\\fontsize{12pt}{12}\\selectfont \\sffamily },\n" + + "minimum height = 25pt}}\n\n"; + + texString += "\\tikzset{rdfsSubClassOf/.style={rectangle,align=center,\n" + + "font={\\fontsize{12pt}{12}\\selectfont \\sffamily },\n" + + "inner sep=0mm,\n" + + "fill=imageBGCOLOR, minimum width=80pt,\n" + + "minimum height = 25pt}}\n\n"; + + texString += "\\tikzset{unionOf/.style={circle, inner sep=0mm,align=center,\n" + + "font={\\fontsize{12pt}{12}\\selectfont \\sffamily },\n" + + "black, draw=black, line width=1pt, fill=unionColor, minimum size=25pt}}\n\n"; + + texString += "\\tikzset{disjointWith/.style={circle, inner sep=0mm,align=center,\n" + + "font={\\fontsize{12pt}{12}\\selectfont \\sffamily },\n" + + "black, draw=black, line width=1pt, fill=unionColor, minimum size=20pt}}\n\n"; + + + texString += "\\tikzset{owlEquivalentClass/.style={circle,align=center,\n" + + "font={\\fontsize{12pt}{12}\\selectfont \\sffamily },\n" + + "inner sep=0mm,\n" + + "black, solid, draw=black, line width=3pt, fill=owlExternalClassColor, minimum size=101pt,\n" + + "postaction = {draw,line width=1pt, white}}}\n\n"; + + // draw a bounding box; + + // get bbox coordinates; + + + graph.options().navigationMenu().hideAllMenus(); + /** check if there is data **/ + if ( !exportableJsonText ) { + alert("No graph data available."); + // Stop the redirection to the path of the href attribute + d3.event.preventDefault(); + return; + } + + var i = 0, identifier; + + /** get data for exporter **/ + var nodeElements = graph.graphNodeElements(); // get visible nodes + var propElements = graph.graphLabelElements(); // get visible labels + var links = graph.graphLinkElements(); + + // export only nodes; + // draw Links; + for ( i = 0; i < links.length; i++ ) { + var link = links[i]; + // console.log("\n****************\nInverstigating Link for property "+link.property().labelForCurrentLanguage()); + + var prop = link.property(); + var dx, dy, px, py, rx, ry; + var colorStr = "black"; + var linkDomainIntersection; + var linkRangeIntersection; + var center; + var linkStyle = ""; + var isLoop = ""; + var curvePoint; + var pathStart; + var pathEnd; + var controlPoints; + var len; + var ahAngle; + var pathLen; + var markerOffset = 7; + + var arrowType = "triangleBlack"; + var linkWidth = ",line width=2pt"; + if ( prop.linkType ) { + if ( prop.linkType() === "dotted" ) { + //stroke-dasharray: 3; + linkStyle = ", dotted "; + arrowType = "triangleWhite"; + } + if ( prop.linkType() === "dashed" ) { + //stroke-dasharray: 3; + linkStyle = ", dashed "; + } + + if ( prop.linkType() === "values-from" ) { + colorStr = "valuesFrom"; + } + + } + + var startX, startY, endX, endY, normX, normY, lg; + + if ( link.layers().length === 1 && !link.loops() ) { + + linkDomainIntersection = graph.math().calculateIntersection(link.range(), link.domain(), 1); + linkRangeIntersection = graph.math().calculateIntersection(link.domain(), link.range(), 1); + center = graph.math().calculateCenter(linkDomainIntersection, linkRangeIntersection); + dx = linkDomainIntersection.x; + dy = -linkDomainIntersection.y; + px = center.x; + py = -center.y; + rx = linkRangeIntersection.x; + ry = -linkRangeIntersection.y; + + + pathStart = linkDomainIntersection; + curvePoint = center; + pathEnd = linkRangeIntersection; + + var nx = rx - px; + var ny = ry - py; + + // normalize ; + len = Math.sqrt(nx * nx + ny * ny); + + nx = nx / len; + ny = ny / len; + + ahAngle = Math.atan2(ny, nx) * (180 / Math.PI); + normX = nx; + normY = ny; + } + else { + if ( link.isLoop() ) { + isLoop = ", tension=3"; + controlPoints = graph.math().calculateLoopPoints(link); + pathStart = controlPoints[0]; + curvePoint = controlPoints[1]; + pathEnd = controlPoints[2]; + } else { + curvePoint = link.label(); + pathStart = graph.math().calculateIntersection(curvePoint, link.domain(), 1); + pathEnd = graph.math().calculateIntersection(curvePoint, link.range(), 1); + } + dx = pathStart.x; + dy = -pathStart.y; + px = curvePoint.x; + py = -curvePoint.y; + rx = pathEnd.x; + ry = -pathEnd.y; + } + + texString += "\\draw [" + colorStr + linkStyle + linkWidth + isLoop + "] plot [smooth] coordinates {(" + + dx + "pt, " + dy + "pt) (" + px + "pt, " + py + "pt) (" + rx + "pt, " + ry + "pt)};\n"; + + + if ( link.property().markerElement() === undefined ) continue; + + // add arrow head; + + + if ( link.property().type() === "owl:someValuesFrom" || link.property().type() === "owl:allValuesFrom" ) { + arrowType = "triangleBlue"; + } + + lg = link.pathObj(); + pathLen = Math.floor(lg.node().getTotalLength()); + var p1 = lg.node().getPointAtLength(pathLen - 4); + var p2 = lg.node().getPointAtLength(pathLen); + var markerCenter = lg.node().getPointAtLength(pathLen - 6); + + if ( link.property().type() === "setOperatorProperty" ) { + p1 = lg.node().getPointAtLength(4); + p2 = lg.node().getPointAtLength(0); + markerCenter = lg.node().getPointAtLength(8); + arrowType = "Diamond"; + } + + startX = p1.x; + startY = p1.y; + endX = p2.x; + endY = p2.y; + normX = endX - startX; + normY = endY - startY; + len = Math.sqrt(normX * normX + normY * normY); + normX = normX / len; + normY = normY / len; + + ahAngle = -1.0 * Math.atan2(normY, normX) * (180 / Math.PI); + ahAngle -= 90; + if ( link.property().type() === "setOperatorProperty" ) { + ahAngle -= 45; + } + // console.log(link.property().labelForCurrentLanguage()+ ": "+normX+ " "+normY +" "+ahAngle); + rx = markerCenter.x; + ry = markerCenter.y; + if ( link.layers().length === 1 && !link.loops() ) { + // markerOffset=-1*m + ry = -1 * ry; + texString += "\\node[" + arrowType + ", rotate=" + ahAngle + "] at (" + rx + "pt, " + ry + "pt) (single_marker" + i + ") {};\n "; + } else { + ry = -1 * ry; + texString += "\\node[" + arrowType + ", rotate=" + ahAngle + "] at (" + rx + "pt, " + ry + "pt) (marker" + i + ") {};\n "; + } + + // if (link.isLoop()){ + // rotAngle=-10+angle * (180 / Math.PI); + // } + + // add cardinality; + var cardinalityText = link.property().generateCardinalityText(); + if ( cardinalityText && cardinalityText.length > 0 ) { + var cardinalityCenter = lg.node().getPointAtLength(pathLen - 18); + var cx = cardinalityCenter.x - (10 * normY); + var cy = cardinalityCenter.y + (10 * normX); // using orthonormal y Coordinate + cy *= -1.0; + var textColor = "black"; + if ( cardinalityText.indexOf("A") > -1 ) { + cardinalityText = "$\\forall$"; + } + if ( cardinalityText.indexOf("E") > -1 ) { + cardinalityText = "$\\exists$"; + } + + + texString += "\\node[font={\\fontsize{12pt}{12}\\selectfont \\sffamily },text=" + textColor + "] at (" + cx + "pt, " + cy + "pt) (cardinalityText" + i + ") {" + cardinalityText + "};\n "; + } + + + if ( link.property().inverse() ) { + lg = link.pathObj(); + pathLen = Math.floor(lg.node().getTotalLength()); + var p1_inv = lg.node().getPointAtLength(4); + var p2_inv = lg.node().getPointAtLength(0); + var markerCenter_inv = lg.node().getPointAtLength(6); + startX = p1_inv.x; + startY = p1_inv.y; + endX = p2_inv.x; + endY = p2_inv.y; + normX = endX - startX; + normY = endY - startY; + len = Math.sqrt(normX * normX + normY * normY); + normX = normX / len; + normY = normY / len; + + ahAngle = -1.0 * Math.atan2(normY, normX) * (180 / Math.PI); + ahAngle -= 90; + // console.log("INV>>\n "+link.property().inverse().labelForCurrentLanguage()+ ": "+normX+ " "+normY +" "+ahAngle); + rx = markerCenter_inv.x; + ry = markerCenter_inv.y; + if ( link.layers().length === 1 && !link.loops() ) { + // markerOffset=-1*m + ry = -1 * ry; + texString += "\\node[" + arrowType + ", rotate=" + ahAngle + "] at (" + rx + "pt, " + ry + "pt) (INV_single_marker" + i + ") {};\n "; + } else { + ry = -1 * ry; + texString += "\\node[" + arrowType + ", rotate=" + ahAngle + "] at (" + rx + "pt, " + ry + "pt) (INV_marker" + i + ") {};\n "; + } + } + + + } + + + nodeElements.each(function ( node ){ + + px = node.x; + py = -node.y; + identifier = node.labelForCurrentLanguage(); + // console.log("Writing : "+ identifier); + if ( identifier === undefined ) identifier = ""; + var qType = "owlClass"; + if ( node.type() === "owl:Thing" || node.type() === "owl:Nothing" ) + qType = "owlThing"; + + if ( node.type() === "owl:equivalentClass" ) { + qType = "owlEquivalentClass"; + } + var textColorStr = ""; + if ( node.textBlock ) { + var txtColor = node.textBlock()._textBlock().style("fill"); + if ( txtColor === "rgb(0, 0, 0)" ) { + textColorStr = ", text=black"; + } + if ( txtColor === "rgb(255, 255, 255)" ) { + textColorStr = ", text=white"; + } + + + var tspans = node.textBlock()._textBlock().node().children; + if ( tspans[0] ) { + identifier = tspans[0].innerHTML; + if ( node.individuals() && node.individuals().length === parseInt(tspans[0].innerHTML) ) { + identifier = "{\\color{gray} " + tspans[0].innerHTML + " }"; + } + for ( var t = 1; t < tspans.length; t++ ) { + if ( node.individuals() && node.individuals().length === parseInt(tspans[t].innerHTML) ) { + identifier += "\\\\ {\\color{gray} " + tspans[t].innerHTML + " }"; + } else { + identifier += "\\\\ {\\small " + tspans[t].innerHTML + " }"; + } + } + } + } + if ( node.type() === "rdfs:Literal" ) { + qType = "Literal"; + } + if ( node.type() === "rdfs:Datatype" ) { + qType = "Datatype"; + } + if ( node.attributes().indexOf("anonymous") !== -1 ) { + qType = "anonymousClass"; + } + + + if ( node.type() === "owl:unionOf" || node.type() === "owl:complementOf" || node.type() === "owl:disjointUnionOf" || node.type() === "owl:intersectionOf" ) + qType = "owlClass"; + + var bgColorStr = ""; + var widthString = ""; + + if ( node.type() === "rdfs:Literal" || node.type() === "rdfs:Datatype" ) { + var width = node.width(); + widthString = ",minimum width=" + width + "pt"; + } + else { + widthString = ",minimum size=" + 2 * node.actualRadius() + "pt"; + + } + if ( node.backgroundColor() ) { + var bgColor = node.backgroundColor(); + bgColor.toUpperCase(); + bgColor = bgColor.slice(1, bgColor.length); + texString += "\\definecolor{Node" + i + "_COLOR}{HTML}{" + bgColor + "} \n "; + bgColorStr = ", fill=Node" + i + "_COLOR "; + } + if ( node.attributes().indexOf("deprecated") > -1 ) { + texString += "\\definecolor{Node" + i + "_COLOR}{HTML}{CCCCCC} \n "; + bgColorStr = ", fill=Node" + i + "_COLOR "; + } + + var leftPos = px - 7; + var rightPos = px + 7; + var txtOffset = py + 20; + if ( node.type() !== "owl:unionOf" || node.type() !== "owl:disjointUnionOf" ) { + texString += "\\node[" + qType + " " + widthString + " " + bgColorStr + " " + textColorStr + "] at (" + px + "pt, " + py + "pt) (Node" + i + ") {" + identifier.replaceAll("_", "\\_ ") + "};\n"; + } + if ( node.type() === "owl:unionOf" ) { + // add symbol to it; + texString += "\\node[" + qType + " " + widthString + " " + bgColorStr + " " + textColorStr + "] at (" + px + "pt, " + py + "pt) (Node" + i + ") {};\n"; + texString += "\\node[unionOf , text=black] at (" + leftPos + "pt, " + py + "pt) (SymbolNode" + i + ") {};\n"; + texString += "\\node[unionOf , text=black] at (" + rightPos + "pt, " + py + "pt) (SymbolNode" + i + ") {};\n"; + texString += "\\node[unionOf ,fill=none , text=black] at (" + leftPos + "pt, " + py + "pt) (SymbolNode" + i + ") {};\n"; + texString += "\\node[text=black] at (" + px + "pt, " + py + "pt) (unionText13) {$\\mathbf{\\cup}$};\n"; + texString += "\\node[font={\\fontsize{12pt}{12}\\selectfont \\sffamily }" + textColorStr + "] at (" + px + "pt, " + txtOffset + "pt) (Node_text" + i + ") {" + identifier.replaceAll("_", "\\_ ") + "};\n"; + } + // OWL DISJOINT UNION OF + if ( node.type() === "owl:disjointUnionOf" ) { + texString += "\\node[" + qType + " " + widthString + " " + bgColorStr + " " + textColorStr + "] at (" + px + "pt, " + py + "pt) (Node" + i + ") {};\n"; + texString += "\\node[unionOf , text=black] at (" + leftPos + "pt, " + py + "pt) (SymbolNode" + i + ") {};\n"; + texString += "\\node[unionOf , text=black] at (" + rightPos + "pt, " + py + "pt) (SymbolNode" + i + ") {};\n"; + texString += "\\node[unionOf ,fill=none , text=black] at (" + leftPos + "pt, " + py + "pt) (SymbolNode" + i + ") {};\n"; + texString += "\\node[font={\\fontsize{12pt}{12}\\selectfont \\sffamily }" + textColorStr + "] at (" + px + "pt, " + py + "pt) (disjointUnoinText" + i + ") {1};\n"; + texString += "\\node[font={\\fontsize{12pt}{12}\\selectfont \\sffamily }" + textColorStr + "] at (" + px + "pt, " + txtOffset + "pt) (Node_text" + i + ") {" + identifier.replaceAll("_", "\\_ ") + "};\n"; + } + // OWL COMPLEMENT OF + if ( node.type() === "owl:complementOf" ) { + // add symbol to it; + texString += "\\node[" + qType + " " + widthString + " " + bgColorStr + " " + textColorStr + "] at (" + px + "pt, " + py + "pt) (Node" + i + ") {};\n"; + texString += "\\node[unionOf , text=black] at (" + px + "pt, " + py + "pt) (SymbolNode" + i + ") {};\n"; + texString += "\\node[font={\\fontsize{18pt}{18}\\selectfont \\sffamily }" + textColorStr + "] at (" + px + "pt, " + py + "pt) (unionText13) {$\\neg$};\n"; + texString += "\\node[font={\\fontsize{12pt}{12}\\selectfont \\sffamily }" + textColorStr + "] at (" + px + "pt, " + txtOffset + "pt) (Node_text" + i + ") {" + identifier.replaceAll("_", "\\_ ") + "};\n"; + } + // OWL INTERSECTION OF + if ( node.type() === "owl:intersectionOf" ) { + texString += "\\node[" + qType + " " + widthString + " " + bgColorStr + " " + textColorStr + "] at (" + px + "pt, " + py + "pt) (Node" + i + ") {};\n"; + texString += "\\node[unionOf , text=black] at (" + leftPos + "pt, " + py + "pt) (SymbolNode" + i + ") {};\n"; + texString += "\\node[unionOf , text=black] at (" + rightPos + "pt, " + py + "pt) (SymbolNode" + i + ") {};\n"; + texString += "\\node[unionOf ,fill=none , text=black] at (" + leftPos + "pt, " + py + "pt) (SymbolNode" + i + ") {};\n"; + + // add now the outer colors; + texString += "\\filldraw[even odd rule,fill=owlClassColor,line width=1pt] (" + leftPos + "pt, " + py + "pt) circle (12.5pt) (" + rightPos + "pt, " + py + "pt) circle (12.5pt);\n "; + + // add texts + texString += "\\node[font={\\fontsize{12pt}{12}\\selectfont \\sffamily }" + textColorStr + "] at (" + px + "pt, " + py + "pt) (intersectionText" + i + ") {$\\cap$};\n"; + texString += "\\node[font={\\fontsize{12pt}{12}\\selectfont \\sffamily }" + textColorStr + "] at (" + px + "pt, " + txtOffset + "pt) (Node_text" + i + ") {" + identifier.replaceAll("_", "\\_ ") + "};\n"; + + } + + + i++; + + }); + for ( i = 0; i < propElements.length; i++ ) { + var correspondingProp = propElements[i].property(); + var p_px = propElements[i].x; + var p_py = -propElements[i].y; + identifier = correspondingProp.labelForCurrentLanguage(); + if ( identifier === undefined ) identifier = ""; + var textColorStr = ""; + if ( correspondingProp.textBlock && correspondingProp.textBlock() ) { + var txtColor = correspondingProp.textBlock()._textBlock().style("fill"); + // console.log("PropertyTextColor="+txtColor); + if ( txtColor === "rgb(0, 0, 0)" ) { + textColorStr = ", text=black"; + } + if ( txtColor === "rgb(255, 255, 255)" ) { + textColorStr = ", text=white"; + } + var tspans = correspondingProp.textBlock()._textBlock().node().children; + + // identifier=node.textBlock()._textBlock().text(); + // console.log(tspans); + if ( tspans[0] ) { + identifier = tspans[0].innerHTML; + + for ( var t = 1; t < tspans.length; t++ ) { + var spanText = tspans[t].innerHTML; + if ( spanText.indexOf("(") > -1 ) { + identifier += "\\\\ {\\small " + tspans[t].innerHTML + " }"; + } + else { + identifier += "\\\\ " + tspans[t].innerHTML; + } + } + } + else { + } + } + if ( correspondingProp.type() === "setOperatorProperty" ) { + continue; // this property does not have a label + } + var qType = "owlObjectProperty"; + if ( correspondingProp.type() === "owl:DatatypeProperty" ) { + qType = "owlDatatypeProperty"; + } + if ( correspondingProp.type() === "rdfs:subClassOf" ) { + qType = "rdfsSubClassOf"; + } + if ( correspondingProp.type() === "rdf:Property" ) { + qType = "rdfProperty"; + } + + + var bgColorStr = ""; + if ( correspondingProp.backgroundColor() ) { + // console.log("Found backGround color"); + var bgColor = correspondingProp.backgroundColor(); + //console.log(bgColor); + bgColor.toUpperCase(); + bgColor = bgColor.slice(1, bgColor.length); + texString += "\\definecolor{property" + i + "_COLOR}{HTML}{" + bgColor + "} \n "; + bgColorStr = ", fill=property" + i + "_COLOR "; + } + if ( correspondingProp.attributes().indexOf("deprecated") > -1 ) { + texString += "\\definecolor{property" + i + "_COLOR}{HTML}{CCCCCC} \n "; + bgColorStr = ", fill=property" + i + "_COLOR "; + } + + var widthString = ""; + var width = correspondingProp.textWidth(); + widthString = ",minimum width=" + width + "pt"; + + + // OWL INTERSECTION OF + if ( correspondingProp.type() === "owl:disjointWith" ) { + var leftPos = p_px - 12; + var rightPos = p_px + 12; + var txtOffset = p_py - 20; + texString += "\\node[" + qType + " " + widthString + " " + bgColorStr + " " + textColorStr + "] at (" + p_px + "pt, " + p_py + "pt) (Node" + i + ") {};\n"; + texString += "\\node[disjointWith , text=black] at (" + leftPos + "pt, " + p_py + "pt) (SymbolNode" + i + ") {};\n"; + texString += "\\node[disjointWith , text=black] at (" + rightPos + "pt, " + p_py + "pt) (SymbolNode" + i + ") {};\n"; + texString += "\\node[font={\\fontsize{12pt}{12}\\selectfont \\sffamily }" + textColorStr + "] at (" + p_px + "pt, " + txtOffset + "pt) (Node_text" + i + ") {"; + if ( graph.options().compactNotation() === false ) { + texString += "(disjoint)"; + } + texString += "};\n"; + continue; + } + + + if ( correspondingProp.inverse() ) { + var inv_correspondingProp = correspondingProp.inverse(); + // create the rendering element for the inverse property; + var inv_identifier = inv_correspondingProp.labelForCurrentLanguage(); + if ( inv_identifier === undefined ) inv_identifier = ""; + var inv_textColorStr = ""; + //console.log(inv_correspondingProp); + //console.log(inv_correspondingProp.textBlock()); + + if ( inv_correspondingProp.textBlock && inv_correspondingProp.textBlock() ) { + + var inv_txtColor = inv_correspondingProp.textBlock()._textBlock().style("fill"); + // console.log("PropertyTextColor="+inv_txtColor); + if ( inv_txtColor === "rgb(0, 0, 0)" ) { + inv_textColorStr = ", text=black"; + } + if ( inv_txtColor === "rgb(255, 255, 255)" ) { + inv_textColorStr = ", text=white"; + } + var inv_tspans = inv_correspondingProp.textBlock()._textBlock().node().children; + + // identifier=node.textBlock()._textBlock().text(); + // console.log(inv_tspans); + if ( inv_tspans[0] ) { + inv_identifier = inv_tspans[0].innerHTML; + + for ( var inv_t = 1; inv_t < inv_tspans.length; inv_t++ ) { + var ispanText = inv_tspans[inv_t].innerHTML; + if ( ispanText.indexOf("(") > -1 ) { + inv_identifier += "\\\\ {\\small " + inv_tspans[inv_t].innerHTML + " }"; + } else { + inv_identifier += "\\\\ " + inv_tspans[inv_t].innerHTML; + } + } + } + } + var inv_qType = "owlObjectProperty"; + var inv_bgColorStr = ""; + + if ( inv_correspondingProp.backgroundColor() ) { + // console.log("Found backGround color"); + var inv_bgColor = inv_correspondingProp.backgroundColor(); + // console.log(inv_bgColor); + inv_bgColor.toUpperCase(); + inv_bgColor = inv_bgColor.slice(1, inv_bgColor.length); + texString += "\\definecolor{inv_property" + i + "_COLOR}{HTML}{" + inv_bgColor + "} \n "; + inv_bgColorStr = ", fill=inv_property" + i + "_COLOR "; + } + if ( inv_correspondingProp.attributes().indexOf("deprecated") > -1 ) { + texString += "\\definecolor{inv_property" + i + "_COLOR}{HTML}{CCCCCC} \n "; + inv_bgColorStr = ", fill=inv_property" + i + "_COLOR "; + } + + var inv_widthString = ""; + var inv_width = inv_correspondingProp.textWidth(); + + var pOY1 = p_py - 14; + var pOY2 = p_py + 14; + inv_widthString = ",minimum width=" + inv_width + "pt"; + texString += "% Createing Inverse Property \n"; + texString += "\\node[" + inv_qType + " " + inv_widthString + " " + inv_bgColorStr + " " + inv_textColorStr + "] at (" + p_px + "pt, " + pOY1 + "pt) (property" + i + ") {" + inv_identifier.replaceAll("_", "\\_ ") + "};\n"; + texString += "% " + inv_qType + " vs " + qType + "\n"; + texString += "% " + inv_widthString + " vs " + widthString + "\n"; + texString += "% " + inv_bgColorStr + " vs " + bgColorStr + "\n"; + texString += "% " + inv_textColorStr + " vs " + textColorStr + "\n"; + + texString += "\\node[" + qType + " " + widthString + " " + bgColorStr + " " + textColorStr + "] at (" + p_px + "pt, " + pOY2 + "pt) (property" + i + ") {" + identifier.replaceAll("_", "\\_ ") + "};\n"; + + } else { + texString += "\\node[" + qType + " " + widthString + " " + bgColorStr + " " + textColorStr + "] at (" + p_px + "pt, " + p_py + "pt) (property" + i + ") {" + identifier.replaceAll("_", "\\_ ") + "};\n"; + } + } + + texString += "\\end{tikzpicture}\n}\n \\end{center}\n"; + + // console.log("Tex Output\n"+ texString); + var dataURI = "data:text/json;charset=utf-8," + encodeURIComponent(texString); + exportTexButton.attr("href", dataURI) + .attr("download", exportFilename + ".tex"); + + + } + + function calculateRadian( angle ){ + angle = angle % 360; + if ( angle < 0 ) { + angle = angle + 360; + } + return (Math.PI * angle) / 180; + } + + function calculateAngle( radian ){ + return radian * (180 / Math.PI); + } + + return exportMenu; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 324: +/***/ (function(module, exports) { + + /** + * Contains the logic for the export button. + * @returns {{}} + */ + module.exports = function ( graph ){ + var exportTTLModule = {}; + var resultingTTLContent = ""; + var currentNodes; + var currentProperties; + var currentAxioms; + var Map_ID2Node = {}; + var Map_ID2Prop = {}; + var prefixModule = webvowl.util.prefixTools(graph); + + exportTTLModule.requestExport = function (){ + prefixModule.updatePrefixModel(); + resultingTTLContent = ""; + currentNodes = graph.getClassDataForTtlExport(); + var i; + for ( i = 0; i < currentNodes.length; i++ ) { + Map_ID2Node[currentNodes[i].id()] = currentNodes[i]; + } + currentProperties = graph.getPropertyDataForTtlExport(); + + for ( i = 0; i < currentProperties.length; i++ ) { + Map_ID2Prop[currentProperties[i].id()] = currentProperties[i]; + } + + + prepareHeader(); + preparePrefixList(); + prepareOntologyDef(); + resultingTTLContent += "#################################################################\r\n\r\n"; + preparePrefixRepresentation(); + var property_success = exportProperties(); + var class_success = exportClasses(); + currentNodes = null; + currentProperties = null; + Map_ID2Node = {}; + Map_ID2Prop = {}; + if ( property_success === false || class_success === false ) + return false; + return true; + + }; + + function preparePrefixRepresentation(){ + var i; + var allNodes = graph.getUnfilteredData().nodes; + var allProps = graph.getUnfilteredData().properties; + for ( i = 0; i < allNodes.length; i++ ) { + var nodeIRI = prefixModule.getPrefixRepresentationForFullURI(allNodes[i].iri()); + if ( prefixModule.validURL(nodeIRI) === true ) + allNodes[i].prefixRepresentation = "<" + nodeIRI + ">"; + else + allNodes[i].prefixRepresentation = nodeIRI; + } + for ( i = 0; i < allProps.length; i++ ) { + var propIRI = prefixModule.getPrefixRepresentationForFullURI(allProps[i].iri()); + if ( prefixModule.validURL(propIRI) === true ) + allProps[i].prefixRepresentation = "<" + propIRI + ">"; + else + allProps[i].prefixRepresentation = propIRI; + } + } + + function exportProperties(){ + if ( currentProperties.length === 0 ) return; // we dont need to write that + resultingTTLContent += "### Property Definitions (Number of Property) " + currentProperties.length + " ###\r\n"; + for ( var i = 0; i < currentProperties.length; i++ ) { + + resultingTTLContent += "# --------------------------- Property " + i + "------------------------- \r\n"; + var addedElement = extractPropertyDescription(currentProperties[i]); + resultingTTLContent += addedElement; + //@ workaround for not supported elements + if ( addedElement.indexOf("WHYEMPTYNAME") !== -1 ) { + return false; + } + } + return true; + } + + + function exportClasses(){ + if ( currentNodes.length === 0 ) return; // we dont need to write that + resultingTTLContent += "### Class Definitions (Number of Classes) " + currentNodes.length + " ###\r\n"; + for ( var i = 0; i < currentNodes.length; i++ ) { + // check for node type here and return false + resultingTTLContent += "# --------------------------- Class " + i + "------------------------- \r\n"; + var addedElement = extractClassDescription(currentNodes[i]); + resultingTTLContent += addedElement; + + if ( addedElement.indexOf("WHYEMPTYNAME") !== -1 ) { + return false; + } + } + return true; + } + + function getPresentAttribute( selectedElement, element ){ + var attr = selectedElement.attributes(); + return (attr.indexOf(element) >= 0); + } + + function extractClassDescription( node ){ + var subject = node.prefixRepresentation; + var predicate = "rdf:type"; + var object = node.type(); + if ( node.type() === "owl:equivalentClass" ) + object = "owl:Class"; + if ( node.type() === "owl:disjointUnionOf" ) + object = "owl:Class"; + if ( node.type() === "owl:unionOf" ) + object = "owl:Class"; + var arrayOfNodes = []; + var arrayOfUnionNodes = []; + + if ( node.union() ) { + var union = node.union(); + for ( var u = 0; u < union.length; u++ ) { + var u_node = Map_ID2Node[union[u]]; + arrayOfUnionNodes.push(u_node); + } + } + + if ( node.disjointUnion() ) { + var distUnion = node.disjointUnion(); + for ( var du = 0; du < distUnion.length; du++ ) { + var du_node = Map_ID2Node[distUnion[du]]; + arrayOfNodes.push(du_node); + } + } + + var objectDef = subject + " " + predicate + " " + object; + if ( getPresentAttribute(node, "deprecated") === true ) { + objectDef += ", owl:DeprecatedProperty"; + } + // equivalent class handeled using type itself! + + // check for equivalent classes; + var indent = getIndent(subject); + objectDef += "; \r\n"; + for ( var e = 0; e < node.equivalents().length; e++ ) { + var eqIRI = prefixModule.getPrefixRepresentationForFullURI(node.equivalents()[e].iri()); + var eqNode_prefRepresentation = ""; + if ( prefixModule.validURL(eqIRI) === true ) + eqNode_prefRepresentation = "<" + eqIRI + ">"; + else + eqNode_prefRepresentation = eqIRI; + objectDef += indent + " owl:equivalentClass " + eqNode_prefRepresentation + " ;\r\n"; + } + + // if (getPresentAttribute(node,"equivalent")===true){ + // objectDef+=", owl:EquivalentClass"; + // } + + // add Comments + + if ( node.commentForCurrentLanguage() ) { + + objectDef += indent + " rdfs:comment \"" + node.commentForCurrentLanguage() + "\" ;\r\n"; + } + + if ( node.annotations() ) { + var annotations = node.annotations(); + for ( var an in annotations ) { + if ( annotations.hasOwnProperty(an) ) { + var anArrayObj = annotations[an]; + var anObj = anArrayObj[0]; + var an_ident = anObj.identifier; + var an_val = anObj.value; + + if ( an_ident === "isDefinedBy" ) { + objectDef += indent + " rdfs:isDefinedBy <" + an_val + "> ;\r\n"; + } + if ( an_ident === "term_status" ) { + objectDef += indent + " vs:term_status \"" + an_val + "\" ;\r\n"; + } + } + } + } + + + if ( arrayOfNodes.length > 0 ) { + // add disjoint unionOf + objectDef += indent + " owl:disjointUnionOf ("; + for ( var duE = 0; duE < arrayOfNodes.length; duE++ ) { + var duIri = prefixModule.getPrefixRepresentationForFullURI(arrayOfNodes[duE].iri()); + var duNode_prefRepresentation = ""; + if ( prefixModule.validURL(duIri) === true ) + duNode_prefRepresentation = "<" + duIri + ">"; + else + duNode_prefRepresentation = duIri; + objectDef += indent + indent + duNode_prefRepresentation + " \n"; + } + objectDef += ") ;\r\n"; + } + + if ( arrayOfUnionNodes.length > 0 ) { + // add disjoint unionOf + objectDef += indent + " rdfs:subClassOf [ rdf:type owl:Class ; \r\n"; + objectDef += indent + indent + " owl:unionOf ( "; + + for ( var uE = 0; uE < arrayOfUnionNodes.length; uE++ ) { + + if ( arrayOfUnionNodes[uE] && arrayOfUnionNodes[uE].iri() ) { + var uIri = prefixModule.getPrefixRepresentationForFullURI(arrayOfUnionNodes[uE].iri()); + var uNode_prefRepresentation = ""; + if ( prefixModule.validURL(uIri) === true ) + uNode_prefRepresentation = "<" + uIri + ">"; + else + uNode_prefRepresentation = uIri; + objectDef += indent + indent + indent + uNode_prefRepresentation + " \n"; + } + } + objectDef += ") ;\r\n"; + + + } + + + var allProps = graph.getUnfilteredData().properties; + var myProperties = []; + var i; + for ( i = 0; i < allProps.length; i++ ) { + if ( allProps[i].domain() === node && + ( allProps[i].type() === "rdfs:subClassOf" || + allProps[i].type() === "owl:allValuesFrom" || + allProps[i].type() === "owl:someValuesFrom") + ) { + myProperties.push(allProps[i]); + } + // special case disjoint with>> both domain and range get that property + if ( (allProps[i].domain() === node) && + allProps[i].type() === "owl:disjointWith" ) { + myProperties.push(allProps[i]); + } + + } + for ( i = 0; i < myProperties.length; i++ ) { + // depending on the property we have to do some things; + + // special case + if ( myProperties[i].type() === "owl:someValuesFrom" ) { + objectDef += indent + " rdfs:subClassOf [ rdf:type owl:Restriction ; \r\n"; + objectDef += indent + " owl:onProperty " + myProperties[i].prefixRepresentation + ";\r\n"; + if ( myProperties[i].range().type() !== "owl:Thing" ) { + objectDef += indent + " owl:someValuesFrom " + myProperties[i].range().prefixRepresentation + "\r\n"; + } + objectDef += indent + " ];\r\n"; + continue; + } + + if ( myProperties[i].type() === "owl:allValuesFrom" ) { + objectDef += indent + " rdfs:subClassOf [ rdf:type owl:Restriction ; \r\n"; + objectDef += indent + " owl:onProperty " + myProperties[i].prefixRepresentation + ";\r\n"; + if ( myProperties[i].range().type() !== "owl:Thing" ) { + objectDef += indent + " owl:allValuesFrom " + myProperties[i].range().prefixRepresentation + "\r\n"; + } + objectDef += indent + " ];\r\n"; + continue; + } + + if ( myProperties[i].range().type() !== "owl:Thing" ) { + objectDef += indent + " " + myProperties[i].prefixRepresentation + + " " + myProperties[i].range().prefixRepresentation + " ;\r\n"; + + + } + } + + + objectDef += general_Label_languageExtractor(indent, node.label(), "rdfs:label", true); + return objectDef; + + } + + function extractPropertyDescription( property ){ + var subject = property.prefixRepresentation; + if ( subject.length === 0 ) { + console.log("THIS SHOULD NOT HAPPEN"); + var propIRI = prefixModule.getPrefixRepresentationForFullURI(property.iri()); + console.log("FOUND " + propIRI); + + + } + var predicate = "rdf:type"; + var object = property.type(); + + var objectDef = subject + " " + predicate + " " + object; + if ( getPresentAttribute(property, "deprecated") === true ) { + objectDef += ", owl:DeprecatedProperty"; + } + if ( getPresentAttribute(property, "functional") === true ) { + objectDef += ", owl:FunctionalProperty"; + } + if ( getPresentAttribute(property, "inverse functional") === true ) { + objectDef += ", owl:InverseFunctionalProperty"; + } + if ( getPresentAttribute(property, "symmetric") === true ) { + objectDef += ", owl:SymmetricProperty"; + } + if ( getPresentAttribute(property, "transitive") === true ) { + objectDef += ", owl:TransitiveProperty"; + } + var indent = getIndent(subject); + + if ( property.inverse() ) { + objectDef += "; \r\n"; + objectDef += indent + " owl:inverseOf " + property.inverse().prefixRepresentation; + } + + // check for domain and range; + + + var closeStatement = false; + var domain = property.domain(); + var range = property.range(); + + + objectDef += " ;\r\n"; + + + if ( property.commentForCurrentLanguage() ) { + + objectDef += indent + " rdfs:comment \"" + property.commentForCurrentLanguage() + "\" ;\r\n"; + } + + if ( property.superproperties() ) { + var superProps = property.superproperties(); + for ( var sP = 0; sP < superProps.length; sP++ ) { + var sPelement = superProps[sP]; + objectDef += indent + "rdfs:subPropertyOf " + sPelement.prefixRepresentation + ";\r\n"; + } + // for (var an in annotations){ + // if (annotations.hasOwnProperty(an)){ + // var anArrayObj=annotations[an]; + // var anObj=anArrayObj[0]; + // var an_ident=anObj.identifier; + // var an_val=anObj.value; + // console.log(an_ident + " "+ an_val); + // + // if (an_ident==="isDefinedBy"){ + // objectDef+=indent+" rdfs:isDefinedBy <"+an_val+"> ;\r\n"; + // } + // if (an_ident==="term_status"){ + // objectDef+=indent+" vs:term_status \""+an_val+"\" ;\r\n"; + // } + // } + // } + + } + + if ( property.annotations() ) { + var annotations = property.annotations(); + for ( var an in annotations ) { + if ( annotations.hasOwnProperty(an) ) { + var anArrayObj = annotations[an]; + var anObj = anArrayObj[0]; + var an_ident = anObj.identifier; + var an_val = anObj.value; + + if ( an_ident === "isDefinedBy" ) { + objectDef += indent + " rdfs:isDefinedBy <" + an_val + "> ;\r\n"; + } + if ( an_ident === "term_status" ) { + objectDef += indent + " vs:term_status \"" + an_val + "\" ;\r\n"; + } + } + } + } + + + if ( domain.type() === "owl:Thing" && range.type() === "owl:Thing" ) { + // we do not write domain and range + if ( typeof property.label() !== "object" && property.label().length === 0 ) { + closeStatement = true; + } + } + + + if ( closeStatement === true ) { + var uobjectDef = objectDef.substring(0, objectDef.length - 2); + objectDef = uobjectDef + " . \r\n"; + return objectDef; + } + // objectDef+="; \r\n"; + var labelDescription; + + + if ( domain.type() === "owl:Thing" && range.type() === "owl:Thing" ) { + labelDescription = general_Label_languageExtractor(indent, property.label(), "rdfs:label", true); + objectDef += labelDescription; + } + else { + // do not close the statement; + labelDescription = general_Label_languageExtractor(indent, property.label(), "rdfs:label"); + objectDef += labelDescription; + if ( domain.type() !== "owl:Thing" ) { + objectDef += indent + " rdfs:domain " + domain.prefixRepresentation + ";\r\n"; + } + if ( range.type() !== "owl:Thing" ) { + objectDef += indent + " rdfs:range " + range.prefixRepresentation + ";\r\n"; + } + + // close statement now; + + var s_needUpdate = objectDef; + var s_lastPtr = s_needUpdate.lastIndexOf(";"); + objectDef = s_needUpdate.substring(0, s_lastPtr) + " . \r\n"; + } + + return objectDef; + + } + + + exportTTLModule.resultingTTL_Content = function (){ + return resultingTTLContent; + }; + + function getIndent( name ){ + if ( name === undefined ) { + return "WHYEMPTYNAME?"; + } + return new Array(name.length + 1).join(" "); + } + + function prepareHeader(){ + resultingTTLContent += "#################################################################\r\n"; + resultingTTLContent += "### Generated with the experimental alpha version of the TTL exporter of WebVOWL (version 1.1.7) " + + " http://visualdataweb.de/webvowl/ ###\r\n"; + resultingTTLContent += "#################################################################\r\n\r\n"; + + } + + function preparePrefixList(){ + var ontoIri = graph.options().getGeneralMetaObjectProperty('iri'); + var prefixList = graph.options().prefixList(); + var prefixDef = []; + prefixDef.push('@prefix : \t\t<' + ontoIri + '> .'); + for ( var name in prefixList ) { + if ( prefixList.hasOwnProperty(name) ) { + prefixDef.push('@prefix ' + name + ': \t\t<' + prefixList[name] + '> .'); + } + } + prefixDef.push('@base \t\t\t<' + ontoIri + '> .\r\n'); + + for ( var i = 0; i < prefixDef.length; i++ ) { + resultingTTLContent += prefixDef[i] + '\r\n'; + } + } + + function prepareOntologyDef(){ + var ontoIri = graph.options().getGeneralMetaObjectProperty('iri'); + var indent = getIndent('<' + ontoIri + '>'); + resultingTTLContent += '<' + ontoIri + '> rdf:type owl:Ontology ;\r\n' + + getOntologyTitle(indent) + + getOntologyDescription(indent) + + getOntologyVersion(indent) + + getOntologyAuthor(indent); + + // close the statement; + var s_needUpdate = resultingTTLContent; + var s_lastPtr = s_needUpdate.lastIndexOf(";"); + resultingTTLContent = s_needUpdate.substring(0, s_lastPtr) + " . \r\n"; + } + + function getOntologyTitle( indent ){ + return general_languageExtractor(indent, "title", "dc:title"); + } + + function getOntologyDescription( indent ){ + return general_languageExtractor(indent, "description", "dc:description"); + } + + function getOntologyAuthor( indent ){ + var languageElement = graph.options().getGeneralMetaObjectProperty('author'); + if ( languageElement ) { + if ( typeof languageElement !== "object" ) { + if ( languageElement.length === 0 ) + return ""; // an empty string + var aString = indent + " dc:creator " + '"' + languageElement + '";\r\n'; + return aString; + } + // we assume this thing is an array; + var authorString = indent + " dc:creator " + '"'; + for ( var i = 0; i < languageElement.length - 1; i++ ) { + authorString += languageElement[i] + ", "; + } + authorString += languageElement[languageElement.length - 1] + '";\r\n'; + return authorString; + } else { + return ""; // an empty string + } + } + + function getOntologyVersion( indent ){ + var languageElement = graph.options().getGeneralMetaObjectProperty('version'); + if ( languageElement ) { + if ( typeof languageElement !== "object" ) { + if ( languageElement.length === 0 ) + return ""; // an empty string + } + return general_languageExtractor(indent, "version", "owl:versionInfo"); + } else return ""; // an empty string + } + + function general_languageExtractor( indent, metaObjectDescription, annotationDescription, endStatement ){ + var languageElement = graph.options().getGeneralMetaObjectProperty(metaObjectDescription); + + if ( typeof languageElement === 'object' ) { + + var resultingLanguages = []; + for ( var name in languageElement ) { + if ( languageElement.hasOwnProperty(name) ) { + var content = languageElement[name]; + if ( name === "undefined" ) { + resultingLanguages.push(indent + " " + annotationDescription + ' "' + content + '"@en; \r\n'); + } + else { + resultingLanguages.push(indent + " " + annotationDescription + ' "' + content + '"@' + name + '; \r\n'); + } + } + } + // create resulting titles; + + var resultingString = ""; + for ( var i = 0; i < resultingLanguages.length; i++ ) { + resultingString += resultingLanguages[i]; + } + if ( endStatement && endStatement === true ) { + var needUpdate = resultingString; + var lastPtr = needUpdate.lastIndexOf(";"); + return needUpdate.substring(0, lastPtr) + ". \r\n"; + } else { + return resultingString; + } + + } else { + if ( endStatement && endStatement === true ) { + var s_needUpdate = indent + " " + annotationDescription + ' "' + languageElement + '"@en; \r\n'; + var s_lastPtr = s_needUpdate.lastIndexOf(";"); + return s_needUpdate.substring(0, s_lastPtr) + " . \r\n"; + } + return indent + " " + annotationDescription + ' "' + languageElement + '"@en;\r\n'; + } + } + + function general_Label_languageExtractor( indent, label, annotationDescription, endStatement ){ + var languageElement = label; + + if ( typeof languageElement === 'object' ) { + var resultingLanguages = []; + for ( var name in languageElement ) { + if ( languageElement.hasOwnProperty(name) ) { + var content = languageElement[name]; + if ( name === "undefined" ) { + resultingLanguages.push(indent + " " + annotationDescription + ' "' + content + '"@en; \r\n'); + } + else { + resultingLanguages.push(indent + " " + annotationDescription + ' "' + content + '"@' + name + '; \r\n'); + } + } + } + // create resulting titles; + var resultingString = ""; + for ( var i = 0; i < resultingLanguages.length; i++ ) { + resultingString += resultingLanguages[i]; + } + if ( endStatement && endStatement === true ) { + var needUpdate = resultingString; + var lastPtr = needUpdate.lastIndexOf(";"); + return needUpdate.substring(0, lastPtr) + " . \r\n"; + } else { + return resultingString; + } + + } else { + if ( endStatement && endStatement === true ) { + var s_needUpdate = indent + " " + annotationDescription + ' "' + languageElement + '"@en; \r\n'; + var s_lastPtr = s_needUpdate.lastIndexOf(";"); + return s_needUpdate.substring(0, s_lastPtr) + " . \r\n"; + } + return indent + " " + annotationDescription + ' "' + languageElement + '"@en; \r\n'; + } + } + + return exportTTLModule; + }; + + +/***/ }), + +/***/ 325: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains the logic for connecting the filters with the website. + * + * @param graph required for calling a refresh after a filter change + * @returns {{}} + */ + module.exports = function ( graph ){ + + var filterMenu = {}, + checkboxData = [], + menuElement = d3.select("#m_filter"), + menuControl = d3.select("#c_filter a"), + nodeDegreeContainer = d3.select("#nodeDegreeFilteringOption"), + graphDegreeLevel, + defaultDegreeValue = 0, + degreeSlider; + + filterMenu.setDefaultDegreeValue = function ( val ){ + defaultDegreeValue = val; + }; + filterMenu.getDefaultDegreeValue = function (){ + return defaultDegreeValue; + }; + + filterMenu.getGraphObject = function (){ + return graph; + }; + /** some getter function **/ + filterMenu.getCheckBoxContainer = function (){ + return checkboxData; + }; + + filterMenu.getDegreeSliderValue = function (){ + return degreeSlider.property("value"); + }; + /** + * Connects the website with graph filters. + * @param datatypeFilter filter for all datatypes + * @param objectPropertyFilter filter for all object properties + * @param subclassFilter filter for all subclasses + * @param disjointFilter filter for all disjoint with properties + * @param setOperatorFilter filter for all set operators with properties + * @param nodeDegreeFilter filters nodes by their degree + */ + filterMenu.setup = function ( datatypeFilter, objectPropertyFilter, subclassFilter, disjointFilter, setOperatorFilter, nodeDegreeFilter ){ + // TODO: is this here really necessarry? << new menu visualization style? + menuControl.on("mouseover", function (){ + var searchMenu = graph.options().searchMenu(); + searchMenu.hideSearchEntries(); + }); + menuControl.on("mouseleave", function (){ + filterMenu.highlightForDegreeSlider(false); + }); + + addFilterItem(datatypeFilter, "datatype", "Datatype properties", "#datatypeFilteringOption"); + addFilterItem(objectPropertyFilter, "objectProperty", "Object properties", "#objectPropertyFilteringOption"); + addFilterItem(subclassFilter, "subclass", "Solitary subclasses", "#subclassFilteringOption"); + addFilterItem(disjointFilter, "disjoint", "Class disjointness", "#disjointFilteringOption"); + addFilterItem(setOperatorFilter, "setoperator", "Set operators", "#setOperatorFilteringOption"); + + addNodeDegreeFilter(nodeDegreeFilter, nodeDegreeContainer); + addAnimationFinishedListener(); + }; + + + function addFilterItem( filter, identifier, pluralNameOfFilteredItems, selector ){ + var filterContainer, + filterCheckbox; + + filterContainer = d3.select(selector) + .append("div") + .classed("checkboxContainer", true); + + filterCheckbox = filterContainer.append("input") + .classed("filterCheckbox", true) + .attr("id", identifier + "FilterCheckbox") + .attr("type", "checkbox") + .property("checked", filter.enabled()); + + // Store for easier resetting + checkboxData.push({ checkbox: filterCheckbox, defaultState: filter.enabled() }); + + filterCheckbox.on("click", function ( silent ){ + // There might be no parameters passed because of a manual + // invocation when resetting the filters + var isEnabled = filterCheckbox.property("checked"); + filter.enabled(isEnabled); + if ( silent !== true ) { + // updating graph when silent is false or the parameter is not given. + graph.update(); + } + }); + + filterContainer.append("label") + .attr("for", identifier + "FilterCheckbox") + .text(pluralNameOfFilteredItems); + } + + function addNodeDegreeFilter( nodeDegreeFilter, container ){ + nodeDegreeFilter.setMaxDegreeSetter(function ( maxDegree ){ + degreeSlider.attr("max", maxDegree); + setSliderValue(degreeSlider, Math.min(maxDegree, degreeSlider.property("value"))); + }); + + nodeDegreeFilter.setDegreeGetter(function (){ + return degreeSlider.property("value"); + }); + + nodeDegreeFilter.setDegreeSetter(function ( value ){ + setSliderValue(degreeSlider, value); + }); + + var sliderContainer, + sliderValueLabel; + + sliderContainer = container.append("div") + .classed("distanceSliderContainer", true); + + degreeSlider = sliderContainer.append("input") + .attr("id", "nodeDegreeDistanceSlider") + .attr("type", "range") + .attr("min", 0) + .attr("step", 1); + + sliderContainer.append("label") + .classed("description", true) + .attr("for", "nodeDegreeDistanceSlider") + .text("Degree of collapsing"); + + sliderValueLabel = sliderContainer.append("label") + .classed("value", true) + .attr("for", "nodeDegreeDistanceSlider") + .text(0); + + + degreeSlider.on("change", function ( silent ){ + if ( silent !== true ) { + graph.update(); + graphDegreeLevel = degreeSlider.property("value"); + } + }); + + + degreeSlider.on("input", function (){ + var degree = degreeSlider.property("value"); + sliderValueLabel.text(degree); + }); + + + // adding wheel events + degreeSlider.on("wheel", handleWheelEvent); + degreeSlider.on("focusout", function (){ + if ( degreeSlider.property("value") !== graphDegreeLevel ) { + graph.update(); + } + }); + } + + function handleWheelEvent(){ + var wheelEvent = d3.event; + + var offset; + if ( wheelEvent.deltaY < 0 ) offset = 1; + if ( wheelEvent.deltaY > 0 ) offset = -1; + var maxDeg = parseInt(degreeSlider.attr("max")); + var oldVal = parseInt(degreeSlider.property("value")); + var newSliderValue = oldVal + offset; + if ( oldVal !== newSliderValue && (newSliderValue >= 0 && newSliderValue <= maxDeg) ) { + // only update when they are different [reducing redundant updates] + // set the new value and emit an update signal + degreeSlider.property("value", newSliderValue); + degreeSlider.on("input")();// <<-- sets the text value + graph.update(); + } + d3.event.preventDefault(); + } + + function setSliderValue( slider, value ){ + slider.property("value", value).on("input")(); + } + + /** + * Resets the filters (and also filtered elements) to their default. + */ + filterMenu.reset = function (){ + checkboxData.forEach(function ( checkboxData ){ + var checkbox = checkboxData.checkbox, + enabledByDefault = checkboxData.defaultState, + isChecked = checkbox.property("checked"); + + if ( isChecked !== enabledByDefault ) { + checkbox.property("checked", enabledByDefault); + // Call onclick event handlers programmatically + checkbox.on("click")(); + } + }); + + setSliderValue(degreeSlider, 0); + degreeSlider.on("change")(); + }; + + function addAnimationFinishedListener(){ + menuControl.node().addEventListener("animationend", function (){ + menuControl.classed("buttonPulse", false); + menuControl.classed("filterMenuButtonHighlight", true); + + }); + } + + filterMenu.killButtonAnimation = function (){ + menuControl.classed("buttonPulse", false); + menuControl.classed("filterMenuButtonHighlight", false); + }; + + + filterMenu.highlightForDegreeSlider = function ( enable ){ + if ( !arguments.length ) { + enable = true; + } + menuControl.classed("highlighted", enable); + nodeDegreeContainer.classed("highlighted", enable); + // pulse button handling + if ( menuControl.classed("buttonPulse") === true && enable === true ) { + menuControl.classed("buttonPulse", false); + var timer = setTimeout(function (){ + menuControl.classed("buttonPulse", enable); + clearTimeout(timer); + // after the time is done, remove the pulse but stay highlighted + }, 100); + } else { + menuControl.classed("buttonPulse", enable); + menuControl.classed("filterMenuButtonHighlight", enable); + } + }; + + + /** importer functions **/ + // setting manually the values of the filter + // no update of the gui settings, these are updated in updateSettings + filterMenu.setCheckBoxValue = function ( id, checked ){ + for ( var i = 0; i < checkboxData.length; i++ ) { + var cbdId = checkboxData[i].checkbox.attr("id"); + if ( cbdId === id ) { + checkboxData[i].checkbox.property("checked", checked); + break; + } + } + }; + + filterMenu.getCheckBoxValue = function ( id ){ + for ( var i = 0; i < checkboxData.length; i++ ) { + var cbdId = checkboxData[i].checkbox.attr("id"); + if ( cbdId === id ) { + return checkboxData[i].checkbox.property("checked"); + + } + } + }; + // set the value of the slider + filterMenu.setDegreeSliderValue = function ( val ){ + degreeSlider.property("value", val); + }; + + filterMenu.getDegreeSliderValue = function (){ + return degreeSlider.property("value"); + }; + + // update the gui without invoking graph update (calling silent onclick function) + filterMenu.updateSettings = function (){ + var silent = true; + var sliderValue = degreeSlider.property("value"); + if ( sliderValue > 0 ) { + filterMenu.highlightForDegreeSlider(true); + } else { + filterMenu.highlightForDegreeSlider(false); + } + checkboxData.forEach(function ( checkboxData ){ + var checkbox = checkboxData.checkbox; + checkbox.on("click")(silent); + }); + + degreeSlider.on("input")(); + degreeSlider.on("change")(); + + }; + + return filterMenu; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 326: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains the logic for setting up the gravity sliders. + * + * @param graph the associated webvowl graph + * @returns {{}} + */ + module.exports = function ( graph ){ + + var gravityMenu = {}, + sliders = [], + options = graph.graphOptions(), + defaultCharge = options.charge(); + + + /** + * Adds the gravity sliders to the website. + */ + gravityMenu.setup = function (){ + var menuEntry = d3.select("#m_gravity"); + menuEntry.on("mouseover", function (){ + var searchMenu = graph.options().searchMenu(); + searchMenu.hideSearchEntries(); + }); + addDistanceSlider("#classSliderOption", "class", "Class distance", options.classDistance); + addDistanceSlider("#datatypeSliderOption", "datatype", "Datatype distance", options.datatypeDistance); + }; + + function addDistanceSlider( selector, identifier, label, distanceFunction ){ + var defaultLinkDistance = distanceFunction(); + + var sliderContainer, + sliderValueLabel; + + sliderContainer = d3.select(selector) + .append("div") + .datum({ distanceFunction: distanceFunction }) // connect the options-function with the slider + .classed("distanceSliderContainer", true); + + var slider = sliderContainer.append("input") + .attr("id", identifier + "DistanceSlider") + .attr("type", "range") + .attr("min", 10) + .attr("max", 600) + .attr("value", distanceFunction()) + .attr("step", 10); + + sliderContainer.append("label") + .classed("description", true) + .attr("for", identifier + "DistanceSlider") + .text(label); + + sliderValueLabel = sliderContainer.append("label") + .classed("value", true) + .attr("for", identifier + "DistanceSlider") + .text(distanceFunction()); + + // Store slider for easier resetting + sliders.push(slider); + + slider.on("focusout", function (){ + graph.updateStyle(); + }); + + slider.on("input", function (){ + var distance = slider.property("value"); + distanceFunction(distance); + adjustCharge(defaultLinkDistance); + sliderValueLabel.text(distance); + graph.updateStyle(); + }); + + // add wheel event to the slider + slider.on("wheel", function (){ + var wheelEvent = d3.event; + var offset; + if ( wheelEvent.deltaY < 0 ) offset = 10; + if ( wheelEvent.deltaY > 0 ) offset = -10; + var oldVal = parseInt(slider.property("value")); + var newSliderValue = oldVal + offset; + if ( newSliderValue !== oldVal ) { + slider.property("value", newSliderValue); + distanceFunction(newSliderValue); + slider.on("input")(); // << set text and update the graphStyles + } + d3.event.preventDefault(); + }); + } + + function adjustCharge( defaultLinkDistance ){ + var greaterDistance = Math.max(options.classDistance(), options.datatypeDistance()), + ratio = greaterDistance / defaultLinkDistance, + newCharge = defaultCharge * ratio; + + options.charge(newCharge); + } + + /** + * Resets the gravity sliders to their default. + */ + gravityMenu.reset = function (){ + sliders.forEach(function ( slider ){ + slider.property("value", function ( d ){ + // Simply reload the distance from the options + return d.distanceFunction(); + }); + slider.on("input")(); + }); + }; + + + return gravityMenu; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 327: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains the logic for connecting the modes with the website. + * + * @param graph the graph that belongs to these controls + * @returns {{}} + */ + module.exports = function ( graph ){ + + var SAME_COLOR_MODE = { text: "Multicolor", type: "same" }; + var GRADIENT_COLOR_MODE = { text: "Multicolor", type: "gradient" }; + + var modeMenu = {}, + checkboxes = [], + colorModeSwitch; + + var dynamicLabelWidthCheckBox; + // getter and setter for the state of color modes + modeMenu.colorModeState = function ( s ){ + if ( !arguments.length ) return colorModeSwitch.datum().active; + colorModeSwitch.datum().active = s; + return modeMenu; + }; + + + modeMenu.setDynamicLabelWidth = function ( val ){ + dynamicLabelWidthCheckBox.property("checked", val); + }; + // getter for checkboxes + modeMenu.getCheckBoxContainer = function (){ + return checkboxes; + }; + // getter for the color switch [needed? ] + modeMenu.colorModeSwitch = function (){ + return colorModeSwitch; + }; + + /** + * Connects the website with the available graph modes. + */ + modeMenu.setup = function ( pickAndPin, nodeScaling, compactNotation, colorExternals ){ + var menuEntry = d3.select("#m_modes"); + menuEntry.on("mouseover", function (){ + var searchMenu = graph.options().searchMenu(); + searchMenu.hideSearchEntries(); + }); + addCheckBoxD("labelWidth", "Dynamic label width", "#dynamicLabelWidth", graph.options().dynamicLabelWidth, 1); + addCheckBox("editorMode", "Editing ", "#editMode", graph.editorMode); + addModeItem(pickAndPin, "pickandpin", "Pick & pin", "#pickAndPinOption", false); + addModeItem(nodeScaling, "nodescaling", "Node scaling", "#nodeScalingOption", true); + addModeItem(compactNotation, "compactnotation", "Compact notation", "#compactNotationOption", true); + var container = addModeItem(colorExternals, "colorexternals", "Color externals", "#colorExternalsOption", true); + colorModeSwitch = addExternalModeSelection(container, colorExternals); + }; + function addCheckBoxD( identifier, modeName, selector, onChangeFunc, updateLvl ){ + var moduleOptionContainer = d3.select(selector) + .append("div") + .classed("checkboxContainer", true); + + var moduleCheckbox = moduleOptionContainer.append("input") + .classed("moduleCheckbox", true) + .attr("id", identifier + "ModuleCheckbox") + .attr("type", "checkbox") + .property("checked", onChangeFunc()); + + moduleCheckbox.on("click", function ( d ){ + var isEnabled = moduleCheckbox.property("checked"); + onChangeFunc(isEnabled); + d3.select("#maxLabelWidthSlider").node().disabled = !isEnabled; + d3.select("#maxLabelWidthvalueLabel").classed("disabledLabelForSlider", !isEnabled); + d3.select("#maxLabelWidthDescriptionLabel").classed("disabledLabelForSlider", !isEnabled); + + if ( updateLvl > 0 ) { + graph.animateDynamicLabelWidth(); + // graph.lazyRefresh(); + } + }); + moduleOptionContainer.append("label") + .attr("for", identifier + "ModuleCheckbox") + .text(modeName); + if ( identifier === "editorMode" ) { + moduleOptionContainer.append("label") + .attr("style", "font-size:10px;padding-top:3px") + .text("(experimental)"); + } + + dynamicLabelWidthCheckBox = moduleCheckbox; + } + + function addCheckBox( identifier, modeName, selector, onChangeFunc ){ + var moduleOptionContainer = d3.select(selector) + .append("div") + .classed("checkboxContainer", true); + + var moduleCheckbox = moduleOptionContainer.append("input") + .classed("moduleCheckbox", true) + .attr("id", identifier + "ModuleCheckbox") + .attr("type", "checkbox") + .property("checked", onChangeFunc()); + + moduleCheckbox.on("click", function ( d ){ + var isEnabled = moduleCheckbox.property("checked"); + onChangeFunc(isEnabled); + if ( isEnabled === true ) + graph.showEditorHintIfNeeded(); + }); + moduleOptionContainer.append("label") + .attr("for", identifier + "ModuleCheckbox") + .text(modeName); + if ( identifier === "editorMode" ) { + moduleOptionContainer.append("label") + .attr("style", "font-size:10px;padding-top:3px") + .text(" (experimental)"); + } + } + + function addModeItem( module, identifier, modeName, selector, updateGraphOnClick ){ + var moduleOptionContainer, + moduleCheckbox; + + moduleOptionContainer = d3.select(selector) + .append("div") + .classed("checkboxContainer", true) + .datum({ module: module, defaultState: module.enabled() }); + + moduleCheckbox = moduleOptionContainer.append("input") + .classed("moduleCheckbox", true) + .attr("id", identifier + "ModuleCheckbox") + .attr("type", "checkbox") + .property("checked", module.enabled()); + + // Store for easier resetting all modes + checkboxes.push(moduleCheckbox); + + moduleCheckbox.on("click", function ( d, silent ){ + var isEnabled = moduleCheckbox.property("checked"); + d.module.enabled(isEnabled); + if ( updateGraphOnClick && silent !== true ) { + graph.executeColorExternalsModule(); + graph.executeCompactNotationModule(); + graph.lazyRefresh(); + } + }); + + moduleOptionContainer.append("label") + .attr("for", identifier + "ModuleCheckbox") + .text(modeName); + + return moduleOptionContainer; + } + + function addExternalModeSelection( container, colorExternalsMode ){ + var button = container.append("button").datum({ active: false }).classed("color-mode-switch", true); + applyColorModeSwitchState(button, colorExternalsMode); + + button.on("click", function ( silent ){ + var data = button.datum(); + data.active = !data.active; + applyColorModeSwitchState(button, colorExternalsMode); + if ( colorExternalsMode.enabled() && silent !== true ) { + graph.executeColorExternalsModule(); + graph.lazyRefresh(); + } + }); + + return button; + } + + function applyColorModeSwitchState( element, colorExternalsMode ){ + var isActive = element.datum().active; + var activeColorMode = getColorModeByState(isActive); + + element.classed("active", isActive) + .text(activeColorMode.text); + + if ( colorExternalsMode ) { + colorExternalsMode.colorModeType(activeColorMode.type); + } + } + + function getColorModeByState( isActive ){ + return isActive ? GRADIENT_COLOR_MODE : SAME_COLOR_MODE; + } + + /** + * Resets the modes to their default. + */ + modeMenu.reset = function (){ + checkboxes.forEach(function ( checkbox ){ + var defaultState = checkbox.datum().defaultState, + isChecked = checkbox.property("checked"); + + if ( isChecked !== defaultState ) { + checkbox.property("checked", defaultState); + // Call onclick event handlers programmatically + checkbox.on("click")(checkbox.datum()); + } + + // Reset the module that is connected with the checkbox + checkbox.datum().module.reset(); + }); + + // set the switch to active and simulate disabling + colorModeSwitch.datum().active = true; + colorModeSwitch.on("click")(); + }; + + /** importer functions **/ + // setting manually the values of the filter + // no update of the gui settings, these are updated in updateSettings + modeMenu.setCheckBoxValue = function ( id, checked ){ + for ( var i = 0; i < checkboxes.length; i++ ) { + var cbdId = checkboxes[i].attr("id"); + + if ( cbdId === id ) { + checkboxes[i].property("checked", checked); + break; + } + } + }; + modeMenu.getCheckBoxValue = function ( id ){ + for ( var i = 0; i < checkboxes.length; i++ ) { + var cbdId = checkboxes[i].attr("id"); + if ( cbdId === id ) { + return checkboxes[i].property("checked"); + } + } + }; + + modeMenu.setColorSwitchState = function ( state ){ + // need the !state because we simulate later a click + modeMenu.colorModeState(!state); + }; + modeMenu.setColorSwitchStateUsingURL = function ( state ){ + // need the !state because we simulate later a click + modeMenu.colorModeState(!state); + colorModeSwitch.on("click")(true); + }; + + + modeMenu.updateSettingsUsingURL = function (){ + var silent = true; + checkboxes.forEach(function ( checkbox ){ + checkbox.on("click")(checkbox.datum(), silent); + }); + }; + + modeMenu.updateSettings = function (){ + var silent = true; + checkboxes.forEach(function ( checkbox ){ + checkbox.on("click")(checkbox.datum(), silent); + }); + // this simulates onclick and inverts its state + colorModeSwitch.on("click")(silent); + }; + return modeMenu; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 328: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {module.exports = function ( graph ){ + var debugMenu = {}, + checkboxes = []; + + + var hoverFlag = false; + var specialCbx; + debugMenu.setup = function (){ + var menuEntry = d3.select("#debugMenuHref"); + + menuEntry.on("mouseover", function (){ + if ( hoverFlag === false ) { + var searchMenu = graph.options().searchMenu(); + searchMenu.hideSearchEntries(); + specialCbx.on("click")(true); + if ( graph.editorMode() === false ) { + d3.select("#useAccuracyHelper").style("color", "#979797"); + d3.select("#useAccuracyHelper").style("pointer-events", "none"); + + // regardless the state on which useAccuracyHelper is , we are not in editing mode -> disable it + d3.select("#showDraggerObject").style("color", "#979797"); + d3.select("#showDraggerObject").style("pointer-events", "none"); + } else { + d3.select("#useAccuracyHelper").style("color", "#2980b9"); + d3.select("#useAccuracyHelper").style("pointer-events", "auto"); + } + hoverFlag = true; + } + }); + menuEntry.on("mouseout", function (){ + hoverFlag = false; + }); + + + specialCbx = addCheckBox("useAccuracyHelper", "Use accuracy helper", "#useAccuracyHelper", graph.options().useAccuracyHelper, + function ( enabled, silent ){ + if ( !enabled ) { + d3.select("#showDraggerObject").style("color", "#979797"); + d3.select("#showDraggerObject").style("pointer-events", "none"); + d3.select("#showDraggerObjectConfigCheckbox").node().checked = false; + } else { + d3.select("#showDraggerObject").style("color", "#2980b9"); + d3.select("#showDraggerObject").style("pointer-events", "auto"); + } + + if ( silent === true ) return; + graph.lazyRefresh(); + graph.updateDraggerElements(); + } + ); + addCheckBox("showDraggerObject", "Show accuracy helper", "#showDraggerObject", graph.options().showDraggerObject, + function ( enabled, silent ){ + if ( silent === true ) return; + graph.lazyRefresh(); + graph.updateDraggerElements(); + }); + addCheckBox("showFPS_Statistics", "Show rendering statistics", "#showFPS_Statistics", graph.options().showRenderingStatistic, + function ( enabled, silent ){ + + if ( graph.options().getHideDebugFeatures() === false ) { + d3.select("#FPS_Statistics").classed("hidden", !enabled); + } else { + d3.select("#FPS_Statistics").classed("hidden", true); + } + + + }); + addCheckBox("showModeOfOperation", "Show input modality", "#showModeOfOperation", graph.options().showInputModality, + function ( enabled ){ + if ( graph.options().getHideDebugFeatures() === false ) { + d3.select("#modeOfOperationString").classed("hidden", !enabled); + } else { + d3.select("#modeOfOperationString").classed("hidden", true); + } + }); + + + }; + + + function addCheckBox( identifier, modeName, selector, onChangeFunc, _callbackFunction ){ + var configOptionContainer = d3.select(selector) + .append("div") + .classed("checkboxContainer", true); + var configCheckbox = configOptionContainer.append("input") + .classed("moduleCheckbox", true) + .attr("id", identifier + "ConfigCheckbox") + .attr("type", "checkbox") + .property("checked", onChangeFunc()); + + + configCheckbox.on("click", function ( silent ){ + var isEnabled = configCheckbox.property("checked"); + onChangeFunc(isEnabled); + _callbackFunction(isEnabled, silent); + + }); + checkboxes.push(configCheckbox); + configOptionContainer.append("label") + .attr("for", identifier + "ConfigCheckbox") + .text(modeName); + + return configCheckbox; + } + + debugMenu.setCheckBoxValue = function ( identifier, value ){ + for ( var i = 0; i < checkboxes.length; i++ ) { + var cbdId = checkboxes[i].attr("id"); + if ( cbdId === identifier ) { + checkboxes[i].property("checked", value); + break; + } + } + }; + + debugMenu.getCheckBoxValue = function ( id ){ + for ( var i = 0; i < checkboxes.length; i++ ) { + var cbdId = checkboxes[i].attr("id"); + if ( cbdId === id ) { + return checkboxes[i].property("checked"); + } + } + }; + + debugMenu.updateSettings = function (){ + d3.selectAll(".debugOption").classed("hidden", graph.options().getHideDebugFeatures()); + + var silent = true; + checkboxes.forEach(function ( checkbox ){ + checkbox.on("click")(silent); + }); + if ( graph.editorMode() === false ) { + + d3.select("#useAccuracyHelper").style("color", "#979797"); + d3.select("#useAccuracyHelper").style("pointer-events", "none"); + + // regardless the state on which useAccuracyHelper is , we are not in editing mode -> disable it + d3.select("#showDraggerObject").style("color", "#979797"); + d3.select("#showDraggerObject").style("pointer-events", "none"); + } else { + + d3.select("#useAccuracyHelper").style("color", "#2980b9"); + d3.select("#useAccuracyHelper").style("pointer-events", "auto"); + } + + }; + + return debugMenu; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 329: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var unescape = __webpack_require__(330); + + module.exports = function ( graph ){ + + var ontologyMenu = {}, + loadingInfo = d3.select("#loading-info"), + loadingProgress = d3.select("#loading-progress"), + + ontologyMenuTimeout, + fileToLoad, + stopTimer = false, + loadingError = false, + loadingStatusTimer, + conversion_sessionId, + cachedConversions = {}, + loadingModule, + loadOntologyFromText; + var currentLoadedOntologyName = ""; + + String.prototype.beginsWith = function ( string ){ + return (this.indexOf(string) === 0); + }; + + ontologyMenu.getLoadingFunction = function (){ + return loadOntologyFromText; + }; + + ontologyMenu.clearCachedVersion = function (){ + if ( cachedConversions[currentLoadedOntologyName] ) { + cachedConversions[currentLoadedOntologyName] = undefined; + } + }; + + + ontologyMenu.reloadCachedOntology = function (){ + ontologyMenu.clearCachedVersion(); + graph.clearGraphData(); + loadingModule.parseUrlAndLoadOntology(false); + }; + + ontologyMenu.cachedOntology = function ( ontoName ){ + currentLoadedOntologyName = ontoName; + if ( cachedConversions[ontoName] ) { + var locStr = String(location.hash); + d3.select("#reloadSvgIcon").node().disabled = false; + graph.showReloadButtonAfterLayoutOptimization(true); + if ( locStr.indexOf("#file") > -1 ) { + d3.select("#reloadSvgIcon").node().disabled = true; + d3.select("#reloadCachedOntology").node().title = "reloading original version not possible, please reload the file"; + d3.select("#reloadSvgIcon").classed("disabledReloadElement", true); + d3.select("#svgStringText").style("fill", "gray"); + d3.select("#svgStringText").classed("noselect", true); + } + else { + d3.select("#reloadCachedOntology").node().title = "generate new visualization and overwrite cached ontology"; + d3.select("#reloadSvgIcon").classed("disabledReloadElement", false); + d3.select("#svgStringText").style("fill", "black"); + d3.select("#svgStringText").classed("noselect", true); + } + } else { + graph.showReloadButtonAfterLayoutOptimization(false); + + } + return cachedConversions[ontoName]; + }; + ontologyMenu.setCachedOntology = function ( ontoName, ontoContent ){ + cachedConversions[ontoName] = ontoContent; + currentLoadedOntologyName = ontoName; + }; + + ontologyMenu.getErrorStatus = function (){ + return loadingError; + }; + + ontologyMenu.setup = function ( _loadOntologyFromText ){ + loadOntologyFromText = _loadOntologyFromText; + loadingModule = graph.options().loadingModule(); + var menuEntry = d3.select("#m_select"); + menuEntry.on("mouseover", function (){ + var searchMenu = graph.options().searchMenu(); + searchMenu.hideSearchEntries(); + }); + + setupConverterButtons(); + setupUploadButton(); + + var descriptionButton = d3.select("#error-description-button").datum({ open: false }); + descriptionButton.on("click", function ( data ){ + var errorContainer = d3.select("#error-description-container"); + var errorDetailsButton = d3.select(this); + + // toggle the state + data.open = !data.open; + var descriptionVisible = data.open; + if ( descriptionVisible ) { + errorDetailsButton.text("Hide error details"); + } else { + errorDetailsButton.text("Show error details"); + } + errorContainer.classed("hidden", !descriptionVisible); + }); + + setupUriListener(); + loadingModule.setOntologyMenu(ontologyMenu); + }; + + + function setupUriListener(){ + // reload ontology when hash parameter gets changed manually + d3.select(window).on("hashchange", function (){ + var oldURL = d3.event.oldURL, newURL = d3.event.newURL; + if ( oldURL !== newURL ) { + // don't reload when just the hash parameter gets appended + if ( newURL === oldURL + "#" ) { + return; + } + updateNavigationHrefs(); + loadingModule.parseUrlAndLoadOntology(); + } + }); + updateNavigationHrefs(); + } + + ontologyMenu.stopLoadingTimer = function (){ + stopTimer = true; + clearTimeout(loadingStatusTimer); + }; + + /** + * Quick fix: update all anchor tags that are used as buttons because a click on them + * changes the url and this will load an other ontology. + */ + function updateNavigationHrefs(){ + d3.selectAll("#menuElementContainer > li > a").attr("href", location.hash || "#"); + } + + ontologyMenu.setIriText = function ( text ){ + d3.select("#iri-converter-input").node().value = text; + d3.select("#iri-converter-button").attr("disabled", false); + d3.select("#iri-converter-form").on("submit")(); + }; + + ontologyMenu.clearDetailInformation = function (){ + var bpContainer = d3.select("#bulletPoint_container"); + var htmlCollection = bpContainer.node().children; + var numEntries = htmlCollection.length; + + for ( var i = 0; i < numEntries; i++ ) { + htmlCollection[0].remove(); + } + }; + ontologyMenu.append_message = function ( msg ){ + // forward call + append_message(msg); + }; + function append_message( msg ){ + var bpContainer = d3.select("#bulletPoint_container"); + var div = bpContainer.append("div"); + div.node().innerHTML = msg; + loadingModule.scrollDownDetails(); + } + + ontologyMenu.append_message_toLastBulletPoint = function ( msg ){ + // forward call + append_message_toLastBulletPoint(msg); + }; + + ontologyMenu.append_bulletPoint = function ( msg ){ + // forward call + append_bulletPoint(msg); + }; + function append_message_toLastBulletPoint( msg ){ + var bpContainer = d3.select("#bulletPoint_container"); + var htmlCollection = bpContainer.node().getElementsByTagName("LI"); + var lastItem = htmlCollection.length - 1; + if ( lastItem >= 0 ) { + var oldText = htmlCollection[lastItem].innerHTML; + htmlCollection[lastItem].innerHTML = oldText + msg; + } + loadingModule.scrollDownDetails(); + } + + function append_bulletPoint( msg ){ + var bp_container = d3.select("#bulletPoint_container"); + var bp = bp_container.append("li"); + bp.node().innerHTML = msg; + d3.select("#currentLoadingStep").node().innerHTML = msg; + loadingModule.scrollDownDetails(); + } + + + function setupConverterButtons(){ + var iriConverterButton = d3.select("#iri-converter-button"); + var iriConverterInput = d3.select("#iri-converter-input"); + + iriConverterInput.on("input", function (){ + keepOntologySelectionOpenShortly(); + + var inputIsEmpty = iriConverterInput.property("value") === ""; + iriConverterButton.attr("disabled", inputIsEmpty || undefined); + }).on("click", function (){ + keepOntologySelectionOpenShortly(); + }); + + d3.select("#iri-converter-form").on("submit", function (){ + var inputName = iriConverterInput.property("value"); + + // remove first spaces + var clearedName = inputName.replace(/%20/g, " "); + while ( clearedName.beginsWith(" ") ) { + clearedName = clearedName.substr(1, clearedName.length); + } + // remove ending spaces + while ( clearedName.endsWith(" ") ) { + clearedName = clearedName.substr(0, clearedName.length - 1); + } + // check if iri is actually an url for a json file (ends with .json) + // create lowercase filenames; + inputName = clearedName; + var lc_iri = inputName.toLowerCase(); + if ( lc_iri.endsWith(".json") ) { + location.hash = "url=" + inputName; + iriConverterInput.property("value", ""); + iriConverterInput.on("input")(); + } else { + location.hash = "iri=" + inputName; + iriConverterInput.property("value", ""); + iriConverterInput.on("input")(); + } + d3.event.preventDefault(); + return false; + }); + } + + function setupUploadButton(){ + var input = d3.select("#file-converter-input"), + inputLabel = d3.select("#file-converter-label"), + uploadButton = d3.select("#file-converter-button"); + + input.on("change", function (){ + var selectedFiles = input.property("files"); + if ( selectedFiles.length <= 0 ) { + inputLabel.text("Select ontology file"); + uploadButton.property("disabled", true); + } else { + inputLabel.text(selectedFiles[0].name); + fileToLoad = selectedFiles[0].name; + uploadButton.property("disabled", false); + uploadButton.node().click(); + // close menu; + graph.options().navigationMenu().hideAllMenus(); + } + }); + + uploadButton.on("click", function (){ + var selectedFile = input.property("files")[0]; + if ( !selectedFile ) { + return false; + } + var newHashParameter = "file=" + selectedFile.name; + // Trigger the reupload manually, because the iri is not changing + if ( location.hash === "#" + newHashParameter ) { + loadingModule.parseUrlAndLoadOntology(); + } else { + location.hash = newHashParameter; + } + }); + } + + function setLoadingStatusInfo( message ){ + // check if there is a owl2vowl li item; + var o2vConverterContainer = d3.select("#o2vConverterContainer"); + if ( !o2vConverterContainer.node() ) { + var bp_container = d3.select("#bulletPoint_container"); + var div = bp_container.append("div"); + o2vConverterContainer = div.append("ul"); + o2vConverterContainer.attr("id", "o2vConverterContainer"); + o2vConverterContainer.style("margin-left", "-25px"); + } + // clear o2vConverterContainer; + var htmlCollection = o2vConverterContainer.node().children; + var numEntries = htmlCollection.length; + for ( var i = 0; i < numEntries; i++ ) { + htmlCollection[0].remove(); + } + // split tokens provided by o2v messages + var tokens = message.split("* "); + var liForToken; + for ( var t = 0; t < tokens.length; t++ ) { + var tokenMessage = tokens[t]; + // create li for tokens; + if ( tokenMessage.length > 0 ) { + liForToken = o2vConverterContainer.append("li"); + liForToken.attr("type", "disc"); + liForToken.node().innerHTML = tokenMessage.replace(/\n/g, "
    "); + } + } + if ( liForToken ) + liForToken.node().innerHTML += "
    "; + + loadingModule.scrollDownDetails(); + } + + ontologyMenu.setLoadingStatusInfo = function ( message ){ + // forward call + setLoadingStatusInfo(message); + }; + + function getLoadingStatusOnceCallBacked( callback, parameter ){ + d3.xhr("loadingStatus?sessionId=" + conversion_sessionId, "application/text", function ( error, request ){ + if ( error ) { + console.log("ontologyMenu getLoadingStatusOnceCallBacked throws error"); + console.log("---------Error -----------"); + console.log(error); + console.log("---------Request -----------"); + console.log(request); + } + setLoadingStatusInfo(request.responseText); + callback(parameter); + }); + } + + function getLoadingStatusTimeLooped(){ + d3.xhr("loadingStatus?sessionId=" + conversion_sessionId, "application/text", function ( error, request ){ + if ( error ) { + console.log("ontologyMenu getLoadingStatusTimeLooped throws error"); + console.log("---------Error -----------"); + console.log(error); + console.log("---------Request -----------"); + console.log(request); + } + if ( stopTimer === false ) { + setLoadingStatusInfo(request.responseText); + timedLoadingStatusLogger(); + } + }); + } + + function timedLoadingStatusLogger(){ + clearTimeout(loadingStatusTimer); + if ( stopTimer === false ) { + loadingStatusTimer = setTimeout(function (){ + getLoadingStatusTimeLooped(); + }, 1000); + } + } + + function callbackUpdateLoadingMessage( msg ){ + d3.xhr("loadingStatus", "application/text", function ( error, request ){ + if ( request !== undefined ) { + setLoadingStatusInfo(request.responseText + "
    " + msg); + } else { + append_message(msg); + } + }); + } + + ontologyMenu.setConversionID = function ( id ){ + conversion_sessionId = id; + }; + + ontologyMenu.callbackLoad_Ontology_FromIRI = function ( parameter ){ + var relativePath = parameter[0]; + var ontoName = parameter[1]; + var localThreadId = parameter[2]; + stopTimer = false; + timedLoadingStatusLogger(); + d3.xhr(relativePath, "application/json", function ( error, request ){ + var loadingSuccessful = !error; + // check if error occurred or responseText is empty + if ( (error !== null && error.status === 500) || (request && request.responseText.length === 0) ) { + clearTimeout(loadingStatusTimer); + stopTimer = true; + getLoadingStatusOnceCallBacked(callbackFromIRI_URL_ERROR, [error, request, localThreadId]); + } + var jsonText; + if ( loadingSuccessful ) { + clearTimeout(loadingStatusTimer); + stopTimer = true; + jsonText = request.responseText; + getLoadingStatusOnceCallBacked(callbackFromIRI_Success, [jsonText, ontoName, localThreadId]); + } + }); + }; + + + ontologyMenu.callbackLoad_Ontology_From_DirectInput = function ( text, parameter ){ + var input = text; + var sessionId = parameter[1]; + stopTimer = false; + timedLoadingStatusLogger(); + + var formData = new FormData(); + formData.append("input", input); + formData.append("sessionId", sessionId); + var xhr = new XMLHttpRequest(); + + xhr.open("POST", "directInput", true); + xhr.onload = function (){ + clearTimeout(loadingStatusTimer); + stopTimer = true; + getLoadingStatusOnceCallBacked(callbackForConvert, [xhr, input, sessionId]); + }; + timedLoadingStatusLogger(); + xhr.send(formData); + + }; + function callbackFromIRI_Success( parameter ){ + var local_conversionId = parameter[2]; + if ( local_conversionId !== conversion_sessionId ) { + console.log("The conversion process for file:" + parameter[1] + " has been canceled!"); + ontologyMenu.conversionFinished(local_conversionId); + return; + } + loadingModule.loadFromOWL2VOWL(parameter[0], parameter[1]); + ontologyMenu.conversionFinished(); + + } + + function callbackFromDirectInput_Success( parameter ){ + var local_conversionId = parameter[1]; + if ( local_conversionId !== conversion_sessionId ) { + console.log("The conversion process for file:" + parameter[1] + " has been canceled!"); + ontologyMenu.conversionFinished(local_conversionId); + return; + } + loadingModule.loadFromOWL2VOWL(parameter[0], "DirectInputConversionID" + local_conversionId); + ontologyMenu.conversionFinished(); + + } + + ontologyMenu.getConversionId = function (){ + return conversion_sessionId; + }; + + ontologyMenu.callbackLoad_JSON_FromURL = function ( parameter ){ + var relativePath = parameter[0]; + var ontoName = parameter[1]; + var local_conversionId = parameter[2]; + stopTimer = false; + timedLoadingStatusLogger(); + d3.xhr(relativePath, "application/json", function ( error, request ){ + var loadingSuccessful = !error; + // check if error occurred or responseText is empty + if ( (error !== null && error.status === 500) || (request && request.responseText.length === 0) ) { + clearTimeout(loadingStatusTimer); + stopTimer = true; + loadingSuccessful = false; + console.log(request); + console.log(request.responseText.length); + getLoadingStatusOnceCallBacked(callbackFromJSON_URL_ERROR, [error, request, local_conversionId]); + } + if ( loadingSuccessful ) { + clearTimeout(loadingStatusTimer); + stopTimer = true; + var jsonText = request.responseText; + getLoadingStatusOnceCallBacked(callbackFromJSON_Success, [jsonText, ontoName, local_conversionId]); + } + }); + }; + + function callbackFromJSON_Success( parameter ){ + var local_conversionId = parameter[2]; + if ( local_conversionId !== conversion_sessionId ) { + console.log("The conversion process for file:" + parameter[1] + " has been canceled!"); + return; + } + loadingModule.loadFromOWL2VOWL(parameter[0], parameter[1]); + } + + function callbackFromJSON_URL_ERROR( parameter ){ + var error = parameter[0]; + var request = parameter[1]; + var local_conversionId = parameter[2]; + if ( local_conversionId !== conversion_sessionId ) { + console.log("This thread has been canceled!!"); + ontologyMenu.conversionFinished(local_conversionId); + return; + } + callbackUpdateLoadingMessage("
    Failed to convert the file. " + + " Ontology could not be loaded.
    Is it a valid OWL ontology? Please check with OWL Validator"); + + if ( error !== null && error.status === 500 ) { + append_message("Could not find ontology at the URL"); + } + if ( request && request.responseText.length === 0 ) { + append_message("Received empty graph"); + } + graph.handleOnLoadingError(); + ontologyMenu.conversionFinished(); + } + + + function callbackFromIRI_URL_ERROR( parameter ){ + var error = parameter[0]; + var request = parameter[1]; + var local_conversionId = parameter[2]; + if ( local_conversionId !== conversion_sessionId ) { + console.log("This thread has been canceled!!"); + ontologyMenu.conversionFinished(local_conversionId); + return; + } + callbackUpdateLoadingMessage("
    Failed to convert the file. " + + " Ontology could not be loaded.
    Is it a valid OWL ontology? Please check with OWL Validator"); + + if ( error !== null && error.status === 500 ) { + append_message("Could not find ontology at the URL"); + } + if ( request && request.responseText.length === 0 ) { + append_message("Received empty graph"); + } + graph.handleOnLoadingError(); + ontologyMenu.conversionFinished(); + } + + function callbackFromDirectInput_ERROR( parameter ){ + + var error = parameter[0]; + var request = parameter[1]; + var local_conversionId = parameter[2]; + if ( local_conversionId !== conversion_sessionId ) { + console.log("The loading process for direct input has been canceled!"); + return; + } + // callbackUpdateLoadingMessage("
    Failed to convert the file. "+ + // "Ontology could not be loaded.
    Is it a valid OWL ontology? Please check with OWL Validator"); + if ( error !== null && error.status === 500 ) { + append_message("Could not convert direct input"); + } + if ( request && request.responseText.length === 0 ) { + append_message("Received empty graph"); + } + + graph.handleOnLoadingError(); + ontologyMenu.conversionFinished(); + } + + ontologyMenu.callbackLoadFromOntology = function ( selectedFile, filename, local_threadId ){ + callbackLoadFromOntology(selectedFile, filename, local_threadId); + }; + + function callbackLoadFromOntology( selectedFile, filename, local_threadId ){ + stopTimer = false; + timedLoadingStatusLogger(); + + var formData = new FormData(); + formData.append("ontology", selectedFile); + formData.append("sessionId", local_threadId); + var xhr = new XMLHttpRequest(); + + xhr.open("POST", "convert", true); + xhr.onload = function (){ + clearTimeout(loadingStatusTimer); + stopTimer = true; + console.log(xhr); + getLoadingStatusOnceCallBacked(callbackForConvert, [xhr, filename, local_threadId]); + }; + timedLoadingStatusLogger(); + xhr.send(formData); + } + + function callbackForConvert( parameter ){ + var xhr = parameter[0]; + var filename = parameter[1]; + var local_threadId = parameter[2]; + if ( local_threadId !== conversion_sessionId ) { + console.log("The conversion process for file:" + filename + " has been canceled!"); + ontologyMenu.conversionFinished(local_threadId); + return; + } + if ( xhr.status === 200 ) { + loadingModule.loadFromOWL2VOWL(xhr.responseText, filename); + ontologyMenu.conversionFinished(); + } else { + var uglyJson=xhr.responseText; + var jsonResut=JSON.parse(uglyJson); + var niceJSON=JSON.stringify(jsonResut, 'null', ' '); + niceJSON= niceJSON.replace(new RegExp('\r?\n','g'), '
    '); + callbackUpdateLoadingMessage("Failed to convert the file. " + + "
    Server answer:
    "+ + "
    "+niceJSON+ "
    "+ + "Ontology could not be loaded.
    Is it a valid OWL ontology? Please check with OWL Validator"); + + graph.handleOnLoadingError(); + ontologyMenu.conversionFinished(); + } + } + + ontologyMenu.conversionFinished = function ( id ){ + var local_id = conversion_sessionId; + if ( id ) { + local_id = id; + } + d3.xhr("conversionDone?sessionId=" + local_id, "application/text", function ( error, request ){ + if ( error ) { + console.log("ontologyMenu conversionFinished throws error"); + console.log("---------Error -----------"); + console.log(error); + console.log("---------Request -----------"); + console.log(request); + } + }); + }; + + function keepOntologySelectionOpenShortly(){ + // Events in the menu should not be considered + var ontologySelection = d3.select("#select .toolTipMenu"); + ontologySelection.on("click", function (){ + d3.event.stopPropagation(); + }).on("keydown", function (){ + d3.event.stopPropagation(); + }); + + ontologySelection.style("display", "block"); + + function disableKeepingOpen(){ + ontologySelection.style("display", undefined); + + clearTimeout(ontologyMenuTimeout); + d3.select(window).on("click", undefined).on("keydown", undefined); + ontologySelection.on("mouseover", undefined); + } + + // Clear the timeout to handle fast calls of this function + clearTimeout(ontologyMenuTimeout); + ontologyMenuTimeout = setTimeout(function (){ + disableKeepingOpen(); + }, 3000); + + // Disable forced open selection on interaction + d3.select(window).on("click", function (){ + disableKeepingOpen(); + }).on("keydown", function (){ + disableKeepingOpen(); + }); + + ontologySelection.on("mouseover", function (){ + disableKeepingOpen(); + }); + } + + ontologyMenu.showLoadingStatus = function ( visible ){ + if ( visible === true ) { + displayLoadingIndicators(); + } + else { + hideLoadingInformations(); + } + }; + + function displayLoadingIndicators(){ + d3.select("#layoutLoadingProgressBarContainer").classed("hidden", false); + loadingInfo.classed("hidden", false); + loadingProgress.classed("hidden", false); + } + + function hideLoadingInformations(){ + loadingInfo.classed("hidden", true); + } + + return ontologyMenu; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 330: +/***/ (function(module, exports, __webpack_require__) { + + var toString = __webpack_require__(219), + unescapeHtmlChar = __webpack_require__(331); + + /** Used to match HTML entities and HTML characters. */ + var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g, + reHasEscapedHtml = RegExp(reEscapedHtml.source); + + /** + * The inverse of `_.escape`; this method converts the HTML entities + * `&`, `<`, `>`, `"`, and `'` in `string` to + * their corresponding characters. + * + * **Note:** No other HTML entities are unescaped. To unescape additional + * HTML entities use a third-party library like [_he_](https://mths.be/he). + * + * @static + * @memberOf _ + * @since 0.6.0 + * @category String + * @param {string} [string=''] The string to unescape. + * @returns {string} Returns the unescaped string. + * @example + * + * _.unescape('fred, barney, & pebbles'); + * // => 'fred, barney, & pebbles' + */ + function unescape(string) { + string = toString(string); + return (string && reHasEscapedHtml.test(string)) + ? string.replace(reEscapedHtml, unescapeHtmlChar) + : string; + } + + module.exports = unescape; + + +/***/ }), + +/***/ 331: +/***/ (function(module, exports, __webpack_require__) { + + var basePropertyOf = __webpack_require__(332); + + /** Used to map HTML entities to characters. */ + var htmlUnescapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + ''': "'" + }; + + /** + * Used by `_.unescape` to convert HTML entities to characters. + * + * @private + * @param {string} chr The matched character to unescape. + * @returns {string} Returns the unescaped character. + */ + var unescapeHtmlChar = basePropertyOf(htmlUnescapes); + + module.exports = unescapeHtmlChar; + + +/***/ }), + +/***/ 332: +/***/ (function(module, exports) { + + /** + * The base implementation of `_.propertyOf` without support for deep paths. + * + * @private + * @param {Object} object The object to query. + * @returns {Function} Returns the new accessor function. + */ + function basePropertyOf(object) { + return function(key) { + return object == null ? undefined : object[key]; + }; + } + + module.exports = basePropertyOf; + + +/***/ }), + +/***/ 333: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains the logic for the pause and resume button. + * + * @param graph the associated webvowl graph + * @returns {{}} + */ + module.exports = function ( graph ){ + + var pauseMenu = {}, + pauseButton; + + + /** + * Adds the pause button to the website. + */ + pauseMenu.setup = function (){ + var menuEntry = d3.select("#pauseOption"); + menuEntry.on("mouseover", function (){ + var searchMenu = graph.options().searchMenu(); + searchMenu.hideSearchEntries(); + }); + pauseButton = d3.select("#pause-button") + .datum({ paused: false }) + .on("click", function ( d ){ + graph.paused(!d.paused); + d.paused = !d.paused; + updatePauseButton(); + pauseButton.classed("highlighted", d.paused); + }); + // Set these properties the first time manually + updatePauseButton(); + }; + + pauseMenu.setPauseValue = function ( value ){ + pauseButton.datum().paused = value; + graph.paused(value); + pauseButton.classed("highlighted", value); + updatePauseButton(); + }; + + function updatePauseButton(){ + updatePauseButtonClass(); + updatePauseButtonText(); + } + + function updatePauseButtonClass(){ + pauseButton.classed("paused", function ( d ){ + return d.paused; + }); + } + + function updatePauseButtonText(){ + if ( pauseButton.datum().paused ) { + pauseButton.text("Resume"); + } else { + pauseButton.text("Pause"); + } + } + + pauseMenu.reset = function (){ + // resuming + pauseMenu.setPauseValue(false); + }; + + + return pauseMenu; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 334: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains the logic for the reset button. + * + * @param graph the associated webvowl graph + * @returns {{}} + */ + module.exports = function ( graph ){ + + var resetMenu = {}, + options = graph.graphOptions(), + resettableModules, + untouchedOptions = webvowl.options(); + + + /** + * Adds the reset button to the website. + * @param _resettableModules modules that can be resetted + */ + resetMenu.setup = function ( _resettableModules ){ + resettableModules = _resettableModules; + d3.select("#reset-button").on("click", resetGraph); + var menuEntry = d3.select("#resetOption"); + menuEntry.on("mouseover", function (){ + var searchMenu = graph.options().searchMenu(); + searchMenu.hideSearchEntries(); + }); + }; + + function resetGraph(){ + graph.resetSearchHighlight(); + graph.options().searchMenu().clearText(); + options.classDistance(untouchedOptions.classDistance()); + options.datatypeDistance(untouchedOptions.datatypeDistance()); + options.charge(untouchedOptions.charge()); + options.gravity(untouchedOptions.gravity()); + options.linkStrength(untouchedOptions.linkStrength()); + graph.reset(); + + resettableModules.forEach(function ( module ){ + module.reset(); + }); + + graph.updateStyle(); + } + + + return resetMenu; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 335: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains the search "engine" + * + * @param graph the associated webvowl graph + * @returns {{}} + */ + module.exports = function ( graph ){ + var searchMenu = {}, + dictionary = [], + entryNames = [], + searchLineEdit, + mergedStringsList, + mergedIdList, + maxEntries = 6, + dictionaryUpdateRequired = true, + labelDictionary, + inputText, + viewStatusOfSearchEntries = false; + + var results = []; + var resultID = []; + var c_locate = d3.select("#locateSearchResult"); + var c_search = d3.select("#c_search"); + var m_search = d3.select("#m_search"); // << dropdown container; + + + String.prototype.beginsWith = function ( string ){ + return (this.indexOf(string) === 0); + }; + + searchMenu.requestDictionaryUpdate = function (){ + dictionaryUpdateRequired = true; + // clear possible pre searched entries + var htmlCollection = m_search.node().children; + var numEntries = htmlCollection.length; + + for ( var i = 0; i < numEntries; i++ ) + htmlCollection[0].remove(); + searchLineEdit.node().value = ""; + }; + + + function updateSearchDictionary(){ + labelDictionary = graph.getUpdateDictionary(); + dictionaryUpdateRequired = false; + dictionary = []; + entryNames = []; + var idList = []; + var stringList = []; + + var i; + for ( i = 0; i < labelDictionary.length; i++ ) { + var lEntry = labelDictionary[i].labelForCurrentLanguage(); + idList.push(labelDictionary[i].id()); + stringList.push(lEntry); + // add all equivalents to the search space; + if ( labelDictionary[i].equivalents && labelDictionary[i].equivalents().length > 0 ) { + var eqs = labelDictionary[i].equivalentsString(); + var eqsLabels = eqs.split(", "); + for ( var e = 0; e < eqsLabels.length; e++ ) { + idList.push(labelDictionary[i].id()); + stringList.push(eqsLabels[e]); + } + } + } + + mergedStringsList = []; + mergedIdList = []; + var indexInStringList = -1; + var currentString; + var currentObjectId; + + for ( i = 0; i < stringList.length; i++ ) { + if ( i === 0 ) { + // just add the elements + mergedStringsList.push(stringList[i]); + mergedIdList.push([]); + mergedIdList[0].push(idList[i]); + continue; + } + else { + currentString = stringList[i]; + currentObjectId = idList[i]; + indexInStringList = mergedStringsList.indexOf(currentString); + } + if ( indexInStringList === -1 ) { + mergedStringsList.push(stringList[i]); + mergedIdList.push([]); + var lastEntry = mergedIdList.length; + mergedIdList[lastEntry - 1].push(currentObjectId); + } else { + mergedIdList[indexInStringList].push(currentObjectId); + } + } + + for ( i = 0; i < mergedStringsList.length; i++ ) { + var aString = mergedStringsList[i]; + var correspondingIdList = mergedIdList[i]; + var idListResult = "[ "; + for ( var j = 0; j < correspondingIdList.length; j++ ) { + idListResult = idListResult + correspondingIdList[j].toString(); + idListResult = idListResult + ", "; + } + idListResult = idListResult.substring(0, idListResult.length - 2); + idListResult = idListResult + " ]"; + + dictionary.push(aString); + entryNames.push(aString); + } + } + + searchMenu.setup = function (){ + // clear dictionary; + dictionary = []; + searchLineEdit = d3.select("#search-input-text"); + searchLineEdit.on("input", userInput); + searchLineEdit.on("keydown", userNavigation); + searchLineEdit.on("click", toggleSearchEntryView); + searchLineEdit.on("mouseover", hoverSearchEntryView); + + c_locate.on("click", function (){ + graph.locateSearchResult(); + }); + + c_locate.on("mouseover", function (){ + searchMenu.hideSearchEntries(); + }); + + }; + + function hoverSearchEntryView(){ + updateSelectionStatusFlags(); + searchMenu.showSearchEntries(); + } + + function toggleSearchEntryView(){ + if ( viewStatusOfSearchEntries ) { + searchMenu.hideSearchEntries(); + } else { + searchMenu.showSearchEntries(); + } + } + + searchMenu.hideSearchEntries = function (){ + m_search.style("display", "none"); + viewStatusOfSearchEntries = false; + }; + + searchMenu.showSearchEntries = function (){ + m_search.style("display", "block"); + viewStatusOfSearchEntries = true; + }; + + function ValidURL( str ){ + var urlregex = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/; + return urlregex.test(str); + + } + + + function updateSelectionStatusFlags(){ + if ( searchLineEdit.node().value.length === 0 ) { + createSearchEntries(); + return; + } + handleAutoCompletion(); + } + + function userNavigation(){ + if ( dictionaryUpdateRequired ) { + updateSearchDictionary(); + } + + var htmlCollection = m_search.node().children; + var numEntries = htmlCollection.length; + + + var move = 0; + var i; + var selectedEntry = -1; + for ( i = 0; i < numEntries; i++ ) { + var atr = htmlCollection[i].getAttribute('class'); + if ( atr === "dbEntrySelected" ) { + selectedEntry = i; + } + } + if ( d3.event.keyCode === 13 ) { + if ( selectedEntry >= 0 && selectedEntry < numEntries ) { + // simulate onClick event + htmlCollection[selectedEntry].onclick(); + searchMenu.hideSearchEntries(); + } + else if ( numEntries === 0 ) { + inputText = searchLineEdit.node().value; + // check if input text ends or begins with with space + // remove first spaces + var clearedText = inputText.replace(/%20/g, " "); + while ( clearedText.beginsWith(" ") ) { + clearedText = clearedText.substr(1, clearedText.length); + } + // remove ending spaces + while ( clearedText.endsWith(" ") ) { + clearedText = clearedText.substr(0, clearedText.length - 1); + } + var iri = clearedText.replace(/ /g, "%20"); + + var valid = ValidURL(iri); + // validate url: + if ( valid ) { + var ontM = graph.options().ontologyMenu(); + ontM.setIriText(iri); + searchLineEdit.node().value = ""; + } + else { + console.log(iri + " is not a valid URL!"); + } + } + } + if ( d3.event.keyCode === 38 ) { + move = -1; + searchMenu.showSearchEntries(); + } + if ( d3.event.keyCode === 40 ) { + move = +1; + searchMenu.showSearchEntries(); + } + + var newSelection = selectedEntry + move; + if ( newSelection !== selectedEntry ) { + + if ( newSelection < 0 && selectedEntry <= 0 ) { + htmlCollection[0].setAttribute('class', "dbEntrySelected"); + } + + if ( newSelection >= numEntries ) { + htmlCollection[selectedEntry].setAttribute('class', "dbEntrySelected"); + } + if ( newSelection >= 0 && newSelection < numEntries ) { + htmlCollection[newSelection].setAttribute('class', "dbEntrySelected"); + if ( selectedEntry >= 0 ) + htmlCollection[selectedEntry].setAttribute('class', "dbEntry"); + } + } + } + + searchMenu.getSearchString = function (){ + return searchLineEdit.node().value; + }; + + + function clearSearchEntries(){ + var htmlCollection = m_search.node().children; + var numEntries = htmlCollection.length; + for ( var i = 0; i < numEntries; i++ ) { + htmlCollection[0].remove(); + } + results = []; + resultID = []; + + } + + function createSearchEntries(){ + inputText = searchLineEdit.node().value; + var i; + var lc_text = inputText.toLowerCase(); + var token; + + for ( i = 0; i < dictionary.length; i++ ) { + var tokenElement = dictionary[i]; + if ( tokenElement === undefined ) { + //@WORKAROUND : nodes with undefined labels are skipped + //@FIX: these nodes are now not added to the dictionary + continue; + } + token = dictionary[i].toLowerCase(); + if ( token.indexOf(lc_text) > -1 ) { + results.push(dictionary[i]); + resultID.push(i); + } + } + } + + function measureTextWidth( text, textStyle ){ + // Set a default value + if ( !textStyle ) { + textStyle = "text"; + } + var d = d3.select("body") + .append("div") + .attr("class", textStyle) + .attr("id", "width-test") // tag this element to identify it + .attr("style", "position:absolute; float:left; white-space:nowrap; visibility:hidden;") + .text(text), + w = document.getElementById("width-test").offsetWidth; + d.remove(); + return w; + } + + function cropText( input ){ + var maxWidth = 250; + var textStyle = "dbEntry"; + var truncatedText = input; + var textWidth; + var ratio; + var newTruncatedTextLength; + while ( true ) { + textWidth = measureTextWidth(truncatedText, textStyle); + if ( textWidth <= maxWidth ) { + break; + } + + ratio = textWidth / maxWidth; + newTruncatedTextLength = Math.floor(truncatedText.length / ratio); + + // detect if nothing changes + if ( truncatedText.length === newTruncatedTextLength ) { + break; + } + + truncatedText = truncatedText.substring(0, newTruncatedTextLength); + } + + if ( input.length > truncatedText.length ) { + return input.substring(0, truncatedText.length - 6); + } + return input; + } + + function createDropDownElements(){ + var numEntries; + var copyRes = results; + var i; + var token; + var newResults = []; + var newResultsIds = []; + + var lc_text = searchLineEdit.node().value.toLowerCase(); + // set the number of shown results to be maxEntries or less; + numEntries = results.length; + if ( numEntries > maxEntries ) + numEntries = maxEntries; + + + for ( i = 0; i < numEntries; i++ ) { + // search for the best entry + var indexElement = 1000000; + var lengthElement = 1000000; + var bestElement = -1; + for ( var j = 0; j < copyRes.length; j++ ) { + token = copyRes[j].toLowerCase(); + var tIe = token.indexOf(lc_text); + var tLe = token.length; + if ( tIe > -1 && tIe <= indexElement && tLe <= lengthElement ) { + bestElement = j; + indexElement = tIe; + lengthElement = tLe; + } + } + newResults.push(copyRes[bestElement]); + newResultsIds.push(resultID[bestElement]); + copyRes[bestElement] = ""; + } + + // add the results to the entry menu + //****************************************** + numEntries = results.length; + if ( numEntries > maxEntries ) + numEntries = maxEntries; + + var filteredOutElements = 0; + for ( i = 0; i < numEntries; i++ ) { + //add results to the dropdown menu + var testEntry = document.createElement('li'); + testEntry.setAttribute('elementID', newResultsIds[i]); + testEntry.onclick = handleClick(newResultsIds[i]); + testEntry.setAttribute('class', "dbEntry"); + + var entries = mergedIdList[newResultsIds[i]]; + var eLen = entries.length; + + var croppedText = cropText(newResults[i]); + + var el0 = entries[0]; + var allSame = true; + var nodeMap = graph.getNodeMapForSearch(); + var visible = eLen; + if ( eLen > 1 ) { + for ( var q = 0; q < eLen; q++ ) { + if ( nodeMap[entries[q]] === undefined ) { + visible--; + } + } + } + + for ( var a = 0; a < eLen; a++ ) { + if ( el0 !== entries[a] ) { + allSame = false; + } + } + if ( croppedText !== newResults[i] ) { + // append ...(#numElements) if needed + if ( eLen > 1 && allSame === false ) { + if ( eLen !== visible ) + croppedText += "... (" + visible + "/" + eLen + ")"; + } + else { + croppedText += "..."; + } + testEntry.title = newResults[i]; + } + else { + if ( eLen > 1 && allSame === false ) { + if ( eLen !== visible ) + croppedText += " (" + visible + "/" + eLen + ")"; + else + croppedText += " (" + eLen + ")"; + } + } + + var searchEntryNode = d3.select(testEntry); + if ( eLen === 1 || allSame === true ) { + if ( nodeMap[entries[0]] === undefined ) { + searchEntryNode.style("color", "#979797"); + testEntry.title = newResults[i] + "\nElement is filtered out."; + testEntry.onclick = function (){ + }; + d3.select(testEntry).style("cursor", "default"); + filteredOutElements++; + } + } else { + if ( visible < 1 ) { + searchEntryNode.style("color", "#979797"); + testEntry.onclick = function (){ + }; + testEntry.title = newResults[i] + "\nAll elements are filtered out."; + d3.select(testEntry).style("cursor", "default"); + filteredOutElements++; + } else { + searchEntryNode.style("color", ""); + } + if ( visible < eLen && visible > 1 ) { + testEntry.title = newResults[i] + "\n" + visible + "/" + eLen + " elements are visible."; + } + } + searchEntryNode.node().innerHTML = croppedText; + m_search.node().appendChild(testEntry); + } + } + + + function handleAutoCompletion(){ + /** pre condition: autoCompletion has already a valid text**/ + clearSearchEntries(); + createSearchEntries(); + createDropDownElements(); + } + + function userInput(){ + c_locate.classed("highlighted", false); + c_locate.node().title = "Nothing to locate"; + + if ( dictionaryUpdateRequired ) { + updateSearchDictionary(); + } + graph.resetSearchHighlight(); + + if ( dictionary.length === 0 ) { + console.log("dictionary is empty"); + return; + } + inputText = searchLineEdit.node().value; + + clearSearchEntries(); + if ( inputText.length !== 0 ) { + createSearchEntries(); + createDropDownElements(); + } + + searchMenu.showSearchEntries(); + } + + function handleClick( elementId ){ + + return function (){ + var id = elementId; + var correspondingIds = mergedIdList[id]; + + // autoComplete the text for the user + var autoComStr = entryNames[id]; + searchLineEdit.node().value = autoComStr; + + graph.resetSearchHighlight(); + graph.highLightNodes(correspondingIds); + c_locate.node().title = "Locate search term"; + if ( autoComStr !== inputText ) { + handleAutoCompletion(); + } + searchMenu.hideSearchEntries(); + }; + } + + searchMenu.clearText = function (){ + searchLineEdit.node().value = ""; + c_locate.classed("highlighted", false); + c_locate.node().title = "Nothing to locate"; + var htmlCollection = m_search.node().children; + var numEntries = htmlCollection.length; + for ( var i = 0; i < numEntries; i++ ) { + htmlCollection[0].remove(); + } + }; + + return searchMenu; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 336: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains the navigation "engine" + * + * @param graph the associated webvowl graph + * @returns {{}} + */ + module.exports = function ( graph ){ + var navigationMenu = {}, + scrollContainer = d3.select("#menuElementContainer").node(), + menuContainer = d3.select("#menuContainer").node(), + leftButton = d3.select("#scrollLeftButton"), + rightButton = d3.select("#scrollRightButton"), + scrolLeftValue, + scrollMax, + currentlyVisibleMenu, + currentlyHoveredEntry, + touchedElement = false, + t_scrollLeft, + t_scrollRight, + c_select = [], + m_select = []; + + + function clearAllTimers(){ + cancelAnimationFrame(t_scrollLeft); + cancelAnimationFrame(t_scrollRight); + } + + function timed_scrollRight(){ + scrolLeftValue += 5; + scrollContainer.scrollLeft = scrolLeftValue; + navigationMenu.updateScrollButtonVisibility(); + if ( scrolLeftValue >= scrollMax ) { + clearAllTimers(); + return; + } + t_scrollRight = requestAnimationFrame(timed_scrollRight); + + } + + function timed_scrollLeft(){ + scrolLeftValue -= 5; + scrollContainer.scrollLeft = scrolLeftValue; + navigationMenu.updateScrollButtonVisibility(); + if ( scrolLeftValue <= 0 ) { + clearAllTimers(); + return; + } + t_scrollRight = requestAnimationFrame(timed_scrollLeft); + } + + // collect all menu entries and stuff; + function setupControlsAndMenus(){ + // HEURISTIC : to match the menus and their controllers we remove the first 2 letters and match + c_select = []; + m_select = []; + + var c_temp = []; + var m_temp = []; + var i; + var controlElements = scrollContainer.children; + var numEntries = controlElements.length; + + for ( i = 0; i < numEntries; i++ ) { + c_temp.push(controlElements[i].id.slice(2)); + } + + var menuElements = menuContainer.children; + numEntries = menuElements.length; + for ( i = 0; i < numEntries; i++ ) { + m_temp.push(menuElements[i].id.slice(2)); + } + + numEntries = controlElements.length; + for ( i = 0; i < numEntries; i++ ) { + c_select[i] = "c_" + c_temp[i]; + if ( m_temp.indexOf(c_temp[i]) > -1 ) { + m_select[i] = "m_" + c_temp[i]; + } else { + m_select[i] = undefined; + } + // create custom behavior for click, touch, and hover + d3.select("#" + c_select[i]).on("mouseover", menuElementOnHovered); + d3.select("#" + c_select[i]).on("mouseout", menuElementOutHovered); + + d3.select("#" + c_select[i]).on("click", menuElementClicked); + d3.select("#" + c_select[i]).on("touchstart", menuElementTouched); + + } + + // connect to mouseWheel + d3.select("#menuElementContainer").on("wheel", function (){ + var wheelEvent = d3.event; + var offset; + if ( wheelEvent.deltaY < 0 ) offset = 20; + if ( wheelEvent.deltaY > 0 ) offset = -20; + scrollContainer.scrollLeft += offset; + navigationMenu.hideAllMenus(); + navigationMenu.updateScrollButtonVisibility(); + }); + + // connect scrollIndicator Buttons; + d3.select("#scrollRightButton").on("mousedown", function (){ + scrolLeftValue = scrollContainer.scrollLeft; + navigationMenu.hideAllMenus(); + t_scrollRight = requestAnimationFrame(timed_scrollRight); + + }).on("touchstart", function (){ + scrolLeftValue = scrollContainer.scrollLeft; + navigationMenu.hideAllMenus(); + t_scrollRight = requestAnimationFrame(timed_scrollRight); + }).on("mouseup", clearAllTimers) + .on("touchend", clearAllTimers) + .on("touchcancel", clearAllTimers); + + d3.select("#scrollLeftButton").on("mousedown", function (){ + scrolLeftValue = scrollContainer.scrollLeft; + navigationMenu.hideAllMenus(); + t_scrollLeft = requestAnimationFrame(timed_scrollLeft); + }).on("touchstart", function (){ + scrolLeftValue = scrollContainer.scrollLeft; + navigationMenu.hideAllMenus(); + t_scrollLeft = requestAnimationFrame(timed_scrollLeft); + }).on("mouseup", clearAllTimers) + .on("touchend", clearAllTimers) + .on("touchcancel", clearAllTimers); + + // connect the scroll functionality; + d3.select("#menuElementContainer").on("scroll", function (){ + navigationMenu.updateScrollButtonVisibility(); + navigationMenu.hideAllMenus(); + }); + } + + function menuElementOnHovered(){ + navigationMenu.hideAllMenus(); + if ( touchedElement ) { + return; + } + showSingleMenu(this.id); + } + + function menuElementOutHovered(){ + hoveroutedControMenu(this.id); + } + + function menuElementClicked(){ + var m_element = m_select[c_select.indexOf(this.id)]; + if ( m_element ) { + var menuElement = d3.select("#" + m_element); + if ( menuElement ) { + if ( menuElement.style("display") === "block" ) { + menuElement.style("display", "none");// hide it + } else { + showSingleMenu(this.id); + } + } + } + } + + function menuElementTouched(){ + // it sets a flag that we have touched it, + // since d3. propagates the event for touch as hover and then click, we block the hover event + touchedElement = true; + } + + + function hoveroutedControMenu( controllerID ){ + currentlyHoveredEntry = d3.select("#" + controllerID); + if ( controllerID !== "c_search" ) { + d3.select("#" + controllerID).select("path").style("stroke-width", "0"); + d3.select("#" + controllerID).select("path").style("fill", "#fff"); + } + + } + + function showSingleMenu( controllerID ){ + currentlyHoveredEntry = d3.select("#" + controllerID).node(); + // get the corresponding menu element for this controller + var m_element = m_select[c_select.indexOf(controllerID)]; + if ( m_element ) { + if ( controllerID !== "c_search" ) { + + d3.select("#" + controllerID).select("path").style("stroke-width", "0"); + d3.select("#" + controllerID).select("path").style("fill", "#bdc3c7"); + } + // show it if we have a menu + currentlyVisibleMenu = d3.select("#" + m_element); + currentlyVisibleMenu.style("display", "block"); + if ( m_element === "m_export" ) + graph.options().exportMenu().exportAsUrl(); + updateMenuPosition(); + } + } + + function updateMenuPosition(){ + if ( currentlyHoveredEntry ) { + var leftOffset = currentlyHoveredEntry.offsetLeft; + var scrollOffset = scrollContainer.scrollLeft; + var totalOffset = leftOffset - scrollOffset; + var finalOffset = Math.max(0, totalOffset); + var fullContainer_width = scrollContainer.getBoundingClientRect().width; + var elementWidth = currentlyVisibleMenu.node().getBoundingClientRect().width; + // make priority > first check if we are right + if ( finalOffset + elementWidth > fullContainer_width ) { + finalOffset = fullContainer_width - elementWidth; + } + // fix priority; + finalOffset = Math.max(0, finalOffset); + currentlyVisibleMenu.style("left", finalOffset + "px"); + + // // check if outside the viewport + // var menuWidth=currentlyHoveredEntry.getBoundingClientRect().width; + // var bt_width=36; + // if (totalOffset+menuWidthfullContainer_width){ + // navigationMenu.hideAllMenus(); + // currentlyHoveredEntry=undefined; + // } + } + } + + navigationMenu.hideAllMenus = function (){ + d3.selectAll(".toolTipMenu").style("display", "none"); // hiding all menus + }; + + navigationMenu.updateScrollButtonVisibility = function (){ + scrollMax = scrollContainer.scrollWidth - scrollContainer.clientWidth - 2; + if ( scrollContainer.scrollLeft === 0 ) { + leftButton.classed("hidden", true); + } else { + leftButton.classed("hidden", false); + } + + if ( scrollContainer.scrollLeft > scrollMax ) { + rightButton.classed("hidden", true); + } else { + rightButton.classed("hidden", false); + } + + }; + + navigationMenu.setup = function (){ + setupControlsAndMenus(); + // make sure that the menu elements follow their controller and also their restrictions + // some hovering behavior -- lets the menu disappear when hovered in graph or sidebar; + d3.select("#graph").on("mouseover", function (){ + navigationMenu.hideAllMenus(); + }); + d3.select("#generalDetails").on("mouseover", function (){ + navigationMenu.hideAllMenus(); + }); + }; + + return navigationMenu; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 337: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** The zoom Slider **/ + module.exports = function ( graph ){ + var zoomSlider = {}; + var minMag = graph.options().minMagnification(), + maxMag = graph.options().maxMagnification(), + defZoom, + t_zoomOut, + t_zoomIn, + zoomValue, + showSlider = true, + w = graph.options().width(), + h = graph.options().height(), + slider; + + defZoom = Math.min(w, h) / 1000; + + function clearAllTimers(){ + cancelAnimationFrame(t_zoomOut); + cancelAnimationFrame(t_zoomIn); + } + + function timed_zoomOut(){ + zoomValue = 0.98 * zoomValue; + // fail saves + if ( zoomValue < minMag ) { + zoomValue = minMag; + } + graph.setSliderZoom(zoomValue); + t_zoomOut = requestAnimationFrame(timed_zoomOut); + } + + function timed_zoomIn(){ + zoomValue = 1.02 * zoomValue; + // fail saves + if ( zoomValue > maxMag ) { + zoomValue = maxMag; + } + graph.setSliderZoom(zoomValue); + t_zoomIn = requestAnimationFrame(timed_zoomIn); + } + + zoomSlider.setup = function (){ + slider = d3.select("#zoomSliderParagraph").append("input") + .datum({}) + .attr("id", "zoomSliderElement") + .attr("type", "range") + .attr("value", defZoom) + .attr("min", minMag) + .attr("max", maxMag) + .attr("step", (maxMag - minMag) / 40) + .attr("title", "zoom factor") + .on("input", function (){ + zoomSlider.zooming(); + }); + + d3.select("#zoomOutButton").on("mousedown", function (){ + graph.options().navigationMenu().hideAllMenus(); + zoomValue = graph.scaleFactor(); + t_zoomOut = requestAnimationFrame(timed_zoomOut); + }) + .on("touchstart", function (){ + graph.options().navigationMenu().hideAllMenus(); + zoomValue = graph.scaleFactor(); + t_zoomOut = requestAnimationFrame(timed_zoomOut); + }) + .on("mouseup", clearAllTimers) + .on("touchend", clearAllTimers) + .on("touchcancel", clearAllTimers) + .attr("title", "zoom out"); + + d3.select("#zoomInButton").on("mousedown", function (){ + graph.options().navigationMenu().hideAllMenus(); + zoomValue = graph.scaleFactor(); + t_zoomIn = requestAnimationFrame(timed_zoomIn); + }) + .on("touchstart", function (){ + graph.options().navigationMenu().hideAllMenus(); + zoomValue = graph.scaleFactor(); + t_zoomIn = requestAnimationFrame(timed_zoomIn); + }) + .on("mouseup", clearAllTimers) + .on("touchend", clearAllTimers) + .on("touchcancel", clearAllTimers) + .attr("title", "zoom in"); + + d3.select("#centerGraphButton").on("click", function (){ + graph.options().navigationMenu().hideAllMenus(); + graph.forceRelocationEvent(); + }).attr("title", "center graph"); + + }; + + zoomSlider.showSlider = function ( val ){ + if ( !arguments.length ) return showSlider; + d3.select("#zoomSlider").classed("hidden", !val); + showSlider = val; + }; + + zoomSlider.zooming = function (){ + graph.options().navigationMenu().hideAllMenus(); + var zoomValue = slider.property("value"); + slider.attr("value", zoomValue); + graph.setSliderZoom(zoomValue); + }; + + zoomSlider.updateZoomSliderValue = function ( val ){ + if ( slider ) { + slider.attr("value", val); + slider.property("value", val); + } + }; + + return zoomSlider; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 338: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains the logic for the sidebar. + * @param graph the graph that belongs to these controls + * @returns {{}} + */ + module.exports = function ( graph ){ + + var sidebar = {}, + languageTools = webvowl.util.languageTools(), + elementTools = webvowl.util.elementTools(), + // Required for reloading when the language changes + ontologyInfo, + visibleSidebar = 1, + lastSelectedElement, + + detailArea = d3.select("#detailsArea"), + graphArea = d3.select("#canvasArea"), + menuArea = d3.select("#swipeBarContainer"), + collapseButton = d3.select("#sidebarExpandButton"); + + /** + * Setup the menu bar. + */ + + + function setupCollapsing(){ + // adapted version of this example: http://www.normansblog.de/simple-jquery-accordion/ + function collapseContainers( containers ){ + containers.classed("hidden", true); + } + + function expandContainers( containers ){ + containers.classed("hidden", false); + } + + var triggers = d3.selectAll(".accordion-trigger"); + + // Collapse all inactive triggers on startup + collapseContainers(d3.selectAll(".accordion-trigger:not(.accordion-trigger-active) + div")); + + triggers.on("click", function (){ + var selectedTrigger = d3.select(this), + activeTriggers = d3.selectAll(".accordion-trigger-active"); + + if ( selectedTrigger.classed("accordion-trigger-active") ) { + // Collapse the active (which is also the selected) trigger + collapseContainers(d3.select(selectedTrigger.node().nextElementSibling)); + selectedTrigger.classed("accordion-trigger-active", false); + } else { + // Collapse the other trigger ... + collapseContainers(d3.selectAll(".accordion-trigger-active + div")); + activeTriggers.classed("accordion-trigger-active", false); + // ... and expand the selected one + expandContainers(d3.select(selectedTrigger.node().nextElementSibling)); + selectedTrigger.classed("accordion-trigger-active", true); + } + }); + } + + sidebar.clearOntologyInformation = function (){ + + d3.select("#title").text("No title available"); + d3.select("#about").attr("href", "#").attr("target", "_blank").text("not given"); + d3.select("#version").text("--"); + d3.select("#authors").text("--"); + d3.select("#description").text("No description available."); + var container = d3.select("#ontology-metadata"); + container.selectAll("*").remove(); + d3.select("#classCount") + .text("0"); + d3.select("#objectPropertyCount") + .text("0"); + d3.select("#datatypePropertyCount") + .text("0"); + d3.select("#individualCount") + .text("0"); + d3.select("#nodeCount") + .text("0"); + d3.select("#edgeCount") + .text("0"); + + // clear selectedNode info + var isTriggerActive = d3.select("#selection-details-trigger").classed("accordion-trigger-active"); + if ( isTriggerActive ) { + // close accordion + d3.select("#selection-details-trigger").node().click(); + } + showSelectionAdvice(); + + }; + + /** + * Updates the information of the passed ontology. + * @param data the graph data + * @param statistics the statistics module + */ + sidebar.updateOntologyInformation = function ( data, statistics ){ + data = data || {}; + ontologyInfo = data.header || {}; + + updateGraphInformation(); + displayGraphStatistics(undefined, statistics); + displayMetadata(ontologyInfo.other); + + // Reset the sidebar selection + sidebar.updateSelectionInformation(undefined); + + setLanguages(ontologyInfo.languages); + }; + + function setLanguages( languages ){ + languages = languages || []; + + // Put the default and unset label on top of the selection labels + languages.sort(function ( a, b ){ + if ( a === webvowl.util.constants().LANG_IRIBASED ) { + return -1; + } else if ( b === webvowl.util.constants().LANG_IRIBASED ) { + return 1; + } + if ( a === webvowl.util.constants().LANG_UNDEFINED ) { + return -1; + } else if ( b === webvowl.util.constants().LANG_UNDEFINED ) { + return 1; + } + return a.localeCompare(b); + }); + + var languageSelection = d3.select("#language") + .on("change", function (){ + graph.language(d3.event.target.value); + updateGraphInformation(); + sidebar.updateSelectionInformation(lastSelectedElement); + }); + + languageSelection.selectAll("option").remove(); + languageSelection.selectAll("option") + .data(languages) + .enter().append("option") + .attr("value", function ( d ){ + return d; + }) + .text(function ( d ){ + return d; + }); + + if ( !trySelectDefaultLanguage(languageSelection, languages, "en") ) { + if ( !trySelectDefaultLanguage(languageSelection, languages, webvowl.util.constants().LANG_UNDEFINED) ) { + trySelectDefaultLanguage(languageSelection, languages, webvowl.util.constants().LANG_IRIBASED); + } + } + } + + function trySelectDefaultLanguage( selection, languages, language ){ + var langIndex = languages.indexOf(language); + if ( langIndex >= 0 ) { + selection.property("selectedIndex", langIndex); + graph.language(language); + return true; + } + + return false; + } + + function updateGraphInformation(){ + var title = languageTools.textInLanguage(ontologyInfo.title, graph.language()); + d3.select("#title").text(title || "No title available"); + d3.select("#about").attr("href", ontologyInfo.iri).attr("target", "_blank").text(ontologyInfo.iri); + d3.select("#version").text(ontologyInfo.version || "--"); + var authors = ontologyInfo.author; + if ( typeof authors === "string" ) { + // Stay compatible with author info as strings after change in january 2015 + d3.select("#authors").text(authors); + } else if ( authors instanceof Array ) { + d3.select("#authors").text(authors.join(", ")); + } else { + d3.select("#authors").text("--"); + } + + var description = languageTools.textInLanguage(ontologyInfo.description, graph.language()); + d3.select("#description").text(description || "No description available."); + } + + function displayGraphStatistics( deliveredMetrics, statistics ){ + // Metrics are optional and may be undefined + deliveredMetrics = deliveredMetrics || {}; + + d3.select("#classCount") + .text(deliveredMetrics.classCount || statistics.classCount()); + d3.select("#objectPropertyCount") + .text(deliveredMetrics.objectPropertyCount || statistics.objectPropertyCount()); + d3.select("#datatypePropertyCount") + .text(deliveredMetrics.datatypePropertyCount || statistics.datatypePropertyCount()); + d3.select("#individualCount") + .text(deliveredMetrics.totalIndividualCount || statistics.totalIndividualCount()); + d3.select("#nodeCount") + .text(statistics.nodeCount()); + d3.select("#edgeCount") + .text(statistics.edgeCount()); + } + + function displayMetadata( metadata ){ + var container = d3.select("#ontology-metadata"); + container.selectAll("*").remove(); + + listAnnotations(container, metadata); + + if ( container.selectAll(".annotation").size() <= 0 ) { + container.append("p").text("No annotations available."); + } + } + + function listAnnotations( container, annotationObject ){ + annotationObject = annotationObject || {}; //todo + + // Collect the annotations in an array for simpler processing + var annotations = []; + for ( var annotation in annotationObject ) { + if ( annotationObject.hasOwnProperty(annotation) ) { + annotations.push(annotationObject[annotation][0]); + } + } + + container.selectAll(".annotation").remove(); + container.selectAll(".annotation").data(annotations).enter().append("p") + .classed("annotation", true) + .classed("statisticDetails", true) + .text(function ( d ){ + return d.identifier + ":"; + }) + .append("span") + .each(function ( d ){ + appendIriLabel(d3.select(this), d.value, d.type === "iri" ? d.value : undefined); + }); + } + + /** + * Update the information of the selected node. + * @param selectedElement the selection or null if nothing is selected + */ + sidebar.updateSelectionInformation = function ( selectedElement ){ + lastSelectedElement = selectedElement; + + // Click event was prevented when dragging + if ( d3.event && d3.event.defaultPrevented ) { + return; + } + + var isTriggerActive = d3.select("#selection-details-trigger").classed("accordion-trigger-active"); + if ( selectedElement && !isTriggerActive ) { + d3.select("#selection-details-trigger").node().click(); + } else if ( !selectedElement && isTriggerActive ) { + showSelectionAdvice(); + return; + } + + if ( elementTools.isProperty(selectedElement) ) { + displayPropertyInformation(selectedElement); + } else if ( elementTools.isNode(selectedElement) ) { + displayNodeInformation(selectedElement); + } + }; + + function showSelectionAdvice(){ + setSelectionInformationVisibility(false, false, true); + } + + function setSelectionInformationVisibility( showClasses, showProperties, showAdvice ){ + d3.select("#classSelectionInformation").classed("hidden", !showClasses); + d3.select("#propertySelectionInformation").classed("hidden", !showProperties); + d3.select("#noSelectionInformation").classed("hidden", !showAdvice); + } + + function displayPropertyInformation( property ){ + showPropertyInformations(); + + setIriLabel(d3.select("#propname"), property.labelForCurrentLanguage(), property.iri()); + d3.select("#typeProp").text(property.type()); + + if ( property.inverse() !== undefined ) { + d3.select("#inverse").classed("hidden", false); + setIriLabel(d3.select("#inverse span"), property.inverse().labelForCurrentLanguage(), property.inverse().iri()); + } else { + d3.select("#inverse").classed("hidden", true); + } + + var equivalentIriSpan = d3.select("#propEquivUri"); + listNodeArray(equivalentIriSpan, property.equivalents()); + + listNodeArray(d3.select("#subproperties"), property.subproperties()); + listNodeArray(d3.select("#superproperties"), property.superproperties()); + + if ( property.minCardinality() !== undefined ) { + d3.select("#infoCardinality").classed("hidden", true); + d3.select("#minCardinality").classed("hidden", false); + d3.select("#minCardinality span").text(property.minCardinality()); + d3.select("#maxCardinality").classed("hidden", false); + + if ( property.maxCardinality() !== undefined ) { + d3.select("#maxCardinality span").text(property.maxCardinality()); + } else { + d3.select("#maxCardinality span").text("*"); + } + + } else if ( property.cardinality() !== undefined ) { + d3.select("#minCardinality").classed("hidden", true); + d3.select("#maxCardinality").classed("hidden", true); + d3.select("#infoCardinality").classed("hidden", false); + d3.select("#infoCardinality span").text(property.cardinality()); + } else { + d3.select("#infoCardinality").classed("hidden", true); + d3.select("#minCardinality").classed("hidden", true); + d3.select("#maxCardinality").classed("hidden", true); + } + + setIriLabel(d3.select("#domain"), property.domain().labelForCurrentLanguage(), property.domain().iri()); + setIriLabel(d3.select("#range"), property.range().labelForCurrentLanguage(), property.range().iri()); + + displayAttributes(property.attributes(), d3.select("#propAttributes")); + + setTextAndVisibility(d3.select("#propDescription"), property.descriptionForCurrentLanguage()); + setTextAndVisibility(d3.select("#propComment"), property.commentForCurrentLanguage()); + + listAnnotations(d3.select("#propertySelectionInformation"), property.annotations()); + } + + function showPropertyInformations(){ + setSelectionInformationVisibility(false, true, false); + } + + function setIriLabel( element, name, iri ){ + var parent = d3.select(element.node().parentNode); + + if ( name ) { + element.selectAll("*").remove(); + appendIriLabel(element, name, iri); + parent.classed("hidden", false); + } else { + parent.classed("hidden", true); + } + } + + function appendIriLabel( element, name, iri ){ + var tag; + + if ( iri ) { + tag = element.append("a") + .attr("href", iri) + .attr("title", iri) + .attr("target", "_blank"); + } else { + tag = element.append("span"); + } + tag.text(name); + } + + function displayAttributes( attributes, textSpan ){ + var spanParent = d3.select(textSpan.node().parentNode); + + if ( attributes && attributes.length > 0 ) { + // Remove redundant redundant attributes for sidebar + removeElementFromArray("object", attributes); + removeElementFromArray("datatype", attributes); + removeElementFromArray("rdf", attributes); + } + + if ( attributes && attributes.length > 0 ) { + textSpan.text(attributes.join(", ")); + + spanParent.classed("hidden", false); + } else { + spanParent.classed("hidden", true); + } + } + + function removeElementFromArray( element, array ){ + var index = array.indexOf(element); + if ( index > -1 ) { + array.splice(index, 1); + } + } + + function displayNodeInformation( node ){ + showClassInformations(); + + setIriLabel(d3.select("#name"), node.labelForCurrentLanguage(), node.iri()); + + /* Equivalent stuff. */ + var equivalentIriSpan = d3.select("#classEquivUri"); + listNodeArray(equivalentIriSpan, node.equivalents()); + + d3.select("#typeNode").text(node.type()); + listNodeArray(d3.select("#individuals"), node.individuals()); + + /* Disjoint stuff. */ + var disjointNodes = d3.select("#disjointNodes"); + var disjointNodesParent = d3.select(disjointNodes.node().parentNode); + + if ( node.disjointWith() !== undefined ) { + disjointNodes.selectAll("*").remove(); + + node.disjointWith().forEach(function ( element, index ){ + if ( index > 0 ) { + disjointNodes.append("span").text(", "); + } + appendIriLabel(disjointNodes, element.labelForCurrentLanguage(), element.iri()); + }); + + disjointNodesParent.classed("hidden", false); + } else { + disjointNodesParent.classed("hidden", true); + } + + displayAttributes(node.attributes(), d3.select("#classAttributes")); + + setTextAndVisibility(d3.select("#nodeDescription"), node.descriptionForCurrentLanguage()); + setTextAndVisibility(d3.select("#nodeComment"), node.commentForCurrentLanguage()); + + listAnnotations(d3.select("#classSelectionInformation"), node.annotations()); + } + + function showClassInformations(){ + setSelectionInformationVisibility(true, false, false); + } + + function listNodeArray( textSpan, nodes ){ + var spanParent = d3.select(textSpan.node().parentNode); + + if ( nodes && nodes.length ) { + textSpan.selectAll("*").remove(); + nodes.forEach(function ( element, index ){ + if ( index > 0 ) { + textSpan.append("span").text(", "); + } + appendIriLabel(textSpan, element.labelForCurrentLanguage(), element.iri()); + }); + + spanParent.classed("hidden", false); + } else { + spanParent.classed("hidden", true); + } + } + + function setTextAndVisibility( label, value ){ + var parentNode = d3.select(label.node().parentNode); + var hasValue = !!value; + if ( value ) { + label.text(value); + } + parentNode.classed("hidden", !hasValue); + } + + /** Collapsible Sidebar functions; **/ + + sidebar.showSidebar = function ( val, init ){ + // make val to bool + if ( val === 1 ) { + visibleSidebar = true; + collapseButton.node().innerHTML = ">"; + detailArea.classed("hidden", true); + if ( init === true ) { + detailArea.classed("hidden", !visibleSidebar); + graphArea.style("width", "78%"); + graphArea.style("-webkit-animation-name", "none"); + + menuArea.style("width", "78%"); + menuArea.style("-webkit-animation-name", "none"); + + d3.select("#WarningErrorMessagesContainer").style("width", "78%"); + d3.select("#WarningErrorMessagesContainer").style("-webkit-animation-name", "none"); + } else { + graphArea.style("width", "78%"); + graphArea.style("-webkit-animation-name", "sbCollapseAnimation"); + graphArea.style("-webkit-animation-duration", "0.5s"); + + menuArea.style("width", "78%"); + menuArea.style("-webkit-animation-name", "sbCollapseAnimation"); + menuArea.style("-webkit-animation-duration", "0.5s"); + + d3.select("#WarningErrorMessagesContainer").style("width", "78%"); + d3.select("#WarningErrorMessagesContainer").style("-webkit-animation-name", "warn_ExpandRightBarAnimation"); + d3.select("#WarningErrorMessagesContainer").style("-webkit-animation-duration", "0.5s"); + } + graph.options().width(window.innerWidth - (window.innerWidth * 0.22)); + graph.options().navigationMenu().updateScrollButtonVisibility(); + } + if ( val === 0 ) { + visibleSidebar = false; + detailArea.classed("hidden", true); + + collapseButton.node().innerHTML = "<"; + // adjust the layout + if ( init === true ) { + graphArea.style("width", "100%"); + graphArea.style("-webkit-animation-name", "none"); + + menuArea.style("width", "100%"); + menuArea.style("-webkit-animation-name", "none"); + + d3.select("#WarningErrorMessagesContainer").style("width", "100%"); + d3.select("#WarningErrorMessagesContainer").style("-webkit-animation-name", "none"); + } else { + graphArea.style("width", "100%"); + graphArea.style("-webkit-animation-name", "sbExpandAnimation"); + graphArea.style("-webkit-animation-duration", "0.5s"); + + menuArea.style("width", "100%"); + menuArea.style("-webkit-animation-name", "sbExpandAnimation"); + menuArea.style("-webkit-animation-duration", "0.5s"); + + d3.select("#WarningErrorMessagesContainer").style("width", "100%"); + d3.select("#WarningErrorMessagesContainer").style("-webkit-animation-name", "warn_CollapseRightBarAnimation"); + d3.select("#WarningErrorMessagesContainer").style("-webkit-animation-duration", "0.5s"); + + } + graph.options().width(window.innerWidth); + graph.updateCanvasContainerSize(); + graph.options().navigationMenu().updateScrollButtonVisibility(); + } + }; + + sidebar.isSidebarVisible = function (){ + return visibleSidebar; + }; + + sidebar.updateSideBarVis = function ( init ){ + var vis = sidebar.getSidebarVisibility(); + sidebar.showSidebar(parseInt(vis), init); + }; + + sidebar.getSidebarVisibility = function (){ + var isHidden = detailArea.classed("hidden"); + if ( isHidden === false ) return String(1); + if ( isHidden === true ) return String(0); + }; + + sidebar.initSideBarAnimation = function (){ + graphArea.node().addEventListener("animationend", function (){ + detailArea.classed("hidden", !visibleSidebar); + graph.updateCanvasContainerSize(); + graph.options().navigationMenu().updateScrollButtonVisibility(); + }); + }; + + sidebar.setup = function (){ + setupCollapsing(); + sidebar.initSideBarAnimation(); + + collapseButton.on("click", function (){ + graph.options().navigationMenu().hideAllMenus(); + var settingValue = parseInt(sidebar.getSidebarVisibility()); + if ( settingValue === 1 ) sidebar.showSidebar(0); + else sidebar.showSidebar(1); + }); + }; + + + sidebar.updateShowedInformation = function (){ + var editMode = graph.editorMode(); + d3.select("#generalDetails").classed("hidden", editMode); + d3.select("#generalDetailsEdit").classed("hidden", !editMode); + + // store the meta information in graph.options() + + // todo: update edit meta info + graph.options().editSidebar().updateGeneralOntologyInfo(); + + // todo: update showed meta info; + graph.options().sidebar().updateGeneralOntologyInfo(); + + }; + + sidebar.updateGeneralOntologyInfo = function (){ + // get it from graph.options + var generalMetaObj = graph.options().getGeneralMetaObject(); + var preferredLanguage = graph && graph.language ? graph.language() : null; + if ( generalMetaObj.hasOwnProperty("title") ) { + // title has language to it -.- + if ( typeof generalMetaObj.title === "object" ) { + d3.select("#title").node().value = languageTools.textInLanguage(generalMetaObj.title, preferredLanguage); + } else { + d3.select("#title").node().innerHTML = generalMetaObj.title; + } + + } + if ( generalMetaObj.hasOwnProperty("iri") ) d3.select("#about").node().innerHTML = generalMetaObj.iri; + if ( generalMetaObj.hasOwnProperty("iri") ) d3.select("#about").node().href = generalMetaObj.iri; + if ( generalMetaObj.hasOwnProperty("version") ) d3.select("#version").node().innerHTML = generalMetaObj.version; + if ( generalMetaObj.hasOwnProperty("author") ) d3.select("#authors").node().innerHTML = generalMetaObj.author; + // this could also be an object >> + if ( generalMetaObj.hasOwnProperty("description") ) { + if ( typeof generalMetaObj.description === "object" ) { + d3.select("#description").node().innerHTML = languageTools.textInLanguage(generalMetaObj.description, preferredLanguage); + } + else { + d3.select("#description").node().innerHTML = generalMetaObj.description; + } + } + }; + + + return sidebar; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 339: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains the logic for the sidebar. + * @param graph the graph that belongs to these controls + * @returns {{}} + */ + module.exports = function ( graph ){ + + var leftSidebar = {}, + languageTools = webvowl.util.languageTools(), + elementTools = webvowl.util.elementTools(); + var collapseButton = d3.select("#leftSideBarCollapseButton"); + var visibleSidebar = 0; + var backupVisibility = 0; + var sideBarContent = d3.select("#leftSideBarContent"); + var sideBarContainer = d3.select("#containerForLeftSideBar"); + var defaultClassSelectionContainers = []; + var defaultDatatypeSelectionContainers = []; + var defaultPropertySelectionContainers = []; + + leftSidebar.setup = function (){ + setupCollapsing(); + leftSidebar.initSideBarAnimation(); + + collapseButton.on("click", function (){ + graph.options().navigationMenu().hideAllMenus(); + var settingValue = parseInt(leftSidebar.getSidebarVisibility()); + if ( settingValue === 0 ) leftSidebar.showSidebar(1); + else leftSidebar.showSidebar(0); + backupVisibility = settingValue; + }); + + setupSelectionContainers(); + d3.select("#WarningErrorMessages").node().addEventListener("animationend", function (){ + d3.select("#WarningErrorMessages").style("-webkit-animation-name", "none"); + }); + + }; + + leftSidebar.hideCollapseButton = function ( val ){ + sideBarContainer.classed("hidden", val); + }; + + + function unselectAllElements( container ){ + for ( var i = 0; i < container.length; i++ ) + container[i].classed("defaultSelected", false); + } + + function selectThisDefaultElement( element ){ + d3.select(element).classed("defaultSelected", true); + } + + function updateDefaultNameInAccordion( element, identifier ){ + var elementDescription = ""; + if ( identifier === "defaultClass" ) elementDescription = "Class: "; + if ( identifier === "defaultDatatype" ) elementDescription = "Datatype: "; + if ( identifier === "defaultProperty" ) elementDescription = "Property: "; + + d3.select("#" + identifier).node().innerHTML = elementDescription + element.innerHTML; + d3.select("#" + identifier).node().title = element.innerHTML; + } + + function classSelectorFunction(){ + unselectAllElements(defaultClassSelectionContainers); + selectThisDefaultElement(this); + updateDefaultNameInAccordion(this, "defaultClass"); + } + + function datatypeSelectorFunction(){ + unselectAllElements(defaultDatatypeSelectionContainers); + selectThisDefaultElement(this); + updateDefaultNameInAccordion(this, "defaultDatatype"); + } + + function propertySelectorFunction(){ + unselectAllElements(defaultPropertySelectionContainers); + selectThisDefaultElement(this); + updateDefaultNameInAccordion(this, "defaultProperty"); + } + + + function setupSelectionContainers(){ + var classContainer = d3.select("#classContainer"); + var datatypeContainer = d3.select("#datatypeContainer"); + var propertyContainer = d3.select("#propertyContainer"); + // create the supported elements + + var defaultClass = "owl:Class"; + var defaultDatatype = "rdfs:Literal"; + var defaultProperty = "owl:objectProperty"; + + var supportedClasses = graph.options().supportedClasses(); + var supportedDatatypes = graph.options().supportedDatatypes(); + var supportedProperties = graph.options().supportedProperties(); + var i; + + for ( i = 0; i < supportedClasses.length; i++ ) { + var aClassSelectionContainer; + aClassSelectionContainer = classContainer.append("div"); + aClassSelectionContainer.classed("containerForDefaultSelection", true); + aClassSelectionContainer.classed("noselect", true); + aClassSelectionContainer.node().id = "selectedClass" + supportedClasses[i]; + aClassSelectionContainer.node().innerHTML = supportedClasses[i]; + + if ( supportedClasses[i] === defaultClass ) { + selectThisDefaultElement(aClassSelectionContainer.node()); + } + aClassSelectionContainer.on("click", classSelectorFunction); + defaultClassSelectionContainers.push(aClassSelectionContainer); + } + + for ( i = 0; i < supportedDatatypes.length; i++ ) { + var aDTSelectionContainer = datatypeContainer.append("div"); + aDTSelectionContainer.classed("containerForDefaultSelection", true); + aDTSelectionContainer.classed("noselect", true); + aDTSelectionContainer.node().id = "selectedDatatype" + supportedDatatypes[i]; + aDTSelectionContainer.node().innerHTML = supportedDatatypes[i]; + + if ( supportedDatatypes[i] === defaultDatatype ) { + selectThisDefaultElement(aDTSelectionContainer.node()); + } + aDTSelectionContainer.on("click", datatypeSelectorFunction); + defaultDatatypeSelectionContainers.push(aDTSelectionContainer); + } + for ( i = 0; i < supportedProperties.length; i++ ) { + var aPropSelectionContainer = propertyContainer.append("div"); + aPropSelectionContainer.classed("containerForDefaultSelection", true); + aPropSelectionContainer.classed("noselect", true); + aPropSelectionContainer.node().id = "selectedClass" + supportedProperties[i]; + aPropSelectionContainer.node().innerHTML = supportedProperties[i]; + aPropSelectionContainer.on("click", propertySelectorFunction); + if ( supportedProperties[i] === defaultProperty ) { + selectThisDefaultElement(aPropSelectionContainer.node()); + } + defaultPropertySelectionContainers.push(aPropSelectionContainer); + } + } + + function setupCollapsing(){ + // adapted version of this example: http://www.normansblog.de/simple-jquery-accordion/ + function collapseContainers( containers ){ + containers.classed("hidden", true); + } + + function expandContainers( containers ){ + containers.classed("hidden", false); + } + + var triggers = d3.selectAll(".accordion-trigger"); + + // Collapse all inactive triggers on startup + // collapseContainers(d3.selectAll(".accordion-trigger:not(.accordion-trigger-active) + div")); + + triggers.on("click", function (){ + var selectedTrigger = d3.select(this); + if ( selectedTrigger.classed("accordion-trigger-active") ) { + // Collapse the active (which is also the selected) trigger + collapseContainers(d3.select(selectedTrigger.node().nextElementSibling)); + selectedTrigger.classed("accordion-trigger-active", false); + } else { + // Collapse the other trigger ... + // collapseContainers(d3.selectAll(".accordion-trigger-active + div")); + // activeTriggers.classed("accordion-trigger-active", false); + // ... and expand the selected one + expandContainers(d3.select(selectedTrigger.node().nextElementSibling)); + selectedTrigger.classed("accordion-trigger-active", true); + } + }); + } + + + leftSidebar.isSidebarVisible = function (){ + return visibleSidebar; + }; + + leftSidebar.updateSideBarVis = function ( init ){ + var vis = leftSidebar.getSidebarVisibility(); + leftSidebar.showSidebar(parseInt(vis), init); + }; + + leftSidebar.initSideBarAnimation = function (){ + sideBarContainer.node().addEventListener("animationend", function (){ + sideBarContent.classed("hidden", !visibleSidebar); + if ( visibleSidebar === true ) { + sideBarContainer.style("width", "200px"); + sideBarContent.classed("hidden", false); + d3.select("#leftSideBarCollapseButton").style("left", "200px"); + d3.select("#leftSideBarCollapseButton").classed("hidden", false); + d3.select("#WarningErrorMessages").style("left", "100px"); + } + else { + sideBarContainer.style("width", "0px"); + d3.select("#leftSideBarCollapseButton").style("left", "0px"); + d3.select("#WarningErrorMessages").style("left", "0px"); + d3.select("#leftSideBarCollapseButton").classed("hidden", false); + + } + graph.updateCanvasContainerSize(); + graph.options().navigationMenu().updateScrollButtonVisibility(); + }); + }; + + leftSidebar.showSidebar = function ( val, init ){ + // make val to bool + var collapseButton = d3.select("#leftSideBarCollapseButton"); + if ( init === true ) { + visibleSidebar = (backupVisibility === 0); + sideBarContent.classed("hidden", !visibleSidebar); + sideBarContainer.style("-webkit-animation-name", "none"); + d3.select("#WarningErrorMessages").style("-webkit-animation-name", "none"); + if ( visibleSidebar === true ) { + sideBarContainer.style("width", "200px"); + sideBarContent.classed("hidden", false); + d3.select("#leftSideBarCollapseButton").style("left", "200px"); + d3.select("#leftSideBarCollapseButton").classed("hidden", false); + d3.select("#WarningErrorMessages").style("left", "100px"); + collapseButton.node().innerHTML = "<"; + } + + else { + sideBarContainer.style("width", "0px"); + d3.select("#WarningErrorMessages").style("left", "0px"); + d3.select("#leftSideBarCollapseButton").style("left", "0px"); + d3.select("#leftSideBarCollapseButton").classed("hidden", false); + collapseButton.node().innerHTML = ">"; + } + + graph.updateCanvasContainerSize(); + graph.options().navigationMenu().updateScrollButtonVisibility(); + return; + } + + d3.select("#leftSideBarCollapseButton").classed("hidden", true); + + if ( val === 1 ) { + visibleSidebar = true; + collapseButton.node().innerHTML = "<"; + // call expand animation; + sideBarContainer.style("-webkit-animation-name", "l_sbExpandAnimation"); + sideBarContainer.style("-webkit-animation-duration", "0.5s"); + // prepare the animation; + + d3.select("#WarningErrorMessages").style("-webkit-animation-name", "warn_ExpandLeftBarAnimation"); + d3.select("#WarningErrorMessages").style("-webkit-animation-duration", "0.5s"); + + } + if ( val === 0 ) { + visibleSidebar = false; + sideBarContent.classed("hidden", true); + collapseButton.node().innerHTML = ">"; + // call collapse animation + sideBarContainer.style("-webkit-animation-name", "l_sbCollapseAnimation"); + sideBarContainer.style("-webkit-animation-duration", "0.5s"); + d3.select("#WarningErrorMessages").style("-webkit-animation-name", "warn_CollapseLeftBarAnimation"); + d3.select("#WarningErrorMessages").style("-webkit-animation-duration", "0.5s"); + d3.select("#WarningErrorMessages").style("left", "0"); + } + + }; + + leftSidebar.getSidebarVisibility = function (){ + var isHidden = sideBarContent.classed("hidden"); + if ( isHidden === false ) return String(1); + if ( isHidden === true ) return String(0); + }; + + return leftSidebar; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 340: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains the logic for the sidebar. + * @param graph the graph that belongs to these controls + * @returns {{}} + */ + module.exports = function ( graph ){ + + var editSidebar = {}, + languageTools = webvowl.util.languageTools(), + elementTools = webvowl.util.elementTools(); + + var prefixModule = webvowl.util.prefixTools(graph); + var selectedElementForCharacteristics; + var oldPrefix, oldPrefixURL; + var prefix_editMode = false; + + + editSidebar.clearMetaObjectValue = function (){ + d3.select("#titleEditor").node().value = ""; + d3.select("#iriEditor").node().value = ""; + d3.select("#versionEditor").node().value = ""; + d3.select("#authorsEditor").node().value = ""; + d3.select("#descriptionEditor").node().value = ""; + // todo add clear description; + }; + + + editSidebar.updatePrefixUi = function (){ + editSidebar.updateElementWidth(); + var prefixListContainer = d3.select("#prefixURL_Container"); + while ( prefixListContainer.node().firstChild ) { + prefixListContainer.node().removeChild(prefixListContainer.node().firstChild); + } + setupPrefixList(); + }; + + editSidebar.setup = function (){ + setupCollapsing(); + setupPrefixList(); + setupAddPrefixButton(); + setupSupportedDatatypes(); + + + d3.select("#titleEditor") + .on("change", function (){ + graph.options().addOrUpdateGeneralObjectEntry("title", d3.select("#titleEditor").node().value); + }) + .on("keydown", function (){ + d3.event.stopPropagation(); + if ( d3.event.keyCode === 13 ) { + d3.event.preventDefault(); + graph.options().addOrUpdateGeneralObjectEntry("title", d3.select("#titleEditor").node().value); + } + }); + d3.select("#iriEditor") + .on("change", function (){ + if ( graph.options().addOrUpdateGeneralObjectEntry("iri", d3.select("#iriEditor").node().value) === false ) { + // restore value + d3.select("#iriEditor").node().value = graph.options().getGeneralMetaObjectProperty('iri'); + } + }) + .on("keydown", function (){ + d3.event.stopPropagation(); + if ( d3.event.keyCode === 13 ) { + d3.event.preventDefault(); + if ( graph.options().addOrUpdateGeneralObjectEntry("iri", d3.select("#iriEditor").node().value) === false ) { + // restore value + d3.select("#iriEditor").node().value = graph.options().getGeneralMetaObjectProperty('iri'); + } + } + }); + d3.select("#versionEditor") + .on("change", function (){ + graph.options().addOrUpdateGeneralObjectEntry("version", d3.select("#versionEditor").node().value); + }) + .on("keydown", function (){ + d3.event.stopPropagation(); + if ( d3.event.keyCode === 13 ) { + d3.event.preventDefault(); + graph.options().addOrUpdateGeneralObjectEntry("version", d3.select("#versionEditor").node().value); + } + }); + d3.select("#authorsEditor") + .on("change", function (){ + graph.options().addOrUpdateGeneralObjectEntry("author", d3.select("#authorsEditor").node().value); + }) + .on("keydown", function (){ + d3.event.stopPropagation(); + if ( d3.event.keyCode === 13 ) { + d3.event.preventDefault(); + graph.options().addOrUpdateGeneralObjectEntry("author", d3.select("#authorsEditor").node().value); + } + }); + d3.select("#descriptionEditor") + .on("change", function (){ + graph.options().addOrUpdateGeneralObjectEntry("description", d3.select("#descriptionEditor").node().value); + }); + + editSidebar.updateElementWidth(); + + }; + + function setupSupportedDatatypes(){ + var datatypeEditorSelection = d3.select("#typeEditor_datatype").node(); + var supportedDatatypes = ["undefined", "xsd:boolean", "xsd:double", "xsd:integer", "xsd:string"]; + for ( var i = 0; i < supportedDatatypes.length; i++ ) { + var optB = document.createElement('option'); + optB.innerHTML = supportedDatatypes[i]; + datatypeEditorSelection.appendChild(optB); + } + } + + function highlightDeleteButton( enable, name ){ + var deletePath = d3.select("#del_pathFor_" + name); + var deleteRect = d3.select("#del_rectFor_" + name); + + if ( enable === false ) { + deletePath.node().style = "stroke: #f00;"; + deleteRect.style("cursor", "auto"); + } else { + deletePath.node().style = "stroke: #ff972d;"; + deleteRect.style("cursor", "pointer"); + } + } + + + function highlightEditButton( enable, name, fill ){ + var editPath = d3.select("#pathFor_" + name); + var editRect = d3.select("#rectFor_" + name); + + if ( enable === false ) { + if ( fill ) + editPath.node().style = "fill: #fff; stroke : #fff; stroke-width : 1px"; + else + editPath.node().style = " stroke : #fff; stroke-width : 1px"; + + editRect.style("cursor", "auto"); + } else { + if ( fill ) + editPath.node().style = "fill: #ff972d; stroke : #ff972d; stroke-width : 1px"; + else + editPath.node().style = "stroke : #ff972d; stroke-width : 1px"; + editRect.style("cursor", "pointer"); + } + + } + + function setupAddPrefixButton(){ + var btn = d3.select("#addPrefixButton"); + btn.on("click", function (){ + + // check if we are still in editMode? + if ( prefix_editMode === false ) { + // create new line entry; + var name = "emptyPrefixEntry"; + var prefixListContainer = d3.select("#prefixURL_Container"); + var prefixEditContainer = prefixListContainer.append("div"); + prefixEditContainer.classed("prefixIRIElements", true); + prefixEditContainer.node().id = "prefixContainerFor_" + name; + + var IconContainer = prefixEditContainer.append("div"); + IconContainer.style("position", "absolute"); + IconContainer.node().id = "containerFor_" + name; + var editButton = IconContainer.append("svg"); + editButton.style("width", "14px"); + editButton.style("height", "20px"); + // editButton.classed("editPrefixButton", true); + editButton.classed("noselect", true); + //editButton.node().innerHTML = "\u2714"; + editButton.node().id = "editButtonFor_" + name; + + editButton.node().elementStyle = "save"; + editButton.node().selectorName = name; + var editIcon = editButton.append("g"); + var editRect = editIcon.append("rect"); + var editPath = editIcon.append("path"); + editIcon.node().id = "iconFor_" + name; + editPath.node().id = "pathFor_" + name; + editRect.node().id = "rectFor_" + name; + + editIcon.node().selectorName = name; + editPath.node().selectorName = name; + editRect.node().selectorName = name; + IconContainer.node().title = "Save new prefix and IRI"; + + editPath.classed("editPrefixIcon"); + editPath.style("stroke", "#fff"); + editPath.style("stroke-width", "1px"); + editPath.style("fill", "#fff"); + editRect.attr("width", "14px"); + editRect.attr("height", "14px"); + editRect.style("fill", "#18202A"); + editRect.attr("transform", "matrix(1,0,0,1,-3,4)"); + + editButton.selectAll("g").on("mouseover", function (){ + highlightEditButton(true, this.selectorName, true); + }); + editButton.selectAll("g").on("mouseout", function (){ + highlightEditButton(false, this.selectorName, true); + }); + // Check mark + // M9 16.2L4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4L9 16.2z + // pencil + // M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z + editPath.attr("d", "M9 16.2L4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4L9 16.2z"); + editPath.attr("transform", "matrix(0.45,0,0,0.45,0,5)"); + + var prefInput = prefixEditContainer.append("input"); + prefInput.classed("prefixInput", true); + prefInput.node().type = "text"; + prefInput.node().id = "prefixInputFor_" + name; + prefInput.node().autocomplete = "off"; + prefInput.node().value = ""; + prefInput.style("margin-left", "14px"); + + var prefURL = prefixEditContainer.append("input"); + prefURL.classed("prefixURL", true); + prefURL.node().type = "text"; + prefURL.node().id = "prefixURLFor_" + name; + prefURL.node().autocomplete = "off"; + prefURL.node().value = ""; + + prefInput.node().disabled = false; + prefURL.node().disabled = false; + prefix_editMode = true; + var deleteContainer = prefixEditContainer.append("div"); + deleteContainer.style("float", "right"); + var deleteButton = deleteContainer.append("svg"); + deleteButton.node().id = "deleteButtonFor_" + name; + deleteContainer.node().title = "Delete prefix and IRI"; + deleteButton.style("width", "10px"); + deleteButton.style("height", "20px"); + var deleteIcon = deleteButton.append("g"); + var deleteRect = deleteIcon.append("rect"); + var deletePath = deleteIcon.append("path"); + deleteIcon.node().id = "del_iconFor_" + name; + deletePath.node().id = "del_pathFor_" + name; + deleteRect.node().id = "del_rectFor_" + name; + + deleteIcon.node().selectorName = name; + deletePath.node().selectorName = name; + deleteRect.node().selectorName = name; + + + deletePath.style("stroke", "#f00"); + deleteRect.attr("width", "10px"); + deleteRect.attr("height", "14px"); + deleteRect.style("fill", "#18202A"); + deleteRect.attr("transform", "matrix(1,0,0,1,-3,4)"); + + + deletePath.attr("d", "M19 6.41L17.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 12z"); + deletePath.attr("transform", "matrix(0.45,0,0,0.45,0,5)"); + + deleteButton.selectAll("g").on("mouseover", function (){ + highlightDeleteButton(true, this.selectorName); + }); + deleteButton.selectAll("g").on("mouseout", function (){ + highlightDeleteButton(false, this.selectorName); + }); + + + // connect the buttons; + editButton.on("click", enablePrefixEdit); + deleteButton.on("click", deletePrefixLine); + + editSidebar.updateElementWidth(); + // swap focus to prefixInput + prefInput.node().focus(); + oldPrefix = name; + oldPrefixURL = ""; + d3.select("#addPrefixButton").node().innerHTML = "Save Prefix"; + } else { + d3.select("#editButtonFor_emptyPrefixEntry").on("click")(d3.select("#editButtonFor_emptyPrefixEntry").node()); + } + + }); + + } + + function setupPrefixList(){ + if ( graph.isEditorMode() === false ) return; + var prefixListContainer = d3.select("#prefixURL_Container"); + var prefixElements = graph.options().prefixList(); + for ( var name in prefixElements ) { + if ( prefixElements.hasOwnProperty(name) ) { + var prefixEditContainer = prefixListContainer.append("div"); + prefixEditContainer.classed("prefixIRIElements", true); + prefixEditContainer.node().id = "prefixContainerFor_" + name; + + // create edit button which enables the input fields + var IconContainer = prefixEditContainer.append("div"); + IconContainer.style("position", "absolute"); + IconContainer.node().id = "containerFor_" + name; + var editButton = IconContainer.append("svg"); + editButton.style("width", "14px"); + editButton.style("height", "20px"); + editButton.classed("noselect", true); + editButton.node().id = "editButtonFor_" + name; + IconContainer.node().title = "Edit prefix and IRI"; + editButton.node().elementStyle = "save"; + editButton.node().selectorName = name; + + editButton.node().id = "editButtonFor_" + name; + editButton.node().elementStyle = "edit"; + var editIcon = editButton.append("g"); + var editRect = editIcon.append("rect"); + var editPath = editIcon.append("path"); + editIcon.node().id = "iconFor_" + name; + editPath.node().id = "pathFor_" + name; + editRect.node().id = "rectFor_" + name; + + editIcon.node().selectorName = name; + editPath.node().selectorName = name; + editRect.node().selectorName = name; + + + editPath.classed("editPrefixIcon"); + editPath.style("stroke", "#fff"); + editPath.style("stroke-width", "1px"); + editRect.attr("width", "14px"); + editRect.attr("height", "14px"); + editRect.style("fill", "#18202A"); + editRect.attr("transform", "matrix(1,0,0,1,-3,4)"); + + editButton.selectAll("g").on("mouseover", function (){ + var sender = this; + var fill = false; + var enable = true; + var f_editPath = d3.select("#pathFor_" + sender.selectorName); + var f_editRect = d3.select("#rectFor_" + sender.selectorName); + + if ( enable === false ) { + if ( fill ) + f_editPath.node().style = "fill: #fff; stroke : #fff; stroke-width : 1px"; + else + f_editPath.node().style = " stroke : #fff; stroke-width : 1px"; + + f_editRect.style("cursor", "auto"); + } else { + if ( fill ) + f_editPath.node().style = "fill: #ff972d; stroke : #ff972d; stroke-width : 1px"; + else + f_editPath.node().style = "stroke : #ff972d; stroke-width : 1px"; + f_editRect.style("cursor", "pointer"); + } + }); + editButton.selectAll("g").on("mouseout", function (){ + var sender = this; + var fill = false; + var enable = false; + var f_editPath = d3.select("#pathFor_" + sender.selectorName); + var f_editRect = d3.select("#rectFor_" + sender.selectorName); + + if ( enable === false ) { + if ( fill ) + f_editPath.node().style = "fill: #fff; stroke : #fff; stroke-width : 1px"; + else + f_editPath.node().style = " stroke : #fff; stroke-width : 1px"; + + f_editRect.style("cursor", "auto"); + } else { + if ( fill ) + f_editPath.node().style = "fill: #ff972d; stroke : #ff972d; stroke-width : 1px"; + else + f_editPath.node().style = "stroke : #ff972d; stroke-width : 1px"; + f_editRect.style("cursor", "pointer"); + } + }); + + editPath.attr("d", "M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z"); + editPath.attr("transform", "matrix(-0.45,0,0,0.45,10,5)"); + + // create input field for prefix + var prefInput = prefixEditContainer.append("input"); + prefInput.classed("prefixInput", true); + prefInput.node().type = "text"; + prefInput.node().id = "prefixInputFor_" + name; + prefInput.node().autocomplete = "off"; + prefInput.node().value = name; + prefInput.style("margin-left", "14px"); + + // create input field for prefix url + var prefURL = prefixEditContainer.append("input"); + prefURL.classed("prefixURL", true); + prefURL.node().type = "text"; + prefURL.node().id = "prefixURLFor_" + name; + prefURL.node().autocomplete = "off"; + prefURL.node().value = prefixElements[name]; + prefURL.node().title = prefixElements[name]; + // disable the input fields (already defined elements can be edited later) + prefInput.node().disabled = true; + prefURL.node().disabled = true; + + // create the delete button + var deleteContainer = prefixEditContainer.append("div"); + deleteContainer.style("float", "right"); + var deleteButton = deleteContainer.append("svg"); + deleteButton.node().id = "deleteButtonFor_" + name; + deleteContainer.node().title = "Delete prefix and IRI"; + deleteButton.style("width", "10px"); + deleteButton.style("height", "20px"); + var deleteIcon = deleteButton.append("g"); + var deleteRect = deleteIcon.append("rect"); + var deletePath = deleteIcon.append("path"); + deleteIcon.node().id = "del_iconFor_" + name; + deletePath.node().id = "del_pathFor_" + name; + deleteRect.node().id = "del_rectFor_" + name; + + deleteIcon.node().selectorName = name; + deletePath.node().selectorName = name; + deleteRect.node().selectorName = name; + + + deletePath.style("stroke", "#f00"); + deleteRect.attr("width", "10px"); + deleteRect.attr("height", "14px"); + deleteRect.style("fill", "#18202A"); + deleteRect.attr("transform", "matrix(1,0,0,1,-3,4)"); + + + deletePath.attr("d", "M19 6.41L17.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 12z"); + deletePath.attr("transform", "matrix(0.45,0,0,0.45,0,5)"); + + deleteButton.selectAll("g").on("mouseover", function (){ + var selector = this; + var enable = true; + var f_deletePath = d3.select("#del_pathFor_" + selector.selectorName); + var f_deleteRect = d3.select("#del_rectFor_" + selector.selectorName); + + if ( enable === false ) { + f_deletePath.node().style = "stroke: #f00;"; + f_deleteRect.style("cursor", "auto"); + } else { + f_deletePath.node().style = "stroke: #ff972d;"; + f_deleteRect.style("cursor", "pointer"); + } + }); + deleteButton.selectAll("g").on("mouseout", function (){ + var selector = this; + var enable = false; + var f_deletePath = d3.select("#del_pathFor_" + selector.selectorName); + var f_deleteRect = d3.select("#del_rectFor_" + selector.selectorName); + + if ( enable === false ) { + f_deletePath.node().style = "stroke: #f00;"; + f_deleteRect.style("cursor", "auto"); + } else { + f_deletePath.node().style = "stroke: #ff972d;"; + f_deleteRect.style("cursor", "pointer"); + } + }); + + + editButton.on("click", enablePrefixEdit); + deleteButton.on("click", deletePrefixLine); + + // EXPERIMENTAL + + if ( name === "rdf" || + name === "rdfs" || + name === "xsd" || name === "dc" || + name === "owl" + ) { + // make them invis so the spacing does not change + IconContainer.classed("hidden", true); + deleteContainer.classed("hidden", true); + } + } + } + prefixModule.updatePrefixModel(); + } + + function deletePrefixLine(){ + if ( this.disabled === true ) return; + d3.select("#addPrefixButton").node().innerHTML = "Add Prefix"; + var selector = this.id.split("_")[1]; + d3.select("#prefixContainerFor_" + selector).remove(); + graph.options().removePrefix(selector); + prefix_editMode = false; // < 0 ) { + var basePref = graph.options().prefixList()[pr]; + if ( basePref === undefined ) { + console.log("ERROR __________________"); + graph.options().warningModule().showWarning("Invalid Element IRI", + "Could not resolve prefix '" + basePref + "'", + "Restoring previous IRI for Element" + element.iri(), 1, false); + d3.select("#element_iriEditor").node().value = element.iri(); + return; + + } + // check if url is not empty + + if ( name.length === 0 ) { + graph.options().warningModule().showWarning("Invalid Element IRI", + "Input IRI is EMPTY", + "Restoring previous IRI for Element" + element.iri(), 1, false); + console.log("NO INPUT PROVIDED"); + d3.select("#element_iriEditor").node().value = element.iri(); + return; + + } + url = basePref + name; + } + else { + url = base + name; + } + } else { + if ( url.length === 0 ) { + // + console.log("NO INPUT PROVIDED"); + d3.select("#element_iriEditor").node().value = element.iri(); + return; + } + // failed to identify anything useful + console.log("Tryig to use the input!"); + url = base + url; + } + } + return url; + } + + function changeIriForElement( element ){ + var url = getURLFROMPrefixedVersion(element); + var base = graph.options().getGeneralMetaObjectProperty("iri"); + var sanityCheckResult; + if ( elementTools.isNode(element) ) { + + sanityCheckResult = graph.checkIfIriClassAlreadyExist(url); + if ( sanityCheckResult === false ) { + element.iri(url); + } else { + // throw warnign + graph.options().warningModule().showWarning("Already seen this class", + "Input IRI: " + url + " for element: " + element.labelForCurrentLanguage() + " already been set", + "Restoring previous IRI for Element : " + element.iri(), 2, false, sanityCheckResult); + + editSidebar.updateSelectionInformation(element); + return; + + } + } + if ( elementTools.isProperty(element) === true ) { + sanityCheckResult = editSidebar.checkProperIriChange(element, url); + if ( sanityCheckResult !== false ) { + graph.options().warningModule().showWarning("Already seen this property", + "Input IRI: " + url + " for element: " + element.labelForCurrentLanguage() + " already been set", + "Restoring previous IRI for Element : " + element.iri(), 1, false, sanityCheckResult); + + editSidebar.updateSelectionInformation(element); + return; + } + } + + // if (element.existingPropertyIRI(url)===true){ + // console.log("I Have seen this Particular URL already "+url); + // graph.options().warningModule().showWarning("Already Seen This one ", + // "Input IRI For Element"+ element.labelForCurrentLanguage()+" already been set ", + // "Restoring previous IRI for Element"+element.iri(),1,false); + // d3.select("#element_iriEditor").node().value=graph.options().prefixModule().getPrefixRepresentationForFullURI(element.iri()); + // editSidebar.updateSelectionInformation(element); + // return; + // } + + element.iri(url); + if ( identifyExternalCharacteristicForElement(base, url) === true ) { + addAttribute(element, "external"); + // background color for external element; + element.backgroundColor("#36C"); + element.redrawElement(); + element.redrawLabelText(); + // handle visual selection + + } else { + removeAttribute(element, "external"); + // background color for external element; + element.backgroundColor(undefined); + element.redrawElement(); + element.redrawLabelText(); + + } + + if ( element.focused() ) { + graph.options().focuserModule().handle(element, true); // unfocus + graph.options().focuserModule().handle(element, true); // focus + } + // graph.options().focuserModule().handle(undefined); + + + d3.select("#element_iriEditor").node().value = prefixModule.getPrefixRepresentationForFullURI(url); + editSidebar.updateSelectionInformation(element); + } + + function validURL( str ){ + var urlregex = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/; + return urlregex.test(str); + } + + + function changeLabelForElement( element ){ + element.label(d3.select("#element_labelEditor").node().value); + element.redrawLabelText(); + } + + editSidebar.updateEditDeleteButtonIds = function ( oldPrefix, newPrefix ){ + d3.select("#prefixInputFor_" + oldPrefix).node().id = "prefixInputFor_" + newPrefix; + d3.select("#prefixURLFor_" + oldPrefix).node().id = "prefixURLFor_" + newPrefix; + d3.select("#deleteButtonFor_" + oldPrefix).node().id = "deleteButtonFor_" + newPrefix; + d3.select("#editButtonFor_" + oldPrefix).node().id = "editButtonFor_" + newPrefix; + + d3.select("#prefixContainerFor_" + oldPrefix).node().id = "prefixContainerFor_" + newPrefix; + }; + + editSidebar.checkForExistingURL = function ( url ){ + var i; + var allProps = graph.getUnfilteredData().properties; + for ( i = 0; i < allProps.length; i++ ) { + if ( allProps[i].iri() === url ) return true; + } + return false; + + }; + editSidebar.checkProperIriChange = function ( element, url ){ + console.log("Element changed Label"); + console.log("Testing URL " + url); + if ( element.type() === "rdfs:subClassOf" || element.type() === "owl:disjointWith" ) { + console.log("ignore this for now, already handled in the type and domain range changer"); + } else { + var i; + var allProps = graph.getUnfilteredData().properties; + for ( i = 0; i < allProps.length; i++ ) { + if ( allProps[i] === element ) continue; + if ( allProps[i].iri() === url ) return allProps[i]; + } + } + return false; + }; + + editSidebar.updateSelectionInformation = function ( element ){ + + if ( element === undefined ) { + // show hint; + d3.select("#selectedElementProperties").classed("hidden", true); + d3.select("#selectedElementPropertiesEmptyHint").classed("hidden", false); + selectedElementForCharacteristics = null; + editSidebar.updateElementWidth(); + } + else { + d3.select("#selectedElementProperties").classed("hidden", false); + d3.select("#selectedElementPropertiesEmptyHint").classed("hidden", true); + d3.select("#typeEditForm_datatype").classed("hidden", true); + + // set the element IRI, and labels + d3.select("#element_iriEditor").node().value = element.iri(); + d3.select("#element_labelEditor").node().value = element.labelForCurrentLanguage(); + d3.select("#element_iriEditor").node().title = element.iri(); + + d3.select("#element_iriEditor") + .on("change", function (){ + var elementIRI = element.iri(); + var prefixed = graph.options().prefixModule().getPrefixRepresentationForFullURI(elementIRI); + if ( prefixed === d3.select("#element_iriEditor").node().value ) { + console.log("Iri is identical, nothing has changed!"); + return; + } + + changeIriForElement(element); + }) + .on("keydown", function (){ + d3.event.stopPropagation(); + if ( d3.event.keyCode === 13 ) { + d3.event.preventDefault(); + console.log("IRI CHANGED Via ENTER pressed"); + changeIriForElement(element); + d3.select("#element_iriEditor").node().title = element.iri(); + } + }); + + var forceIRISync = defaultIriValue(element); + d3.select("#element_labelEditor") + .on("change", function (){ + var sanityCheckResult; + console.log("Element changed Label"); + var url = getURLFROMPrefixedVersion(element); + if ( element.iri() !== url ) { + if ( elementTools.isProperty(element) === true ) { + sanityCheckResult = editSidebar.checkProperIriChange(element, url); + if ( sanityCheckResult !== false ) { + graph.options().warningModule().showWarning("Already seen this property", + "Input IRI: " + url + " for element: " + element.labelForCurrentLanguage() + " already been set", + "Continuing with duplicate property!", 1, false, sanityCheckResult); + editSidebar.updateSelectionInformation(element); + return; + } + } + + if ( elementTools.isNode(element) === true ) { + sanityCheckResult = graph.checkIfIriClassAlreadyExist(url); + if ( sanityCheckResult !== false ) { + graph.options().warningModule().showWarning("Already seen this Class", + "Input IRI: " + url + " for element: " + element.labelForCurrentLanguage() + " already been set", + "Restoring previous IRI for Element : " + element.iri(), 2, false, sanityCheckResult); + + editSidebar.updateSelectionInformation(element); + return; + } + } + element.iri(url); + } + changeLabelForElement(element); + editSidebar.updateSelectionInformation(element); // prevents that it will be changed if node is still active + }) + .on("keydown", function (){ + d3.event.stopPropagation(); + if ( d3.event.keyCode === 13 ) { + d3.event.preventDefault(); + var sanityCheckResult; + console.log("Element changed Label"); + var url = getURLFROMPrefixedVersion(element); + if ( element.iri() !== url ) { + if ( elementTools.isProperty(element) === true ) { + sanityCheckResult = editSidebar.checkProperIriChange(element, url); + if ( sanityCheckResult !== false ) { + graph.options().warningModule().showWarning("Already seen this property", + "Input IRI: " + url + " for element: " + element.labelForCurrentLanguage() + " already been set", + "Continuing with duplicate property!", 1, false, sanityCheckResult); + + editSidebar.updateSelectionInformation(element); + return; + } + } + + if ( elementTools.isNode(element) === true ) { + sanityCheckResult = graph.checkIfIriClassAlreadyExist(url); + if ( sanityCheckResult !== false ) { + graph.options().warningModule().showWarning("Already seen this Class", + "Input IRI: " + url + " for element: " + element.labelForCurrentLanguage() + " already been set", + "Restoring previous IRI for Element : " + element.iri(), 2, false, sanityCheckResult); + + editSidebar.updateSelectionInformation(element); + return; + } + } + element.iri(url); + } + changeLabelForElement(element); + } + }) + .on("keyup", function (){ + if ( forceIRISync ) { + var labelName = d3.select("#element_labelEditor").node().value; + var resourceName = labelName.replaceAll(" ", "_"); + var syncedIRI = element.baseIri() + resourceName; + + //element.iri(syncedIRI); + d3.select("#element_iriEditor").node().title = element.iri(); + d3.select("#element_iriEditor").node().value = prefixModule.getPrefixRepresentationForFullURI(syncedIRI); + } + }); + // check if we are allowed to change IRI OR LABEL + d3.select("#element_iriEditor").node().disabled = false; + d3.select("#element_labelEditor").node().disabled = false; + + if ( element.type() === "rdfs:subClassOf" ) { + d3.select("#element_iriEditor").node().value = "http://www.w3.org/2000/01/rdf-schema#subClassOf"; + d3.select("#element_iriEditor").node().title = "http://www.w3.org/2000/01/rdf-schema#subClassOf"; + d3.select("#element_labelEditor").node().value = "Subclass of"; + d3.select("#element_iriEditor").node().disabled = true; + d3.select("#element_labelEditor").node().disabled = true; + } + if ( element.type() === "owl:Thing" ) { + d3.select("#element_iriEditor").node().value = "http://www.w3.org/2002/07/owl#Thing"; + d3.select("#element_iriEditor").node().title = "http://www.w3.org/2002/07/owl#Thing"; + d3.select("#element_labelEditor").node().value = "Thing"; + d3.select("#element_iriEditor").node().disabled = true; + d3.select("#element_labelEditor").node().disabled = true; + } + + if ( element.type() === "owl:disjointWith" ) { + d3.select("#element_iriEditor").node().value = "http://www.w3.org/2002/07/owl#disjointWith"; + d3.select("#element_iriEditor").node().title = "http://www.w3.org/2002/07/owl#disjointWith"; + d3.select("#element_iriEditor").node().disabled = true; + d3.select("#element_labelEditor").node().disabled = true; + } + + if ( element.type() === "rdfs:Literal" ) { + d3.select("#element_iriEditor").node().value = "http://www.w3.org/2000/01/rdf-schema#Literal"; + d3.select("#element_iriEditor").node().title = "http://www.w3.org/2000/01/rdf-schema#Literal"; + d3.select("#element_iriEditor").node().disabled = true; + d3.select("#element_labelEditor").node().disabled = true; + element.iri("http://www.w3.org/2000/01/rdf-schema#Literal"); + } + if ( element.type() === "rdfs:Datatype" ) { + var datatypeEditorSelection = d3.select("#typeEditor_datatype"); + d3.select("#typeEditForm_datatype").classed("hidden", false); + element.iri("http://www.w3.org/2000/01/rdf-schema#Datatype"); + d3.select("#element_iriEditor").node().value = "http://www.w3.org/2000/01/rdf-schema#Datatype"; + d3.select("#element_iriEditor").node().title = "http://www.w3.org/2000/01/rdf-schema#Datatype"; + d3.select("#element_iriEditor").node().disabled = true; + d3.select("#element_labelEditor").node().disabled = true; + + datatypeEditorSelection.node().value = element.dType(); + if ( datatypeEditorSelection.node().value === "undefined" ) { + d3.select("#element_iriEditor").node().disabled = true; // always prevent IRI modifications + d3.select("#element_labelEditor").node().disabled = false; + } + // reconnect the element + datatypeEditorSelection.on("change", function (){ + changeDatatypeType(element); + }); + } + + // add type selector + var typeEditorSelection = d3.select("#typeEditor").node(); + var htmlCollection = typeEditorSelection.children; + var numEntries = htmlCollection.length; + var i; + var elementPrototypes = getElementPrototypes(element); + for ( i = 0; i < numEntries; i++ ) + typeEditorSelection.removeChild(htmlCollection[0]); + + for ( i = 0; i < elementPrototypes.length; i++ ) { + var optA = document.createElement('option'); + optA.innerHTML = elementPrototypes[i]; + typeEditorSelection.appendChild(optA); + } + // set the proper value in the selection + typeEditorSelection.value = element.type(); + d3.select("#typeEditor").on("change", function (){ + elementTypeSelectionChanged(element); + }); + + + // add characteristics selection + var needChar = elementNeedsCharacteristics(element); + d3.select("#property_characteristics_Container").classed("hidden", !needChar); + if ( needChar === true ) { + addElementsCharacteristics(element); + } + var fullURI = d3.select("#element_iriEditor").node().value; + d3.select("#element_iriEditor").node().value = prefixModule.getPrefixRepresentationForFullURI(fullURI); + d3.select("#element_iriEditor").node().title = fullURI; + editSidebar.updateElementWidth(); + } + + }; + + editSidebar.updateGeneralOntologyInfo = function (){ + var preferredLanguage = graph && graph.language ? graph.language() : null; + + // get it from graph.options + var generalMetaObj = graph.options().getGeneralMetaObject(); + if ( generalMetaObj.hasOwnProperty("title") ) { + // title has language to it -.- + if ( typeof generalMetaObj.title === "object" ) { + d3.select("#titleEditor").node().value = languageTools.textInLanguage(generalMetaObj.title, preferredLanguage); + } else + d3.select("#titleEditor").node().value = generalMetaObj.title; + } + if ( generalMetaObj.hasOwnProperty("iri") ) d3.select("#iriEditor").node().value = generalMetaObj.iri; + if ( generalMetaObj.hasOwnProperty("version") ) d3.select("#versionEditor").node().value = generalMetaObj.version; + if ( generalMetaObj.hasOwnProperty("author") ) d3.select("#authorsEditor").node().value = generalMetaObj.author; + + + if ( generalMetaObj.hasOwnProperty("description") ) { + + if ( typeof generalMetaObj.description === "object" ) + d3.select("#descriptionEditor").node().value = + languageTools.textInLanguage(generalMetaObj.description, preferredLanguage); + else + d3.select("#descriptionEditor").node().value = generalMetaObj.description; + } + else + d3.select("#descriptionEditor").node().value = "No Description"; + }; + + editSidebar.updateElementWidth = function (){ + var height = window.innerHeight - 40; + var lsb_offset = d3.select("#logo").node().getBoundingClientRect().height + 5; + var lsb_height = height - lsb_offset; + d3.select("#containerForLeftSideBar").style("top", lsb_offset + "px"); + d3.select("#leftSideBarCollapseButton").style("top", lsb_offset + "px"); + d3.select("#containerForLeftSideBar").style("height", lsb_height + "px"); + + var div_width = d3.select("#generalDetailsEdit").node().getBoundingClientRect().width; + div_width += 10; + + var title_labelWidth = d3.select("#titleEditor-label").node().getBoundingClientRect().width + 20; + var iri_labelWidth = d3.select("#iriEditor-label").node().getBoundingClientRect().width + 20; + var version_labelWidth = d3.select("#versionEditor-label").node().getBoundingClientRect().width + 20; + var author_labelWidth = d3.select("#authorsEditor-label").node().getBoundingClientRect().width + 20; + //find max width; + var maxW = 0; + maxW = Math.max(maxW, title_labelWidth); + maxW = Math.max(maxW, iri_labelWidth); + maxW = Math.max(maxW, version_labelWidth); + maxW = Math.max(maxW, author_labelWidth); + + var meta_inputWidth = div_width - maxW - 10; + + d3.select("#titleEditor").style("width", meta_inputWidth + "px"); + d3.select("#iriEditor").style("width", meta_inputWidth + "px"); + d3.select("#versionEditor").style("width", meta_inputWidth + "px"); + d3.select("#authorsEditor").style("width", meta_inputWidth + "px"); + + + var elementIri_width = d3.select("#element_iriEditor-label").node().getBoundingClientRect().width + 20; + var elementLabel_width = d3.select("#element_labelEditor-label").node().getBoundingClientRect().width + 20; + var elementType_width = d3.select("#typeEditor-label").node().getBoundingClientRect().width + 20; + var elementDType_width = d3.select("#typeEditor_datatype-label").node().getBoundingClientRect().width + 20; + + maxW = 0; + maxW = Math.max(maxW, elementIri_width); + maxW = Math.max(maxW, elementLabel_width); + maxW = Math.max(maxW, elementType_width); + maxW = Math.max(maxW, elementDType_width); + var selectedElement_inputWidth = div_width - maxW - 10; + + d3.select("#element_iriEditor").style("width", selectedElement_inputWidth + "px"); + d3.select("#element_labelEditor").style("width", selectedElement_inputWidth + "px"); + d3.select("#typeEditor").style("width", selectedElement_inputWidth + 4 + "px"); + d3.select("#typeEditor_datatype").style("width", selectedElement_inputWidth + 4 + "px"); + + // update prefix Element width; + var containerWidth = d3.select("#containerForPrefixURL").node().getBoundingClientRect().width; + if ( containerWidth !== 0 ) { + var inputs = d3.selectAll(".prefixInput"); + if ( inputs.node() ) { + var prefixWidth = d3.selectAll(".prefixInput").node().getBoundingClientRect().width; + d3.selectAll(".prefixURL").style("width", containerWidth - prefixWidth - 45 + "px"); + } + } + }; + + function addElementsCharacteristics( element ){ + // save selected element for checkbox handler + selectedElementForCharacteristics = element; + var i; + // KILL old elements + var charSelectionNode = d3.select("#property_characteristics_Selection"); + var htmlCollection = charSelectionNode.node().children; + if ( htmlCollection ) { + var numEntries = htmlCollection.length; + for ( var q = 0; q < numEntries; q++ ) { + charSelectionNode.node().removeChild(htmlCollection[0]); + } + } + // datatypes kind of ignored by the elementsNeedCharacteristics function + // so we need to check if we are a node or not + if ( element.attributes().indexOf("external") > -1 ) { + // add external span to the div; + var externalCharSpan = charSelectionNode.append("span"); + externalCharSpan.classed("spanForCharSelection", true); + externalCharSpan.node().innerHTML = "external"; + } + var filterContainer, + filterCheckbox; + if ( elementTools.isNode(element) === true ) { + // add the deprecated characteristic; + var arrayOfNodeChars = ["deprecated"]; + for ( i = 0; i < arrayOfNodeChars.length; i++ ) { + filterContainer = charSelectionNode + .append("div") + .classed("checkboxContainer", true) + .style("padding-top", "2px"); + + filterCheckbox = filterContainer.append("input") + .classed("filterCheckbox", true) + .attr("id", "CharacteristicsCheckbox" + i) + .attr("type", "checkbox") + .attr("characteristics", arrayOfNodeChars[i]) + .property("checked", getPresentAttribute(element, arrayOfNodeChars[i])); + // + filterContainer.append("label") + .attr("for", "CharacteristicsCheckbox" + i) + .text(arrayOfNodeChars[i]); + + filterCheckbox.on("click", handleCheckBoxClick); + + } + } + + else { + // add the deprecated characteristic; + var arrayOfPropertyChars = ["deprecated", "inverse functional", "functional", "transitive"]; + if ( elementTools.isDatatypeProperty(element) === true ) { + arrayOfPropertyChars = ["deprecated", "functional"]; + } + for ( i = 0; i < arrayOfPropertyChars.length; i++ ) { + filterContainer = charSelectionNode + .append("div") + .classed("checkboxContainer", true) + .style("padding-top", "2px"); + + filterCheckbox = filterContainer.append("input") + .classed("filterCheckbox", true) + .attr("id", "CharacteristicsCheckbox" + i) + .attr("type", "checkbox") + .attr("characteristics", arrayOfPropertyChars[i]) + .property("checked", getPresentAttribute(element, arrayOfPropertyChars[i])); + // + filterContainer.append("label") + .attr("for", "CharacteristicsCheckbox" + i) + .text(arrayOfPropertyChars[i]); + + filterCheckbox.on("click", handleCheckBoxClick); + + } + } + + + } + + function getPresentAttribute( selectedElement, element ){ + return (selectedElement.attributes().indexOf(element) >= 0); + } + + function handleCheckBoxClick(){ + var checked = this.checked; + var char = this.getAttribute("characteristics"); + if ( checked === true ) { + addAttribute(selectedElementForCharacteristics, char); + } else { + removeAttribute(selectedElementForCharacteristics, char); + } + // graph.executeColorExternalsModule(); + selectedElementForCharacteristics.redrawElement(); + // workaround to have the node still be focused as rendering element + selectedElementForCharacteristics.focused(false); + selectedElementForCharacteristics.toggleFocus(); + + } + + + function addAttribute( selectedElement, char ){ + if ( selectedElement.attributes().indexOf(char) === -1 ) { + // not found add it + var attr = selectedElement.attributes(); + attr.push(char); + selectedElement.attributes(attr); + }// indications string update; + if ( selectedElement.indications().indexOf(char) === -1 ) { + var indications = selectedElement.indications(); + indications.push(char); + selectedElement.indications(indications); + } + // add visual attributes + var visAttr; + if ( selectedElement.visualAttributes().indexOf(char) === -1 ) { + visAttr = selectedElement.visualAttributes(); + visAttr.push(char); + selectedElement.visualAttributes(visAttr); + } + if ( getPresentAttribute(selectedElement, "external") && getPresentAttribute(selectedElement, "deprecated") ) { + visAttr = selectedElement.visualAttributes(); + var visInd = visAttr.indexOf("external"); + if ( visInd > -1 ) { + visAttr.splice(visInd, 1); + } + selectedElement.visualAttributes(visAttr); + } + + } + + function removeAttribute( selectedElement, element ){ + var attr = selectedElement.attributes(); + var indications = selectedElement.indications(); + var visAttr = selectedElement.visualAttributes(); + var attrInd = attr.indexOf(element); + if ( attrInd >= 0 ) { + attr.splice(attrInd, 1); + } + var indInd = indications.indexOf(element); + if ( indInd > -1 ) { + indications.splice(indInd, 1); + } + var visInd = visAttr.indexOf(element); + if ( visInd > -1 ) { + visAttr.splice(visInd, 1); + } + selectedElement.attributes(attr); + selectedElement.indications(indications); + selectedElement.visualAttributes(visAttr); + if ( element === "deprecated" ) { + // set its to its original Style + //typeBaseThign + // todo : fix all different types + if ( selectedElement.type() === "owl:Class" ) selectedElement.styleClass("class"); + if ( selectedElement.type() === "owl:DatatypeProperty" ) selectedElement.styleClass("datatypeproperty"); + if ( selectedElement.type() === "owl:ObjectProperty" ) selectedElement.styleClass("objectproperty"); + if ( selectedElement.type() === "owl:disjointWith" ) selectedElement.styleClass("disjointwith"); + } + } + + + function elementNeedsCharacteristics( element ){ + //TODO: Add more types + if ( element.type() === "owl:Thing" || + element.type() === "rdfs:subClassOf" || + element.type() === "rdfs:Literal" || + element.type() === "rdfs:Datatype" || + element.type() === "rdfs:disjointWith" ) + return false; + + // if (element.attributes().indexOf("external")|| + // element.attributes().indexOf("deprecated")) + // return true; + return true; + + } + + function elementTypeSelectionChanged( element ){ + if ( elementTools.isNode(element) ) { + if ( graph.changeNodeType(element) === false ) { + //restore old value + + if ( elementTools.isDatatype(element) === true ) { + + } + editSidebar.updateSelectionInformation(element); + } + } + + if ( elementTools.isProperty(element) ) { + if ( graph.changePropertyType(element) === false ) { + //restore old value + editSidebar.updateSelectionInformation(element); + + } + } + + } + + function getElementPrototypes( selectedElement ){ + var availiblePrototypes = []; + // TODO the text should be also complied with the prefixes loaded into the ontology + if ( elementTools.isProperty(selectedElement) ) { + if ( selectedElement.type() === "owl:DatatypeProperty" ) + availiblePrototypes.push("owl:DatatypeProperty"); + else { + availiblePrototypes.push("owl:ObjectProperty"); + // handling loops ! + if ( selectedElement.domain() !== selectedElement.range() ) { + availiblePrototypes.push("rdfs:subClassOf"); + } + availiblePrototypes.push("owl:disjointWith"); + availiblePrototypes.push("owl:allValuesFrom"); + availiblePrototypes.push("owl:someValuesFrom"); + } + return availiblePrototypes; + } + if ( selectedElement.renderType() === "rect" ) { + availiblePrototypes.push("rdfs:Literal"); + availiblePrototypes.push("rdfs:Datatype"); + } else { + availiblePrototypes.push("owl:Class"); + availiblePrototypes.push("owl:Thing"); + // TODO: ADD MORE TYPES + // availiblePrototypes.push("owl:complementOf"); + // availiblePrototypes.push("owl:disjointUnionOf"); + } + return availiblePrototypes; + } + + + function setupCollapsing(){ + // TODO : Decision , for now I want to have the control over the collapse expand operation of the + // TODO : elements, otherwise the old approach will also randomly collapse other containers + + // adapted version of this example: http://www.normansblog.de/simple-jquery-accordion/ + function collapseContainers( containers ){ + containers.classed("hidden", true); + } + + function expandContainers( containers ){ + containers.classed("hidden", false); + } + + var triggers = d3.selectAll(".accordion-trigger"); + + // Collapse all inactive triggers on startup + // collapseContainers(d3.selectAll(".accordion-trigger:not(.accordion-trigger-active) + div")); + + triggers.on("click", function (){ + var selectedTrigger = d3.select(this); + if ( selectedTrigger.classed("accordion-trigger-active") ) { + // Collapse the active (which is also the selected) trigger + collapseContainers(d3.select(selectedTrigger.node().nextElementSibling)); + selectedTrigger.classed("accordion-trigger-active", false); + } else { + // Collapse the other trigger ... + // collapseContainers(d3.selectAll(".accordion-trigger-active + div")); + + // ... and expand the selected one + expandContainers(d3.select(selectedTrigger.node().nextElementSibling)); + selectedTrigger.classed("accordion-trigger-active", true); + } + editSidebar.updateElementWidth(); + }); + } + + return editSidebar; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 341: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {module.exports = function ( graph ){ + var configMenu = {}, + checkboxes = []; + + + configMenu.setup = function (){ + var menuEntry = d3.select("#m_modes"); + menuEntry.on("mouseover", function (){ + var searchMenu = graph.options().searchMenu(); + searchMenu.hideSearchEntries(); + }); + + addCheckBox("showZoomSlider", "Zoom controls", "#zoomSliderOption", graph.options().zoomSlider().showSlider, 0); + addLabelWidthSlider("#maxLabelWidthSliderOption", "maxLabelWidth", "Max label width", graph.options().maxLabelWidth); + }; + + + function addLabelWidthSlider( selector, identifier, label, onChangeFunction ){ + var sliderContainer, + sliderValueLabel; + + sliderContainer = d3.select(selector) + .append("div") + .classed("distanceSliderContainer", true); + + var slider = sliderContainer.append("input") + .attr("id", identifier + "Slider") + .attr("type", "range") + .attr("min", 20) + .attr("max", 600) + .attr("value", onChangeFunction()) + .attr("step", 10); + sliderContainer.append("label") + .classed("description", true) + .attr("for", identifier + "Slider") + .attr("id", identifier + "DescriptionLabel") + .text(label); + sliderValueLabel = sliderContainer.append("label") + .classed("value", true) + .attr("for", identifier + "Slider") + .attr("id", identifier + "valueLabel") + .text(onChangeFunction()); + + slider.on("input", function (){ + var value = slider.property("value"); + onChangeFunction(value); + sliderValueLabel.text(value); + if ( graph.options().dynamicLabelWidth() === true ) + graph.animateDynamicLabelWidth(); + }); + + // add wheel event to the slider + slider.on("wheel", function (){ + if ( slider.node().disabled === true ) return; + var wheelEvent = d3.event; + var offset; + if ( wheelEvent.deltaY < 0 ) offset = 10; + if ( wheelEvent.deltaY > 0 ) offset = -10; + var oldVal = parseInt(slider.property("value")); + var newSliderValue = oldVal + offset; + if ( newSliderValue !== oldVal ) { + slider.property("value", newSliderValue); + onChangeFunction(newSliderValue); + slider.on("input")(); // << set text and update the graphStyles + } + d3.event.preventDefault(); + }); + } + + function addCheckBox( identifier, modeName, selector, onChangeFunc, updateLvl ){ + var configOptionContainer = d3.select(selector) + .append("div") + .classed("checkboxContainer", true); + var configCheckbox = configOptionContainer.append("input") + .classed("moduleCheckbox", true) + .attr("id", identifier + "ConfigCheckbox") + .attr("type", "checkbox") + .property("checked", onChangeFunc()); + + + configCheckbox.on("click", function ( silent ){ + var isEnabled = configCheckbox.property("checked"); + onChangeFunc(isEnabled); + if ( silent !== true ) { + // updating graph when silent is false or the parameter is not given. + if ( updateLvl === 1 ) { + graph.lazyRefresh(); + //graph.redrawWithoutForce + } + if ( updateLvl === 2 ) { + graph.update(); + } + + if ( updateLvl === 3 ) { + graph.updateDraggerElements(); + } + } + + }); + checkboxes.push(configCheckbox); + configOptionContainer.append("label") + .attr("for", identifier + "ConfigCheckbox") + .text(modeName); + } + + configMenu.setCheckBoxValue = function ( identifier, value ){ + for ( var i = 0; i < checkboxes.length; i++ ) { + var cbdId = checkboxes[i].attr("id"); + if ( cbdId === identifier ) { + checkboxes[i].property("checked", value); + break; + } + } + }; + + configMenu.getCheckBoxValue = function ( id ){ + for ( var i = 0; i < checkboxes.length; i++ ) { + var cbdId = checkboxes[i].attr("id"); + if ( cbdId === id ) { + return checkboxes[i].property("checked"); + } + } + }; + + configMenu.updateSettings = function (){ + var silent = true; + checkboxes.forEach(function ( checkbox ){ + checkbox.on("click")(silent); + }); + }; + + return configMenu; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 342: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {module.exports = function ( graph ){ + /** some constants **/ + var PREDEFINED = 0, + FILE_UPLOAD = 1, + JSON_URL = 2, + IRI_URL = 3; + + var PROGRESS_BAR_ERROR = 0, + PROGRESS_BAR_BUSY = 1, + PROGRESS_BAR_PERCENT = 2, + progressBarMode = 1; + + var loadingWasSuccessFul = false; + var missingImportsWarning = false; + var showLoadingDetails = false; + var visibilityStatus = true; + + var DEFAULT_JSON_NAME = "ontology"; // This file is loaded by default + var conversion_sessionId; + + /** variable defs **/ + var loadingModule = {}, + menuContainer = d3.select("#loading-info"), + loadingInfoContainer = d3.select("#loadingInfo-container"), + detailsButton = d3.select("#show-loadingInfo-button"), + closeButton = d3.select("#loadingIndicator_closeButton"), + ontologyMenu, + ontologyIdentifierFromURL; + + /** functon defs **/ + loadingModule.checkForScreenSize = function (){ + // checks for window size and adjusts the loading indicator + var w = graph.options().width(), + h = graph.options().height(); + + if ( w < 270 ) { + d3.select("#loading-info").classed("hidden", true); + } else { + // check if it should be visible + if ( visibilityStatus === true ) { + d3.select("#loading-info").classed("hidden", false); + } else { + d3.select("#loading-info").classed("hidden", true); + } + } + if ( h < 150 ) { + d3.select("#loadingInfo_msgBox").classed("hidden", true); + } else { + d3.select("#loadingInfo_msgBox").classed("hidden", false); + } + if ( h < 80 ) { + d3.select("#progressBarContext").classed("hidden", true); + d3.select("#layoutLoadingProgressBarContainer").style("height", "20px"); + } else { + d3.select("#progressBarContext").classed("hidden", false); + d3.select("#layoutLoadingProgressBarContainer").style("height", "50px"); + } + }; + + loadingModule.getMessageVisibilityStatus = function (){ + return visibilityStatus; + }; + + loadingModule.getProgressBarMode = function (){ + return progressBarMode; + }; + + loadingModule.successfullyLoadedOntology = function (){ + return loadingWasSuccessFul; + }; + + loadingModule.missingImportsWarning = function (){ + return missingImportsWarning; + }; + + loadingModule.setOntologyMenu = function ( m ){ + ontologyMenu = m; + }; + + loadingModule.showErrorDetailsMessage = function (){ + loadingModule.showLoadingIndicator(); + loadingModule.expandDetails(); + d3.select("#loadingIndicator_closeButton").classed("hidden", true); + loadingModule.scrollDownDetails(); + }; + + loadingModule.showWarningDetailsMessage = function (){ + d3.select("#currentLoadingStep").style("color", "#ff0"); + loadingModule.showLoadingIndicator(); + loadingModule.expandDetails(); + d3.select("#loadingIndicator_closeButton").classed("hidden", false); + loadingModule.scrollDownDetails(); + }; + + loadingModule.scrollDownDetails = function (){ + var scrollingElement = d3.select("#loadingInfo-container").node(); + scrollingElement.scrollTop = scrollingElement.scrollHeight; + }; + + loadingModule.hideLoadingIndicator = function (){ + d3.select("#loading-info").classed("hidden", true); + visibilityStatus = false; + }; + + loadingModule.showLoadingIndicator = function (){ + d3.select("#loading-info").classed("hidden", false); + visibilityStatus = true; + + }; + + /** -- SETUP -- **/ + loadingModule.setup = function (){ + // create connections for close and details button; + loadingInfoContainer.classed("hidden", !showLoadingDetails); + detailsButton.on("click", function (){ + showLoadingDetails = !showLoadingDetails; + loadingInfoContainer.classed("hidden", !showLoadingDetails); + detailsButton.classed("accordion-trigger-active", showLoadingDetails); + }); + + closeButton.on("click", function (){ + menuContainer.classed("hidden", true); + }); + loadingModule.setBusyMode(); + }; + + loadingModule.updateSize = function (){ + showLoadingDetails = !(loadingInfoContainer.classed("hidden")); + loadingInfoContainer.classed("hidden", !showLoadingDetails); + detailsButton.classed("accordion-trigger-active", showLoadingDetails); + }; + + loadingModule.getDetailsState = function (){ + return showLoadingDetails; + }; + + loadingModule.expandDetails = function (){ + showLoadingDetails = true; + loadingInfoContainer.classed("hidden", !showLoadingDetails); + detailsButton.classed("accordion-trigger-active", showLoadingDetails); + }; + + loadingModule.collapseDetails = function (){ + showLoadingDetails = false; + loadingInfoContainer.classed("hidden", !showLoadingDetails); + detailsButton.classed("accordion-trigger-active", showLoadingDetails); + }; + + loadingModule.setBusyMode = function (){ + d3.select("#currentLoadingStep").style("color", "#fff"); + d3.select("#progressBarValue").node().innherHTML = ""; + d3.select("#progressBarValue").style("width", "20%"); + d3.select("#progressBarValue").classed("busyProgressBar", true); + progressBarMode = PROGRESS_BAR_BUSY; + }; + + loadingModule.setSuccessful = function (){ + d3.select("#currentLoadingStep").style("color", "#0f0"); + }; + + loadingModule.setErrorMode = function (){ + d3.select("#currentLoadingStep").style("color", "#f00"); + d3.select("#progressBarValue").style("width", "0%"); + d3.select("#progressBarValue").classed("busyProgressBar", false); + d3.select("#progressBarValue").node().innherHTML = ""; + progressBarMode = PROGRESS_BAR_ERROR; + }; + + loadingModule.setPercentMode = function (){ + d3.select("#currentLoadingStep").style("color", "#fff"); + d3.select("#progressBarValue").classed("busyProgressBar", false); + d3.select("#progressBarValue").node().innherHTML = "0%"; + d3.select("#progressBarValue").style("width", "0%"); + progressBarMode = PROGRESS_BAR_PERCENT; + }; + + loadingModule.setPercentValue = function ( val ){ + d3.select("#progressBarValue").node().innherHTML = val; + }; + + loadingModule.emptyGraphContentError = function (){ + graph.clearGraphData(); + ontologyMenu.append_message_toLastBulletPoint("failed"); + ontologyMenu.append_message_toLastBulletPoint("
    Error: Received empty graph"); + loadingWasSuccessFul = false; + graph.handleOnLoadingError(); + loadingModule.setErrorMode(); + }; + + loadingModule.isThreadCanceled = function (){ + + }; + + loadingModule.initializeLoader = function ( storeCache ){ + if ( storeCache === true && graph.getCachedJsonObj() !== null ) { + // save cached ontology; + var cachedContent = JSON.stringify(graph.getCachedJsonObj()); + var cachedName = ontologyIdentifierFromURL; + ontologyMenu.setCachedOntology(cachedName, cachedContent); + } + conversion_sessionId = -10000; + ontologyMenu.setConversionID(conversion_sessionId); + ontologyMenu.stopLoadingTimer(); + graph.clearGraphData(); + loadingModule.setBusyMode(); + loadingModule.showLoadingIndicator(); + loadingModule.collapseDetails(); + missingImportsWarning = false; + d3.select("#loadingIndicator_closeButton").classed("hidden", true); + ontologyMenu.clearDetailInformation(); + }; + + /** ------------------ URL Interpreter -------------- **/ + loadingModule.parseUrlAndLoadOntology = function ( storeCache ){ + var autoStore = true; + if ( storeCache === false ) { + autoStore = false; + } + + graph.clearAllGraphData(); + loadingModule.initializeLoader(autoStore); + var urlString = String(location); + var parameterArray = identifyParameter(urlString); + ontologyIdentifierFromURL = DEFAULT_JSON_NAME; + loadGraphOptions(parameterArray); // identifies and loads configuration values + var loadingMethod = identifyOntologyLoadingMethod(ontologyIdentifierFromURL); + d3.select("#progressBarValue").node().innerHTML = " "; + switch ( loadingMethod ) { + case 0: + loadingModule.from_presetOntology(ontologyIdentifierFromURL); + break; + case 1: + loadingModule.from_FileUpload(ontologyIdentifierFromURL); + break; + case 2: + loadingModule.from_JSON_URL(ontologyIdentifierFromURL); + break; + case 3: + loadingModule.from_IRI_URL(ontologyIdentifierFromURL); + break; + default: + console.log("Could not identify loading method , or not IMPLEMENTED YET"); + } + }; + + /** ------------------- LOADING --------------------- **/ + // the loading module splits into 3 branches + // 1] PresetOntology Loading + // 2] File Upload + // 3] Load From URL / IRI + + loadingModule.from_JSON_URL = function ( fileName ){ + var filename = decodeURIComponent(fileName.slice("url=".length)); + ontologyIdentifierFromURL = filename; + + var ontologyContent = ""; + if ( ontologyMenu.cachedOntology(filename) ) { + ontologyMenu.append_bulletPoint("Loading already cached ontology: " + filename); + ontologyContent = ontologyMenu.cachedOntology(filename); + loadingWasSuccessFul = true; // cached Ontology should be true; + parseOntologyContent(ontologyContent); + + } else { + // involve the o2v conveter; + ontologyMenu.append_message("Retrieving ontology from JSON URL " + filename); + requestServerTimeStampForJSON_URL(ontologyMenu.callbackLoad_JSON_FromURL, ["read?json=" + filename, filename]); + } + }; + + function requestServerTimeStampForJSON_URL( callback, parameter ){ + d3.xhr("serverTimeStamp", "application/text", function ( error, request ){ + if ( error ) { + // could not get server timestamp -> no connection to owl2vowl + ontologyMenu.append_bulletPoint("Could not establish connection to OWL2VOWL service"); + fallbackForJSON_URL(callback, parameter); + } else { + conversion_sessionId = request.responseText; + ontologyMenu.setConversionID(conversion_sessionId); + parameter.push(conversion_sessionId); + callback(parameter); + } + }); + + } + + loadingModule.requestServerTimeStampForDirectInput = function ( callback, text ){ + d3.xhr("serverTimeStamp", "application/text", function ( error, request ){ + if ( error ) { + // could not get server timestamp -> no connection to owl2vowl + ontologyMenu.append_bulletPoint("Could not establish connection to OWL2VOWL service"); + loadingModule.setErrorMode(); + ontologyMenu.append_message_toLastBulletPoint("
    Could not connect to OWL2VOWL service "); + loadingModule.showErrorDetailsMessage(); + d3.select("#progressBarValue").style("width", "0%"); + d3.select("#progressBarValue").classed("busyProgressBar", false); + d3.select("#progressBarValue").text("0%"); + + } else { + conversion_sessionId = request.responseText; + ontologyMenu.setConversionID(conversion_sessionId); + callback(text, ["conversionID" + conversion_sessionId, conversion_sessionId]); + } + }); + }; + + loadingModule.from_IRI_URL = function ( fileName ){ + // owl2vowl converters the given ontology url and returns json file; + var filename = decodeURIComponent(fileName.slice("iri=".length)); + ontologyIdentifierFromURL = filename; + + var ontologyContent = ""; + if ( ontologyMenu.cachedOntology(filename) ) { + ontologyMenu.append_bulletPoint("Loading already cached ontology: " + filename); + ontologyContent = ontologyMenu.cachedOntology(filename); + loadingWasSuccessFul = true; // cached Ontology should be true; + parseOntologyContent(ontologyContent); + } else { + // involve the o2v conveter; + var encoded = encodeURIComponent(filename); + ontologyMenu.append_bulletPoint("Retrieving ontology from IRI: " + filename); + requestServerTimeStampForIRI_Converte(ontologyMenu.callbackLoad_Ontology_FromIRI, ["convert?iri=" + encoded, filename]); + } + }; + + loadingModule.fromFileDrop = function ( fileName, file ){ + d3.select("#progressBarValue").node().innerHTML = " "; + loadingModule.initializeLoader(false); + + ontologyMenu.append_bulletPoint("Retrieving ontology from dropped file: " + fileName); + var ontologyContent = ""; + + // two options here + //1] Direct Json Upload + if ( fileName.match(/\.json$/) ) { + ontologyMenu.setConversionID(-10000); + var reader = new FileReader(); + reader.readAsText(file); + reader.onload = function (){ + ontologyContent = reader.result; + ontologyIdentifierFromURL = fileName; + parseOntologyContent(ontologyContent); + }; + } else { + //2] File Upload to OWL2VOWL Converter + // 1) check if we can get a timeStamp; + var parameterArray = [file, fileName]; + requestServerTimeStamp(ontologyMenu.callbackLoadFromOntology, parameterArray); + } + }; + + + loadingModule.from_FileUpload = function ( fileName ){ + loadingModule.setBusyMode(); + var filename = decodeURIComponent(fileName.slice("file=".length)); + ontologyIdentifierFromURL = filename; + var ontologyContent = ""; + if ( ontologyMenu.cachedOntology(filename) ) { + ontologyMenu.append_bulletPoint("Loading already cached ontology: " + filename); + ontologyContent = ontologyMenu.cachedOntology(filename); + loadingWasSuccessFul = true; // cached Ontology should be true; + parseOntologyContent(ontologyContent); + + } else { + // d3.select("#currentLoadingStep").node().innerHTML="Loading ontology from file "+ filename; + ontologyMenu.append_bulletPoint("Retrieving ontology from file: " + filename); + // get the file + var selectedFile = d3.select("#file-converter-input").property("files")[0]; + // No selection -> this was triggered by the iri. Unequal names -> reuploading another file + if ( !selectedFile || (filename && (filename !== selectedFile.name)) ) { + ontologyMenu.append_message_toLastBulletPoint("
    No cached version of \"" + filename + "\" was found.
    Please reupload the file."); + loadingModule.setErrorMode(); + d3.select("#progressBarValue").classed("busyProgressBar", false); + graph.handleOnLoadingError(); + return; + } else { + filename = selectedFile.name; + } + + + // two options here + //1] Direct Json Upload + if ( filename.match(/\.json$/) ) { + ontologyMenu.setConversionID(-10000); + var reader = new FileReader(); + reader.readAsText(selectedFile); + reader.onload = function (){ + ontologyContent = reader.result; + ontologyIdentifierFromURL = filename; + parseOntologyContent(ontologyContent); + }; + } else { + //2] File Upload to OWL2VOWL Converter + // 1) check if we can get a timeStamp; + var parameterArray = [selectedFile, filename]; + requestServerTimeStamp(ontologyMenu.callbackLoadFromOntology, parameterArray); + } + } + }; + + function fallbackForJSON_URL( callback, parameter ){ + ontologyMenu.append_message_toLastBulletPoint("
    Trying to convert with other communication protocol."); + callback(parameter); + + } + + function fallbackConversion( parameter ){ + ontologyMenu.append_message_toLastBulletPoint("
    Trying to convert with other communication protocol."); + var file = parameter[0]; + var name = parameter[1]; + var formData = new FormData(); + formData.append("ontology", file); + + var xhr = new XMLHttpRequest(); + xhr.open("POST", "convert", true); + var ontologyContent = ""; + xhr.onload = function (){ + if ( xhr.status === 200 ) { + ontologyContent = xhr.responseText; + ontologyMenu.setCachedOntology(name, ontologyContent); + ontologyIdentifierFromURL = name; + missingImportsWarning = true; // using this variable for warnings + ontologyMenu.append_message_toLastBulletPoint("
    Success, but you are using a deprecated OWL2VOWL service!"); + parseOntologyContent(ontologyContent); + } + }; + + // check what this thing is doing; + xhr.onreadystatechange = function (){ + if ( xhr.readyState === 4 && xhr.status === 0 ) { + ontologyMenu.append_message_toLastBulletPoint("
    Old protocol also failed to establish connection to OWL2VOWL service!"); + loadingModule.setErrorMode(); + ontologyMenu.append_bulletPoint("Failed to load ontology"); + ontologyMenu.append_message_toLastBulletPoint("
    Could not connect to OWL2VOWL service "); + loadingModule.showErrorDetailsMessage(); + } + }; + xhr.send(formData); + } + + function requestServerTimeStampForIRI_Converte( callback, parameterArray ){ + d3.xhr("serverTimeStamp", "application/text", function ( error, request ){ + loadingModule.setBusyMode(); + if ( error ) { + // could not get server timestamp -> no connection to owl2vowl + ontologyMenu.append_bulletPoint("Could not establish connection to OWL2VOWL service"); + loadingModule.setErrorMode(); + ontologyMenu.append_bulletPoint("Failed to load ontology"); + ontologyMenu.append_message_toLastBulletPoint("
    Could not connect to OWL2VOWL service "); + loadingModule.showErrorDetailsMessage(); + } else { + conversion_sessionId = request.responseText; + ontologyMenu.setConversionID(conversion_sessionId); + // update paramater for new communication paradigm + parameterArray[0] = parameterArray[0] + "&sessionId=" + conversion_sessionId; + parameterArray.push(conversion_sessionId); + callback(parameterArray); + } + }); + } + + function requestServerTimeStamp( callback, parameterArray ){ + d3.xhr("serverTimeStamp", "application/text", function ( error, request ){ + if ( error ) { + // could not get server timestamp -> no connection to owl2vowl + ontologyMenu.append_bulletPoint("Could not establish connection to OWL2VOWL service"); + fallbackConversion(parameterArray); // tries o2v version0.3.4 communication + } else { + conversion_sessionId = request.responseText; + ontologyMenu.setConversionID(conversion_sessionId); + console.log("Request Session ID:" + conversion_sessionId); + callback(parameterArray[0], parameterArray[1], conversion_sessionId); + } + }); + } + + loadingModule.directInput = function ( text ){ + ontologyMenu.clearDetailInformation(); + parseOntologyContent(text); + }; + + loadingModule.loadFromOWL2VOWL = function ( ontoContent, filename ){ + loadingWasSuccessFul = false; + + var old = d3.select("#bulletPoint_container").node().innerHTML; + if ( old.indexOf("(with warnings)") !== -1 ) { + missingImportsWarning = true; + } + + if ( ontologyMenu.cachedOntology(ontoContent) ) { + ontologyMenu.append_bulletPoint("Loading already cached ontology: " + filename); + parseOntologyContent(ontoContent); + } else { // set parse the ontology content; + parseOntologyContent(ontoContent); + } + }; + + loadingModule.from_presetOntology = function ( selectedOntology ){ + ontologyMenu.append_bulletPoint("Retrieving ontology: " + selectedOntology); + loadPresetOntology(selectedOntology); + }; + + function loadPresetOntology( ontology ){ + // check if already cached in ontology menu? + var f2r; + var loadingNewOntologyForEditor=false; + if ( ontology.indexOf("new_ontology") !== -1 ) { + loadingModule.hideLoadingIndicator(); + graph.showEditorHintIfNeeded(); + f2r = "./data/new_ontology.json"; + loadingNewOntologyForEditor=true; + } + + loadingWasSuccessFul = false; + var ontologyContent = ""; + if ( ontologyMenu.cachedOntology(ontology) ) { + ontologyMenu.append_bulletPoint("Loading already cached ontology: " + ontology); + ontologyContent = ontologyMenu.cachedOntology(ontology); + loadingWasSuccessFul = true; // cached Ontology should be true; + loadingModule.showLoadingIndicator(); + parseOntologyContent(ontologyContent); + + } else { + // read the file name + + var fileToRead = "./data/" + ontology + ".json"; + if ( f2r ) { + fileToRead = f2r; + } // overwrite the newOntology Index + // read file + d3.xhr(fileToRead, "application/json", function ( error, request ){ + var loadingSuccessful = !error; + if ( loadingSuccessful ) { + ontologyContent = request.responseText; + parseOntologyContent(ontologyContent); + } else { + + if (loadingNewOntologyForEditor){ + ontologyContent = '{\n' + + ' "_comment": "Empty ontology for WebVOWL Editor",\n' + + ' "header": {\n' + + ' "languages": [\n' + + ' "en"\n' + + ' ],\n' + + ' "baseIris": [\n' + + ' "http://www.w3.org/2000/01/rdf-schema"\n' + + ' ],\n' + + ' "iri": "http://visualdataweb.org/newOntology/",\n' + + ' "title": {\n' + + ' "en": "New ontology"\n' + + ' },\n' + + ' "description": {\n' + + ' "en": "New ontology description"\n' + + ' }\n' + + ' },\n' + + ' "namespace": [],\n' + + ' "metrics": {\n' + + ' "classCount": 0,\n' + + ' "datatypeCount": 0,\n' + + ' "objectPropertyCount": 0,\n' + + ' "datatypePropertyCount": 0,\n' + + ' "propertyCount": 0,\n' + + ' "nodeCount": 0,\n' + + ' "individualCount": 0\n' + + ' }\n' + + '}\n'; + parseOntologyContent(ontologyContent); + }else{ + // some error occurred + ontologyMenu.append_bulletPoint("Failed to load: " + ontology); + if (error.status===0){ // assumption this is CORS error when running locally (error status == 0) + ontologyMenu.append_message_toLastBulletPoint(" ERROR STATUS: " + error.status); + if (window.location.toString().startsWith("file:/")){ + ontologyMenu.append_message_toLastBulletPoint("

    WebVOWL runs in a local instance.

    "); + ontologyMenu.append_message_toLastBulletPoint("

    CORS prevents to automatically load files on host system.

    "); + ontologyMenu.append_message_toLastBulletPoint("

    You can load preprocessed ontologies (i.e. VOWL-JSON files) using the upload feature in the ontology menu or by dragging the files and dropping them on the canvas.

    "); + ontologyMenu.append_message_toLastBulletPoint("

    Hint: Note that the conversion of ontologies into the VOWL-JSON format is not part of WebVOWL but requires an additional converter such as OWL2VOWL.

    "); + ontologyMenu.append_message_toLastBulletPoint("

    Ontologies can be created using the editor mode (i.e. activate editing mode in Modes menu and create a new ontology using the Ontology menu.

    "); + } + }else { + ontologyMenu.append_message_toLastBulletPoint(" ERROR STATUS: " + error.status); + } + + + + graph.handleOnLoadingError(); + loadingModule.setErrorMode(); + } + } + }); + } + } + + + /** -- PARSE JSON CONTENT -- **/ + function parseOntologyContent( content ){ + + ontologyMenu.append_bulletPoint("Reading ontology graph ... "); + var _loader = ontologyMenu.getLoadingFunction(); + _loader(content, ontologyIdentifierFromURL, "noAlternativeNameYet"); + } + + loadingModule.notValidJsonFile = function (){ + graph.clearGraphData(); + ontologyMenu.append_message_toLastBulletPoint(" failed"); + ontologyMenu.append_message_toLastBulletPoint("
    Error: Received empty graph"); + loadingWasSuccessFul = false; + graph.handleOnLoadingError(); + + }; + + loadingModule.validJsonFile = function (){ + ontologyMenu.append_message_toLastBulletPoint("done"); + loadingWasSuccessFul = true; + }; + + + /** --- HELPER FUNCTIONS **/ + + function identifyParameter( url ){ + var numParameters = (url.match(/#/g) || []).length; + // create parameters array + var paramArray = []; + if ( numParameters > 0 ) { + var tokens = url.split("#"); + // skip the first token since it is the address of the server + for ( var i = 1; i < tokens.length; i++ ) { + if ( tokens[i].length === 0 ) { + // this token belongs actually to the last paramArray + paramArray[paramArray.length - 1] = paramArray[paramArray.length - 1] + "#"; + } else { + paramArray.push(tokens[i]); + } + } + } + return paramArray; + } + + + function loadGraphOptions( parameterArray ){ + var optString = "opts="; + + function loadDefaultConfig(){ + graph.options().setOptionsFromURL(graph.options().defaultConfig(), false); + } + + function loadCustomConfig( opts ){ + var changeEditingFlag = false; + var defObj = graph.options().defaultConfig(); + for ( var i = 0; i < opts.length; i++ ) { + var keyVal = opts[i].split('='); + if ( keyVal[0] === "editorMode" ) { + changeEditingFlag = true; + } + defObj[keyVal[0]] = keyVal[1]; + } + graph.options().setOptionsFromURL(defObj, changeEditingFlag); + } + + function identifyOptions( paramArray ){ + if ( paramArray[0].indexOf(optString) >= 0 ) { + // parse the parameters; + var parameterLength = paramArray[0].length; + var givenOptionsStr = paramArray[0].substr(5, parameterLength - 6); + var optionsArray = givenOptionsStr.split(';'); + loadCustomConfig(optionsArray); + } else { + ontologyIdentifierFromURL = paramArray[0]; + loadDefaultConfig(); + } + } + + function identifyOptionsAndOntology( paramArray ){ + + if ( paramArray[0].indexOf(optString) >= 0 ) { + // parse the parameters; + var parameterLength = paramArray[0].length; + var givenOptionsStr = paramArray[0].substr(5, parameterLength - 6); + var optionsArray = givenOptionsStr.split(';'); + loadCustomConfig(optionsArray); + } else { + loadDefaultConfig(); + } + ontologyIdentifierFromURL = paramArray[1]; + } + + switch ( parameterArray.length ) { + case 0: + loadDefaultConfig(); + break; + case 1: + identifyOptions(parameterArray); + break; + case 2: + identifyOptionsAndOntology(parameterArray); + break; + default : + console.log("To many input parameters , loading default config"); + loadDefaultConfig(); + ontologyIdentifierFromURL = "ERROR_TO_MANY_INPUT_PARAMETERS"; + } + } + + + function identifyOntologyLoadingMethod( url ){ + var iriKey = "iri="; + var urlKey = "url="; + var fileKey = "file="; + + var method = -1; + if ( url.substr(0, fileKey.length) === fileKey ) { + method = FILE_UPLOAD; + } else if ( url.substr(0, urlKey.length) === urlKey ) { + method = JSON_URL; + } else if ( url.substr(0, iriKey.length) === iriKey ) { + method = IRI_URL; + } else { + method = PREDEFINED; + } + return method; + } + + return loadingModule; + } + ; + + + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 343: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {module.exports = function ( graph ){ + /** variable defs **/ + var warningModule = {}; + var superContainer = d3.select("#WarningErrorMessages"); + var _messageContainers = []; + var _messageContext = []; + var _visibleStatus = []; + + var _filterHintId; + var _editorHintId; + var _messageId = -1; + superContainer.style("display", "inline-block"); + var cssStyleIndex = 0; + var styleSelectorIndex = 2; + + + // helper for standalone webvowl in chrome + function createCSSSelector( name, rules ){ + var style = document.createElement('style'); + style.type = 'text/css'; + document.getElementsByTagName('head')[0].appendChild(style); + if ( !(style.sheet || {}).insertRule ) + (style.styleSheet || style.sheet).addRule(name, rules); + else + style.sheet.insertRule(name + "{" + rules + "}", 0); + } + + + function findCSS_Index(){ + createCSSSelector("@keyframes msg_CollapseAnimation", " 0% { top: 0; } 100% { top: -400px;}"); + console.log(document.styleSheets ); + } + + findCSS_Index(); + + warningModule.addMessageBox = function (){ + + // add a container; + _messageId++; + var messageContainer = d3.select("#WarningErrorMessages").append("div"); + messageContainer.node().id = "messageContainerId_" + _messageId; + + var messageContext = messageContainer.append("div"); + messageContext.node().id = "messageContextId_" + _messageId; + messageContext.style("top", "0"); + messageContainer.style("position", "relative"); + messageContainer.style("width", "100%"); + //save in array + _messageContainers.push(messageContainer); + _messageContext.push(messageContext); + + // add animation to the container + messageContainer.node().addEventListener("animationend", _msgContainer_animationEnd); + + // set visible flag that is used in end of animation + _visibleStatus[_messageId] = true; + return _messageId; + }; + + function _msgContainer_animationEnd(){ + var containerId = this.id; + var tokens = containerId.split("_")[1]; + var mContainer = d3.select("#" + containerId); + // get number of children + mContainer.classed("hidden", !_visibleStatus[tokens]); + // clean up DOM + if ( !_visibleStatus[tokens] ) { + mContainer.remove(); + _messageContext[tokens] = null; + _messageContainers[tokens] = null; + } + // remove event listener + var c = d3.select(this); + // c.node().removeEventListener("animationend",_msgContainer_animationEnd); + } + + warningModule.createMessageContext = function ( id ){ + var warningContainer = _messageContext[id]; + var moduleContainer = _messageContainers[id]; + var generalHint = warningContainer.append('div'); + generalHint.node().innerHTML = ""; + _editorHintId = id; + /** Editing mode activated. You can now modify an existing ontology or create a new one via the ontology menu. You can save any ontology using the export menu (and exporting it as TTL file).**/ + generalHint.node().innerHTML += "Editing mode activated.
    " + + "You can now modify an existing ontology or create a new one via the ontology menu.
    " + + "You can save any ontology using the export menu (and exporting it as TTL file)."; + + generalHint.style("padding", "5px"); + generalHint.style("line-height", "1.2em"); + generalHint.style("font-size", "1.2em"); + + + var ul = warningContainer.append('ul'); + ul.append('li').node().innerHTML = "Create a class with double click / tap on empty canvas area."; + ul.append('li').node().innerHTML = "Edit names with double click / tap on element."; + ul.append('li').node().innerHTML = "Selection of default constructors is provided in the left sidebar."; + ul.append('li').node().innerHTML = "Additional editing functionality is provided in the right sidebar."; + + + var gotItButton = warningContainer.append("label"); + gotItButton.node().id = "killWarningErrorMessages_" + id; + gotItButton.node().innerHTML = "Got It"; + gotItButton.on("click", warningModule.closeMessage); + + moduleContainer.classed("hidden", false); + moduleContainer.style("-webkit-animation-name", "warn_ExpandAnimation"); + moduleContainer.style("-webkit-animation-duration", "0.5s"); + }; + + warningModule.showMessage = function ( id ){ + var moduleContainer = _messageContainers[id]; + moduleContainer.classed("hidden", false); + moduleContainer.style("-webkit-animation-name", "warn_ExpandAnimation"); + moduleContainer.style("-webkit-animation-duration", "0.5s"); + }; + + warningModule.closeMessage = function ( id ){ + var nId; + if ( id === undefined ) { + var givenId = this.id; + nId = givenId.split("_")[1]; + } else { + nId = id; + } + if ( id && id.indexOf("_") !== -1 ) { + nId = id.split("_")[1]; + } + _visibleStatus[nId] = false; + // get module; + var moduleContainer = _messageContainers[nId]; + moduleContainer.style("-webkit-animation-name", "warn_CollapseAnimation"); + moduleContainer.style("-webkit-animation-duration", "0.5s"); + + var m_height = moduleContainer.node().getBoundingClientRect().height; + + // find my id in the children + var pNode = moduleContainer.node().parentNode; + + var followingChildren = []; + var pChild = pNode.children; + var pChild_len = pChild.length; + var containerId = moduleContainer.node().id; + var found_me = false; + for ( var i = 0; i < pChild_len; i++ ) { + if ( found_me === true ) { + followingChildren.push(pChild[i].id); + } + + if ( containerId === pChild[i].id ) { + found_me = true; + } + } + + for ( var fc = 0; fc < followingChildren.length; fc++ ) { + var child = d3.select("#" + followingChildren[fc]); + // get the document style and overwrite it; + var superCss = document.styleSheets[styleSelectorIndex].cssRules[cssStyleIndex]; + // remove the existing 0% and 100% rules + superCss.deleteRule("0%"); + superCss.deleteRule("100%"); + + superCss.appendRule("0% {top: 0;}"); + superCss.appendRule("100% {top: -" + m_height + "px;"); + + child.style("-webkit-animation-name", "msg_CollapseAnimation"); + child.style("-webkit-animation-duration", "0.5s"); + child.node().addEventListener("animationend", _child_animationEnd); + } + }; + + function _child_animationEnd(){ + var c = d3.select(this); + c.style("-webkit-animation-name", ""); + c.style("-webkit-animation-duration", ""); + c.node().removeEventListener("animationend", _child_animationEnd); + } + + warningModule.closeFilterHint = function (){ + if ( _messageContainers[_filterHintId] ) { + _messageContainers[_filterHintId].classed("hidden", true); + _messageContainers[_filterHintId].remove(); + _messageContainers[_filterHintId] = null; + _messageContext[_filterHintId] = null; + _visibleStatus[_filterHintId] = false; + } + }; + + warningModule.showEditorHint = function (){ + var id = warningModule.addMessageBox(); + warningModule.createMessageContext(id); + }; + + warningModule.showExporterWarning=function (){ + warningModule.showWarning("Can not export ontology", "Detected unsupported ontology axioms, (e.g. owl:Union)", "Ontology is not exported", 1, false); + }; + + + + warningModule.responseWarning = function ( header, reason, action, callback, parameterArray, forcedWarning ){ + var id = warningModule.addMessageBox(); + var warningContainer = _messageContext[id]; + var moduleContainer = _messageContainers[id]; + _visibleStatus[id] = true; + d3.select("#blockGraphInteractions").classed("hidden", false); + var graphWidth = 0.5 * graph.options().width(); + + if ( header.length > 0 ) { + var head = warningContainer.append("div"); + head.style("padding", "5px"); + var titleHeader = head.append("div"); + // some classes + titleHeader.style("display", "inline-flex"); + titleHeader.node().innerHTML = "Warning:"; + titleHeader.style("padding-right", "3px"); + var msgHeader = head.append("div"); + // some classes + msgHeader.style("display", "inline-flex"); + msgHeader.style("max-width", graphWidth + "px"); + + msgHeader.node().innerHTML = header; + } + if ( reason.length > 0 ) { + var reasonContainer = warningContainer.append("div"); + reasonContainer.style("padding", "5px"); + var reasonHeader = reasonContainer.append("div"); + // some classes + reasonHeader.style("display", "inline-flex"); + reasonHeader.style("padding-right", "3px"); + + reasonHeader.node().innerHTML = "Reason:"; + var msgReason = reasonContainer.append("div"); + // some classes + msgReason.style("display", "inline-flex"); + msgReason.style("max-width", graphWidth + "px"); + msgReason.node().innerHTML = reason; + } + if ( action.length > 0 ) { + var actionContainer = warningContainer.append("div"); + actionContainer.style("padding", "5px"); + var actionHeader = actionContainer.append("div"); + // some classes + actionHeader.style("display", "inline-flex"); + actionHeader.style("padding-right", "8px"); + actionHeader.node().innerHTML = "Action:"; + var msgAction = actionContainer.append("div"); + // some classes + msgAction.style("display", "inline-flex"); + msgAction.style("max-width", graphWidth + "px"); + msgAction.node().innerHTML = action; + } + + var gotItButton = warningContainer.append("label"); + gotItButton.node().id = "killWarningErrorMessages_" + id; + gotItButton.node().innerHTML = "Continue"; + gotItButton.on("click", function (){ + warningModule.closeMessage(this.id); + d3.select("#blockGraphInteractions").classed("hidden", true); + callback(parameterArray[0], parameterArray[1], parameterArray[2], parameterArray[3]); + }); + warningContainer.append("span").node().innerHTML = "|"; + var cancelButton = warningContainer.append("label"); + cancelButton.node().id = "cancelButton_" + id; + cancelButton.node().innerHTML = "Cancel"; + cancelButton.on("click", function (){ + warningModule.closeMessage(this.id); + d3.select("#blockGraphInteractions").classed("hidden", true); + }); + moduleContainer.classed("hidden", false); + moduleContainer.style("-webkit-animation-name", "warn_ExpandAnimation"); + moduleContainer.style("-webkit-animation-duration", "0.5s"); + }; + + warningModule.showFilterHint = function (){ + var id = warningModule.addMessageBox(); + var warningContainer = _messageContext[id]; + var moduleContainer = _messageContainers[id]; + _visibleStatus[id] = true; + + _filterHintId = id; + var generalHint = warningContainer.append('div'); + /** Editing mode activated. You can now modify an existing ontology or create a new one via the ontology menu. You can save any ontology using the export menu (and exporting it as TTL file).**/ + generalHint.node().innerHTML = "Collapsing filter activated.
    " + + "The number of visualized elements has been automatically reduced.
    " + + "Use the degree of collapsing slider in the filter menu to adjust the visualization.

    " + + "Note: A performance decrease could be experienced with a growing amount of visual elements in the graph."; + + + generalHint.style("padding", "5px"); + generalHint.style("line-height", "1.2em"); + generalHint.style("font-size", "1.2em"); + + var gotItButton = warningContainer.append("label"); + gotItButton.node().id = "killFilterMessages_" + id; + gotItButton.node().innerHTML = "Got It"; + gotItButton.on("click", warningModule.closeMessage); + + moduleContainer.classed("hidden", false); + moduleContainer.style("-webkit-animation-name", "warn_ExpandAnimation"); + moduleContainer.style("-webkit-animation-duration", "0.5s"); + }; + + warningModule.showMultiFileUploadWarning = function (){ + var id = warningModule.addMessageBox(); + var warningContainer = _messageContext[id]; + var moduleContainer = _messageContainers[id]; + _visibleStatus[id] = true; + + _filterHintId = id; + var generalHint = warningContainer.append('div'); + + generalHint.node().innerHTML = "Uploading multiple files is not supported.
    "; + + generalHint.style("padding", "5px"); + generalHint.style("line-height", "1.2em"); + generalHint.style("font-size", "1.2em"); + + var gotItButton = warningContainer.append("label"); + gotItButton.node().id = "killFilterMessages_" + id; + gotItButton.node().innerHTML = "Got It"; + gotItButton.on("click", warningModule.closeMessage); + + moduleContainer.classed("hidden", false); + moduleContainer.style("-webkit-animation-name", "warn_ExpandAnimation"); + moduleContainer.style("-webkit-animation-duration", "0.5s"); + }; + + warningModule.showWarning = function ( header, reason, action, type, forcedWarning, additionalOpts ){ + var id = warningModule.addMessageBox(); + var warningContainer = _messageContext[id]; + var moduleContainer = _messageContainers[id]; + _visibleStatus[id] = true; + + // add new one; + var graphWidth = 0.5 * graph.options().width(); + + if ( header.length > 0 ) { + var head = warningContainer.append("div"); + head.style("padding", "5px"); + var titleHeader = head.append("div"); + // some classes + titleHeader.style("display", "inline-flex"); + titleHeader.node().innerHTML = "Warning:"; + titleHeader.style("padding-right", "3px"); + var msgHeader = head.append("div"); + // some classes + msgHeader.style("display", "inline-flex"); + msgHeader.style("max-width", graphWidth + "px"); + + msgHeader.node().innerHTML = header; + } + if ( reason.length > 0 ) { + var reasonContainer = warningContainer.append("div"); + reasonContainer.style("padding", "5px"); + var reasonHeader = reasonContainer.append("div"); + // some classes + reasonHeader.style("display", "inline-flex"); + reasonHeader.style("padding-right", "3px"); + + reasonHeader.node().innerHTML = "Reason:"; + var msgReason = reasonContainer.append("div"); + // some classes + msgReason.style("display", "inline-flex"); + msgReason.style("max-width", graphWidth + "px"); + msgReason.node().innerHTML = reason; + } + if ( action.length > 0 ) { + var actionContainer = warningContainer.append("div"); + actionContainer.style("padding", "5px"); + var actionHeader = actionContainer.append("div"); + // some classes + actionHeader.style("display", "inline-flex"); + actionHeader.style("padding-right", "8px"); + actionHeader.node().innerHTML = "Action:"; + var msgAction = actionContainer.append("div"); + // some classes + msgAction.style("display", "inline-flex"); + msgAction.style("max-width", graphWidth + "px"); + msgAction.node().innerHTML = action; + } + + var gotItButton; + if ( type === 1 ) { + gotItButton = warningContainer.append("label"); + gotItButton.node().id = "killWarningErrorMessages_" + id; + gotItButton.node().innerHTML = "Got It"; + gotItButton.on("click", warningModule.closeMessage); + } + + if ( type === 2 ) { + gotItButton = warningContainer.append("label"); + gotItButton.node().id = "killWarningErrorMessages_" + id; + gotItButton.node().innerHTML = "Got It"; + gotItButton.on("click", warningModule.closeMessage); + warningContainer.append("span").node().innerHTML = "|"; + var zoomToElementButton = warningContainer.append("label"); + zoomToElementButton.node().id = "zoomElementThing_" + id; + zoomToElementButton.node().innerHTML = "Zoom to element "; + zoomToElementButton.on("click", function (){ + // assume the additional Element is for halo; + graph.zoomToElementInGraph(additionalOpts); + }); + warningContainer.append("span").node().innerHTML = "|"; + var ShowElementButton = warningContainer.append("label"); + ShowElementButton.node().id = "showElementThing_" + id; + ShowElementButton.node().innerHTML = "Indicate element"; + ShowElementButton.on("click", function (){ + // assume the additional Element is for halo; + if ( additionalOpts.halo() === false ) { + additionalOpts.drawHalo(); + graph.updatePulseIds([additionalOpts.id()]); + } else { + additionalOpts.removeHalo(); + additionalOpts.drawHalo(); + graph.updatePulseIds([additionalOpts.id()]); + } + }); + } + moduleContainer.classed("hidden", false); + moduleContainer.style("-webkit-animation-name", "warn_ExpandAnimation"); + moduleContainer.style("-webkit-animation-duration", "0.5s"); + moduleContainer.classed("hidden", false); + }; + + return warningModule; + }; + + + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), + +/***/ 344: +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {module.exports = function ( graph ){ + /** variable defs **/ + var directInputModule = {}; + var inputContainer = d3.select("#DirectInputContent"); + inputContainer.style("top", "0"); + inputContainer.style("position", "absolute"); + var textArea = d3.select("#directInputTextArea"); + var visibleContainer = false; + + inputContainer.style("border", "1px solid black"); + inputContainer.style("padding", "5px"); + inputContainer.style("background", "#fff"); + + + // connect upload and close button; + directInputModule.handleDirectUpload = function (){ + + var text = textArea.node().value; + var jsonOBJ; + try { + jsonOBJ = JSON.parse(text); + graph.options().loadingModule().directInput(text); + // close if successful + if ( jsonOBJ.class.length > 0 ) { + directInputModule.setDirectInputMode(false); + } + } + catch ( e ) { + try { + // Initialize; + graph.options().loadingModule().initializeLoader(); + graph.options().loadingModule().requestServerTimeStampForDirectInput( + graph.options().ontologyMenu().callbackLoad_Ontology_From_DirectInput, text + ); + } catch ( error2 ) { + console.log("Error " + error2); + d3.select("#Error_onLoad").classed("hidden", false); + d3.select("#Error_onLoad").node().innerHTML = "Failed to convert the input!"; + } + } + }; + + directInputModule.handleCloseButton = function (){ + directInputModule.setDirectInputMode(false); + }; + + directInputModule.updateLayout = function (){ + var w = graph.options().width(); + var h = graph.options().height(); + textArea.style("width", 0.4 * w + "px"); + textArea.style("height", 0.7 * h + "px"); + }; + + directInputModule.setDirectInputMode = function ( val ){ + if ( !val ) { + visibleContainer = !visibleContainer; + } + else { + visibleContainer = val; + } + // update visibility; + directInputModule.updateLayout(); + d3.select("#Error_onLoad").classed("hidden", true); + inputContainer.classed("hidden", !visibleContainer); + }; + + + d3.select("#directUploadBtn").on("click", directInputModule.handleDirectUpload); + d3.select("#close_directUploadBtn").on("click", directInputModule.handleCloseButton); + + return directInputModule; + }; + + + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }) + +/******/ }); diff --git a/tto/webvowl/js/webvowl.js b/tto/webvowl/js/webvowl.js new file mode 100644 index 0000000..cf6ea16 --- /dev/null +++ b/tto/webvowl/js/webvowl.js @@ -0,0 +1,25345 @@ +webvowl = +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; + +/******/ // The require function +/******/ function __webpack_require__(moduleId) { + +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; + +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; + +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); + +/******/ // Flag the module as loaded +/******/ module.loaded = true; + +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } + + +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; + +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; + +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; + +/******/ // Load entry module and return exports +/******/ return __webpack_require__(0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { + + __webpack_require__(1); + + var nodeMap = __webpack_require__(5)(); + var propertyMap = __webpack_require__(40)(); + + + var webvowl = {}; + webvowl.graph = __webpack_require__(57); + webvowl.options = __webpack_require__(64); + webvowl.version = "1.1.7"; + + webvowl.util = {}; + webvowl.util.constants = __webpack_require__(12); + webvowl.util.languageTools = __webpack_require__(11); + webvowl.util.elementTools = __webpack_require__(63); + webvowl.util.prefixTools = __webpack_require__(72); + webvowl.modules = {}; + webvowl.modules.colorExternalsSwitch = __webpack_require__(73); + webvowl.modules.compactNotationSwitch = __webpack_require__(74); + webvowl.modules.datatypeFilter = __webpack_require__(75); + webvowl.modules.disjointFilter = __webpack_require__(77); + webvowl.modules.focuser = __webpack_require__(78); + webvowl.modules.emptyLiteralFilter = __webpack_require__(79); + webvowl.modules.nodeDegreeFilter = __webpack_require__(80); + webvowl.modules.nodeScalingSwitch = __webpack_require__(81); + webvowl.modules.objectPropertyFilter = __webpack_require__(82); + webvowl.modules.pickAndPin = __webpack_require__(83); + webvowl.modules.selectionDetailsDisplayer = __webpack_require__(315); + webvowl.modules.setOperatorFilter = __webpack_require__(316); + webvowl.modules.statistics = __webpack_require__(317); + webvowl.modules.subclassFilter = __webpack_require__(318); + + + webvowl.nodes = {}; + nodeMap.entries().forEach(function ( entry ){ + mapEntryToIdentifier(webvowl.nodes, entry); + }); + + webvowl.properties = {}; + propertyMap.entries().forEach(function ( entry ){ + mapEntryToIdentifier(webvowl.properties, entry); + }); + + function mapEntryToIdentifier( map, entry ){ + var identifier = entry.key.replace(":", "").toLowerCase(); + map[identifier] = entry.value; + } + + + module.exports = webvowl; + + +/***/ }), +/* 1 */ +/***/ (function(module, exports) { + + // removed by extract-text-webpack-plugin + +/***/ }), +/* 2 */, +/* 3 */, +/* 4 */, +/* 5 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var nodes = []; + nodes.push(__webpack_require__(7)); + nodes.push(__webpack_require__(18)); + nodes.push(__webpack_require__(19)); + nodes.push(__webpack_require__(26)); + nodes.push(__webpack_require__(27)); + nodes.push(__webpack_require__(28)); + nodes.push(__webpack_require__(29)); + nodes.push(__webpack_require__(30)); + nodes.push(__webpack_require__(31)); + nodes.push(__webpack_require__(32)); + nodes.push(__webpack_require__(33)); + nodes.push(__webpack_require__(34)); + nodes.push(__webpack_require__(38)); + nodes.push(__webpack_require__(39)); + + var map = d3.map(nodes, function ( Prototype ){ + return new Prototype().type(); + }); + + module.exports = function (){ + return map; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 6 */ +/***/ (function(module, exports) { + + module.exports = d3; + +/***/ }), +/* 7 */ +/***/ (function(module, exports, __webpack_require__) { + + var RoundNode = __webpack_require__(8); + + module.exports = (function (){ + + var o = function ( graph ){ + RoundNode.apply(this, arguments); + + this.attributes(["external"]) + .type("ExternalClass"); + }; + o.prototype = Object.create(RoundNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 8 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseNode = __webpack_require__(9); + var CenteringTextElement = __webpack_require__(14); + var drawTools = __webpack_require__(17)(); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseNode.apply(this, arguments); + + var that = this, + collapsible = false, + radius = 50, + collapsingGroupElement, + pinGroupElement, + haloGroupElement = null, + rectangularRepresentation = false, + renderingElement, + textBlock; + + this.setRectangularRepresentation = function ( val ){ + rectangularRepresentation = val; + }; + this.getRectangularRepresentation = function (){ + return rectangularRepresentation; + }; + + this.getHalos = function (){ + return haloGroupElement; + }; + + // Properties + this.collapsible = function ( p ){ + if ( !arguments.length ) return collapsible; + collapsible = p; + return this; + }; + + this.textBlock = function ( p ){ + if ( !arguments.length ) return textBlock; + textBlock = p; + return this; + }; + + /** + * This might not be equal to the actual radius, because the instance count is used for its calculation. + * @param p + * @returns {*} + */ + this.radius = function ( p ){ + if ( !arguments.length ) return radius; + radius = p; + return this; + }; + + + // Functions + this.setHoverHighlighting = function ( enable ){ + that.nodeElement().selectAll("circle").classed("hovered", enable); + }; + + this.textWidth = function ( yOffset ){ + var availableWidth = this.actualRadius() * 2; + + // if the text is not placed in the center of the circle, it can't have the full width + if ( yOffset ) { + var relativeOffset = Math.abs(yOffset) / this.actualRadius(); + var isOffsetInsideOfNode = relativeOffset <= 1; + + if ( isOffsetInsideOfNode ) { + availableWidth = Math.cos(relativeOffset) * availableWidth; + } else { + availableWidth = 0; + } + } + + return availableWidth; + }; + + this.toggleFocus = function (){ + that.focused(!that.focused()); + if ( that.nodeElement() ) + that.nodeElement().select("circle").classed("focused", that.focused()); + graph.resetSearchHighlight(); + graph.options().searchMenu().clearText(); + + }; + + this.actualRadius = function (){ + if ( !graph.options().scaleNodesByIndividuals() || that.individuals().length <= 0 ) { + return that.radius(); + } else { + // we could "listen" for radius and maxIndividualCount changes, but this is easier + var MULTIPLIER = 8, + additionalRadius = Math.log(that.individuals().length + 1) * MULTIPLIER + 5; + + return that.radius() + additionalRadius; + } + }; + + this.distanceToBorder = function (){ + return that.actualRadius(); + }; + + this.removeHalo = function (){ + if ( that.halo() ) { + that.halo(false); + if ( haloGroupElement ) { + haloGroupElement.remove(); + } + } + }; + + this.drawHalo = function ( pulseAnimation ){ + that.halo(true); + if ( rectangularRepresentation === true ) { + haloGroupElement = drawTools.drawRectHalo(that.nodeElement(), 80, 80, 5); + } else { + haloGroupElement = drawTools.drawHalo(that.nodeElement(), that.actualRadius(), this.removeHalo); + } + if ( pulseAnimation === false ) { + var pulseItem = haloGroupElement.selectAll(".searchResultA"); + pulseItem.classed("searchResultA", false); + pulseItem.classed("searchResultB", true); + pulseItem.attr("animationRunning", false); + } + }; + + /** + * Draws the pin on a round node on a position depending on its radius. + */ + this.drawPin = function (){ + that.pinned(true); + var dx = (-3.5 / 5) * that.actualRadius(), + dy = (-7 / 10) * that.actualRadius(); + pinGroupElement = drawTools.drawPin(that.nodeElement(), dx, dy, this.removePin, graph.options().showDraggerObject, graph.options().useAccuracyHelper()); + + + }; + + /** + * Removes the pin and refreshs the graph to update the force layout. + */ + this.removePin = function (){ + that.pinned(false); + if ( pinGroupElement ) { + pinGroupElement.remove(); + } + graph.updateStyle(); + }; + + this.drawCollapsingButton = function (){ + + collapsingGroupElement = that.nodeElement() + .append("g") + .classed("hidden-in-export", true) + .attr("transform", function (){ + var dx = (-2 / 5) * that.actualRadius(), + dy = (1 / 2) * that.actualRadius(); + return "translate(" + dx + "," + dy + ")"; + }); + + collapsingGroupElement.append("rect") + .classed("class pin feature", true) + .attr("x", 0) + .attr("y", 0) + .attr("width", 40) + .attr("height", 24); + + collapsingGroupElement.append("line") + .attr("x1", 13) + .attr("y1", 12) + .attr("x2", 27) + .attr("y2", 12); + + collapsingGroupElement.append("line") + .attr("x1", 20) + .attr("y1", 6) + .attr("x2", 20) + .attr("y2", 18); + }; + + /** + * Draws a circular node. + * @param parentElement the element to which this node will be appended + * @param [additionalCssClasses] additional css classes + */ + this.draw = function ( parentElement, additionalCssClasses ){ + var cssClasses = that.collectCssClasses(); + that.nodeElement(parentElement); + + var bgColor = that.backgroundColor(); + if ( bgColor === null ) bgColor = undefined; + if ( that.attributes().indexOf("deprecated") > -1 ) { + bgColor = undefined; + } + if ( additionalCssClasses instanceof Array ) { + cssClasses = cssClasses.concat(additionalCssClasses); + } + if ( rectangularRepresentation === true ) { + renderingElement = drawTools.appendRectangularClass(parentElement, 80, 80, cssClasses, that.labelForCurrentLanguage(), bgColor); + } else { + renderingElement = drawTools.appendCircularClass(parentElement, that.actualRadius(), cssClasses, that.labelForCurrentLanguage(), bgColor); + } + that.postDrawActions(parentElement); + }; + + this.redrawElement = function (){ + renderingElement.remove(); + textBlock.remove(); + var bgColor = that.backgroundColor(); + if ( that.attributes().indexOf("deprecated") > -1 ) { + bgColor = undefined; + } + + var cssClasses = that.collectCssClasses(); + + if ( rectangularRepresentation === true ) { + renderingElement = drawTools.appendRectangularClass(that.nodeElement(), 80, 80, cssClasses, that.labelForCurrentLanguage(), bgColor); + } else { + renderingElement = drawTools.appendCircularClass(that.nodeElement(), that.actualRadius(), cssClasses, that.labelForCurrentLanguage(), bgColor); + } + that.postDrawActions(that.nodeElement()); + }; + /** + * Common actions that should be invoked after drawing a node. + */ + this.postDrawActions = function (){ + that.textBlock(createTextBlock()); + + that.addMouseListeners(); + if ( that.pinned() ) { + that.drawPin(); + } + if ( that.halo() ) { + that.drawHalo(false); + } + if ( that.collapsible() ) { + that.drawCollapsingButton(); + } + }; + + this.redrawLabelText = function (){ + that.textBlock().remove(); + that.textBlock(createTextBlock()); + renderingElement.select("title").text(that.labelForCurrentLanguage()); + }; + function createTextBlock(){ + var bgColor = that.backgroundColor(); + if ( that.attributes().indexOf("deprecated") > -1 ) + bgColor = undefined; + + var textBlock = new CenteringTextElement(that.nodeElement(), bgColor); + + var equivalentsString = that.equivalentsString(); + var suffixForFollowingEquivalents = equivalentsString ? "," : ""; + + textBlock.addText(that.labelForCurrentLanguage(), "", suffixForFollowingEquivalents); + textBlock.addEquivalents(equivalentsString); + if ( !graph.options().compactNotation() ) { + textBlock.addSubText(that.indicationString()); + } + textBlock.addInstanceCount(that.individuals().length); + + return textBlock; + } + + this.equivalentsString = function (){ + var equivalentClasses = that.equivalents(); + if ( !equivalentClasses ) { + return; + } + + return equivalentClasses + .map(function ( node ){ + return node.labelForCurrentLanguage(); + }) + .join(", "); + }; + }; + o.prototype = Object.create(BaseNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 9 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var BaseElement = __webpack_require__(10); + var forceLayoutNodeFunctions = __webpack_require__(13)(); + + module.exports = (function (){ + + var Base = function ( graph ){ + BaseElement.apply(this, arguments); + + var that = this, + // Basic attributes + complement, + disjointUnion, + disjointWith, + individuals = [], + intersection, + union, + links, + rendertype = "round", + // Additional attributes + maxIndividualCount, + fobj, // foreigner object for editing + ignoreLocalHoverEvents = false, + backupFullIri, + // Element containers + nodeElement; + + // array to store my properties; // we will need this also later for semantic zooming stuff + var assignedProperties = []; + that.editingTextElement = false; + + this.isPropertyAssignedToThisElement = function ( property ){ + // this goes via IRIS + console.log("Element IRI :" + property.iri()); + if ( property.type() === "rdfs:subClassOf" ) + for ( var i = 0; i < assignedProperties.length; i++ ) { + var iriEl = assignedProperties[i].iri(); + if ( property.iri() === iriEl ) { + return true; + } + if ( property.type() === "rdfs:subClassOf" && assignedProperties[i].type() === "rdfs:subClassOf" ) + return true; + if ( property.type() === "owl:disjointWith" && assignedProperties[i].type() === "owl:disjointWith" ) + return true; + + } + return false; + }; + + + this.existingPropertyIRI = function ( url ){ + // this goes via IRIS + for ( var i = 0; i < assignedProperties.length; i++ ) { + var iriEl = assignedProperties[i].iri(); + if ( iriEl === url ) { + return true; + } + } + return false; + }; + + this.addProperty = function ( property ){ + if ( assignedProperties.indexOf(property) === -1 ) { + assignedProperties.push(property); + } + }; + + this.removePropertyElement = function ( property ){ + // console.log("Calling removing old property!"+ property.iri()); + if ( assignedProperties.indexOf(property) !== -1 ) { + // console.log("Found it!"); + assignedProperties.splice(assignedProperties.indexOf(property), 1); + } + }; + this.getMyProperties = function (){ + return assignedProperties; + }; + this.copyOtherProperties = function ( otherProperties ){ + assignedProperties = otherProperties; + }; + + this.copyInformation = function ( other ){ + console.log(other.labelForCurrentLanguage()); + if ( other.type() !== "owl:Thing" ) + that.label(other.label()); + that.complement(other.complement()); + that.iri(other.iri()); + that.copyOtherProperties(other.getMyProperties()); + that.baseIri(other.baseIri()); + if ( other.type() === "owl:Class" ) { + that.backupLabel(other.label()); + // console.log("copied backup label"+that.backupLabel()); + } + if ( other.backupLabel() !== undefined ) { + that.backupLabel(other.backupLabel()); + } + }; + + this.enableEditing = function ( autoEditing ){ + if ( autoEditing === false ) + return; + that.raiseDoubleClickEdit(true); + }; + + this.raiseDoubleClickEdit = function ( forceIRISync ){ + d3.selectAll(".foreignelements").remove(); + if ( nodeElement === undefined || this.type() === "owl:Thing" || this.type() === "rdfs:Literal" ) { + console.log("No Container found"); + return; + } + if ( fobj !== undefined ) { + nodeElement.selectAll(".foreignelements").remove(); + } + + backupFullIri = undefined; + graph.options().focuserModule().handle(undefined); + graph.options().focuserModule().handle(that); + // add again the editing elements to that one + if ( graph.isTouchDevice() === true ) { + graph.activateHoverElements(true, that, true); + } + that.editingTextElement = true; + ignoreLocalHoverEvents = true; + that.nodeElement().selectAll("circle").classed("hoveredForEditing", true); + graph.killDelayedTimer(); + graph.ignoreOtherHoverEvents(false); + fobj = nodeElement.append("foreignObject") + .attr("x", -0.5 * (that.textWidth() - 2)) + .attr("y", -12) + .attr("height", 30) + .attr("class", "foreignelements") + .on("dragstart", function (){ + return false; + }) // remove drag operations of text element) + .attr("width", that.textWidth() - 2); + + var editText = fobj.append("xhtml:input") + .attr("class", "nodeEditSpan") + .attr("id", that.id()) + .attr("align", "center") + .attr("contentEditable", "true") + .on("dragstart", function (){ + return false; + }); // remove drag operations of text element) + + var bgColor = '#f00'; + var txtWidth = that.textWidth() - 2; + editText.style({ + + 'align': 'center', + 'color': 'black', + 'width': txtWidth + "px", + 'height': '15px', + 'background-color': bgColor, + 'border-bottom': '2px solid black' + }); + var txtNode = editText.node(); + txtNode.value = that.labelForCurrentLanguage(); + txtNode.focus(); + txtNode.select(); + that.frozen(true); // << releases the not after selection + that.locked(true); + + + d3.event.stopPropagation(); + // ignoreNodeHoverEvent=true; + // // add some events that relate to this object + editText.on("click", function (){ + d3.event.stopPropagation(); + }); + // // remove hover Events for now; + editText.on("mouseout", function (){ + d3.event.stopPropagation(); + + + }); + editText.on("mousedown", function (){ + d3.event.stopPropagation(); + }) + .on("keydown", function (){ + d3.event.stopPropagation(); + if ( d3.event.keyCode === 13 ) { + this.blur(); + that.frozen(false); // << releases the not after selection + that.locked(false); + } + }) + .on("keyup", function (){ + if ( forceIRISync ) { + var labelName = editText.node().value; + var resourceName = labelName.replaceAll(" ", "_"); + var syncedIRI = that.baseIri() + resourceName; + backupFullIri = syncedIRI; + + d3.select("#element_iriEditor").node().title = syncedIRI; + d3.select("#element_iriEditor").node().value = graph.options().prefixModule().getPrefixRepresentationForFullURI(syncedIRI); + } + d3.select("#element_labelEditor").node().value = editText.node().value; + + }) + .on("blur", function (){ + that.editingTextElement = false; + ignoreLocalHoverEvents = false; + that.nodeElement().selectAll("circle").classed("hoveredForEditing", false); + var newLabel = editText.node().value; + nodeElement.selectAll(".foreignelements").remove(); + // that.setLabelForCurrentLanguage(classNameConvention(editText.node().value)); + that.label(newLabel); + that.backupLabel(newLabel); + that.redrawLabelText(); + that.frozen(graph.paused()); + that.locked(graph.paused()); + graph.ignoreOtherHoverEvents(false); + // console.log("Calling blur on Node!"); + if ( backupFullIri ) { + var sanityCheckResult = graph.checkIfIriClassAlreadyExist(backupFullIri); + if ( sanityCheckResult === false ) { + that.iri(backupFullIri); + } else { + // throw warnign + graph.options().warningModule().showWarning("Already seen this class", + "Input IRI: " + backupFullIri + " for element: " + that.labelForCurrentLanguage() + " already been set", + "Restoring previous IRI for Element : " + that.iri(), 2, false, sanityCheckResult); + + } + } + if ( graph.isADraggerActive() === false ) { + graph.options().focuserModule().handle(undefined); + graph.options().focuserModule().handle(that); + } + }); // add a foreiner element to this thing; + }; + + + this.renderType = function ( t ){ + if ( !arguments.length ) return rendertype; + rendertype = t; + return this; + }; + // Properties + this.complement = function ( p ){ + if ( !arguments.length ) return complement; + complement = p; + return this; + }; + + this.disjointUnion = function ( p ){ + if ( !arguments.length ) return disjointUnion; + disjointUnion = p; + return this; + }; + + this.disjointWith = function ( p ){ + if ( !arguments.length ) return disjointWith; + disjointWith = p; + return this; + }; + + this.individuals = function ( p ){ + if ( !arguments.length ) return individuals; + individuals = p || []; + return this; + }; + + this.intersection = function ( p ){ + if ( !arguments.length ) return intersection; + intersection = p; + return this; + }; + + this.links = function ( p ){ + if ( !arguments.length ) return links; + links = p; + return this; + }; + + this.maxIndividualCount = function ( p ){ + if ( !arguments.length ) return maxIndividualCount; + maxIndividualCount = p; + return this; + }; + + this.nodeElement = function ( p ){ + if ( !arguments.length ) return nodeElement; + nodeElement = p; + return this; + }; + + this.union = function ( p ){ + if ( !arguments.length ) return union; + union = p; + return this; + }; + + + /** + * Returns css classes generated from the data of this object. + * @returns {Array} + */ + that.collectCssClasses = function (){ + var cssClasses = []; + + if ( typeof that.styleClass() === "string" ) { + cssClasses.push(that.styleClass()); + } + + cssClasses = cssClasses.concat(that.visualAttributes()); + + return cssClasses; + }; + + + // Reused functions TODO refactor + this.addMouseListeners = function (){ + // Empty node + if ( !that.nodeElement() ) { + console.warn(this); + return; + } + + that.nodeElement().selectAll("*") + .on("mouseover", onMouseOver) + .on("mouseout", onMouseOut); + }; + + this.animationProcess = function (){ + var animRuns = false; + if ( that.getHalos() ) { + var haloGr = that.getHalos(); + var haloEls = haloGr.selectAll(".searchResultA"); + animRuns = haloGr.attr("animationRunning"); + if ( typeof animRuns !== "boolean" ) { + // parse this to a boolean value + animRuns = (animRuns === 'true'); + } + if ( animRuns === false ) { + haloEls.classed("searchResultA", false); + haloEls.classed("searchResultB", true); + } + } + return animRuns; + }; + + this.foreground = function (){ + var selectedNode = that.nodeElement().node(), + nodeContainer = selectedNode.parentNode; + // check if the halo is present and an animation is running + if ( that.animationProcess() === false ) { + // Append hovered element as last child to the container list. + nodeContainer.appendChild(selectedNode); + } + + }; + + function onMouseOver(){ + if ( that.mouseEntered() || ignoreLocalHoverEvents === true ) { + return; + } + + var selectedNode = that.nodeElement().node(), + nodeContainer = selectedNode.parentNode; + + // Append hovered element as last child to the container list. + if ( that.animationProcess() === false ) { + nodeContainer.appendChild(selectedNode); + } + if ( graph.isTouchDevice() === false ) { + that.setHoverHighlighting(true); + that.mouseEntered(true); + if ( graph.editorMode() === true && graph.ignoreOtherHoverEvents() === false ) { + graph.activateHoverElements(true, that); + } + } else { + if ( graph.editorMode() === true && graph.ignoreOtherHoverEvents() === false ) { + graph.activateHoverElements(true, that, true); + } + + } + + + } + + function onMouseOut(){ + that.setHoverHighlighting(false); + that.mouseEntered(false); + if ( graph.editorMode() === true && graph.ignoreOtherHoverEvents() === false ) { + graph.activateHoverElements(false); + } + } + + + forceLayoutNodeFunctions.addTo(this); + }; + + Base.prototype = Object.create(BaseElement.prototype); + Base.prototype.constructor = Base; + + + return Base; + }()); + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 10 */ +/***/ (function(module, exports, __webpack_require__) { + + /** + * The base element for all visual elements of webvowl. + */ + module.exports = (function (){ + + var Base = function ( graph ){ + // Basic attributes + var equivalents = [], + id, + label, + type, + iri, + baseIri, + // Additional attributes + annotations, + attributes = [], + backgroundColor, + comment, + description, + equivalentBase, + visualAttributes = [], + // Style attributes + focused = false, + indications = [], + mouseEntered = false, + styleClass, + visible = true, + + backupLabel, + // Other + languageTools = __webpack_require__(11)(); + + + this.backupLabel = function ( label ){ + if ( !arguments.length ) return backupLabel; + backupLabel = label; + }; + // Properties + this.attributes = function ( p ){ + if ( !arguments.length ) return attributes; + attributes = p; + return this; + }; + + this.annotations = function ( p ){ + if ( !arguments.length ) return annotations; + annotations = p; + return this; + }; + + this.redrawElement = function (){ + // TODO: OVERLOADED BY INDIVIDUAL ELEMENTS + }; + + this.backgroundColor = function ( p ){ + if ( !arguments.length ) return backgroundColor; + backgroundColor = p; + return this; + }; + + this.baseIri = function ( p ){ + if ( !arguments.length ) return baseIri; + baseIri = p; + return this; + }; + + this.comment = function ( p ){ + if ( !arguments.length ) return comment; + comment = p; + return this; + }; + + this.description = function ( p ){ + if ( !arguments.length ) return description; + description = p; + return this; + }; + + this.equivalents = function ( p ){ + if ( !arguments.length ) return equivalents; + equivalents = p || []; + return this; + }; + + this.equivalentBase = function ( p ){ + if ( !arguments.length ) return equivalentBase; + equivalentBase = p; + return this; + }; + + this.focused = function ( p ){ + if ( !arguments.length ) return focused; + focused = p; + return this; + }; + + this.id = function ( p ){ + if ( !arguments.length ) return id; + id = p; + return this; + }; + + this.indications = function ( p ){ + if ( !arguments.length ) return indications; + indications = p; + return this; + }; + + this.iri = function ( p ){ + if ( !arguments.length ) return iri; + iri = p; + return this; + }; + + this.label = function ( p ){ + if ( !arguments.length ) return label; + label = p; + return this; + }; + + this.mouseEntered = function ( p ){ + if ( !arguments.length ) return mouseEntered; + mouseEntered = p; + return this; + }; + + this.styleClass = function ( p ){ + if ( !arguments.length ) return styleClass; + styleClass = p; + return this; + }; + + this.type = function ( p ){ + if ( !arguments.length ) return type; + type = p; + return this; + }; + + this.visible = function ( p ){ + if ( !arguments.length ) return visible; + visible = p; + return this; + }; + + this.visualAttributes = function ( p ){ + if ( !arguments.length ) return visualAttributes; + visualAttributes = p; + return this; + }; + + + this.commentForCurrentLanguage = function (){ + return languageTools.textInLanguage(this.comment(), graph.language()); + }; + + /** + * @returns {string} the css class of this node.. + */ + this.cssClassOfNode = function (){ + return "node" + this.id(); + }; + + this.descriptionForCurrentLanguage = function (){ + return languageTools.textInLanguage(this.description(), graph.language()); + }; + + this.defaultLabel = function (){ + return languageTools.textInLanguage(this.label(), "default"); + }; + + this.indicationString = function (){ + return this.indications().join(", "); + }; + + this.labelForCurrentLanguage = function (){ + var preferredLanguage = graph && graph.language ? graph.language() : null; + return languageTools.textInLanguage(this.label(), preferredLanguage); + }; + }; + + Base.prototype.constructor = Base; + + Base.prototype.equals = function ( other ){ + return other instanceof Base && this.id() === other.id(); + }; + + Base.prototype.toString = function (){ + return this.labelForCurrentLanguage() + " (" + this.type() + ")"; + }; + + + return Base; + }()); + + +/***/ }), +/* 11 */ +/***/ (function(module, exports, __webpack_require__) { + + var constants = __webpack_require__(12)(); + + /** + * Encapsulates methods which return a label in a specific language for a preferred language. + */ + module.exports = (function (){ + + var languageTools = {}; + + + languageTools.textInLanguage = function ( textObject, preferredLanguage ){ + if ( typeof textObject === "undefined" ) { + return undefined; + } + + if ( typeof textObject === "string" ) { + return textObject; + } + + if ( preferredLanguage && textObject.hasOwnProperty(preferredLanguage) ) { + return textObject[preferredLanguage]; + } + + var textForLanguage = searchLanguage(textObject, "en"); + if ( textForLanguage ) { + return textForLanguage; + } + textForLanguage = searchLanguage(textObject, constants.LANG_UNDEFINED); + if ( textForLanguage ) { + return textForLanguage; + } + + return textObject[constants.LANG_IRIBASED]; + }; + + + function searchLanguage( textObject, preferredLanguage ){ + for ( var language in textObject ) { + if ( language === preferredLanguage && textObject.hasOwnProperty(language) ) { + return textObject[language]; + } + } + } + + return function (){ + /* Use a function here to keep a consistent style like webvowl.path.to.module() + * despite having just a single languageTools object. */ + return languageTools; + }; + })(); + + +/***/ }), +/* 12 */ +/***/ (function(module, exports) { + + module.exports = (function (){ + + var constants = {}; + + constants.LANG_IRIBASED = "IRI-based"; + constants.LANG_UNDEFINED = "undefined"; + + return function (){ + /* Use a function here to keep a consistent style like webvowl.path.to.module() + * despite having just a single object. */ + return constants; + }; + })(); + + +/***/ }), +/* 13 */ +/***/ (function(module, exports) { + + /** + * The functions for controlling attributes of nodes of the force layout can't be modelled to the element hierarchy, + * which is used for inheriting visual and OWL-like attributes. + * + * To reduce code redundancy the common functions for controlling the force layout node attributes are excluded into this + * module, which can add them to the node objects. + * + * @type {{}} + */ + var nodeFunctions = {}; + module.exports = function (){ + return nodeFunctions; + }; + + + nodeFunctions.addTo = function ( node ){ + addFixedLocationFunctions(node); + }; + + function addFixedLocationFunctions( node ){ + var locked = false, + frozen = false, + halo = false, + pinned = false; + + node.locked = function ( p ){ + if ( !arguments.length ) { + return locked; + } + locked = p; + applyFixedLocationAttributes(); + return node; + }; + + node.frozen = function ( p ){ + if ( !arguments.length ) { + return frozen; + } + frozen = p; + applyFixedLocationAttributes(); + return node; + }; + + node.halo = function ( p ){ + if ( !arguments.length ) { + return halo; + } + halo = p; + applyFixedLocationAttributes(); + return node; + }; + + node.pinned = function ( p ){ + if ( !arguments.length ) { + return pinned; + } + pinned = p; + applyFixedLocationAttributes(); + return node; + }; + + function applyFixedLocationAttributes(){ + if ( node.locked() || node.frozen() || node.pinned() ) { + node.fixed = true; + } else { + node.fixed = false; + } + } + } + + +/***/ }), +/* 14 */ +/***/ (function(module, exports, __webpack_require__) { + + var textTools = __webpack_require__(15)(); + var AbstractTextElement = __webpack_require__(16); + + module.exports = CenteringTextElement; + function CenteringTextElement( container, backgroundColor ){ + AbstractTextElement.apply(this, arguments); + this.storedFullTextLines = []; + this.storedSpanArrays = []; + this.storedStyle = []; + + } + + CenteringTextElement.prototype = Object.create(AbstractTextElement.prototype); + CenteringTextElement.prototype.constructor = CenteringTextElement; + + CenteringTextElement.prototype.addText = function ( text, prefix, suffix ){ + if ( text ) { + this.addTextline(text, this.CSS_CLASSES.default, prefix, suffix); + } + }; + + CenteringTextElement.prototype.addSubText = function ( text ){ + if ( text ) { + this.addTextline(text, this.CSS_CLASSES.subtext, "(", ")"); + } + }; + + CenteringTextElement.prototype.addEquivalents = function ( text ){ + if ( text ) { + this.addTextline(text, this.CSS_CLASSES.default); + } + }; + + CenteringTextElement.prototype.addInstanceCount = function ( instanceCount ){ + if ( instanceCount ) { + this.addTextline(instanceCount.toString(), this.CSS_CLASSES.instanceCount); + } + }; + CenteringTextElement.prototype.saveCorrespondingSpan = function ( correspondingSpan ){ + this.storedSpanArrays.push(correspondingSpan); + }; + CenteringTextElement.prototype.saveFullTextLine = function ( fullText ){ + this.storedFullTextLines.push(fullText); + }; + CenteringTextElement.prototype.saveStyle = function ( style ){ + this.storedStyle.push(style); + }; + + CenteringTextElement.prototype.updateAllTextElements = function (){ + // TODO : TEST THIS postPrefix >>> _applyPreAndPostFix + for ( var i = 0; i < this.storedSpanArrays.length; i++ ) { + var truncatedText = textTools.truncate(this.storedFullTextLines[i], this._textBlock().datum().textWidth(), this.storedStyle[i]); + this.storedSpanArrays[i].text(truncatedText); + } + }; + + + CenteringTextElement.prototype.addTextline = function ( text, style, prefix, postfix ){ + var truncatedText = textTools.truncate(text, this._textBlock().datum().textWidth(), style); + this.saveFullTextLine(text); + this.saveStyle(style); + var tspan = this._textBlock().append("tspan") + .classed(this.CSS_CLASSES.default, true) + .classed(style, true) + .text(this._applyPreAndPostFix(truncatedText, prefix, postfix)) + .attr("x", 0); + this._repositionTextLine(tspan); + this.saveCorrespondingSpan(tspan); + + this._repositionTextBlock(); + }; + + CenteringTextElement.prototype._repositionTextLine = function ( tspan ){ + var fontSizeProperty = window.getComputedStyle(tspan.node()).getPropertyValue("font-size"); + var fontSize = parseFloat(fontSizeProperty); + + var siblingCount = this._lineCount() - 1; + var lineDistance = siblingCount > 0 ? this.LINE_DISTANCE : 0; + + tspan.attr("dy", fontSize + lineDistance + "px"); + }; + + CenteringTextElement.prototype.getTextBox = function (){ + return this._textBlock(); + }; + + + CenteringTextElement.prototype._repositionTextBlock = function (){ + // Nothing to do if no child elements exist + var lineCount = this._lineCount(); + if ( lineCount < 1 ) { + this._textBlock().attr("y", 0); + return; + } + + var textBlockHeight = this._textBlock().node().getBBox().height; + this._textBlock().attr("y", -textBlockHeight * 0.5 + "px"); + }; + + CenteringTextElement.prototype._lineCount = function (){ + return this._textBlock().property("childElementCount"); + }; + + +/***/ }), +/* 15 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var ADDITIONAL_TEXT_SPACE = 4; + + var tools = {}; + + function measureTextWidth( text, textStyle ){ + // Set a default value + if ( !textStyle ) { + textStyle = "text"; + } + var d = d3.select("body") + .append("div") + .attr("class", textStyle) + .attr("id", "width-test") // tag this element to identify it + .attr("style", "position:absolute; float:left; white-space:nowrap; visibility:hidden;") + .text(text), + w = document.getElementById("width-test").offsetWidth; + d.remove(); + return w; + } + + tools.truncate = function ( text, maxWidth, textStyle, additionalTextSpace ){ + maxWidth -= isNaN(additionalTextSpace) ? ADDITIONAL_TEXT_SPACE : additionalTextSpace; + if ( isNaN(maxWidth) || maxWidth <= 0 ) { + return text; + } + + var truncatedText = text, + newTruncatedTextLength, + textWidth, + ratio; + + while ( true ) { + textWidth = measureTextWidth(truncatedText, textStyle); + if ( textWidth <= maxWidth ) { + break; + } + + ratio = textWidth / maxWidth; + newTruncatedTextLength = Math.floor(truncatedText.length / ratio); + + // detect if nothing changes + if ( truncatedText.length === newTruncatedTextLength ) { + break; + } + + truncatedText = truncatedText.substring(0, newTruncatedTextLength); + } + + if ( text.length > truncatedText.length ) { + return text.substring(0, truncatedText.length - 3) + "..."; + } + return text; + }; + + + module.exports = function (){ + return tools; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 16 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {module.exports = AbstractTextElement; + + function AbstractTextElement( container, backgroundColor ){ + var textBlock = container.append("text") + .classed("text", true) + .style("fill", this._getTextColor(backgroundColor)) + .attr("text-anchor", "middle"); + + this._textBlock = function (){ + return textBlock; + }; + } + + AbstractTextElement.prototype.LINE_DISTANCE = 1; + AbstractTextElement.prototype.CSS_CLASSES = { + default: "text", + subtext: "subtext", + instanceCount: "instance-count" + }; + AbstractTextElement.prototype.DARK_TEXT_COLOR = "#000"; + AbstractTextElement.prototype.LIGHT_TEXT_COLOR = "#fff"; + + AbstractTextElement.prototype.translation = function ( x, y ){ + this._textBlock().attr("transform", "translate(" + x + ", " + y + ")"); + return this; + }; + + AbstractTextElement.prototype.remove = function (){ + this._textBlock().remove(); + return this; + }; + + AbstractTextElement.prototype._applyPreAndPostFix = function ( text, prefix, postfix ){ + if ( prefix ) { + text = prefix + text; + } + if ( postfix ) { + text += postfix; + } + return text; + }; + + AbstractTextElement.prototype._getTextColor = function ( rawBackgroundColor ){ + if ( !rawBackgroundColor ) { + return AbstractTextElement.prototype.DARK_TEXT_COLOR; + } + + var backgroundColor = d3.rgb(rawBackgroundColor); + if ( calculateLuminance(backgroundColor) > 0.5 ) { + return AbstractTextElement.prototype.DARK_TEXT_COLOR; + } else { + return AbstractTextElement.prototype.LIGHT_TEXT_COLOR; + } + }; + + function calculateLuminance( color ){ + return 0.3 * (color.r / 255) + 0.59 * (color.g / 255) + 0.11 * (color.b / 255); + } + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 17 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains reusable function for drawing nodes. + */ + module.exports = (function (){ + + var tools = {}; + + /** + * Append a circular class node with the passed attributes. + * @param parent the parent element to which the circle will be appended + * @param radius + * @param [cssClasses] an array of additional css classes + * @param [tooltip] + * @param [backgroundColor] + * @returns {*} + */ + tools.appendCircularClass = function ( parent, radius, cssClasses, tooltip, backgroundColor ){ + var circle = parent.append("circle") + .classed("class", true) + .attr("r", radius); + + addCssClasses(circle, cssClasses); + addToolTip(circle, tooltip); + addBackgroundColor(circle, backgroundColor); + + return circle; + }; + + function addCssClasses( element, cssClasses ){ + if ( cssClasses instanceof Array ) { + cssClasses.forEach(function ( cssClass ){ + element.classed(cssClass, true); + }); + } + } + + function addToolTip( element, tooltip ){ + if ( tooltip ) { + element.append("title").text(tooltip); + } + } + + function addBackgroundColor( element, backgroundColor ){ + if ( backgroundColor ) { + element.style("fill", backgroundColor); + } + } + + /** + * Appends a rectangular class node with the passed attributes. + * @param parent the parent element to which the rectangle will be appended + * @param width + * @param height + * @param [cssClasses] an array of additional css classes + * @param [tooltip] + * @param [backgroundColor] + * @returns {*} + */ + tools.appendRectangularClass = function ( parent, width, height, cssClasses, tooltip, backgroundColor ){ + var rectangle = parent.append("rect") + .classed("class", true) + .attr("x", -width / 2) + .attr("y", -height / 2) + .attr("width", width) + .attr("height", height); + + addCssClasses(rectangle, cssClasses); + addToolTip(rectangle, tooltip); + addBackgroundColor(rectangle, backgroundColor); + + return rectangle; + }; + + tools.drawPin = function ( container, dx, dy, onClick, accuraciesHelperFunction, useAccuracyHelper ){ + var pinGroupElement = container + .append("g") + .classed("hidden-in-export", true) + .attr("transform", "translate(" + dx + "," + dy + ")"); + + var base = pinGroupElement.append("circle") + .classed("class pin feature", true) + .attr("r", 12) + .on("click", function (){ + if ( onClick ) { + onClick(); + } + d3.event.stopPropagation(); + }); + + pinGroupElement.append("line") + .attr("x1", 0) + .attr("x2", 0) + .attr("y1", 12) + .attr("y2", 16); + + if ( useAccuracyHelper === true ) { + pinGroupElement.append("circle") + .attr("r", 15) + .attr("cx", -7) + .attr("cy", -7) + .classed("superHiddenElement ", true) + .classed("superOpacityElement", !accuraciesHelperFunction()) + .on("click", function (){ + if ( onClick ) { + onClick(); + } + d3.event.stopPropagation(); + }) + .on("mouseover", function (){ + base.classed("feature_hover", true); + }) + .on("mouseout", function (){ + base.classed("feature_hover", false); + }) + ; + + } + + + return pinGroupElement; + }; + + tools.drawRectHalo = function ( node, width, height, offset ){ + var container; + if ( node.nodeElement ) + container = node.nodeElement(); + else + container = node.labelElement(); + + if ( !container ) { + // console.log("no container found"); + return; + } + + var haloGroupElement = container + .append("g") + .classed("hidden-in-export", true); + + haloGroupElement.append("rect") + .classed("searchResultA", true) + .attr("x", (-width - offset) / 2) + .attr("y", (-offset - height) / 2) + .attr("width", width + offset) + .attr("height", height + offset); + haloGroupElement.attr("animationRunning", true); + + haloGroupElement.node().addEventListener("webkitAnimationEnd", function (){ + var test = haloGroupElement.selectAll(".searchResultA"); + test.classed("searchResultA", false) + .classed("searchResultB", true); + haloGroupElement.attr("animationRunning", false); + }); + haloGroupElement.node().addEventListener("animationend", function (){ + var test = haloGroupElement.selectAll(".searchResultA"); + test.classed("searchResultA", false) + .classed("searchResultB", true); + haloGroupElement.attr("animationRunning", false); + }); + + + return haloGroupElement; + + }; + tools.drawHalo = function ( container, radius ){ + if ( container === undefined ) { + return null; + // there is no element to add the halo to; + // this means the node was not rendered previously + } + + var haloGroupElement = container + .append("g") + .classed("hidden-in-export", true); + + + haloGroupElement.append("circle", ":first-child") + .classed("searchResultA", true) + .attr("r", radius + 15); + haloGroupElement.attr("animationRunning", true); + + + haloGroupElement.node().addEventListener("webkitAnimationEnd", function (){ + var test = haloGroupElement.selectAll(".searchResultA"); + test.classed("searchResultA", false) + .classed("searchResultB", true) + .attr("animationRunning", false); + haloGroupElement.attr("animationRunning", false); + }); + haloGroupElement.node().addEventListener("animationend", function (){ + var test = haloGroupElement.selectAll(".searchResultA"); + test.classed("searchResultA", false) + .classed("searchResultB", true) + .attr("animationRunning", false); + haloGroupElement.attr("animationRunning", false); + }); + + return haloGroupElement; + }; + + return function (){ + // Encapsulate into function to maintain default.module.path() + return tools; + }; + })(); + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 18 */ +/***/ (function(module, exports, __webpack_require__) { + + var RoundNode = __webpack_require__(8); + + module.exports = (function (){ + + var o = function ( graph ){ + RoundNode.apply(this, arguments); + + this.type("owl:Class"); + }; + o.prototype = Object.create(RoundNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 19 */ +/***/ (function(module, exports, __webpack_require__) { + + var SetOperatorNode = __webpack_require__(20); + + module.exports = (function (){ + + var o = function ( graph ){ + SetOperatorNode.apply(this, arguments); + + var that = this, + superDrawFunction = that.draw; + + this.styleClass("complementof") + .type("owl:complementOf"); + + this.draw = function ( element ){ + superDrawFunction(element); + + var symbol = element.append("g").classed("embedded", true); + + symbol.append("circle") + .attr("class", "symbol") + .classed("fineline", true) + .attr("r", 10); + symbol.append("path") + .attr("class", "nofill") + .attr("d", "m -7,-1.5 12,0 0,6") + .attr("transform", "scale(.5)"); + + symbol.attr("transform", + "translate(-" + (that.radius() - 15) / 100 + ",-" + (that.radius() - 15) / 100 + ")"); + + that.postDrawActions(); + }; + }; + o.prototype = Object.create(SetOperatorNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 20 */ +/***/ (function(module, exports, __webpack_require__) { + + var AbsoluteTextElement = __webpack_require__(21); + var BoxArrowLink = __webpack_require__(22); + var RoundNode = __webpack_require__(8); + var drawTools = __webpack_require__(17)(); + + module.exports = (function (){ + + var o = function ( graph ){ + RoundNode.apply(this, arguments); + + var that = this, + superHoverHighlightingFunction = that.setHoverHighlighting, + superPostDrawActions = that.postDrawActions; + + this.setHoverHighlighting = function ( enable ){ + superHoverHighlightingFunction(enable); + + // Highlight links pointing to included nodes when hovering the set operator + that.links() + .filter(function ( link ){ + return link instanceof BoxArrowLink; + }) + .filter(function ( link ){ + return link.domain().equals(that); + }) + .forEach(function ( link ){ + link.property().setHighlighting(enable); + }); + }; + + this.draw = function ( element ){ + that.nodeElement(element); + + drawTools.appendCircularClass(element, that.actualRadius(), + that.collectCssClasses().join(" "), + that.labelForCurrentLanguage(), that.backgroundColor()); + }; + + this.postDrawActions = function (){ + superPostDrawActions(); + that.textBlock().remove(); + + var textElement = new AbsoluteTextElement(that.nodeElement(), that.backgroundColor()); + + var equivalentsString = that.equivalentsString(); + var offsetForFollowingEquivalents = equivalentsString ? -30 : -17; + var suffixForFollowingEquivalents = equivalentsString ? "," : ""; + textElement.addText(that.labelForCurrentLanguage(), offsetForFollowingEquivalents, "", + suffixForFollowingEquivalents); + + textElement.addEquivalents(equivalentsString, -17); + + + if ( !graph.options().compactNotation() ) { + + if ( that.indicationString().length > 0 ) { + textElement.addSubText(that.indicationString(), 17); + textElement.addInstanceCount(that.individuals().length, 30); + } else { + textElement.addInstanceCount(that.individuals().length, 17); + } + } else { + textElement.addInstanceCount(that.individuals().length, 17); + } + + that.textBlock(textElement); + }; + }; + o.prototype = Object.create(RoundNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 21 */ +/***/ (function(module, exports, __webpack_require__) { + + var textTools = __webpack_require__(15)(); + var AbstractTextElement = __webpack_require__(16); + + module.exports = AbsoluteTextElement; + function AbsoluteTextElement( container, backgroundColor ){ + AbstractTextElement.apply(this, arguments); + } + + AbsoluteTextElement.prototype = Object.create(AbstractTextElement.prototype); + AbsoluteTextElement.prototype.constructor = AbsoluteTextElement; + + AbsoluteTextElement.prototype.addText = function ( text, yShift, prefix, suffix ){ + if ( text ) { + this.addTextline(text, this.CSS_CLASSES.default, yShift, prefix, suffix); + } + }; + + AbsoluteTextElement.prototype.addSubText = function ( text, yShift ){ + if ( text ) { + this.addTextline(text, this.CSS_CLASSES.subtext, yShift, "(", ")"); + } + }; + + AbsoluteTextElement.prototype.addEquivalents = function ( text, yShift ){ + if ( text ) { + this.addTextline(text, this.CSS_CLASSES.default, yShift); + } + }; + + AbsoluteTextElement.prototype.addInstanceCount = function ( instanceCount, yShift ){ + if ( instanceCount ) { + this.addTextline(instanceCount.toString(), this.CSS_CLASSES.instanceCount, yShift); + } + }; + + + AbsoluteTextElement.prototype.addTextline = function ( text, style, yShift, prefix, postfix ){ + var truncatedText = textTools.truncate(text, this._textBlock().datum().textWidth(yShift), style); + + var tspan = this._textBlock().append("tspan") + .classed(this.CSS_CLASSES.default, true) + .classed(style, true) + .text(this._applyPreAndPostFix(truncatedText, prefix, postfix)) + .attr("x", 0); + this._repositionTextLine(tspan, yShift); + }; + + AbsoluteTextElement.prototype._repositionTextLine = function ( tspan, yShift ){ + var fontSizeProperty = window.getComputedStyle(tspan.node()).getPropertyValue("font-size"); + var fontSize = parseFloat(fontSizeProperty); + + /* BBox height is not supported in Firefox for tspans and dominant-baseline doesn't work in some SVG editors */ + var approximatedShiftForVerticalCentering = (1 / 3) * fontSize; + + tspan.attr("y", approximatedShiftForVerticalCentering + (yShift || 0) + "px"); + }; + + +/***/ }), +/* 22 */ +/***/ (function(module, exports, __webpack_require__) { + + var PlainLink = __webpack_require__(23); + + + module.exports = BoxArrowLink; + + function BoxArrowLink( domain, range, property ){ + PlainLink.apply(this, arguments); + } + + BoxArrowLink.prototype = Object.create(PlainLink.prototype); + BoxArrowLink.prototype.constructor = BoxArrowLink; + + + BoxArrowLink.prototype.draw = function ( linkGroup, markerContainer ){ + var property = this.label().property(); + var inverse = this.label().inverse(); + + createPropertyMarker(markerContainer, property); + if ( inverse ) { + createInverseMarker(markerContainer, inverse); + } + + PlainLink.prototype.draw.apply(this, arguments); + + // attach the markers to the link + linkGroup.attr("marker-start", "url(#" + property.markerId() + ")"); + if ( inverse ) { + linkGroup.attr("marker-end", "url(#" + inverse.markerId() + ")"); + } + }; + + + function createPropertyMarker( markerContainer, inverse ){ + var inverseMarker = appendBasicMarker(markerContainer, inverse); + inverseMarker.attr("refX", -8); + inverseMarker.append("path") + .attr("d", "M0,-8L8,0L0,8L-8,0L0,-8L8,0") + .classed(inverse.markerType(), true); + + inverse.markerElement(inverseMarker); + } + + function createInverseMarker( markerContainer, property ){ + var marker = appendBasicMarker(markerContainer, property); + marker.attr("refX", 8); + marker.append("path") + .attr("d", "M0,-8L8,0L0,8L-8,0L0,-8L8,0") + .classed(property.markerType(), true); + + property.markerElement(marker); + } + + function appendBasicMarker( markerContainer, property ){ + return markerContainer.append("marker") + .datum(property) + .attr("id", property.markerId()) + .attr("viewBox", "-10 -10 20 20") + .attr("markerWidth", 20) + .attr("markerHeight", 20) + .attr("markerUnits", "userSpaceOnUse") + .attr("orient", "auto"); + } + + +/***/ }), +/* 23 */ +/***/ (function(module, exports, __webpack_require__) { + + var Label = __webpack_require__(24); + + + module.exports = PlainLink; + + /** + * A link connects at least two VOWL nodes. + * The properties connecting the VOWL nodes are stored separately into the label. + * @param domain + * @param range + * @param property + */ + function PlainLink( domain, range, property ){ + var layers, + layerIndex, + loops, + loopIndex, + pathEl, + label = new Label(property, this); + + var backPart = __webpack_require__(25)(domain, label, this), + frontPart = __webpack_require__(25)(label, range, this); + + + this.layers = function ( p ){ + if ( !arguments.length ) return layers; + layers = p; + return this; + }; + + this.layerIndex = function ( p ){ + if ( !arguments.length ) return layerIndex; + layerIndex = p; + return this; + }; + + this.loops = function ( p ){ + if ( !arguments.length ) return loops; + loops = p; + return this; + }; + + this.loopIndex = function ( p ){ + if ( !arguments.length ) return loopIndex; + loopIndex = p; + return this; + }; + + + this.domain = function (){ + return domain; + }; + + this.label = function (){ + return label; + }; + + this.linkParts = function (){ + return [frontPart, backPart]; + }; + + this.range = function (){ + return range; + }; + this.pathObj = function ( pE ){ + if ( !arguments.length ) { + return pathEl; + } + pathEl = pE; + }; + } + + + PlainLink.prototype.draw = function ( linkGroup ){ + var property = this.label().property(); + var inverse = this.label().inverse(); + + property.linkGroup(linkGroup); + if ( inverse ) { + inverse.linkGroup(linkGroup); + } + + var pathElement = linkGroup.append("path"); + pathElement.classed("link-path", true) + .classed(this.domain().cssClassOfNode(), true) + .classed(this.range().cssClassOfNode(), true) + .classed(property.linkType(), true); + this.pathObj(pathElement); + + }; + + + PlainLink.prototype.inverse = function (){ + return this.label().inverse(); + }; + + PlainLink.prototype.isLoop = function (){ + return this.domain().equals(this.range()); + }; + + PlainLink.prototype.property = function (){ + return this.label().property(); + }; + + + +/***/ }), +/* 24 */ +/***/ (function(module, exports) { + + module.exports = Label; + + /** + * A label represents the element(s) which further describe a link. + * It encapsulates the property and its inverse property. + * @param property the property; the inverse is inferred + * @param link the link this label belongs to + */ + function Label( property, link ){ + this.link = function (){ + return link; + }; + + this.property = function (){ + return property; + }; + + // "Forward" the fixed value set on the property to avoid having to access this container + Object.defineProperty(this, "fixed", { + get: function (){ + var inverseFixed = property.inverse() ? property.inverse().fixed : false; + return property.fixed || inverseFixed; + }, + set: function ( v ){ + property.fixed = v; + if ( property.inverse() ) property.inverse().fixed = v; + } + }); + this.frozen = property.frozen; + this.locked = property.locked; + this.pinned = property.pinned; + } + + Label.prototype.actualRadius = function (){ + return this.property().actualRadius(); + }; + + Label.prototype.draw = function ( container ){ + return this.property().draw(container); + }; + + Label.prototype.inverse = function (){ + return this.property().inverse(); + }; + + Label.prototype.equals = function ( other ){ + if ( !other ) { + return false; + } + + var instance = other instanceof Label; + var equalProperty = this.property().equals(other.property()); + + var equalInverse = false; + if ( this.inverse() ) { + equalInverse = this.inverse().equals(other.inverse()); + } else if ( !other.inverse() ) { + equalInverse = true; + } + + return instance && equalProperty && equalInverse; + }; + + +/***/ }), +/* 25 */ +/***/ (function(module, exports) { + + /** + * A linkPart connects two force layout nodes. + * It reprents a link which can be used in d3's force layout. + * @param _domain + * @param _range + * @param _link + */ + module.exports = function ( _domain, _range, _link ){ + var linkPart = {}, + domain = _domain, + link = _link, + range = _range; + + // Define d3 properties + Object.defineProperties(linkPart, { + "source": { value: domain, writable: true }, + "target": { value: range, writable: true } + }); + + + linkPart.domain = function (){ + return domain; + }; + + linkPart.link = function (){ + return link; + }; + + linkPart.range = function (){ + return range; + }; + + + return linkPart; + }; + + +/***/ }), +/* 26 */ +/***/ (function(module, exports, __webpack_require__) { + + var RoundNode = __webpack_require__(8); + + module.exports = (function (){ + + var o = function ( graph ){ + RoundNode.apply(this, arguments); + + this.attributes(["deprecated"]) + .type("owl:DeprecatedClass") + .styleClass("deprecated") + .indications(["deprecated"]); + }; + o.prototype = Object.create(RoundNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 27 */ +/***/ (function(module, exports, __webpack_require__) { + + var SetOperatorNode = __webpack_require__(20); + + module.exports = (function (){ + + var o = function ( graph ){ + SetOperatorNode.apply(this, arguments); + + var that = this, + superDrawFunction = that.draw; + + this.styleClass("disjointunionof") + .type("owl:disjointUnionOf"); + + this.draw = function ( element ){ + superDrawFunction(element); + + var symbol = element.append("g").classed("embedded", true); + + var symbolRadius = 10; + symbol.append("circle") + .attr("class", "symbol") + .attr("r", symbolRadius); + symbol.append("circle") + .attr("cx", 10) + .attr("class", "symbol") + .classed("fineline", true) + .attr("r", symbolRadius); + symbol.append("circle") + .attr("class", "nofill") + .classed("fineline", true) + .attr("r", symbolRadius); + symbol.append("text") + .attr("class", "link") + .text("1") + .attr("transform", "scale(.7)translate(3,5)"); + + symbol.attr("transform", "translate(-" + (that.radius() - 15) / 7 + ",-" + (that.radius() - 15) / 100 + ")"); + + that.postDrawActions(); + }; + }; + o.prototype = Object.create(SetOperatorNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 28 */ +/***/ (function(module, exports, __webpack_require__) { + + var RoundNode = __webpack_require__(8); + var drawTools = __webpack_require__(17)(); + + module.exports = (function (){ + + var o = function ( graph ){ + RoundNode.apply(this, arguments); + + var CIRCLE_SIZE_DIFFERENCE = 4; + var renderingElement; + var that = this, + superActualRadiusFunction = that.actualRadius; + + this.styleClass("equivalentclass") + .type("owl:equivalentClass"); + + this.actualRadius = function (){ + return superActualRadiusFunction() + CIRCLE_SIZE_DIFFERENCE; + }; + + this.redrawElement = function (){ + renderingElement.remove(); + that.textBlock().remove(); + var bgColor = that.backgroundColor(); + + if ( that.attributes().indexOf("deprecated") > -1 ) { + bgColor = undefined; + } + var cssClasses = that.collectCssClasses(); + renderingElement = that.nodeElement().append("g"); + + if ( that.getRectangularRepresentation() === true ) { + drawTools.appendRectangularClass(renderingElement, 84, 84, ["white", "embedded"]); + drawTools.appendRectangularClass(renderingElement, 80 - CIRCLE_SIZE_DIFFERENCE, 80 - CIRCLE_SIZE_DIFFERENCE, cssClasses, that.labelForCurrentLanguage(), bgColor); + } else { + drawTools.appendCircularClass(renderingElement, that.actualRadius(), ["white", "embedded"]); + console.log(cssClasses); + console.log(that.attributes()); + console.log("what is bgColor" + bgColor); + drawTools.appendCircularClass(renderingElement, that.actualRadius() - CIRCLE_SIZE_DIFFERENCE, cssClasses, that.labelForCurrentLanguage(), bgColor); + + } + that.postDrawActions(that.nodeElement()); + + }; + this.draw = function ( parentElement ){ + var cssClasses = that.collectCssClasses(); + + that.nodeElement(parentElement); + renderingElement = parentElement.append("g"); + var bgColor = that.backgroundColor(); + if ( that.attributes().indexOf("deprecated") > -1 ) { + bgColor = undefined; + } + // draw the outer circle at first and afterwards the inner circle + if ( that.getRectangularRepresentation() === true ) { + drawTools.appendRectangularClass(renderingElement, 84, 84, ["white", "embedded"]); + drawTools.appendRectangularClass(renderingElement, 80 - CIRCLE_SIZE_DIFFERENCE, 80 - CIRCLE_SIZE_DIFFERENCE, cssClasses, that.labelForCurrentLanguage(), bgColor); + } else { + drawTools.appendCircularClass(renderingElement, that.actualRadius(), ["white", "embedded"]); + drawTools.appendCircularClass(renderingElement, that.actualRadius() - CIRCLE_SIZE_DIFFERENCE, cssClasses, that.labelForCurrentLanguage(), bgColor); + + } + + that.postDrawActions(); + }; + + /** + * Sets the hover highlighting of this node. + * @param enable + */ + that.setHoverHighlighting = function ( enable ){ + that.nodeElement().selectAll("circle:last-of-type").classed("hovered", enable); + }; + }; + o.prototype = Object.create(RoundNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 29 */ +/***/ (function(module, exports, __webpack_require__) { + + var SetOperatorNode = __webpack_require__(20); + + module.exports = (function (){ + + var o = function ( graph ){ + SetOperatorNode.apply(this, arguments); + + var that = this, + superDrawFunction = that.draw, + INTERSECTION_BACKGROUND_PATH = createIntersectionPath(); + + this.styleClass("intersectionof") + .type("owl:intersectionOf"); + + this.draw = function ( element ){ + superDrawFunction(element); + + var symbol = element.append("g").classed("embedded", true); + + var symbolRadius = 10; + symbol.append("path") + .attr("class", "nostroke") + .classed("symbol", true) + .attr("d", INTERSECTION_BACKGROUND_PATH); + symbol.append("circle") + .attr("class", "nofill") + .classed("fineline", true) + .attr("r", symbolRadius); + symbol.append("circle") + .attr("cx", 10) + .attr("class", "nofill") + .classed("fineline", true) + .attr("r", symbolRadius); + symbol.append("path") + .attr("class", "nofill") + .attr("d", "m 9,5 c 0,-2 0,-4 0,-6 0,0 0,0 0,0 0,0 0,-1.8 -1,-2.3 -0.7,-0.6 -1.7,-0.8 -2.9," + + "-0.8 -1.2,0 -2,0 -3,0.8 -0.7,0.5 -1,1.4 -1,2.3 0,2 0,4 0,6") + .attr("transform", "scale(.5)translate(5,0)"); + + symbol.attr("transform", + "translate(-" + (that.radius() - 15) / 7 + ",-" + (that.radius() - 15) / 100 + ")"); + + that.postDrawActions(); + }; + + function createIntersectionPath(){ + var height = 18; + + var offsetX = 5; + var offsetY = -(height / 2); + + var bezierX = 7; + var bezierY = 5; + var bottomBezierY = height - bezierY; + + var startPosition = "M" + offsetX + "," + offsetY; + var rightSide = "c" + bezierX + "," + bezierY + " " + bezierX + "," + bottomBezierY + " 0," + height; + var leftSide = "c" + -bezierX + "," + -bezierY + " " + -bezierX + "," + -bottomBezierY + " 0," + -height; + + return startPosition + rightSide + leftSide; + } + }; + o.prototype = Object.create(SetOperatorNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 30 */ +/***/ (function(module, exports, __webpack_require__) { + + var OwlThing = __webpack_require__(31); + + module.exports = (function (){ + + var o = function ( graph ){ + OwlThing.apply(this, arguments); + + this.label("Nothing") + .type("owl:Nothing") + .iri("http://www.w3.org/2002/07/owl#Nothing"); + }; + o.prototype = Object.create(OwlThing.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 31 */ +/***/ (function(module, exports, __webpack_require__) { + + var RoundNode = __webpack_require__(8); + + module.exports = (function (){ + + var o = function ( graph ){ + RoundNode.apply(this, arguments); + + var superDrawFunction = this.draw; + + this.label("Thing") + .type("owl:Thing") + .iri("http://www.w3.org/2002/07/owl#Thing") + .radius(30); + + this.draw = function ( element ){ + superDrawFunction(element, ["white", "dashed"]); + }; + }; + o.prototype = Object.create(RoundNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 32 */ +/***/ (function(module, exports, __webpack_require__) { + + var SetOperatorNode = __webpack_require__(20); + + module.exports = (function (){ + + var o = function ( graph ){ + SetOperatorNode.apply(this, arguments); + + var that = this, + superDrawFunction = that.draw; + + this.styleClass("unionof") + .type("owl:unionOf"); + + this.draw = function ( element ){ + superDrawFunction(element); + + var symbol = element.append("g").classed("embedded", true); + + var symbolRadius = 10; + symbol.append("circle") + .attr("class", "symbol") + .attr("r", symbolRadius); + symbol.append("circle") + .attr("cx", 10) + .attr("class", "symbol") + .classed("fineline", true) + .attr("r", symbolRadius); + symbol.append("circle") + .attr("class", "nofill") + .classed("fineline", true) + .attr("r", symbolRadius); + symbol.append("path") + .attr("class", "link") + .attr("d", "m 1,-3 c 0,2 0,4 0,6 0,0 0,0 0,0 0,2 2,3 4,3 2,0 4,-1 4,-3 0,-2 0,-4 0,-6") + .attr("transform", "scale(.5)translate(5,0)"); + + symbol.attr("transform", "translate(-" + (that.radius() - 15) / 7 + ",-" + (that.radius() - 15) / 100 + ")"); + + that.postDrawActions(); + }; + }; + o.prototype = Object.create(SetOperatorNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 33 */ +/***/ (function(module, exports, __webpack_require__) { + + var RoundNode = __webpack_require__(8); + + module.exports = (function (){ + + var o = function ( graph ){ + RoundNode.apply(this, arguments); + + this.attributes(["rdf"]) + .type("rdfs:Class"); + }; + o.prototype = Object.create(RoundNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 34 */ +/***/ (function(module, exports, __webpack_require__) { + + var DatatypeNode = __webpack_require__(35); + + module.exports = (function (){ + + var o = function ( graph ){ + DatatypeNode.apply(this, arguments); + var dTypeString = "undefined"; + this.attributes(["datatype"]) + .type("rdfs:Datatype") + .styleClass("datatype"); + this.dType = function ( val ){ + if ( !arguments.length ) return dTypeString; + dTypeString = val; + + }; + }; + o.prototype = Object.create(DatatypeNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 35 */ +/***/ (function(module, exports, __webpack_require__) { + + var RectangularNode = __webpack_require__(36); + + module.exports = (function (){ + + var o = function ( graph ){ + RectangularNode.apply(this, arguments); + }; + o.prototype = Object.create(RectangularNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 36 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var BaseNode = __webpack_require__(9); + var CenteringTextElement = __webpack_require__(14); + var drawTools = __webpack_require__(17)(); + var rectangularElementTools = __webpack_require__(37)(); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseNode.apply(this, arguments); + + var that = this, + height = 20, + width = 60, + pinGroupElement, + haloGroupElement, + labelWidth = 80, + myWidth = 80, + defaultWidth = 80, + shapeElement, + textBlock, + smallestRadius = height / 2; + + that.renderType("rect"); + // Properties + this.height = function ( p ){ + if ( !arguments.length ) return height; + height = p; + return this; + }; + + this.width = function ( p ){ + if ( !arguments.length ) return width; + width = p; + return this; + }; + + this.getHalos = function (){ + return haloGroupElement; + }; + + // Functions + // for compatibility reasons // TODO resolve + this.actualRadius = function (){ + return smallestRadius; + }; + + this.distanceToBorder = function ( dx, dy ){ + return rectangularElementTools.distanceToBorder(that, dx, dy); + }; + + this.setHoverHighlighting = function ( enable ){ + that.nodeElement().selectAll("rect").classed("hovered", enable); + + var haloGroup = that.getHalos(); + if ( haloGroup ) { + var test = haloGroup.selectAll(".searchResultA"); + test.classed("searchResultA", false); + test.classed("searchResultB", true); + } + + }; + + + // overwrite the labelWith; + + + this.textWidth = function (){ + return labelWidth; + }; + this.width = function (){ + return labelWidth; + }; + + this.getMyWidth = function (){ + // use a simple heuristic + var text = that.labelForCurrentLanguage(); + myWidth = measureTextWidth(text, "text") + 20; + + // check for sub names; + var indicatorText = that.indicationString(); + var indicatorWidth = measureTextWidth(indicatorText, "subtext") + 20; + if ( indicatorWidth > myWidth ) + myWidth = indicatorWidth; + + return myWidth; + }; + + this.textWidth = function (){ + return that.width(); + }; + function measureTextWidth( text, textStyle ){ + // Set a default value + if ( !textStyle ) { + textStyle = "text"; + } + var d = d3.select("body") + .append("div") + .attr("class", textStyle) + .attr("id", "width-test") // tag this element to identify it + .attr("style", "position:absolute; float:left; white-space:nowrap; visibility:hidden;") + .text(text), + w = document.getElementById("width-test").offsetWidth; + d.remove(); + return w; + } + + this.toggleFocus = function (){ + that.focused(!that.focused()); + that.nodeElement().select("rect").classed("focused", that.focused()); + graph.resetSearchHighlight(); + graph.options().searchMenu().clearText(); + }; + + /** + * Draws the rectangular node. + * @param parentElement the element to which this node will be appended + * @param [additionalCssClasses] additional css classes + */ + this.draw = function ( parentElement, additionalCssClasses ){ + var cssClasses = that.collectCssClasses(); + + that.nodeElement(parentElement); + + if ( additionalCssClasses instanceof Array ) { + cssClasses = cssClasses.concat(additionalCssClasses); + } + + // set the value for that.width() + // update labelWidth Value; + if ( graph.options().dynamicLabelWidth() === true ) labelWidth = Math.min(that.getMyWidth(), graph.options().maxLabelWidth()); + else labelWidth = defaultWidth; + + width = labelWidth; + shapeElement = drawTools.appendRectangularClass(parentElement, that.width(), that.height(), cssClasses, that.labelForCurrentLanguage(), that.backgroundColor()); + + textBlock = new CenteringTextElement(parentElement, that.backgroundColor()); + textBlock.addText(that.labelForCurrentLanguage()); + + that.addMouseListeners(); + + if ( that.pinned() ) { + that.drawPin(); + } + if ( that.halo() ) { + that.drawHalo(false); + } + }; + + this.drawPin = function (){ + that.pinned(true); + // if (graph.options().dynamicLabelWidth()===true) labelWidth=that.getMyWidth(); + // else labelWidth=defaultWidth; + // width=labelWidth; + // console.log("this element label Width is "+labelWidth); + var dx = -0.5 * labelWidth + 5, + dy = -1.1 * height; + + pinGroupElement = drawTools.drawPin(that.nodeElement(), dx, dy, this.removePin, graph.options().showDraggerObject, graph.options().useAccuracyHelper()); + + }; + + this.removePin = function (){ + that.pinned(false); + if ( pinGroupElement ) { + pinGroupElement.remove(); + } + graph.updateStyle(); + }; + + this.removeHalo = function (){ + that.halo(false); + if ( haloGroupElement ) { + haloGroupElement.remove(); + haloGroupElement = null; + } + }; + + this.drawHalo = function ( pulseAnimation ){ + that.halo(true); + + var offset = 0; + haloGroupElement = drawTools.drawRectHalo(that, this.width(), this.height(), offset); + + if ( pulseAnimation === false ) { + var pulseItem = haloGroupElement.selectAll(".searchResultA"); + pulseItem.classed("searchResultA", false); + pulseItem.classed("searchResultB", true); + pulseItem.attr("animationRunning", false); + } + + if ( that.pinned() ) { + var selectedNode = pinGroupElement.node(); + var nodeContainer = selectedNode.parentNode; + nodeContainer.appendChild(selectedNode); + } + + }; + + this.updateTextElement = function (){ + textBlock.updateAllTextElements(); + + }; + + this.textBlock = function (){ + return textBlock; + }; + + this.redrawLabelText = function (){ + textBlock.remove(); + textBlock = new CenteringTextElement(that.nodeElement(), that.backgroundColor()); + textBlock.addText(that.labelForCurrentLanguage()); + that.animateDynamicLabelWidth(graph.options().dynamicLabelWidth()); + shapeElement.select("title").text(that.labelForCurrentLanguage()); + }; + + this.animateDynamicLabelWidth = function ( dynamic ){ + that.removeHalo(); + var height = that.height(); + if ( dynamic === true ) { + labelWidth = Math.min(that.getMyWidth(), graph.options().maxLabelWidth()); + shapeElement.transition().tween("attr", function (){ + }) + .ease('linear') + .duration(100) + .attr({ x: -labelWidth / 2, y: -height / 2, width: labelWidth, height: height }) + .each("end", function (){ + that.updateTextElement(); + }); + + } else { + labelWidth = defaultWidth; + that.updateTextElement(); + shapeElement.transition().tween("attr", function (){ + }) + .ease('linear') + .duration(100) + .attr({ x: -labelWidth / 2, y: -height / 2, width: labelWidth, height: height }); + + } + + // for the pin we dont need to differ between different widths -- they are already set + if ( that.pinned() === true && pinGroupElement ) { + + var dx = 0.5 * labelWidth - 10, + dy = -1.1 * height; + + pinGroupElement.transition() + .tween("attr.translate", function (){ + }) + .attr("transform", "translate(" + dx + "," + dy + ")") + .ease('linear') + .duration(100); + } + }; + + this.addTextLabelElement = function (){ + var parentElement = that.nodeElement(); + textBlock = new CenteringTextElement(parentElement, this.backgroundColor()); + textBlock.addText(that.labelForCurrentLanguage()); + }; + + + }; + o.prototype = Object.create(BaseNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 37 */ +/***/ (function(module, exports) { + + var tools = {}; + module.exports = function (){ + return tools; + }; + + tools.distanceToBorder = function ( rect, dx, dy ){ + var width = rect.width(), + height = rect.height(); + + var innerDistance, + m_link = Math.abs(dy / dx), + m_rect = height / width; + + if ( m_link <= m_rect ) { + var timesX = dx / (width / 2), + rectY = dy / timesX; + innerDistance = Math.sqrt(Math.pow(width / 2, 2) + Math.pow(rectY, 2)); + } else { + var timesY = dy / (height / 2), + rectX = dx / timesY; + innerDistance = Math.sqrt(Math.pow(height / 2, 2) + Math.pow(rectX, 2)); + } + + return innerDistance; + }; + + +/***/ }), +/* 38 */ +/***/ (function(module, exports, __webpack_require__) { + + var DatatypeNode = __webpack_require__(35); + + module.exports = (function (){ + + var o = function ( graph ){ + DatatypeNode.apply(this, arguments); + + var superDrawFunction = this.draw, + superLabelFunction = this.label; + + this.attributes(["datatype"]) + .label("Literal") + .styleClass("literal") + .type("rdfs:Literal") + .iri("http://www.w3.org/2000/01/rdf-schema#Literal"); + + this.draw = function ( element ){ + superDrawFunction(element, ["dashed"]); + }; + + this.label = function ( p ){ + if ( !arguments.length ) return superLabelFunction(); + return this; + }; + }; + o.prototype = Object.create(DatatypeNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 39 */ +/***/ (function(module, exports, __webpack_require__) { + + var RoundNode = __webpack_require__(8); + + module.exports = (function (){ + + var o = function ( graph ){ + RoundNode.apply(this, arguments); + + var superDrawFunction = this.draw; + + this.attributes(["rdf"]) + .label("Resource") + .radius(30) + .styleClass("rdfsresource") + .type("rdfs:Resource"); + + this.draw = function ( element ){ + superDrawFunction(element, ["rdf", "dashed"]); + }; + }; + o.prototype = Object.create(RoundNode.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 40 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var properties = []; + properties.push(__webpack_require__(41)); + properties.push(__webpack_require__(44)); + properties.push(__webpack_require__(45)); + properties.push(__webpack_require__(46)); + properties.push(__webpack_require__(47)); + properties.push(__webpack_require__(48)); + properties.push(__webpack_require__(49)); + properties.push(__webpack_require__(50)); + properties.push(__webpack_require__(51)); + properties.push(__webpack_require__(52)); + properties.push(__webpack_require__(53)); + properties.push(__webpack_require__(54)); + properties.push(__webpack_require__(55)); + properties.push(__webpack_require__(56)); + + var map = d3.map(properties, function ( Prototype ){ + return new Prototype().type(); + }); + + module.exports = function (){ + return map; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 41 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + var superGenerateCardinalityText = this.generateCardinalityText; + + this.linkType("values-from") + .markerType("filled values-from") + .styleClass("allvaluesfromproperty") + .type("owl:allValuesFrom"); + + this.generateCardinalityText = function (){ + var cardinalityText = "A"; + + var superCardinalityText = superGenerateCardinalityText(); + if ( superCardinalityText ) { + cardinalityText += ", " + superCardinalityText; + } + + return cardinalityText; + }; + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + + + +/***/ }), +/* 42 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var BaseElement = __webpack_require__(10); + var CenteringTextElement = __webpack_require__(14); + var drawTools = __webpack_require__(17)(); + var forceLayoutNodeFunctions = __webpack_require__(13)(); + var rectangularElementTools = __webpack_require__(37)(); + var math = __webpack_require__(43)(); + + module.exports = (function (){ + + // Static variables + var labelHeight = 28, + labelWidth = 80, + smallestRadius = labelHeight / 2; + + + // Constructor, private variables and privileged methods + var Base = function ( graph ){ + BaseElement.apply(this, arguments); + + var that = this, + // Basic attributes + cardinality, + domain, + inverse, + link, + minCardinality, + maxCardinality, + range, + subproperties, + superproperties, + // Style attributes + linkType = "normal", + markerType = "filled", + labelVisible = true, + // Element containers + cardinalityElement, + labelElement, + linkGroup, + markerElement, + // Other + ignoreLocalHoverEvents, + fobj, + pinGroupElement, + haloGroupElement, + myWidth = 80, + defaultWidth = 80, + shapeElement, + textElement, + parent_labelObject, + backupFullIri, + + redundantProperties = []; + + + this.existingPropertyIRI = function ( url ){ + return graph.options().editSidebar().checkForExistingURL(url); + }; + + this.getHalos = function (){ + return haloGroupElement; + }; + + this.getPin = function (){ + return pinGroupElement; + }; + this.labelObject = function ( lo, once ){ + if ( !arguments.length ) { + return parent_labelObject; + } + else { + parent_labelObject = lo; + if ( that.inverse() && once !== true ) { + that.inverse().labelObject(lo, true); + } + + } + }; + this.hide = function ( val ){ + that.labelElement().classed("hidden", val); + that.linkGroup().classed("hidden", val); + if ( that.cardinalityElement() ) + that.cardinalityElement().classed("hidden", val); + }; + + // Properties + this.cardinality = function ( p ){ + if ( !arguments.length ) return cardinality; + cardinality = p; + return this; + }; + + this.cardinalityElement = function ( p ){ + if ( !arguments.length ) return cardinalityElement; + cardinalityElement = p; + return this; + }; + + this.domain = function ( p ){ + if ( !arguments.length ) return domain; + domain = p; + return this; + }; + + this.inverse = function ( p ){ + if ( !arguments.length ) return inverse; + inverse = p; + return this; + }; + + this.labelElement = function ( p ){ + if ( !arguments.length ) return labelElement; + labelElement = p; + return this; + }; + + this.labelVisible = function ( p ){ + if ( !arguments.length ) return labelVisible; + labelVisible = p; + return this; + }; + + this.link = function ( p ){ + if ( !arguments.length ) return link; + link = p; + return this; + }; + + this.linkGroup = function ( p ){ + if ( !arguments.length ) return linkGroup; + linkGroup = p; + return this; + }; + + this.linkType = function ( p ){ + if ( !arguments.length ) return linkType; + linkType = p; + return this; + }; + + this.markerElement = function ( p ){ + if ( !arguments.length ) return markerElement; + markerElement = p; + return this; + }; + + this.markerType = function ( p ){ + if ( !arguments.length ) return markerType; + markerType = p; + return this; + }; + + this.maxCardinality = function ( p ){ + if ( !arguments.length ) return maxCardinality; + maxCardinality = p; + return this; + }; + + this.minCardinality = function ( p ){ + if ( !arguments.length ) return minCardinality; + minCardinality = p; + return this; + }; + + this.range = function ( p ){ + if ( !arguments.length ) return range; + range = p; + return this; + }; + + this.redundantProperties = function ( p ){ + if ( !arguments.length ) return redundantProperties; + redundantProperties = p; + return this; + }; + + this.subproperties = function ( p ){ + if ( !arguments.length ) return subproperties; + subproperties = p; + return this; + }; + + this.superproperties = function ( p ){ + if ( !arguments.length ) return superproperties; + superproperties = p; + return this; + }; + + + // Functions + this.distanceToBorder = function ( dx, dy ){ + return rectangularElementTools.distanceToBorder(that, dx, dy); + }; + + this.linkHasMarker = function (){ + return linkType !== "dashed"; + }; + + this.markerId = function (){ + return "marker" + that.id(); + }; + + this.toggleFocus = function (){ + that.focused(!that.focused()); + labelElement.select("rect").classed("focused", that.focused()); + graph.resetSearchHighlight(); + graph.options().searchMenu().clearText(); + }; + this.getShapeElement = function (){ + return shapeElement; + }; + + this.textBlock = function (){ + return textElement; + }; + + this.redrawElement = function (){ + shapeElement.remove(); + textElement.remove(); + + that.drawLabel(that.labelElement()); + that.animateDynamicLabelWidth(graph.options().dynamicLabelWidth()); + + + // shapeElement=this.addRect(that.labelElement()); + // + // var equivalentsString = that.equivalentsString(); + // var suffixForFollowingEquivalents = equivalentsString ? "," : ""; + // + // textElement = new CenteringTextElement(labelContainer, this.backgroundColor()); + // textElement.addText(this.labelForCurrentLanguage(), "", suffixForFollowingEquivalents); + // textElement.addEquivalents(equivalentsString); + // textElement.addSubText(this.indicationString()); + + }; + + // Reused functions TODO refactor + this.draw = function ( labelGroup ){ + function attachLabel( property ){ + var labelContainer = labelGroup.append("g") + .datum(property) + .classed("label", true) + .attr("id", property.id()); + + property.drawLabel(labelContainer); + return labelContainer; + } + + if ( !that.labelVisible() ) { + return undefined; + } + if ( graph.options().dynamicLabelWidth() === true ) myWidth = Math.min(that.getMyWidth(), graph.options().maxLabelWidth()); + else myWidth = defaultWidth; + + that.labelElement(attachLabel(that)); + // Draw an inverse label and reposition both labels if necessary + if ( that.inverse() ) { + var yTransformation = (that.height() / 2) + 1 /* additional space */; + that.inverse() + .labelElement(attachLabel(that.inverse())); + + that.labelElement() + .attr("transform", "translate(" + 0 + ",-" + yTransformation + ")"); + that.inverse() + .labelElement() + .attr("transform", "translate(" + 0 + "," + yTransformation + ")"); + } + + if ( that.pinned() ) { + that.drawPin(); + } else if ( that.inverse() && that.inverse().pinned() ) { + that.inverse().drawPin(); + } + + if ( that.halo() ) + that.drawHalo(false); + + return that.labelElement(); + }; + + this.addRect = function ( labelContainer ){ + var rect = labelContainer.append("rect") + .classed(that.styleClass(), true) + .classed("property", true) + .attr("x", -that.width() / 2) + .attr("y", -that.height() / 2) + .attr("width", that.width()) + .attr("height", that.height()) + .on("mouseover", function (){ + onMouseOver(); + }) + .on("mouseout", function (){ + onMouseOut(); + }); + + rect.append("title") + .text(that.labelForCurrentLanguage()); + + if ( that.visualAttributes() ) { + rect.classed(that.visualAttributes(), true); + } + + var bgColor = that.backgroundColor(); + + if ( that.attributes().indexOf("deprecated") > -1 ) { + bgColor = undefined; + rect.classed("deprecatedproperty", true); + } else { + rect.classed("deprecatedproperty", false); + } + rect.style("fill", bgColor); + + return rect; + }; + this.drawLabel = function ( labelContainer ){ + shapeElement = this.addRect(labelContainer); + + var equivalentsString = that.equivalentsString(); + var suffixForFollowingEquivalents = equivalentsString ? "," : ""; + + var bgColor = that.backgroundColor(); + if ( that.attributes().indexOf("deprecated") > -1 ) { + bgColor = undefined; + } + textElement = new CenteringTextElement(labelContainer, bgColor); + textElement.addText(this.labelForCurrentLanguage(), "", suffixForFollowingEquivalents); + textElement.addEquivalents(equivalentsString); + textElement.addSubText(this.indicationString()); + }; + + this.equivalentsString = function (){ + var equivalentProperties = that.equivalents(); + if ( !equivalentProperties ) { + return; + } + + return equivalentProperties + .map(function ( property ){ + if ( property === undefined || typeof(property) === "string" ) { // @WORKAROUND + return "ERROR"; + } + return property.labelForCurrentLanguage(); + }) + .join(", "); + }; + + this.drawCardinality = function ( container ){ + var cardinalityText = this.generateCardinalityText(); + + if ( cardinalityText ) { + that.cardinalityElement(container); + if ( cardinalityText.indexOf("A") === 0 && cardinalityText.length === 1 ) { + + // replacing text elements to svg elements; + container.classed("cardinality", true) + .attr("text-anchor", "middle") + .append("path") + .classed("cardinality", true) + .attr("d", "m -8.8832678,-11.303355 -7.97e-4,0 0.717374,1.833297 8.22987151,21.371761 8.66826659,-21.2123526 0.797082,-1.9927054 0.02471,0 -0.8218553,1.9927054 -2.2517565,5.4201577 -12.4444429,8e-6 -2.2019394,-5.5795821 z") + .style("fill", "none") + .attr("transform", "matrix(0.5,0,0,0.5,0.5,0.5)"); + return true; + } else if ( cardinalityText.indexOf("E") === 0 && cardinalityText.length === 1 ) { + container.classed("cardinality", true) + .attr("text-anchor", "middle") + .append("path") + .classed("cardinality", true) + .attr("d", "m -5.5788451,-8.0958763 10.8749368,0 0,8.34681523 -9.5707468,0.040132 9.5707468,-0.040132 0,8.42707237 -10.9150654,0") + .style("fill", "none") + .attr("transform", "matrix(0.5,0,0,0.5,0.5,0.5)"); + return true; + } + else { + container.append("text") + .classed("cardinality", true) + .attr("text-anchor", "middle") + .attr("dy", "0.5ex") + .text(cardinalityText); + return true; // drawing successful + } + } else { + return false; + } + }; + + this.generateCardinalityText = function (){ + if ( that.cardinality() ) { + return that.cardinality(); + } else if ( that.minCardinality() || that.maxCardinality() ) { + var minBoundary = that.minCardinality() || "*"; + var maxBoundary = that.maxCardinality() || "*"; + return minBoundary + ".." + maxBoundary; + } + }; + + that.setHighlighting = function ( enable ){ + if ( that.labelElement && that.labelElement() ) { + that.labelElement().select("rect").classed("hovered", enable); + } + that.linkGroup().selectAll("path, text").classed("hovered", enable); + if ( that.markerElement() ) { + that.markerElement().select("path").classed("hovered", enable); + if ( that.cardinalityElement() ) { + that.cardinalityElement().selectAll("path").classed("hovered-MathSymbol", enable); + that.cardinalityElement().classed("hovered", enable); + } + } + var subAndSuperProperties = getSubAndSuperProperties(); + subAndSuperProperties.forEach(function ( property ){ + + if ( property.labelElement && property.labelElement() ) { + property.labelElement().select("rect") + .classed("indirect-highlighting", enable); + } + + }); + var inversed = false; + + if ( graph.ignoreOtherHoverEvents() === false ) { + if ( that.inverse() ) { + inversed = true; + } + + if ( graph.isTouchDevice() === false ) { + graph.activateHoverElementsForProperties(enable, that, inversed); + } + else { + that.labelElement().select("rect").classed("hovered", false); + that.linkGroup().selectAll("path, text").classed("hovered", false); + if ( that.markerElement() ) { + that.markerElement().select("path").classed("hovered", false); + if ( that.cardinalityElement() ) { + that.cardinalityElement().classed("hovered", false); + } + } + graph.activateHoverElementsForProperties(enable, that, inversed, true); + } + } + }; + + /** + * Combines the sub- and superproperties into a single array, because + * they're often used equivalently. + * @returns {Array} + */ + function getSubAndSuperProperties(){ + var properties = []; + + if ( that.subproperties() ) { + properties = properties.concat(that.subproperties()); + } + if ( that.superproperties() ) { + properties = properties.concat(that.superproperties()); + } + + return properties; + } + + /** + * Foregrounds the property, its inverse and the link. + */ + this.foreground = function (){ + // check for additional objects that we can highlight + if ( !that.labelElement() ) + return; + if ( that.labelElement().node().parentNode === null ) { + return; + } + var selectedLabelGroup = that.labelElement().node().parentNode, + labelContainer = selectedLabelGroup.parentNode, + selectedLinkGroup = that.linkGroup().node(), + linkContainer = that.linkGroup().node().parentNode; + if ( that.animationProcess() === false ) { + labelContainer.appendChild(selectedLabelGroup); + } + linkContainer.appendChild(selectedLinkGroup); + }; + + /** + * Foregrounds the sub- and superproperties of this property. + * This is separated from the foreground-function to prevent endless loops. + */ + function foregroundSubAndSuperProperties(){ + var subAndSuperProperties = getSubAndSuperProperties(); + + subAndSuperProperties.forEach(function ( property ){ + if ( property.foreground ) property.foreground(); + }); + } + + function onMouseOver(){ + if ( that.mouseEntered() || ignoreLocalHoverEvents === true ) { + return; + } + that.mouseEntered(true); + that.setHighlighting(true); + that.foreground(); + foregroundSubAndSuperProperties(); + } + + function onMouseOut(){ + that.mouseEntered(false); + that.setHighlighting(false); + } + + this.drawPin = function (){ + that.pinned(true); + if ( graph.options().dynamicLabelWidth() === true ) myWidth = that.getMyWidth(); + else myWidth = defaultWidth; + + if ( that.inverse() ) { + // check which element is rendered on top and add a pin to it + var tr_that = that.labelElement().attr("transform"); + var tr_inv = that.inverse().labelElement().attr("transform"); + + var thatY = /translate\(\s*([^\s,)]+)[ ,]([^\s,)]+)/.exec(tr_that)[2]; + var invY = /translate\(\s*([^\s,)]+)[ ,]([^\s,)]+)/.exec(tr_inv)[2]; + + if ( thatY < invY ) + pinGroupElement = drawTools.drawPin(that.labelElement(), -0.5 * that.width() + 10, -25, this.removePin, graph.options().showDraggerObject, graph.options().useAccuracyHelper()); + else + pinGroupElement = drawTools.drawPin(that.inverse().labelElement(), -0.5 * that.inverse().width() + 10, -25, this.removePin, graph.options().showDraggerObject, graph.options().useAccuracyHelper()); + + } + else { + pinGroupElement = drawTools.drawPin(that.labelElement(), -0.5 * that.width() + 10, -25, this.removePin, graph.options().showDraggerObject, graph.options().useAccuracyHelper()); + } + + + }; + + /** + * Removes the pin and refreshs the graph to update the force layout. + */ + this.removePin = function (){ + that.pinned(false); + if ( pinGroupElement ) { + pinGroupElement.remove(); + } + graph.updateStyle(); + }; + + this.removeHalo = function (){ + that.halo(false); + if ( haloGroupElement ) { + haloGroupElement.remove(); + haloGroupElement = null; + } + }; + + this.animationProcess = function (){ + var animRuns = false; + if ( that.getHalos() ) { + var haloGr = that.getHalos(); + var haloEls = haloGr.selectAll(".searchResultA"); + animRuns = haloGr.attr("animationRunning"); + + if ( typeof animRuns !== "boolean" ) { + // parse this to a boolean value + animRuns = (animRuns === 'true'); + } + if ( animRuns === false ) { + haloEls.classed("searchResultA", false); + haloEls.classed("searchResultB", true); + } + } + return animRuns; + }; + + this.drawHalo = function ( pulseAnimation ){ + that.halo(true); + var offset = 0; + if ( that.labelElement() && that.labelElement().node() ) { + var labelNode = that.labelElement().node(); + var labelContainer = labelNode.parentNode; + // do this only if animation is not running + if ( that.animationProcess() === false ) + labelContainer.appendChild(labelNode); + } + haloGroupElement = drawTools.drawRectHalo(that, that.width(), that.height(), offset); + if ( haloGroupElement ) { + var haloNode = haloGroupElement.node(); + var haloContainer = haloNode.parentNode; + haloContainer.appendChild(haloNode); + } + var selectedNode; + var nodeContainer; + if ( that.pinned() ) { + selectedNode = pinGroupElement.node(); + nodeContainer = selectedNode.parentNode; + nodeContainer.appendChild(selectedNode); + } + if ( that.inverse() && that.inverse().pinned() ) { + if ( that.inverse().getPin() ) { + selectedNode = that.inverse().getPin().node(); + nodeContainer = selectedNode.parentNode; + nodeContainer.appendChild(selectedNode); + } + } + if ( pulseAnimation === false ) { + var pulseItem = haloGroupElement.selectAll(".searchResultA"); + pulseItem.classed("searchResultA", false); + pulseItem.classed("searchResultB", true); + pulseItem.attr("animationRunning", false); + } + }; + + this.getMyWidth = function (){ + var text = that.labelForCurrentLanguage(); + myWidth = measureTextWidth(text, "text") + 20; + // check for sub names; + var indicatorText = that.indicationString(); + var indicatorWidth = measureTextWidth(indicatorText, "subtext") + 20; + if ( indicatorWidth > myWidth ) + myWidth = indicatorWidth; + + return myWidth; + }; + + function measureTextWidth( text, textStyle ){ + // Set a default value + if ( !textStyle ) { + textStyle = "text"; + } + var d = d3.select("body") + .append("div") + .attr("class", textStyle) + .attr("id", "width-test") // tag this element to identify it + .attr("style", "position:absolute; float:left; white-space:nowrap; visibility:hidden;") + .text(text), + w = document.getElementById("width-test").offsetWidth; + d.remove(); + return w; + } + + this.textWidth = function (){ + return myWidth; + }; + this.width = function (){ + return myWidth; + }; + + this.animateDynamicLabelWidth = function ( dynamic ){ + that.removeHalo(); + if ( shapeElement === undefined ) {// this handles setOperatorProperties which dont have a shapeElement! + return; + } + + var h = that.height(); + if ( dynamic === true ) { + myWidth = Math.min(that.getMyWidth(), graph.options().maxLabelWidth()); + shapeElement.transition().tween("attr", function (){ + }) + .ease('linear') + .duration(100) + .attr({ x: -myWidth / 2, y: -h / 2, width: myWidth, height: h }) + .each("end", function (){ + that.updateTextElement(); + }); + } else { + // Static width for property labels = 80 + myWidth = defaultWidth; + that.updateTextElement(); + shapeElement.transition().tween("attr", function (){ + }) + .ease('linear') + .duration(100) + .attr({ x: -myWidth / 2, y: -h / 2, width: myWidth, height: h }); + } + if ( that.pinned() === true && pinGroupElement ) { + var dx = -0.5 * myWidth + 10, + dy = -25; + pinGroupElement.transition() + .tween("attr.translate", function (){ + }) + .attr("transform", "translate(" + dx + "," + dy + ")") + .ease('linear') + .duration(100); + } + }; + + this.redrawLabelText = function (){ + textElement.remove(); + that.addTextLabelElement(); + that.animateDynamicLabelWidth(graph.options().dynamicLabelWidth()); + shapeElement.select("title").text(that.labelForCurrentLanguage()); + }; + + this.addTextLabelElement = function (){ + var labelContainer = that.labelElement(); + + var equivalentsString = that.equivalentsString(); + var suffixForFollowingEquivalents = equivalentsString ? "," : ""; + + textElement = new CenteringTextElement(labelContainer, this.backgroundColor()); + textElement.addText(this.labelForCurrentLanguage(), "", suffixForFollowingEquivalents); + textElement.addEquivalents(equivalentsString); + textElement.addSubText(this.indicationString()); + }; + + this.updateTextElement = function (){ + textElement.updateAllTextElements(); + }; + this.enableEditing = function ( autoEditing ){ + if ( autoEditing === false ) + return; + that.raiseDoubleClickEdit(true); + }; + + this.raiseDoubleClickEdit = function ( forceIRISync ){ + d3.selectAll(".foreignelements").remove(); + if ( that.labelElement() === undefined || this.type() === "owl:disjointWith" || this.type() === "rdfs:subClassOf" ) { + console.log("No Container found"); + return; + } + if ( fobj !== undefined ) { + that.labelElement().selectAll(".foreignelements").remove(); + } + backupFullIri = undefined; + graph.options().focuserModule().handle(undefined); + graph.options().focuserModule().handle(that); + that.editingTextElement = true; + ignoreLocalHoverEvents = true; + that.labelElement().selectAll("rect").classed("hoveredForEditing", true); + that.frozen(true); + graph.killDelayedTimer(); + graph.ignoreOtherHoverEvents(false); + fobj = that.labelElement().append("foreignObject") + .attr("x", -0.5 * that.textWidth()) + .attr("y", -13) + .attr("height", 25) + .attr("class", "foreignelements") + .on("dragstart", function (){ + return false; + }) // remove drag operations of text element) + .attr("width", that.textWidth() - 2); + // adding a Style to the fObject + // + // + // + var editText = fobj.append("xhtml:input") + .attr("class", "nodeEditSpan") + .attr("id", that.id()) + .attr("align", "center") + .attr("contentEditable", "true") + .on("dragstart", function (){ + return false; + }); // remove drag operations of text element) + + var bgColor = '#f00'; + var txtWidth = that.textWidth() - 2; + editText.style({ + // 'line-height': '30px', + 'align': 'center', + 'color': 'black', + 'width': txtWidth + "px", + 'background-color': bgColor, + 'border-bottom': '2px solid black' + }); + var txtNode = editText.node(); + txtNode.value = that.labelForCurrentLanguage(); + txtNode.focus(); + txtNode.select(); + if ( d3.event.stopPropagation ) d3.event.stopPropagation(); + if ( d3.event.sourceEvent && d3.event.sourceEvent.stopPropagation ) d3.event.sourceEvent.stopPropagation(); + + // add some events that relate to this object + editText.on("click", function (){ + if ( d3.event.stopPropagation ) d3.event.stopPropagation(); + if ( d3.event.sourceEvent && d3.event.sourceEvent.stopPropagation ) d3.event.sourceEvent.stopPropagation(); + + }); + // // remove hover Events for now; + editText.on("mouseout", function (){ + if ( d3.event.stopPropagation ) d3.event.stopPropagation(); + if ( d3.event.sourceEvent && d3.event.sourceEvent.stopPropagation ) d3.event.sourceEvent.stopPropagation(); + }); + editText.on("mousedown", function (){ + if ( d3.event.stopPropagation ) d3.event.stopPropagation(); + if ( d3.event.sourceEvent && d3.event.sourceEvent.stopPropagation ) d3.event.sourceEvent.stopPropagation(); + }) + .on("keydown", function (){ + + if ( d3.event.keyCode === 13 ) { + this.blur(); + that.frozen(false); // << releases the not after selection + that.locked(false); + } + }) + .on("keyup", function (){ + if ( forceIRISync ) { + var labelName = editText.node().value; + var resourceName = labelName.replaceAll(" ", "_"); + var syncedIRI = that.baseIri() + resourceName; + backupFullIri = syncedIRI; + + d3.select("#element_iriEditor").node().title = syncedIRI; + d3.select("#element_iriEditor").node().value = graph.options().prefixModule().getPrefixRepresentationForFullURI(syncedIRI); + } + d3.select("#element_labelEditor").node().value = editText.node().value; + + }) + .on("blur", function (){ + + + that.editingTextElement = false; + ignoreLocalHoverEvents = false; + that.labelElement().selectAll("rect").classed("hoveredForEditing", false); + var newLabel = editText.node().value; + that.labelElement().selectAll(".foreignelements").remove(); + // that.setLabelForCurrentLanguage(classNameConvention(editText.node().value)); + that.label(newLabel); + that.backupLabel(newLabel); + that.redrawLabelText(); + updateHoverElements(true); + graph.showHoverElementsAfterAnimation(that, false); + graph.ignoreOtherHoverEvents(false); + + + that.frozen(graph.paused()); + that.locked(graph.paused()); + that.domain().frozen(graph.paused()); + that.domain().locked(graph.paused()); + that.range().frozen(graph.paused()); + that.range().locked(graph.paused()); + graph.removeEditElements(); + if ( backupFullIri ) { + // console.log("Checking if element is Identical ?"); + var sanityCheckResult = graph.options().editSidebar().checkProperIriChange(that, backupFullIri); + if ( sanityCheckResult !== false ) { + graph.options().warningModule().showWarning("Already seen this property", + "Input IRI: " + backupFullIri + " for element: " + that.labelForCurrentLanguage() + " already been set", + "Continuing with duplicate property!", 1, false, sanityCheckResult); + } + that.iri(backupFullIri); + } + graph.options().focuserModule().handle(undefined); + graph.options().focuserModule().handle(that); + graph.updatePropertyDraggerElements(that); + + + }); // add a foreiner element to this thing; + + }; + + // update hover elements + function updateHoverElements( enable ){ + if ( graph.ignoreOtherHoverEvents() === false ) { + var inversed = false; + if ( that.inverse() ) { + inversed = true; + } + if ( enable === true ) { + graph.activateHoverElementsForProperties(enable, that, inversed); + } + } + } + + that.copyInformation = function ( other ){ + that.label(other.label()); + that.iri(other.iri()); + that.baseIri(other.baseIri()); + if ( other.type() === "owl:ObjectProperty" || + other.type() === "owl:DatatypeProperty" ) { + that.backupLabel(other.label()); + // console.log("copied backup label"+that.backupLabel()); + } + if ( other.backupLabel() !== undefined ) { + that.backupLabel(other.backupLabel()); + } + }; + + forceLayoutNodeFunctions.addTo(this); + }; + + Base.prototype = Object.create(BaseElement.prototype); + Base.prototype.constructor = Base; + + Base.prototype.height = function (){ + return labelHeight; + }; + + Base.prototype.width = function (){ + return labelWidth; + }; + + Base.prototype.actualRadius = function (){ + return smallestRadius; + }; + + Base.prototype.textWidth = Base.prototype.width; + + + return Base; + }()); + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 43 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * Contains a collection of mathematical functions with some additional data + * used for WebVOWL. + */ + module.exports = (function (){ + + var math = {}, + loopFunction = d3.svg.line() + .x(function ( d ){ + return d.x; + }) + .y(function ( d ){ + return d.y; + }) + .interpolate("cardinal") + .tension(-1); + + + /** + * Calculates the normal vector of the path between the two nodes. + * @param source the first node + * @param target the second node + * @param length the length of the calculated normal vector + * @returns {{x: number, y: number}} + */ + math.calculateNormalVector = function ( source, target, length ){ + var dx = target.x - source.x, + dy = target.y - source.y; + + var nx = -dy, + ny = dx; + + var vlength = Math.sqrt(nx * nx + ny * ny); + + var ratio = vlength !== 0 ? length / vlength : 0; + + return { "x": nx * ratio, "y": ny * ratio }; + }; + + /** + * Calculates the path for a link, if it is a loop. Currently only working for circlular nodes. + * @param link the link + * @returns {*} + */ + + + + math.getLoopPoints = function ( link ){ + var node = link.domain(), + label = link.label(); + + var fairShareLoopAngle = 360 / link.loops().length, + fairShareLoopAngleWithMargin = fairShareLoopAngle * 0.8, + loopAngle = Math.min(60, fairShareLoopAngleWithMargin); + + if ( label.increasedLoopAngle === true ) + loopAngle = 120; + + + var dx = label.x - node.x, + dy = label.y - node.y, + labelRadian = Math.atan2(dy, dx), + labelAngle = calculateAngle(labelRadian); + + var startAngle = labelAngle - loopAngle / 2, + endAngle = labelAngle + loopAngle / 2; + + + var arcFrom = calculateRadian(startAngle), + arcTo = calculateRadian(endAngle), + + x1 = Math.cos(arcFrom) * node.actualRadius(), + y1 = Math.sin(arcFrom) * node.actualRadius(), + + x2 = Math.cos(arcTo) * node.actualRadius(), + y2 = Math.sin(arcTo) * node.actualRadius(), + + fixPoint1 = { "x": node.x + x1, "y": node.y + y1 }, + fixPoint2 = { "x": node.x + x2, "y": node.y + y2 }; + + return [fixPoint1, fixPoint2]; + }; + math.calculateLoopPath = function ( link ){ + var node = link.domain(), + label = link.label(); + + + var fairShareLoopAngle = 360 / link.loops().length, + fairShareLoopAngleWithMargin = fairShareLoopAngle * 0.8, + loopAngle = Math.min(60, fairShareLoopAngleWithMargin); + + if ( label.increasedLoopAngle === true ) + loopAngle = 120; + + var dx = label.x - node.x, + dy = label.y - node.y, + labelRadian = Math.atan2(dy, dx), + labelAngle = calculateAngle(labelRadian); + + var startAngle = labelAngle - loopAngle / 2, + endAngle = labelAngle + loopAngle / 2; + + var arcFrom = calculateRadian(startAngle), + arcTo = calculateRadian(endAngle), + + x1 = Math.cos(arcFrom) * node.actualRadius(), + y1 = Math.sin(arcFrom) * node.actualRadius(), + + x2 = Math.cos(arcTo) * node.actualRadius(), + y2 = Math.sin(arcTo) * node.actualRadius(), + + fixPoint1 = { "x": node.x + x1, "y": node.y + y1 }, + fixPoint2 = { "x": node.x + x2, "y": node.y + y2 }; + + return loopFunction([fixPoint1, link.label(), fixPoint2]); + }; + + math.calculateLoopPoints = function ( link ){ + var node = link.domain(), + label = link.label(); + + var fairShareLoopAngle = 360 / link.loops().length, + fairShareLoopAngleWithMargin = fairShareLoopAngle * 0.8, + loopAngle = Math.min(60, fairShareLoopAngleWithMargin); + + var dx = label.x - node.x, + dy = label.y - node.y, + labelRadian = Math.atan2(dy, dx), + labelAngle = calculateAngle(labelRadian); + + var startAngle = labelAngle - loopAngle / 2, + endAngle = labelAngle + loopAngle / 2; + + var arcFrom = calculateRadian(startAngle), + arcTo = calculateRadian(endAngle), + + x1 = Math.cos(arcFrom) * node.actualRadius(), + y1 = Math.sin(arcFrom) * node.actualRadius(), + + x2 = Math.cos(arcTo) * (node.actualRadius()), + y2 = Math.sin(arcTo) * (node.actualRadius()), + + fixPoint1 = { "x": node.x + x1, "y": node.y + y1 }, + fixPoint2 = { "x": node.x + x2, "y": node.y + y2 }; + + return [fixPoint1, link.label(), fixPoint2]; + }; + + /** + * @param angle + * @returns {number} the radian of the angle + */ + function calculateRadian( angle ){ + angle = angle % 360; + if ( angle < 0 ) { + angle = angle + 360; + } + return (Math.PI * angle) / 180; + } + + /** + * @param radian + * @returns {number} the angle of the radian + */ + function calculateAngle( radian ){ + return radian * (180 / Math.PI); + } + + /** + * Calculates the point where the link between the source and target node + * intersects the border of the target node. + * @param source the source node + * @param target the target node + * @param additionalDistance additional distance the + * @returns {{x: number, y: number}} + */ + math.calculateIntersection = function ( source, target, additionalDistance ){ + var dx = target.x - source.x, + dy = target.y - source.y, + length = Math.sqrt(dx * dx + dy * dy); + + if ( length === 0 ) { + return { x: source.x, y: source.y }; + } + + var innerDistance = target.distanceToBorder(dx, dy); + + var ratio = (length - (innerDistance + additionalDistance)) / length, + x = dx * ratio + source.x, + y = dy * ratio + source.y; + + return { x: x, y: y }; + }; + + /** + * Calculates the position between the two points. + * @param firstPoint + * @param secondPoint + * @returns {{x: number, y: number}} + */ + math.calculateCenter = function ( firstPoint, secondPoint ){ + return { + x: (firstPoint.x + secondPoint.x) / 2, + y: (firstPoint.y + secondPoint.y) / 2 + }; + }; + + + return function (){ + /* Use a function here to keep a consistent style like webvowl.path.to.module() + * despite having just a single math object. */ + return math; + }; + })(); + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 44 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + this.attributes(["datatype"]) + .styleClass("datatypeproperty") + .type("owl:DatatypeProperty"); + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 45 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + this.attributes(["deprecated"]) + .styleClass("deprecatedproperty") + .type("owl:DeprecatedProperty"); + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 46 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + var CenteringTextElement = __webpack_require__(14); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + var label = "Disjoint With"; + var shapeElement; + // Disallow overwriting the label + this.label = function ( p ){ + if ( !arguments.length ) return label; + return this; + }; + + this.linkType("dashed") + .styleClass("disjointwith") + .type("owl:disjointWith"); + + this.drawLabel = function ( labelContainer ){ + shapeElement = this.addRect(labelContainer); + + labelContainer.append("circle") + .classed("symbol", true) + .classed("fineline", true) + .classed("embedded", true) + .attr("cx", -12.5) + .attr("r", 10); + + labelContainer.append("circle") + .classed("symbol", true) + .classed("fineline", true) + .classed("embedded", true) + .attr("cx", 12.5) + .attr("r", 10); + + var textElement = new CenteringTextElement(labelContainer, this.backgroundColor()); + if ( !graph.options().compactNotation() ) { + textElement.addSubText("disjoint"); + } + textElement.translation(0, 20); + }; + this.getShapeElement = function (){ + return shapeElement; + }; + this.markerElement = function (){ + return undefined; + }; + + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 47 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + this.styleClass("equivalentproperty") + .type("owl:equivalentProperty"); + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 48 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + this.attributes(["functional"]) + .styleClass("functionalproperty") + .type("owl:FunctionalProperty"); + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 49 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + this.attributes(["inverse functional"]) + .styleClass("inversefunctionalproperty") + .type("owl:InverseFunctionalProperty"); + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 50 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + this.attributes(["object"]) + .styleClass("objectproperty") + .type("owl:ObjectProperty"); + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + + + +/***/ }), +/* 51 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + var superGenerateCardinalityText = this.generateCardinalityText; + + this.linkType("values-from") + .markerType("filled values-from") + .styleClass("somevaluesfromproperty") + .type("owl:someValuesFrom"); + + this.generateCardinalityText = function (){ + var cardinalityText = "E"; + + var superCardinalityText = superGenerateCardinalityText(); + if ( superCardinalityText ) { + cardinalityText += ", " + superCardinalityText; + } + + return cardinalityText; + }; + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + + + +/***/ }), +/* 52 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + this.attributes(["symmetric"]) + .styleClass("symmetricproperty") + .type("owl:SymmetricProperty"); + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 53 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + this.attributes(["transitive"]) + .styleClass("transitiveproperty") + .type("owl:TransitiveProperty"); + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 54 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + this.attributes(["rdf"]) + .styleClass("rdfproperty") + .type("rdf:Property"); + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 55 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + var that = this, + superDrawFunction = that.draw, + label = "Subclass of"; + + this.draw = function ( labelGroup ){ + that.labelVisible(!graph.options().compactNotation()); + return superDrawFunction(labelGroup); + }; + + // Disallow overwriting the label + this.label = function ( p ){ + if ( !arguments.length ) return label; + return this; + }; + + this.linkType("dotted") + .markerType("white") + .styleClass("subclass") + .type("rdfs:subClassOf"); + + that.baseIri("http://www.w3.org/2000/01/rdf-schema#"); + that.iri("http://www.w3.org/2000/01/rdf-schema#subClassOf"); + + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 56 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + + module.exports = (function (){ + + var o = function ( graph ){ + BaseProperty.apply(this, arguments); + + this.labelVisible(false) + .linkType("dashed") + .markerType("white") + .styleClass("setoperatorproperty") + .type("setOperatorProperty"); + }; + o.prototype = Object.create(BaseProperty.prototype); + o.prototype.constructor = o; + + return o; + }()); + + +/***/ }), +/* 57 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var _ = __webpack_require__(58); + var math = __webpack_require__(43)(); + var linkCreator = __webpack_require__(60)(); + var elementTools = __webpack_require__(63)(); + // add some maps for nodes and properties -- used for object generation + var nodePrototypeMap = __webpack_require__(5)(); + var propertyPrototypeMap = __webpack_require__(40)(); + + + module.exports = function ( graphContainerSelector ){ + var graph = {}, + CARDINALITY_HDISTANCE = 20, + CARDINALITY_VDISTANCE = 10, + curveFunction = d3.svg.line() + .x(function ( d ){ + return d.x; + }) + .y(function ( d ){ + return d.y; + }) + .interpolate("cardinal"), + options = __webpack_require__(64)(), + parser = __webpack_require__(65)(graph), + language = "default", + paused = false, + // Container for visual elements + graphContainer, + nodeContainer, + labelContainer, + cardinalityContainer, + linkContainer, + // Visual elements + nodeElements, + initialLoad = true, + updateRenderingDuringSimulation = false, + labelGroupElements, + linkGroups, + linkPathElements, + cardinalityElements, + // Internal data + classNodes, + labelNodes, + links, + properties, + unfilteredData, + // Graph behaviour + force, + dragBehaviour, + zoomFactor = 1.0, + centerGraphViewOnLoad = false, + transformAnimation = false, + graphTranslation = [0, 0], + graphUpdateRequired = false, + pulseNodeIds = [], + nodeArrayForPulse = [], + nodeMap = [], + locationId = 0, + defaultZoom = 1.0, + defaultTargetZoom = 0.8, + global_dof = -1, + touchDevice = false, + last_touch_time, + originalD3_dblClickFunction = null, + originalD3_touchZoomFunction = null, + + // editing elements + deleteGroupElement, + addDataPropertyGroupElement, + editContainer, + draggerLayer = null, + draggerObjectsArray = [], + delayedHider, + nodeFreezer, + hoveredNodeElement = null, + currentlySelectedNode = null, + hoveredPropertyElement = null, + draggingStarted = false, + frozenDomainForPropertyDragger, + frozenRangeForPropertyDragger, + + eP = 0, // id for new properties + eN = 0, // id for new Nodes + editMode = true, + debugContainer = d3.select("#FPS_Statistics"), + finishedLoadingSequence = false, + + ignoreOtherHoverEvents = false, + forceNotZooming = false, + now, then, // used for fps computation + showFPS = false, + seenEditorHint = false, + seenFilterWarning = false, + showFilterWarning = false, + + keepDetailsCollapsedOnLoading = true, + adjustingGraphSize = false, + showReloadButtonAfterLayoutOptimization = false, + zoom; + //var prefixModule=require("./prefixRepresentationModule")(graph); + var NodePrototypeMap = createLowerCasePrototypeMap(nodePrototypeMap); + var PropertyPrototypeMap = createLowerCasePrototypeMap(propertyPrototypeMap); + var classDragger = __webpack_require__(68)(graph); + var rangeDragger = __webpack_require__(69)(graph); + var domainDragger = __webpack_require__(70)(graph); + var shadowClone = __webpack_require__(71)(graph); + + graph.math = function (){ + return math; + }; + /** --------------------------------------------------------- **/ + /** -- getter and setter definitions -- **/ + /** --------------------------------------------------------- **/ + graph.isEditorMode = function (){ + return editMode; + }; + graph.getGlobalDOF = function (){ + return global_dof; + }; + graph.setGlobalDOF = function ( val ){ + global_dof = val; + }; + + graph.updateZoomSliderValueFromOutside = function (){ + graph.options().zoomSlider().updateZoomSliderValue(zoomFactor); + }; + + graph.setDefaultZoom = function ( val ){ + defaultZoom = val; + graph.reset(); + graph.options().zoomSlider().updateZoomSliderValue(defaultZoom); + }; + graph.setTargetZoom = function ( val ){ + defaultTargetZoom = val; + }; + graph.graphOptions = function (){ + return options; + }; + + graph.scaleFactor = function (){ + return zoomFactor; + }; + graph.translation = function (){ + return graphTranslation; + }; + + // Returns the visible nodes + graph.graphNodeElements = function (){ + return nodeElements; + }; + // Returns the visible Label Nodes + graph.graphLabelElements = function (){ + return labelNodes; + }; + + graph.graphLinkElements = function (){ + return links; + }; + + graph.setSliderZoom = function ( val ){ + + var cx = 0.5 * graph.options().width(); + var cy = 0.5 * graph.options().height(); + var cp = getWorldPosFromScreen(cx, cy, graphTranslation, zoomFactor); + var sP = [cp.x, cp.y, graph.options().height() / zoomFactor]; + var eP = [cp.x, cp.y, graph.options().height() / val]; + var pos_intp = d3.interpolateZoom(sP, eP); + + graphContainer.attr("transform", transform(sP, cx, cy)) + .transition() + .duration(1) + .attrTween("transform", function (){ + return function ( t ){ + return transform(pos_intp(t), cx, cy); + }; + }) + .each("end", function (){ + graphContainer.attr("transform", "translate(" + graphTranslation + ")scale(" + zoomFactor + ")"); + zoom.translate(graphTranslation); + zoom.scale(zoomFactor); + graph.options().zoomSlider().updateZoomSliderValue(zoomFactor); + }); + }; + + + graph.setZoom = function ( value ){ + zoom.scale(value); + }; + + graph.setTranslation = function ( translation ){ + zoom.translate([translation[0], translation[1]]); + }; + + graph.options = function (){ + return options; + }; + // search functionality + graph.getUpdateDictionary = function (){ + return parser.getDictionary(); + }; + + graph.language = function ( newLanguage ){ + if ( !arguments.length ) return language; + + // Just update if the language changes + if ( language !== newLanguage ) { + language = newLanguage || "default"; + redrawContent(); + recalculatePositions(); + graph.options().searchMenu().requestDictionaryUpdate(); + graph.resetSearchHighlight(); + } + return graph; + }; + + + /** --------------------------------------------------------- **/ + /** graph / rendering related functions **/ + /** --------------------------------------------------------- **/ + + // Initializes the graph. + function initializeGraph(){ + + options.graphContainerSelector(graphContainerSelector); + var moved = false; + force = d3.layout.force() + .on("tick", hiddenRecalculatePositions); + + dragBehaviour = d3.behavior.drag() + .origin(function ( d ){ + return d; + }) + .on("dragstart", function ( d ){ + d3.event.sourceEvent.stopPropagation(); // Prevent panning + graph.ignoreOtherHoverEvents(true); + if ( d.type && d.type() === "Class_dragger" ) { + classDragger.mouseButtonPressed = true; + clearTimeout(delayedHider); + classDragger.selectedViaTouch(true); + d.parentNode().locked(true); + draggingStarted = true; + } else if ( d.type && d.type() === "Range_dragger" ) { + graph.ignoreOtherHoverEvents(true); + clearTimeout(delayedHider); + frozenDomainForPropertyDragger = shadowClone.parentNode().domain(); + frozenRangeForPropertyDragger = shadowClone.parentNode().range(); + shadowClone.setInitialPosition(); + shadowClone.hideClone(false); + shadowClone.hideParentProperty(true); + shadowClone.updateElement(); + deleteGroupElement.classed("hidden", true); + addDataPropertyGroupElement.classed("hidden", true); + frozenDomainForPropertyDragger.frozen(true); + frozenDomainForPropertyDragger.locked(true); + frozenRangeForPropertyDragger.frozen(true); + frozenRangeForPropertyDragger.locked(true); + domainDragger.updateElement(); + domainDragger.mouseButtonPressed = true; + rangeDragger.updateElement(); + rangeDragger.mouseButtonPressed = true; + // shadowClone.setPosition(d.x, d.y); + + + } else if ( d.type && d.type() === "Domain_dragger" ) { + graph.ignoreOtherHoverEvents(true); + clearTimeout(delayedHider); + frozenDomainForPropertyDragger = shadowClone.parentNode().domain(); + frozenRangeForPropertyDragger = shadowClone.parentNode().range(); + shadowClone.setInitialPosition(); + shadowClone.hideClone(false); + shadowClone.hideParentProperty(true); + shadowClone.updateElement(); + deleteGroupElement.classed("hidden", true); + addDataPropertyGroupElement.classed("hidden", true); + + frozenDomainForPropertyDragger.frozen(true); + frozenDomainForPropertyDragger.locked(true); + frozenRangeForPropertyDragger.frozen(true); + frozenRangeForPropertyDragger.locked(true); + domainDragger.updateElement(); + domainDragger.mouseButtonPressed = true; + rangeDragger.updateElement(); + rangeDragger.mouseButtonPressed = true; + } + else { + d.locked(true); + moved = false; + } + }) + .on("drag", function ( d ){ + + if ( d.type && d.type() === "Class_dragger" ) { + clearTimeout(delayedHider); + classDragger.setPosition(d3.event.x, d3.event.y); + } else if ( d.type && d.type() === "Range_dragger" ) { + clearTimeout(delayedHider); + rangeDragger.setPosition(d3.event.x, d3.event.y); + shadowClone.setPosition(d3.event.x, d3.event.y); + domainDragger.updateElementViaRangeDragger(d3.event.x, d3.event.y); + } + else if ( d.type && d.type() === "Domain_dragger" ) { + clearTimeout(delayedHider); + domainDragger.setPosition(d3.event.x, d3.event.y); + shadowClone.setPositionDomain(d3.event.x, d3.event.y); + rangeDragger.updateElementViaDomainDragger(d3.event.x, d3.event.y); + } + + else { + d.px = d3.event.x; + d.py = d3.event.y; + force.resume(); + updateHaloRadius(); + moved = true; + if ( d.renderType && d.renderType() === "round" ) { + classDragger.setParentNode(d); + } + + } + }) + .on("dragend", function ( d ){ + graph.ignoreOtherHoverEvents(false); + if ( d.type && d.type() === "Class_dragger" ) { + var nX = classDragger.x; + var nY = classDragger.y; + clearTimeout(delayedHider); + classDragger.mouseButtonPressed = false; + classDragger.selectedViaTouch(false); + d.setParentNode(d.parentNode()); + + var draggerEndPos = [nX, nY]; + var targetNode = graph.getTargetNode(draggerEndPos); + if ( targetNode ) { + createNewObjectProperty(d.parentNode(), targetNode, draggerEndPos); + } + if ( touchDevice === false ) { + editElementHoverOut(); + } + draggingStarted = false; + } else if ( d.type && d.type() === "Range_dragger" ) { + graph.ignoreOtherHoverEvents(false); + frozenDomainForPropertyDragger.frozen(false); + frozenDomainForPropertyDragger.locked(false); + frozenRangeForPropertyDragger.frozen(false); + frozenRangeForPropertyDragger.locked(false); + rangeDragger.mouseButtonPressed = false; + domainDragger.mouseButtonPressed = false; + domainDragger.updateElement(); + rangeDragger.updateElement(); + shadowClone.hideClone(true); + var rX = rangeDragger.x; + var rY = rangeDragger.y; + var rangeDraggerEndPos = [rX, rY]; + var targetRangeNode = graph.getTargetNode(rangeDraggerEndPos); + if ( elementTools.isDatatype(targetRangeNode) === true ) { + targetRangeNode = null; + console.log("---------------TARGET NODE IS A DATATYPE/ LITERAL ------------"); + } + + if ( targetRangeNode === null ) { + d.reDrawEverthing(); + shadowClone.hideParentProperty(false); + } + else { + d.updateRange(targetRangeNode); + graph.update(); + shadowClone.hideParentProperty(false); + } + } else if ( d.type && d.type() === "Domain_dragger" ) { + graph.ignoreOtherHoverEvents(false); + frozenDomainForPropertyDragger.frozen(false); + frozenDomainForPropertyDragger.locked(false); + frozenRangeForPropertyDragger.frozen(false); + frozenRangeForPropertyDragger.locked(false); + rangeDragger.mouseButtonPressed = false; + domainDragger.mouseButtonPressed = false; + domainDragger.updateElement(); + rangeDragger.updateElement(); + shadowClone.hideClone(true); + + var dX = domainDragger.x; + var dY = domainDragger.y; + var domainDraggerEndPos = [dX, dY]; + var targetDomainNode = graph.getTargetNode(domainDraggerEndPos); + if ( elementTools.isDatatype(targetDomainNode) === true ) { + targetDomainNode = null; + console.log("---------------TARGET NODE IS A DATATYPE/ LITERAL ------------"); + } + shadowClone.hideClone(true); + if ( targetDomainNode === null ) { + d.reDrawEverthing(); + shadowClone.hideParentProperty(false); + } + else { + d.updateDomain(targetDomainNode); + graph.update(); + shadowClone.hideParentProperty(false); + } + } + + else { + d.locked(false); + var pnp = graph.options().pickAndPinModule(); + if ( pnp.enabled() === true && moved === true ) { + if ( d.id ) { // node + pnp.handle(d, true); + } + if ( d.property ) { + pnp.handle(d.property(), true); + } + } + } + }); + + // Apply the zooming factor. + zoom = d3.behavior.zoom() + .duration(150) + .scaleExtent([options.minMagnification(), options.maxMagnification()]) + .on("zoom", zoomed); + + draggerObjectsArray.push(classDragger); + draggerObjectsArray.push(rangeDragger); + draggerObjectsArray.push(domainDragger); + draggerObjectsArray.push(shadowClone); + force.stop(); + } + + graph.lazyRefresh = function (){ + redrawContent(); + recalculatePositions(); + }; + + graph.adjustingGraphSize = function ( val ){ + adjustingGraphSize = val; + }; + + graph.showReloadButtonAfterLayoutOptimization = function ( show ){ + showReloadButtonAfterLayoutOptimization = show; + }; + + + function hiddenRecalculatePositions(){ + finishedLoadingSequence = false; + if ( graph.options().loadingModule().successfullyLoadedOntology() === false ) { + force.stop(); + d3.select("#progressBarValue").node().innerHTML = ""; + graph.updateProgressBarMode(); + graph.options().loadingModule().showErrorDetailsMessage(hiddenRecalculatePositions); + if ( keepDetailsCollapsedOnLoading && adjustingGraphSize === false ) { + graph.options().loadingModule().collapseDetails("hiddenRecalculatePositions"); + } + return; + } + if ( updateRenderingDuringSimulation === false ) { + var value = 1.0 - 10 * force.alpha(); + var percent = parseInt(200 * value) + "%"; + graph.options().loadingModule().setPercentValue(percent); + d3.select("#progressBarValue").style("width", percent); + d3.select("#progressBarValue").node().innerHTML = percent; + + if ( value > 0.49 ) { + updateRenderingDuringSimulation = true; + // show graph container; + if ( graphContainer ) { + graphContainer.style("opacity", "1"); + percent = "100%"; + d3.select("#progressBarValue").style("width", percent); + d3.select("#progressBarValue").node().innerHTML = percent; + graph.options().ontologyMenu().append_message_toLastBulletPoint("done"); + d3.select("#reloadCachedOntology").classed("hidden", !showReloadButtonAfterLayoutOptimization); + if ( showFilterWarning === true && seenFilterWarning === false ) { + graph.options().warningModule().showFilterHint(); + seenFilterWarning = true; + } + } + + if ( initialLoad ) { + if ( graph.paused() === false ) + force.resume(); // resume force + initialLoad = false; + + } + + + finishedLoadingSequence = true; + if ( showFPS === true ) { + force.on("tick", recalculatePositionsWithFPS); + recalculatePositionsWithFPS(); + } + else { + force.on("tick", recalculatePositions); + recalculatePositions(); + } + + if ( centerGraphViewOnLoad === true && force.nodes().length > 0 ) { + if ( force.nodes().length < 10 ) graph.forceRelocationEvent(true); // uses dynamic zoomer; + else graph.forceRelocationEvent(); + centerGraphViewOnLoad = false; + // console.log("--------------------------------------") + } + + + graph.showEditorHintIfNeeded(); + + if ( graph.options().loadingModule().missingImportsWarning() === false ) { + graph.options().loadingModule().hideLoadingIndicator(); + graph.options().ontologyMenu().append_bulletPoint("Successfully loaded ontology"); + graph.options().loadingModule().setSuccessful(); + } else { + graph.options().loadingModule().showWarningDetailsMessage(); + graph.options().ontologyMenu().append_bulletPoint("Loaded ontology with warnings"); + } + } + } + } + + graph.showEditorHintIfNeeded = function (){ + if ( seenEditorHint === false && editMode === true ) { + seenEditorHint = true; + graph.options().warningModule().showEditorHint(); + } + }; + + graph.setForceTickFunctionWithFPS = function (){ + showFPS = true; + if ( force && finishedLoadingSequence === true ) { + force.on("tick", recalculatePositionsWithFPS); + } + + }; + graph.setDefaultForceTickFunction = function (){ + showFPS = false; + if ( force && finishedLoadingSequence === true ) { + force.on("tick", recalculatePositions); + } + }; + function recalculatePositionsWithFPS(){ + // compute the fps + + recalculatePositions(); + now = Date.now(); + var diff = now - then; + var fps = (1000 / (diff)).toFixed(2); + + debugContainer.node().innerHTML = "FPS: " + fps + "
    " + "Nodes: " + force.nodes().length + "
    " + "Links: " + force.links().length; + then = Date.now(); + + } + + function recalculatePositions(){ + // Set node positions + + + // add switch for edit mode to make this faster; + if ( !editMode ) { + nodeElements.attr("transform", function ( node ){ + return "translate(" + node.x + "," + node.y + ")"; + }); + + // Set label group positions + labelGroupElements.attr("transform", function ( label ){ + var position; + + // force centered positions on single-layered links + var link = label.link(); + if ( link.layers().length === 1 && !link.loops() ) { + var linkDomainIntersection = math.calculateIntersection(link.range(), link.domain(), 0); + var linkRangeIntersection = math.calculateIntersection(link.domain(), link.range(), 0); + position = math.calculateCenter(linkDomainIntersection, linkRangeIntersection); + label.x = position.x; + label.y = position.y; + } + return "translate(" + label.x + "," + label.y + ")"; + }); + // Set link paths and calculate additional information + linkPathElements.attr("d", function ( l ){ + if ( l.isLoop() ) { + return math.calculateLoopPath(l); + } + var curvePoint = l.label(); + var pathStart = math.calculateIntersection(curvePoint, l.domain(), 1); + var pathEnd = math.calculateIntersection(curvePoint, l.range(), 1); + + return curveFunction([pathStart, curvePoint, pathEnd]); + }); + + // Set cardinality positions + cardinalityElements.attr("transform", function ( property ){ + + var label = property.link().label(), + pos = math.calculateIntersection(label, property.range(), CARDINALITY_HDISTANCE), + normalV = math.calculateNormalVector(label, property.range(), CARDINALITY_VDISTANCE); + + return "translate(" + (pos.x + normalV.x) + "," + (pos.y + normalV.y) + ")"; + }); + + + updateHaloRadius(); + return; + } + + // TODO: this is Editor redraw function // we need to make this faster!! + + + nodeElements.attr("transform", function ( node ){ + return "translate(" + node.x + "," + node.y + ")"; + }); + + // Set label group positions + labelGroupElements.attr("transform", function ( label ){ + var position; + + // force centered positions on single-layered links + var link = label.link(); + if ( link.layers().length === 1 && !link.loops() ) { + var linkDomainIntersection = math.calculateIntersection(link.range(), link.domain(), 0); + var linkRangeIntersection = math.calculateIntersection(link.domain(), link.range(), 0); + position = math.calculateCenter(linkDomainIntersection, linkRangeIntersection); + label.x = position.x; + label.y = position.y; + label.linkRangeIntersection = linkRangeIntersection; + label.linkDomainIntersection = linkDomainIntersection; + if ( link.property().focused() === true || hoveredPropertyElement !== undefined ) { + rangeDragger.updateElement(); + domainDragger.updateElement(); + // shadowClone.setPosition(link.property().range().x,link.property().range().y); + // shadowClone.setPositionDomain(link.property().domain().x,link.property().domain().y); + } + } else { + label.linkDomainIntersection = math.calculateIntersection(link.label(), link.domain(), 0); + label.linkRangeIntersection = math.calculateIntersection(link.label(), link.range(), 0); + if ( link.property().focused() === true || hoveredPropertyElement !== undefined ) { + rangeDragger.updateElement(); + domainDragger.updateElement(); + // shadowClone.setPosition(link.property().range().x,link.property().range().y); + // shadowClone.setPositionDomain(link.property().domain().x,link.property().domain().y); + } + + } + return "translate(" + label.x + "," + label.y + ")"; + }); + // Set link paths and calculate additional information + linkPathElements.attr("d", function ( l ){ + if ( l.isLoop() ) { + + var ptrAr = math.getLoopPoints(l); + l.label().linkRangeIntersection = ptrAr[1]; + l.label().linkDomainIntersection = ptrAr[0]; + + if ( l.property().focused() === true || hoveredPropertyElement !== undefined ) { + rangeDragger.updateElement(); + domainDragger.updateElement(); + } + return math.calculateLoopPath(l); + } + var curvePoint = l.label(); + var pathStart = math.calculateIntersection(curvePoint, l.domain(), 1); + var pathEnd = math.calculateIntersection(curvePoint, l.range(), 1); + l.linkRangeIntersection = pathStart; + l.linkDomainIntersection = pathEnd; + if ( l.property().focused() === true || hoveredPropertyElement !== undefined ) { + domainDragger.updateElement(); + rangeDragger.updateElement(); + // shadowClone.setPosition(l.property().range().x,l.property().range().y); + // shadowClone.setPositionDomain(l.property().domain().x,l.property().domain().y); + } + return curveFunction([pathStart, curvePoint, pathEnd]); + }); + + // Set cardinality positions + cardinalityElements.attr("transform", function ( property ){ + + var label = property.link().label(), + pos = math.calculateIntersection(label, property.range(), CARDINALITY_HDISTANCE), + normalV = math.calculateNormalVector(label, property.range(), CARDINALITY_VDISTANCE); + + return "translate(" + (pos.x + normalV.x) + "," + (pos.y + normalV.y) + ")"; + }); + + if ( hoveredNodeElement ) { + setDeleteHoverElementPosition(hoveredNodeElement); + setAddDataPropertyHoverElementPosition(hoveredNodeElement); + if ( draggingStarted === false ) { + classDragger.setParentNode(hoveredNodeElement); + } + } + if ( hoveredPropertyElement ) { + setDeleteHoverElementPositionProperty(hoveredPropertyElement); + } + + updateHaloRadius(); + } + + graph.updatePropertyDraggerElements = function ( property ){ + if ( property.type() !== "owl:DatatypeProperty" ) { + + shadowClone.setParentProperty(property); + rangeDragger.setParentProperty(property); + rangeDragger.hideDragger(false); + rangeDragger.addMouseEvents(); + domainDragger.setParentProperty(property); + domainDragger.hideDragger(false); + domainDragger.addMouseEvents(); + + } + else { + rangeDragger.hideDragger(true); + domainDragger.hideDragger(true); + shadowClone.hideClone(true); + } + }; + + function addClickEvents(){ + function executeModules( selectedElement ){ + options.selectionModules().forEach(function ( module ){ + module.handle(selectedElement); + }); + } + + nodeElements.on("click", function ( clickedNode ){ + + // manaual double clicker // helper for iphone 6 etc... + if ( touchDevice === true && doubletap() === true ) { + d3.event.stopPropagation(); + if ( editMode === true ) { + clickedNode.raiseDoubleClickEdit(defaultIriValue(clickedNode)); + } + } + else { + executeModules(clickedNode); + } + }); + + nodeElements.on("dblclick", function ( clickedNode ){ + + d3.event.stopPropagation(); + if ( editMode === true ) { + clickedNode.raiseDoubleClickEdit(defaultIriValue(clickedNode)); + } + }); + + labelGroupElements.selectAll(".label").on("click", function ( clickedProperty ){ + executeModules(clickedProperty); + + // this is for enviroments that do not define dblClick function; + if ( touchDevice === true && doubletap() === true ) { + d3.event.stopPropagation(); + if ( editMode === true ) { + clickedProperty.raiseDoubleClickEdit(defaultIriValue(clickedProperty)); + } + } + + // currently removed the selection of an element to invoke the dragger + // if (editMode===true && clickedProperty.editingTextElement!==true) { + // return; + // // We say that Datatype properties are not allowed to have domain range draggers + // if (clickedProperty.focused() && clickedProperty.type() !== "owl:DatatypeProperty") { + // shadowClone.setParentProperty(clickedProperty); + // rangeDragger.setParentProperty(clickedProperty); + // rangeDragger.hideDragger(false); + // rangeDragger.addMouseEvents(); + // domainDragger.setParentProperty(clickedProperty); + // domainDragger.hideDragger(false); + // domainDragger.addMouseEvents(); + // + // if (clickedProperty.domain()===clickedProperty.range()){ + // clickedProperty.labelObject().increasedLoopAngle=true; + // recalculatePositions(); + // + // } + // + // } else if (clickedProperty.focused() && clickedProperty.type() === "owl:DatatypeProperty") { + // shadowClone.setParentProperty(clickedProperty); + // rangeDragger.setParentProperty(clickedProperty); + // rangeDragger.hideDragger(true); + // rangeDragger.addMouseEvents(); + // domainDragger.setParentProperty(clickedProperty); + // domainDragger.hideDragger(false); + // domainDragger.addMouseEvents(); + // + // } + // else { + // rangeDragger.hideDragger(true); + // domainDragger.hideDragger(true); + // if (clickedProperty.domain()===clickedProperty.range()){ + // clickedProperty.labelObject().increasedLoopAngle=false; + // recalculatePositions(); + // + // } + // } + // } + }); + labelGroupElements.selectAll(".label").on("dblclick", function ( clickedProperty ){ + d3.event.stopPropagation(); + if ( editMode === true ) { + clickedProperty.raiseDoubleClickEdit(defaultIriValue(clickedProperty)); + } + + }); + } + + function defaultIriValue( element ){ + // get the iri of that element; + if ( graph.options().getGeneralMetaObject().iri ) { + var str2Compare = graph.options().getGeneralMetaObject().iri + element.id(); + return element.iri() === str2Compare; + } + return false; + } + + /** Adjusts the containers current scale and position. */ + function zoomed(){ + if ( forceNotZooming === true ) { + zoom.translate(graphTranslation); + zoom.scale(zoomFactor); + return; + } + + + var zoomEventByMWheel = false; + if ( d3.event.sourceEvent ) { + if ( d3.event.sourceEvent.deltaY ) zoomEventByMWheel = true; + } + if ( zoomEventByMWheel === false ) { + if ( transformAnimation === true ) { + return; + } + zoomFactor = d3.event.scale; + graphTranslation = d3.event.translate; + graphContainer.attr("transform", "translate(" + graphTranslation + ")scale(" + zoomFactor + ")"); + updateHaloRadius(); + graph.options().zoomSlider().updateZoomSliderValue(zoomFactor); + return; + } + /** animate the transition **/ + zoomFactor = d3.event.scale; + graphTranslation = d3.event.translate; + graphContainer.transition() + .tween("attr.translate", function (){ + return function ( t ){ + transformAnimation = true; + var tr = d3.transform(graphContainer.attr("transform")); + graphTranslation[0] = tr.translate[0]; + graphTranslation[1] = tr.translate[1]; + zoomFactor = tr.scale[0]; + updateHaloRadius(); + graph.options().zoomSlider().updateZoomSliderValue(zoomFactor); + }; + }) + .each("end", function (){ + transformAnimation = false; + }) + .attr("transform", "translate(" + graphTranslation + ")scale(" + zoomFactor + ")") + .ease('linear') + .duration(250); + }// end of zoomed function + + function redrawGraph(){ + remove(); + + graphContainer = d3.selectAll(options.graphContainerSelector()) + .append("svg") + .classed("vowlGraph", true) + .attr("width", options.width()) + .attr("height", options.height()) + .call(zoom) + .append("g"); + // add touch and double click functions + + var svgGraph = d3.selectAll(".vowlGraph"); + originalD3_dblClickFunction = svgGraph.on("dblclick.zoom"); + originalD3_touchZoomFunction = svgGraph.on("touchstart"); + svgGraph.on("touchstart", touchzoomed); + if ( editMode === true ) { + svgGraph.on("dblclick.zoom", graph.modified_dblClickFunction); + } + else { + svgGraph.on("dblclick.zoom", originalD3_dblClickFunction); + } + + } + + function generateEditElements(){ + addDataPropertyGroupElement = editContainer.append('g') + .classed("hidden-in-export", true) + .classed("hidden", true) + .classed("addDataPropertyElement", true) + .attr("transform", "translate(" + 0 + "," + 0 + ")"); + + + addDataPropertyGroupElement.append("circle") + // .classed("deleteElement", true) + .attr("r", 12) + .attr("cx", 0) + .attr("cy", 0) + .append("title").text("Add Datatype Property"); + + addDataPropertyGroupElement.append("line") + // .classed("deleteElementIcon ",true) + .attr("x1", -8) + .attr("y1", 0) + .attr("x2", 8) + .attr("y2", 0) + .append("title").text("Add Datatype Property"); + + addDataPropertyGroupElement.append("line") + // .classed("deleteElementIcon",true) + .attr("x1", 0) + .attr("y1", -8) + .attr("x2", 0) + .attr("y2", 8) + .append("title").text("Add Datatype Property"); + + if ( graph.options().useAccuracyHelper() ) { + addDataPropertyGroupElement.append("circle") + .attr("r", 15) + .attr("cx", -7) + .attr("cy", 7) + .classed("superHiddenElement", true) + .classed("superOpacityElement", !graph.options().showDraggerObject()); + } + + + deleteGroupElement = editContainer.append('g') + .classed("hidden-in-export", true) + .classed("hidden", true) + .classed("deleteParentElement", true) + .attr("transform", "translate(" + 0 + "," + 0 + ")"); + + deleteGroupElement.append("circle") + .attr("r", 12) + .attr("cx", 0) + .attr("cy", 0) + .append("title").text("Delete This Node"); + + var crossLen = 5; + deleteGroupElement.append("line") + .attr("x1", -crossLen) + .attr("y1", -crossLen) + .attr("x2", crossLen) + .attr("y2", crossLen) + .append("title").text("Delete This Node"); + + deleteGroupElement.append("line") + .attr("x1", crossLen) + .attr("y1", -crossLen) + .attr("x2", -crossLen) + .attr("y2", crossLen) + .append("title").text("Delete This Node"); + + if ( graph.options().useAccuracyHelper() ) { + deleteGroupElement.append("circle") + .attr("r", 15) + .attr("cx", 7) + .attr("cy", -7) + .classed("superHiddenElement", true) + .classed("superOpacityElement", !graph.options().showDraggerObject()); + } + + + } + + graph.getUnfilteredData = function (){ + return unfilteredData; + }; + + graph.getClassDataForTtlExport = function (){ + var allNodes = unfilteredData.nodes; + var nodeData = []; + for ( var i = 0; i < allNodes.length; i++ ) { + if ( allNodes[i].type() !== "rdfs:Literal" && + allNodes[i].type() !== "rdfs:Datatype" && + allNodes[i].type() !== "owl:Thing" ) { + nodeData.push(allNodes[i]); + } + } + return nodeData; + }; + + graph.getPropertyDataForTtlExport = function (){ + var propertyData = []; + var allProperties = unfilteredData.properties; + for ( var i = 0; i < allProperties.length; i++ ) { + // currently using only the object properties + if ( allProperties[i].type() === "owl:ObjectProperty" || + allProperties[i].type() === "owl:DatatypeProperty" || + allProperties[i].type() === "owl:ObjectProperty" + + ) { + propertyData.push(allProperties[i]); + } else { + if ( allProperties[i].type() === "rdfs:subClassOf" ) { + allProperties[i].baseIri("http://www.w3.org/2000/01/rdf-schema#"); + allProperties[i].iri("http://www.w3.org/2000/01/rdf-schema#subClassOf"); + } + if ( allProperties[i].type() === "owl:disjointWith" ) { + allProperties[i].baseIri("http://www.w3.org/2002/07/owl#"); + allProperties[i].iri("http://www.w3.org/2002/07/owl#disjointWith"); + } + } + } + return propertyData; + }; + + graph.getAxiomsForTtlExport = function (){ + var axioms = []; + var allProperties = unfilteredData.properties; + for ( var i = 0; i < allProperties.length; i++ ) { + // currently using only the object properties + if ( allProperties[i].type() === "owl:ObjectProperty" || + allProperties[i].type() === "owl:DatatypeProperty" || + allProperties[i].type() === "owl:ObjectProperty" || + allProperties[i].type() === "rdfs:subClassOf" + ) { + } else { + } + } + return axioms; + }; + + + graph.getUnfilteredData = function (){ + return unfilteredData; + }; + + graph.getClassDataForTtlExport = function (){ + var allNodes = unfilteredData.nodes; + var nodeData = []; + for ( var i = 0; i < allNodes.length; i++ ) { + if ( allNodes[i].type() !== "rdfs:Literal" && + allNodes[i].type() !== "rdfs:Datatype" && + allNodes[i].type() !== "owl:Thing" ) { + nodeData.push(allNodes[i]); + } + } + return nodeData; + }; + + + function redrawContent(){ + var markerContainer; + + if ( !graphContainer ) { + return; + } + + // Empty the graph container + graphContainer.selectAll("*").remove(); + + // Last container -> elements of this container overlap others + linkContainer = graphContainer.append("g").classed("linkContainer", true); + cardinalityContainer = graphContainer.append("g").classed("cardinalityContainer", true); + labelContainer = graphContainer.append("g").classed("labelContainer", true); + nodeContainer = graphContainer.append("g").classed("nodeContainer", true); + + // adding editing Elements + var draggerPathLayer = graphContainer.append("g").classed("linkContainer", true); + draggerLayer = graphContainer.append("g").classed("editContainer", true); + editContainer = graphContainer.append("g").classed("editContainer", true); + + draggerPathLayer.classed("hidden-in-export", true); + editContainer.classed("hidden-in-export", true); + draggerLayer.classed("hidden-in-export", true); + + // Add an extra container for all markers + markerContainer = linkContainer.append("defs"); + var drElement = draggerLayer.selectAll(".node") + .data(draggerObjectsArray).enter() + .append("g") + .classed("node", true) + .classed("hidden-in-export", true) + .attr("id", function ( d ){ + return d.id(); + }) + .call(dragBehaviour); + drElement.each(function ( node ){ + node.svgRoot(d3.select(this)); + node.svgPathLayer(draggerPathLayer); + if ( node.type() === "shadowClone" ) { + node.drawClone(); + node.hideClone(true); + } else { + node.drawNode(); + node.hideDragger(true); + } + }); + generateEditElements(); + + + // Add an extra container for all markers + markerContainer = linkContainer.append("defs"); + + // Draw nodes + + if ( classNodes === undefined ) classNodes = []; + + nodeElements = nodeContainer.selectAll(".node") + .data(classNodes).enter() + .append("g") + .classed("node", true) + .attr("id", function ( d ){ + return d.id(); + }) + .call(dragBehaviour); + nodeElements.each(function ( node ){ + node.draw(d3.select(this)); + }); + + + if ( labelNodes === undefined ) labelNodes = []; + + // Draw label groups (property + inverse) + labelGroupElements = labelContainer.selectAll(".labelGroup") + .data(labelNodes).enter() + .append("g") + .classed("labelGroup", true) + .call(dragBehaviour); + + labelGroupElements.each(function ( label ){ + var success = label.draw(d3.select(this)); + label.property().labelObject(label); + // Remove empty groups without a label. + if ( !success ) { + d3.select(this).remove(); + } + }); + // Place subclass label groups on the bottom of all labels + labelGroupElements.each(function ( label ){ + // the label might be hidden e.g. in compact notation + if ( !this.parentNode ) { + return; + } + + if ( elementTools.isRdfsSubClassOf(label.property()) ) { + var parentNode = this.parentNode; + parentNode.insertBefore(this, parentNode.firstChild); + } + }); + if ( properties === undefined ) properties = []; + // Draw cardinality elements + cardinalityElements = cardinalityContainer.selectAll(".cardinality") + .data(properties).enter() + .append("g") + .classed("cardinality", true); + + cardinalityElements.each(function ( property ){ + var success = property.drawCardinality(d3.select(this)); + + // Remove empty groups without a label. + if ( !success ) { + d3.select(this).remove(); + } + }); + // Draw links + if ( links === undefined ) links = []; + linkGroups = linkContainer.selectAll(".link") + .data(links).enter() + .append("g") + .classed("link", true); + + linkGroups.each(function ( link ){ + link.draw(d3.select(this), markerContainer); + }); + linkPathElements = linkGroups.selectAll("path"); + // Select the path for direct access to receive a better performance + addClickEvents(); + } + + function remove(){ + if ( graphContainer ) { + // Select the parent element because the graph container is a group (e.g. for zooming) + d3.select(graphContainer.node().parentNode).remove(); + } + } + + initializeGraph(); // << call the initialization function + + graph.updateCanvasContainerSize = function (){ + if ( graphContainer ) { + var svgElement = d3.selectAll(".vowlGraph"); + svgElement.attr("width", options.width()); + svgElement.attr("height", options.height()); + graphContainer.attr("transform", "translate(" + graphTranslation + ")scale(" + zoomFactor + ")"); + } + }; + + // Loads all settings, removes the old graph (if it exists) and draws a new one. + graph.start = function (){ + force.stop(); + loadGraphData(true); + redrawGraph(); + graph.update(true); + + if ( graph.options().loadingModule().successfullyLoadedOntology() === false ) { + graph.options().loadingModule().setErrorMode(); + } + + }; + + // Updates only the style of the graph. + graph.updateStyle = function (){ + refreshGraphStyle(); + if ( graph.options().loadingModule().successfullyLoadedOntology() === false ) { + force.stop(); + } else { + force.start(); + } + }; + + graph.reload = function (){ + loadGraphData(); + graph.update(); + + }; + + graph.load = function (){ + force.stop(); + loadGraphData(); + refreshGraphData(); + for ( var i = 0; i < labelNodes.length; i++ ) { + var label = labelNodes[i]; + if ( label.property().x && label.property().y ) { + label.x = label.property().x; + label.y = label.property().y; + // also set the prev position of the label + label.px = label.x; + label.py = label.y; + } + } + graph.update(); + }; + + graph.fastUpdate = function (){ + // fast update function for editor calls; + // -- experimental ; + quick_refreshGraphData(); + updateNodeMap(); + force.start(); + redrawContent(); + graph.updatePulseIds(nodeArrayForPulse); + refreshGraphStyle(); + updateHaloStyles(); + + }; + + graph.getNodeMapForSearch = function (){ + return nodeMap; + }; + function updateNodeMap(){ + nodeMap = []; + var node; + for ( var j = 0; j < force.nodes().length; j++ ) { + node = force.nodes()[j]; + if ( node.id ) { + nodeMap[node.id()] = j; + // check for equivalents + var eqs = node.equivalents(); + if ( eqs.length > 0 ) { + for ( var e = 0; e < eqs.length; e++ ) { + var eqObject = eqs[e]; + nodeMap[eqObject.id()] = j; + } + } + } + if ( node.property ) { + nodeMap[node.property().id()] = j; + var inverse = node.inverse(); + if ( inverse ) { + nodeMap[inverse.id()] = j; + } + } + } + } + + function updateHaloStyles(){ + var haloElement; + var halo; + var node; + for ( var j = 0; j < force.nodes().length; j++ ) { + node = force.nodes()[j]; + if ( node.id ) { + haloElement = node.getHalos(); + if ( haloElement ) { + halo = haloElement.selectAll(".searchResultA"); + halo.classed("searchResultA", false); + halo.classed("searchResultB", true); + } + } + + if ( node.property ) { + haloElement = node.property().getHalos(); + if ( haloElement ) { + halo = haloElement.selectAll(".searchResultA"); + halo.classed("searchResultA", false); + halo.classed("searchResultB", true); + } + } + } + } + + // Updates the graphs displayed data and style. + graph.update = function ( init ){ + var validOntology = graph.options().loadingModule().successfullyLoadedOntology(); + if ( validOntology === false && (init && init === true) ) { + graph.options().loadingModule().collapseDetails(); + return; + } + if ( validOntology === false ) { + return; + } + + keepDetailsCollapsedOnLoading = false; + refreshGraphData(); + // update node map + updateNodeMap(); + + force.start(); + redrawContent(); + graph.updatePulseIds(nodeArrayForPulse); + refreshGraphStyle(); + updateHaloStyles(); + }; + + graph.paused = function ( p ){ + if ( !arguments.length ) return paused; + paused = p; + graph.updateStyle(); + return graph; + }; + // resetting the graph + graph.reset = function (){ + // window size + var w = 0.5 * graph.options().width(); + var h = 0.5 * graph.options().height(); + // computing initial translation for the graph due tue the dynamic default zoom level + var tx = w - defaultZoom * w; + var ty = h - defaultZoom * h; + zoom.translate([tx, ty]) + .scale(defaultZoom); + }; + + + graph.zoomOut = function (){ + + var minMag = options.minMagnification(), + maxMag = options.maxMagnification(); + var stepSize = (maxMag - minMag) / 10; + var val = zoomFactor - stepSize; + if ( val < minMag ) val = minMag; + + var cx = 0.5 * graph.options().width(); + var cy = 0.5 * graph.options().height(); + var cp = getWorldPosFromScreen(cx, cy, graphTranslation, zoomFactor); + var sP = [cp.x, cp.y, graph.options().height() / zoomFactor]; + var eP = [cp.x, cp.y, graph.options().height() / val]; + var pos_intp = d3.interpolateZoom(sP, eP); + + graphContainer.attr("transform", transform(sP, cx, cy)) + .transition() + .duration(250) + .attrTween("transform", function (){ + return function ( t ){ + return transform(pos_intp(t), cx, cy); + }; + }) + .each("end", function (){ + graphContainer.attr("transform", "translate(" + graphTranslation + ")scale(" + zoomFactor + ")"); + zoom.translate(graphTranslation); + zoom.scale(zoomFactor); + updateHaloRadius(); + options.zoomSlider().updateZoomSliderValue(zoomFactor); + }); + + }; + + graph.zoomIn = function (){ + var minMag = options.minMagnification(), + maxMag = options.maxMagnification(); + var stepSize = (maxMag - minMag) / 10; + var val = zoomFactor + stepSize; + if ( val > maxMag ) val = maxMag; + var cx = 0.5 * graph.options().width(); + var cy = 0.5 * graph.options().height(); + var cp = getWorldPosFromScreen(cx, cy, graphTranslation, zoomFactor); + var sP = [cp.x, cp.y, graph.options().height() / zoomFactor]; + var eP = [cp.x, cp.y, graph.options().height() / val]; + var pos_intp = d3.interpolateZoom(sP, eP); + + graphContainer.attr("transform", transform(sP, cx, cy)) + .transition() + .duration(250) + .attrTween("transform", function (){ + return function ( t ){ + return transform(pos_intp(t), cx, cy); + }; + }) + .each("end", function (){ + graphContainer.attr("transform", "translate(" + graphTranslation + ")scale(" + zoomFactor + ")"); + zoom.translate(graphTranslation); + zoom.scale(zoomFactor); + updateHaloRadius(); + options.zoomSlider().updateZoomSliderValue(zoomFactor); + }); + + + }; + + /** --------------------------------------------------------- **/ + /** -- data related handling -- **/ + /** --------------------------------------------------------- **/ + + var cachedJsonOBJ = null; + graph.clearAllGraphData = function (){ + if ( graph.graphNodeElements() && graph.graphNodeElements().length > 0 ) { + cachedJsonOBJ = graph.options().exportMenu().createJSON_exportObject(); + } else { + cachedJsonOBJ = null; + } + force.stop(); + if ( unfilteredData ) { + unfilteredData.nodes = []; + unfilteredData.properties = []; + } + }; + graph.getCachedJsonObj = function (){ + return cachedJsonOBJ; + }; + + // removes data when data could not be loaded + graph.clearGraphData = function (){ + force.stop(); + var sidebar = graph.options().sidebar(); + if ( sidebar ) + sidebar.clearOntologyInformation(); + if ( graphContainer ) + redrawGraph(); + }; + + function generateDictionary( data ){ + var i; + var originalDictionary = []; + var nodes = data.nodes; + for ( i = 0; i < nodes.length; i++ ) { + // check if node has a label + if ( nodes[i].labelForCurrentLanguage() !== undefined ) + originalDictionary.push(nodes[i]); + } + var props = data.properties; + for ( i = 0; i < props.length; i++ ) { + if ( props[i].labelForCurrentLanguage() !== undefined ) + originalDictionary.push(props[i]); + } + parser.setDictionary(originalDictionary); + + var literFilter = graph.options().literalFilter(); + var idsToRemove = literFilter.removedNodes(); + var originalDict = parser.getDictionary(); + var newDict = []; + + // go through the dictionary and remove the ids; + for ( i = 0; i < originalDict.length; i++ ) { + var dictElement = originalDict[i]; + var dictElementId; + if ( dictElement.property ) + dictElementId = dictElement.property().id(); + else + dictElementId = dictElement.id(); + // compare against the removed ids; + var addToDictionary = true; + for ( var j = 0; j < idsToRemove.length; j++ ) { + var currentId = idsToRemove[j]; + if ( currentId === dictElementId ) { + addToDictionary = false; + } + } + if ( addToDictionary === true ) { + newDict.push(dictElement); + } + } + // tell the parser that the dictionary is updated + parser.setDictionary(newDict); + + } + + graph.updateProgressBarMode = function (){ + var loadingModule = graph.options().loadingModule(); + + var state = loadingModule.getProgressBarMode(); + switch ( state ) { + case 0: + loadingModule.setErrorMode(); + break; + case 1: + loadingModule.setBusyMode(); + break; + case 2: + loadingModule.setPercentMode(); + break; + default: + loadingModule.setPercentMode(); + } + }; + + graph.setFilterWarning = function ( val ){ + showFilterWarning = val; + }; + function loadGraphData( init ){ + // reset the locate button and previously selected locations and other variables + + var loadingModule = graph.options().loadingModule(); + force.stop(); + + force.nodes([]); + force.links([]); + nodeArrayForPulse = []; + pulseNodeIds = []; + locationId = 0; + d3.select("#locateSearchResult").classed("highlighted", false); + d3.select("#locateSearchResult").node().title = "Nothing to locate"; + graph.clearGraphData(); + + if ( init ) { + force.stop(); + return; + } + + showFilterWarning = false; + parser.parse(options.data()); + unfilteredData = { + nodes: parser.nodes(), + properties: parser.properties() + }; + // fixing class and property id counter for the editor + eN = unfilteredData.nodes.length + 1; + eP = unfilteredData.properties.length + 1; + + initialLoad = true; + graph.options().warningModule().closeFilterHint(); + + // loading handler + updateRenderingDuringSimulation = true; + var validOntology = graph.options().loadingModule().successfullyLoadedOntology(); + if ( graphContainer && validOntology === true ) { + + updateRenderingDuringSimulation = false; + graph.options().ontologyMenu().append_bulletPoint("Generating visualization ... "); + loadingModule.setPercentMode(); + + if ( unfilteredData.nodes.length > 0 ) { + graphContainer.style("opacity", "0"); + force.on("tick", hiddenRecalculatePositions); + } else { + graphContainer.style("opacity", "1"); + if ( showFPS === true ) { + force.on("tick", recalculatePositionsWithFPS); + } + else { + force.on("tick", recalculatePositions); + } + } + + force.start(); + } else { + force.stop(); + graph.options().ontologyMenu().append_bulletPoint("Failed to load ontology"); + loadingModule.setErrorMode(); + } + // update prefixList( + // update general MetaOBJECT + graph.options().clearMetaObject(); + graph.options().clearGeneralMetaObject(); + graph.options().editSidebar().clearMetaObjectValue(); + if ( options.data() !== undefined ) { + var header = options.data().header; + if ( header ) { + if ( header.iri ) { + graph.options().addOrUpdateGeneralObjectEntry("iri", header.iri); + } + if ( header.title ) { + graph.options().addOrUpdateGeneralObjectEntry("title", header.title); + } + if ( header.author ) { + graph.options().addOrUpdateGeneralObjectEntry("author", header.author); + } + if ( header.version ) { + graph.options().addOrUpdateGeneralObjectEntry("version", header.version); + } + if ( header.description ) { + graph.options().addOrUpdateGeneralObjectEntry("description", header.description); + } + if ( header.prefixList ) { + var pL = header.prefixList; + for ( var pr in pL ) { + if ( pL.hasOwnProperty(pr) ) { + var val = pL[pr]; + graph.options().addPrefix(pr, val); + } + } + } + // get other metadata; + if ( header.other ) { + var otherObjects = header.other; + for ( var name in otherObjects ) { + if ( otherObjects.hasOwnProperty(name) ) { + var otherObj = otherObjects[name]; + if ( otherObj.hasOwnProperty("identifier") && otherObj.hasOwnProperty("value") ) { + graph.options().addOrUpdateMetaObjectEntry(otherObj.identfier, otherObj.value); + } + } + } + } + } + } + // update more meta OBJECT + // Initialize filters with data to replicate consecutive filtering + var initializationData = _.clone(unfilteredData); + options.filterModules().forEach(function ( module ){ + initializationData = filterFunction(module, initializationData, true); + }); + // generate dictionary here ; + generateDictionary(unfilteredData); + + parser.parseSettings(); + graphUpdateRequired = parser.settingsImported(); + centerGraphViewOnLoad = true; + if ( parser.settingsImportGraphZoomAndTranslation() === true ) { + centerGraphViewOnLoad = false; + } + graph.options().searchMenu().requestDictionaryUpdate(); + graph.options().editSidebar().updateGeneralOntologyInfo(); + graph.options().editSidebar().updatePrefixUi(); + graph.options().editSidebar().updateElementWidth(); + } + + graph.handleOnLoadingError = function (){ + force.stop(); + graph.clearGraphData(); + graph.options().ontologyMenu().append_bulletPoint("Failed to load ontology"); + d3.select("#progressBarValue").node().innherHTML = ""; + d3.select("#progressBarValue").classed("busyProgressBar", false); + graph.options().loadingModule().setErrorMode(); + graph.options().loadingModule().showErrorDetailsMessage(); + }; + + function quick_refreshGraphData(){ + links = linkCreator.createLinks(properties); + labelNodes = links.map(function ( link ){ + return link.label(); + }); + + storeLinksOnNodes(classNodes, links); + setForceLayoutData(classNodes, labelNodes, links); + } + + //Applies the data of the graph options object and parses it. The graph is not redrawn. + function refreshGraphData(){ + var shouldExecuteEmptyFilter = options.literalFilter().enabled(); + graph.executeEmptyLiteralFilter(); + options.literalFilter().enabled(shouldExecuteEmptyFilter); + + var preprocessedData = _.clone(unfilteredData); + + // Filter the data + options.filterModules().forEach(function ( module ){ + preprocessedData = filterFunction(module, preprocessedData); + }); + options.focuserModule().handle(undefined, true); + classNodes = preprocessedData.nodes; + properties = preprocessedData.properties; + links = linkCreator.createLinks(properties); + labelNodes = links.map(function ( link ){ + return link.label(); + }); + storeLinksOnNodes(classNodes, links); + setForceLayoutData(classNodes, labelNodes, links); + // for (var i = 0; i < classNodes.length; i++) { + // if (classNodes[i].setRectangularRepresentation) + // classNodes[i].setRectangularRepresentation(graph.options().rectangularRepresentation()); + // } + } + + function filterFunction( module, data, initializing ){ + links = linkCreator.createLinks(data.properties); + storeLinksOnNodes(data.nodes, links); + + if ( initializing ) { + if ( module.initialize ) { + module.initialize(data.nodes, data.properties); + } + } + module.filter(data.nodes, data.properties); + return { + nodes: module.filteredNodes(), + properties: module.filteredProperties() + }; + } + + + /** --------------------------------------------------------- **/ + /** -- force-layout related functions -- **/ + /** --------------------------------------------------------- **/ + function storeLinksOnNodes( nodes, links ){ + for ( var i = 0, nodesLength = nodes.length; i < nodesLength; i++ ) { + var node = nodes[i], + connectedLinks = []; + + // look for properties where this node is the domain or range + for ( var j = 0, linksLength = links.length; j < linksLength; j++ ) { + var link = links[j]; + + if ( link.domain() === node || link.range() === node ) { + connectedLinks.push(link); + } + } + node.links(connectedLinks); + } + } + + function setForceLayoutData( classNodes, labelNodes, links ){ + var d3Links = []; + links.forEach(function ( link ){ + d3Links = d3Links.concat(link.linkParts()); + }); + + var d3Nodes = [].concat(classNodes).concat(labelNodes); + setPositionOfOldLabelsOnNewLabels(force.nodes(), labelNodes); + + force.nodes(d3Nodes) + .links(d3Links); + } + + // The label nodes are positioned randomly, because they are created from scratch if the data changes and lose + // their position information. With this hack the position of old labels is copied to the new labels. + function setPositionOfOldLabelsOnNewLabels( oldLabelNodes, labelNodes ){ + labelNodes.forEach(function ( labelNode ){ + for ( var i = 0; i < oldLabelNodes.length; i++ ) { + var oldNode = oldLabelNodes[i]; + if ( oldNode.equals(labelNode) ) { + labelNode.x = oldNode.x; + labelNode.y = oldNode.y; + labelNode.px = oldNode.px; + labelNode.py = oldNode.py; + break; + } + } + }); + } + + // Applies all options that don't change the graph data. + function refreshGraphStyle(){ + zoom = zoom.scaleExtent([options.minMagnification(), options.maxMagnification()]); + if ( graphContainer ) { + zoom.event(graphContainer); + } + + force.charge(function ( element ){ + var charge = options.charge(); + if ( elementTools.isLabel(element) ) { + charge *= 0.8; + } + return charge; + }) + .size([options.width(), options.height()]) + .linkDistance(calculateLinkPartDistance) + .gravity(options.gravity()) + .linkStrength(options.linkStrength()); // Flexibility of links + + force.nodes().forEach(function ( n ){ + n.frozen(paused); + }); + } + + function calculateLinkPartDistance( linkPart ){ + var link = linkPart.link(); + + if ( link.isLoop() ) { + return options.loopDistance(); + } + + // divide by 2 to receive the length for a single link part + var linkPartDistance = getVisibleLinkDistance(link) / 2; + linkPartDistance += linkPart.domain().actualRadius(); + linkPartDistance += linkPart.range().actualRadius(); + return linkPartDistance; + } + + function getVisibleLinkDistance( link ){ + if ( elementTools.isDatatype(link.domain()) || elementTools.isDatatype(link.range()) ) { + return options.datatypeDistance(); + } else { + return options.classDistance(); + } + } + + /** --------------------------------------------------------- **/ + /** -- animation functions for the nodes -- **/ + /** --------------------------------------------------------- **/ + + graph.animateDynamicLabelWidth = function (){ + var wantedWidth = options.dynamicLabelWidth(); + var i; + for ( i = 0; i < classNodes.length; i++ ) { + var nodeElement = classNodes[i]; + if ( elementTools.isDatatype(nodeElement) ) { + nodeElement.animateDynamicLabelWidth(wantedWidth); + } + } + for ( i = 0; i < properties.length; i++ ) { + properties[i].animateDynamicLabelWidth(wantedWidth); + } + }; + + + /** --------------------------------------------------------- **/ + /** -- halo and localization functions -- **/ + /** --------------------------------------------------------- **/ + function updateHaloRadius(){ + if ( pulseNodeIds && pulseNodeIds.length > 0 ) { + var forceNodes = force.nodes(); + for ( var i = 0; i < pulseNodeIds.length; i++ ) { + var node = forceNodes[pulseNodeIds[i]]; + if ( node ) { + if ( node.property ) { + // match search strings with property label + if ( node.property().inverse ) { + var searchString = graph.options().searchMenu().getSearchString().toLowerCase(); + var name = node.property().labelForCurrentLanguage().toLowerCase(); + if ( name === searchString ) computeDistanceToCenter(node); + else { + node.property().removeHalo(); + if ( node.property().inverse() ) { + if ( !node.property().inverse().getHalos() ) + node.property().inverse().drawHalo(); + computeDistanceToCenter(node, true); + } + if ( node.property().equivalents() ) { + var eq = node.property().equivalents(); + for ( var e = 0; e < eq.length; e++ ) { + if ( !eq[e].getHalos() ) + eq[e].drawHalo(); + } + if ( !node.property().getHalos() ) + node.property().drawHalo(); + computeDistanceToCenter(node, false); + + } + } + } + } + computeDistanceToCenter(node); + } + } + } + } + + function getScreenCoords( x, y, translate, scale ){ + var xn = translate[0] + x * scale; + var yn = translate[1] + y * scale; + return { x: xn, y: yn }; + } + + function getClickedScreenCoords( x, y, translate, scale ){ + var xn = (x - translate[0]) / scale; + var yn = (y - translate[1]) / scale; + return { x: xn, y: yn }; + } + + + function computeDistanceToCenter( node, inverse ){ + var container = node; + var w = graph.options().width(); + var h = graph.options().height(); + var posXY = getScreenCoords(node.x, node.y, graphTranslation, zoomFactor); + + var highlightOfInv = false; + + if ( inverse && inverse === true ) { + highlightOfInv = true; + posXY = getScreenCoords(node.x, node.y + 20, graphTranslation, zoomFactor); + } + var x = posXY.x; + var y = posXY.y; + var nodeIsRect = false; + var halo; + var roundHalo; + var rectHalo; + var borderPoint_x = 0; + var borderPoint_y = 0; + var defaultRadius; + var offset = 15; + var radius; + + if ( node.property && highlightOfInv === true ) { + if ( node.property().inverse() ) { + rectHalo = node.property().inverse().getHalos().select("rect"); + + } else { + if ( node.property().getHalos() ) + rectHalo = node.property().getHalos().select("rect"); + else { + node.property().drawHalo(); + rectHalo = node.property().getHalos().select("rect"); + } + } + rectHalo.classed("hidden", true); + if ( node.property().inverse() ) { + if ( node.property().inverse().getHalos() ) { + roundHalo = node.property().inverse().getHalos().select("circle"); + } + } else { + roundHalo = node.property().getHalos().select("circle"); + } + if ( roundHalo.node() === null ) { + radius = node.property().inverse().width() + 15; + + roundHalo = node.property().inverse().getHalos().append("circle") + .classed("searchResultB", true) + .classed("searchResultA", false) + .attr("r", radius + 15); + + } + halo = roundHalo; // swap the halo to be round + nodeIsRect = true; + container = node.property().inverse(); + } + + if ( node.id ) { + if ( !node.getHalos() ) return; // something went wrong before + halo = node.getHalos().select("rect"); + if ( halo.node() === null ) { + // this is a round node + nodeIsRect = false; + roundHalo = node.getHalos().select("circle"); + defaultRadius = node.actualRadius(); + roundHalo.attr("r", defaultRadius + offset); + halo = roundHalo; + } else { // this is a rect node + nodeIsRect = true; + rectHalo = node.getHalos().select("rect"); + rectHalo.classed("hidden", true); + roundHalo = node.getHalos().select("circle"); + if ( roundHalo.node() === null ) { + radius = node.width(); + roundHalo = node.getHalos().append("circle") + .classed("searchResultB", true) + .classed("searchResultA", false) + .attr("r", radius + offset); + } + halo = roundHalo; + } + } + if ( node.property && !inverse ) { + if ( !node.property().getHalos() ) return; // something went wrong before + rectHalo = node.property().getHalos().select("rect"); + rectHalo.classed("hidden", true); + + roundHalo = node.property().getHalos().select("circle"); + if ( roundHalo.node() === null ) { + radius = node.property().width(); + + roundHalo = node.property().getHalos().append("circle") + .classed("searchResultB", true) + .classed("searchResultA", false) + .attr("r", radius + 15); + + } + halo = roundHalo; // swap the halo to be round + nodeIsRect = true; + container = node.property(); + } + + if ( x < 0 || x > w || y < 0 || y > h ) { + // node outside viewport; + // check for quadrant and get the correct boarder point (intersection with viewport) + if ( x < 0 && y < 0 ) { + borderPoint_x = 0; + borderPoint_y = 0; + } else if ( x > 0 && x < w && y < 0 ) { + borderPoint_x = x; + borderPoint_y = 0; + } else if ( x > w && y < 0 ) { + borderPoint_x = w; + borderPoint_y = 0; + } else if ( x > w && y > 0 && y < h ) { + borderPoint_x = w; + borderPoint_y = y; + } else if ( x > w && y > h ) { + borderPoint_x = w; + borderPoint_y = h; + } else if ( x > 0 && x < w && y > h ) { + borderPoint_x = x; + borderPoint_y = h; + } else if ( x < 0 && y > h ) { + borderPoint_x = 0; + borderPoint_y = h; + } else if ( x < 0 && y > 0 && y < h ) { + borderPoint_x = 0; + borderPoint_y = y; + } + // kill all pulses of nodes that are outside the viewport + container.getHalos().select("rect").classed("searchResultA", false); + container.getHalos().select("circle").classed("searchResultA", false); + container.getHalos().select("rect").classed("searchResultB", true); + container.getHalos().select("circle").classed("searchResultB", true); + halo.classed("hidden", false); + // compute in pixel coordinates length of difference vector + var borderRadius_x = borderPoint_x - x; + var borderRadius_y = borderPoint_y - y; + + var len = borderRadius_x * borderRadius_x + borderRadius_y * borderRadius_y; + len = Math.sqrt(len); + + var normedX = borderRadius_x / len; + var normedY = borderRadius_y / len; + + len = len + 20; // add 20 px; + + // re-normalized vector + var newVectorX = normedX * len + x; + var newVectorY = normedY * len + y; + // compute world coordinates of this point + var wX = (newVectorX - graphTranslation[0]) / zoomFactor; + var wY = (newVectorY - graphTranslation[1]) / zoomFactor; + + // compute distance in world coordinates + var dx = wX - node.x; + var dy = wY - node.y; + if ( highlightOfInv === true ) + dy = wY - node.y - 20; + + if ( highlightOfInv === false && node.property && node.property().inverse() ) + dy = wY - node.y + 20; + + var newRadius = Math.sqrt(dx * dx + dy * dy); + halo = container.getHalos().select("circle"); + // sanity checks and setting new halo radius + if ( !nodeIsRect ) { + defaultRadius = node.actualRadius() + offset; + if ( newRadius < defaultRadius ) { + newRadius = defaultRadius; + } + halo.attr("r", newRadius); + } else { + defaultRadius = 0.5 * container.width(); + if ( newRadius < defaultRadius ) + newRadius = defaultRadius; + halo.attr("r", newRadius); + } + } else { // node is in viewport , render original; + // reset the halo to original radius + defaultRadius = node.actualRadius() + 15; + if ( !nodeIsRect ) { + halo.attr("r", defaultRadius); + } else { // this is rectangular node render as such + halo = container.getHalos().select("rect"); + halo.classed("hidden", false); + //halo.classed("searchResultB", true); + //halo.classed("searchResultA", false); + var aCircHalo = container.getHalos().select("circle"); + aCircHalo.classed("hidden", true); + + container.getHalos().select("rect").classed("hidden", false); + container.getHalos().select("circle").classed("hidden", true); + } + } + } + + function transform( p, cx, cy ){ + // one iteration step for the locate target animation + zoomFactor = graph.options().height() / p[2]; + graphTranslation = [(cx - p[0] * zoomFactor), (cy - p[1] * zoomFactor)]; + updateHaloRadius(); + // update the values in case the user wants to break the animation + zoom.translate(graphTranslation); + zoom.scale(zoomFactor); + graph.options().zoomSlider().updateZoomSliderValue(zoomFactor); + return "translate(" + graphTranslation[0] + "," + graphTranslation[1] + ")scale(" + zoomFactor + ")"; + } + + graph.zoomToElementInGraph = function ( element ){ + targetLocationZoom(element); + }; + graph.updateHaloRadius = function ( element ){ + computeDistanceToCenter(element); + }; + + function targetLocationZoom( target ){ + // store the original information + var cx = 0.5 * graph.options().width(); + var cy = 0.5 * graph.options().height(); + var cp = getWorldPosFromScreen(cx, cy, graphTranslation, zoomFactor); + var sP = [cp.x, cp.y, graph.options().height() / zoomFactor]; + + var zoomLevel = Math.max(defaultZoom + 0.5 * defaultZoom, defaultTargetZoom); + var eP = [target.x, target.y, graph.options().height() / zoomLevel]; + var pos_intp = d3.interpolateZoom(sP, eP); + + var lenAnimation = pos_intp.duration; + if ( lenAnimation > 2500 ) { + lenAnimation = 2500; + } + + graphContainer.attr("transform", transform(sP, cx, cy)) + .transition() + .duration(lenAnimation) + .attrTween("transform", function (){ + return function ( t ){ + return transform(pos_intp(t), cx, cy); + }; + }) + .each("end", function (){ + graphContainer.attr("transform", "translate(" + graphTranslation + ")scale(" + zoomFactor + ")"); + zoom.translate(graphTranslation); + zoom.scale(zoomFactor); + updateHaloRadius(); + }); + } + + function getWorldPosFromScreen( x, y, translate, scale ){ + var temp = scale[0], xn, yn; + if ( temp ) { + xn = (x - translate[0]) / temp; + yn = (y - translate[1]) / temp; + } else { + xn = (x - translate[0]) / scale; + yn = (y - translate[1]) / scale; + } + return { x: xn, y: yn }; + } + + graph.locateSearchResult = function (){ + if ( pulseNodeIds && pulseNodeIds.length > 0 ) { + // move the center of the viewport to this location + if ( transformAnimation === true ) return; // << prevents incrementing the location id if we are in an animation + var node = force.nodes()[pulseNodeIds[locationId]]; + locationId++; + locationId = locationId % pulseNodeIds.length; + if ( node.id ) node.foreground(); + if ( node.property ) node.property().foreground(); + + targetLocationZoom(node); + } + }; + + graph.resetSearchHighlight = function (){ + // get all nodes (handle also already filtered nodes ) + pulseNodeIds = []; + nodeArrayForPulse = []; + // clear from stored nodes + var nodes = unfilteredData.nodes; + var props = unfilteredData.properties; + var j; + for ( j = 0; j < nodes.length; j++ ) { + var node = nodes[j]; + if ( node.removeHalo ) + node.removeHalo(); + } + for ( j = 0; j < props.length; j++ ) { + var prop = props[j]; + if ( prop.removeHalo ) + prop.removeHalo(); + } + }; + + graph.updatePulseIds = function ( nodeIdArray ){ + pulseNodeIds = []; + for ( var i = 0; i < nodeIdArray.length; i++ ) { + var selectedId = nodeIdArray[i]; + var forceId = nodeMap[selectedId]; + if ( forceId !== undefined ) { + var le_node = force.nodes()[forceId]; + if ( le_node.id ) { + if ( pulseNodeIds.indexOf(forceId) === -1 ) { + pulseNodeIds.push(forceId); + } + } + if ( le_node.property ) { + if ( pulseNodeIds.indexOf(forceId) === -1 ) { + pulseNodeIds.push(forceId); + } + } + } + } + locationId = 0; + if ( pulseNodeIds.length > 0 ) { + d3.select("#locateSearchResult").classed("highlighted", true); + d3.select("#locateSearchResult").node().title = "Locate search term"; + } + else { + d3.select("#locateSearchResult").classed("highlighted", false); + d3.select("#locateSearchResult").node().title = "Nothing to locate"; + } + + }; + + graph.highLightNodes = function ( nodeIdArray ){ + if ( nodeIdArray.length === 0 ) { + return; // nothing to highlight + } + pulseNodeIds = []; + nodeArrayForPulse = nodeIdArray; + var missedIds = []; + + // identify the force id to highlight + for ( var i = 0; i < nodeIdArray.length; i++ ) { + var selectedId = nodeIdArray[i]; + var forceId = nodeMap[selectedId]; + if ( forceId !== undefined ) { + var le_node = force.nodes()[forceId]; + if ( le_node.id ) { + if ( pulseNodeIds.indexOf(forceId) === -1 ) { + pulseNodeIds.push(forceId); + le_node.foreground(); + le_node.drawHalo(); + } + } + if ( le_node.property ) { + if ( pulseNodeIds.indexOf(forceId) === -1 ) { + pulseNodeIds.push(forceId); + le_node.property().foreground(); + le_node.property().drawHalo(); + } + } + } + else { + missedIds.push(selectedId); + } + } + + if ( missedIds.length === nodeIdArray.length ) { + + } + // store the highlight on the missed nodes; + var s_nodes = unfilteredData.nodes; + var s_props = unfilteredData.properties; + for ( i = 0; i < missedIds.length; i++ ) { + var missedId = missedIds[i]; + // search for this in the nodes; + for ( var n = 0; n < s_nodes.length; n++ ) { + var nodeId = s_nodes[n].id(); + if ( nodeId === missedId ) { + s_nodes[n].drawHalo(); + } + } + for ( var p = 0; p < s_props.length; p++ ) { + var propId = s_props[p].id(); + if ( propId === missedId ) { + s_props[p].drawHalo(); + } + } + } + if ( missedIds.length === nodeIdArray.length ) { + d3.select("#locateSearchResult").classed("highlighted", false); + } + else { + d3.select("#locateSearchResult").classed("highlighted", true); + } + locationId = 0; + updateHaloRadius(); + }; + + graph.hideHalos = function (){ + var haloElements = d3.selectAll(".searchResultA,.searchResultB"); + haloElements.classed("hidden", true); + return haloElements; + }; + + function nodeInViewport( node, property ){ + + var w = graph.options().width(); + var h = graph.options().height(); + var posXY = getScreenCoords(node.x, node.y, graphTranslation, zoomFactor); + var x = posXY.x; + var y = posXY.y; + + var retVal = !(x < 0 || x > w || y < 0 || y > h); + return retVal; + } + + graph.getBoundingBoxForTex = function (){ + var halos = graph.hideHalos(); + var bbox = graphContainer.node().getBoundingClientRect(); + halos.classed("hidden", false); + var w = graph.options().width(); + var h = graph.options().height(); + + // get the graph coordinates + var topLeft = getWorldPosFromScreen(0, 0, graphTranslation, zoomFactor); + var botRight = getWorldPosFromScreen(w, h, graphTranslation, zoomFactor); + + + var t_topLeft = getWorldPosFromScreen(bbox.left, bbox.top, graphTranslation, zoomFactor); + var t_botRight = getWorldPosFromScreen(bbox.right, bbox.bottom, graphTranslation, zoomFactor); + + // tighten up the bounding box; + + var tX = Math.max(t_topLeft.x, topLeft.x); + var tY = Math.max(t_topLeft.y, topLeft.y); + + var bX = Math.min(t_botRight.x, botRight.x); + var bY = Math.min(t_botRight.y, botRight.y); + + + // tighten further; + var allForceNodes = force.nodes(); + var numNodes = allForceNodes.length; + var visibleNodes = []; + var bbx; + + + var contentBBox = { tx: 1000000000000, ty: 1000000000000, bx: -1000000000000, by: -1000000000000 }; + + for ( var i = 0; i < numNodes; i++ ) { + var node = allForceNodes[i]; + if ( node ) { + if ( node.property ) { + if ( nodeInViewport(node, true) ) { + if ( node.property().labelElement() === undefined ) continue; + bbx = node.property().labelElement().node().getBoundingClientRect(); + if ( bbx ) { + contentBBox.tx = Math.min(contentBBox.tx, bbx.left); + contentBBox.bx = Math.max(contentBBox.bx, bbx.right); + contentBBox.ty = Math.min(contentBBox.ty, bbx.top); + contentBBox.by = Math.max(contentBBox.by, bbx.bottom); + } + } + } else { + if ( nodeInViewport(node, false) ) { + bbx = node.nodeElement().node().getBoundingClientRect(); + if ( bbx ) { + contentBBox.tx = Math.min(contentBBox.tx, bbx.left); + contentBBox.bx = Math.max(contentBBox.bx, bbx.right); + contentBBox.ty = Math.min(contentBBox.ty, bbx.top); + contentBBox.by = Math.max(contentBBox.by, bbx.bottom); + } + } + } + } + } + + var tt_topLeft = getWorldPosFromScreen(contentBBox.tx, contentBBox.ty, graphTranslation, zoomFactor); + var tt_botRight = getWorldPosFromScreen(contentBBox.bx, contentBBox.by, graphTranslation, zoomFactor); + + tX = Math.max(tX, tt_topLeft.x); + tY = Math.max(tY, tt_topLeft.y); + + bX = Math.min(bX, tt_botRight.x); + bY = Math.min(bY, tt_botRight.y); + // y axis flip for tex + return [tX, -tY, bX, -bY]; + + }; + + var updateTargetElement = function (){ + var bbox = graphContainer.node().getBoundingClientRect(); + + + // get the graph coordinates + var bboxOffset = 50; // default radius of a node; + var topLeft = getWorldPosFromScreen(bbox.left, bbox.top, graphTranslation, zoomFactor); + var botRight = getWorldPosFromScreen(bbox.right, bbox.bottom, graphTranslation, zoomFactor); + + var w = graph.options().width(); + if ( graph.options().leftSidebar().isSidebarVisible() === true ) + w -= 200; + var h = graph.options().height(); + topLeft.x += bboxOffset; + topLeft.y -= bboxOffset; + botRight.x -= bboxOffset; + botRight.y += bboxOffset; + + var g_w = botRight.x - topLeft.x; + var g_h = botRight.y - topLeft.y; + + // endpoint position calculations + var posX = 0.5 * (topLeft.x + botRight.x); + var posY = 0.5 * (topLeft.y + botRight.y); + var cx = 0.5 * w, + cy = 0.5 * h; + + if ( graph.options().leftSidebar().isSidebarVisible() === true ) + cx += 200; + var cp = getWorldPosFromScreen(cx, cy, graphTranslation, zoomFactor); + + // zoom factor calculations and fail safes; + var newZoomFactor = 1.0; // fail save if graph and window are squares + //get the smaller one + var a = w / g_w; + var b = h / g_h; + if ( a < b ) newZoomFactor = a; + else newZoomFactor = b; + + + // fail saves + if ( newZoomFactor > zoom.scaleExtent()[1] ) { + newZoomFactor = zoom.scaleExtent()[1]; + } + if ( newZoomFactor < zoom.scaleExtent()[0] ) { + newZoomFactor = zoom.scaleExtent()[0]; + } + + // apply Zooming + var sP = [cp.x, cp.y, h / zoomFactor]; + var eP = [posX, posY, h / newZoomFactor]; + + + var pos_intp = d3.interpolateZoom(sP, eP); + return [pos_intp, cx, cy]; + + }; + + graph.forceRelocationEvent = function ( dynamic ){ + // we need to kill the halo to determine the bounding box; + var halos = graph.hideHalos(); + var bbox = graphContainer.node().getBoundingClientRect(); + halos.classed("hidden", false); + + // get the graph coordinates + var bboxOffset = 50; // default radius of a node; + var topLeft = getWorldPosFromScreen(bbox.left, bbox.top, graphTranslation, zoomFactor); + var botRight = getWorldPosFromScreen(bbox.right, bbox.bottom, graphTranslation, zoomFactor); + + var w = graph.options().width(); + if ( graph.options().leftSidebar().isSidebarVisible() === true ) + w -= 200; + var h = graph.options().height(); + topLeft.x += bboxOffset; + topLeft.y -= bboxOffset; + botRight.x -= bboxOffset; + botRight.y += bboxOffset; + + var g_w = botRight.x - topLeft.x; + var g_h = botRight.y - topLeft.y; + + // endpoint position calculations + var posX = 0.5 * (topLeft.x + botRight.x); + var posY = 0.5 * (topLeft.y + botRight.y); + var cx = 0.5 * w, + cy = 0.5 * h; + + if ( graph.options().leftSidebar().isSidebarVisible() === true ) + cx += 200; + var cp = getWorldPosFromScreen(cx, cy, graphTranslation, zoomFactor); + + // zoom factor calculations and fail safes; + var newZoomFactor = 1.0; // fail save if graph and window are squares + //get the smaller one + var a = w / g_w; + var b = h / g_h; + if ( a < b ) newZoomFactor = a; + else newZoomFactor = b; + + + // fail saves + if ( newZoomFactor > zoom.scaleExtent()[1] ) { + newZoomFactor = zoom.scaleExtent()[1]; + } + if ( newZoomFactor < zoom.scaleExtent()[0] ) { + newZoomFactor = zoom.scaleExtent()[0]; + } + + // apply Zooming + var sP = [cp.x, cp.y, h / zoomFactor]; + var eP = [posX, posY, h / newZoomFactor]; + + + var pos_intp = d3.interpolateZoom(sP, eP); + var lenAnimation = pos_intp.duration; + if ( lenAnimation > 2500 ) { + lenAnimation = 2500; + } + graphContainer.attr("transform", transform(sP, cx, cy)) + .transition() + .duration(lenAnimation) + .attrTween("transform", function (){ + return function ( t ){ + if ( dynamic ) { + var param = updateTargetElement(); + var nV = param[0](t); + return transform(nV, cx, cy); + } + return transform(pos_intp(t), cx, cy); + }; + }) + .each("end", function (){ + if ( dynamic ) { + return; + } + + graphContainer.attr("transform", "translate(" + graphTranslation + ")scale(" + zoomFactor + ")"); + zoom.translate(graphTranslation); + zoom.scale(zoomFactor); + graph.options().zoomSlider().updateZoomSliderValue(zoomFactor); + + + }); + }; + + + graph.isADraggerActive = function (){ + if ( classDragger.mouseButtonPressed === true || + domainDragger.mouseButtonPressed === true || + rangeDragger.mouseButtonPressed === true ) { + return true; + } + return false; + }; + + /** --------------------------------------------------------- **/ + /** -- VOWL EDITOR create/ edit /delete functions -- **/ + /** --------------------------------------------------------- **/ + + graph.changeNodeType = function ( element ){ + + var typeString = d3.select("#typeEditor").node().value; + + if ( graph.classesSanityCheck(element, typeString) === false ) { + // call reselection to restore previous type selection + graph.options().editSidebar().updateSelectionInformation(element); + return; + } + + var prototype = NodePrototypeMap.get(typeString.toLowerCase()); + var aNode = new prototype(graph); + + aNode.x = element.x; + aNode.y = element.y; + aNode.px = element.x; + aNode.py = element.y; + aNode.id(element.id()); + aNode.copyInformation(element); + + if ( typeString === "owl:Thing" ) { + aNode.label("Thing"); + } + else if ( elementTools.isDatatype(element) === false ) { + if ( element.backupLabel() !== undefined ) { + aNode.label(element.backupLabel()); + } else if ( aNode.backupLabel() !== undefined ) { + aNode.label(aNode.backupLabel()); + } else { + aNode.label("NewClass"); + } + } + + if ( typeString === "rdfs:Datatype" ) { + if ( aNode.dType() === "undefined" ) + aNode.label("undefined"); + else { + var identifier = aNode.dType().split(":")[1]; + aNode.label(identifier); + } + } + var i; + // updates the property domain and range + for ( i = 0; i < unfilteredData.properties.length; i++ ) { + if ( unfilteredData.properties[i].domain() === element ) { + // unfilteredData.properties[i].toString(); + unfilteredData.properties[i].domain(aNode); + } + if ( unfilteredData.properties[i].range() === element ) { + unfilteredData.properties[i].range(aNode); + // unfilteredData.properties[i].toString(); + } + } + + // update for fastUpdate: + for ( i = 0; i < properties.length; i++ ) { + if ( properties[i].domain() === element ) { + // unfilteredData.properties[i].toString(); + properties[i].domain(aNode); + } + if ( properties[i].range() === element ) { + properties[i].range(aNode); + // unfilteredData.properties[i].toString(); + } + } + + var remId = unfilteredData.nodes.indexOf(element); + if ( remId !== -1 ) + unfilteredData.nodes.splice(remId, 1); + remId = classNodes.indexOf(element); + if ( remId !== -1 ) + classNodes.splice(remId, 1); + // very important thing for selection!; + addNewNodeElement(aNode); + // handle focuser! + options.focuserModule().handle(aNode); + generateDictionary(unfilteredData); + graph.getUpdateDictionary(); + element = null; + }; + + + graph.changePropertyType = function ( element ){ + var typeString = d3.select("#typeEditor").node().value; + + // create warning + if ( graph.sanityCheckProperty(element.domain(), element.range(), typeString) === false ) return false; + + var propPrototype = PropertyPrototypeMap.get(typeString.toLowerCase()); + var aProp = new propPrototype(graph); + aProp.copyInformation(element); + aProp.id(element.id()); + + element.domain().removePropertyElement(element); + element.range().removePropertyElement(element); + aProp.domain(element.domain()); + aProp.range(element.range()); + + if ( element.backupLabel() !== undefined ) { + aProp.label(element.backupLabel()); + } else { + aProp.label("newObjectProperty"); + } + + if ( aProp.type() === "rdfs:subClassOf" ) { + aProp.iri("http://www.w3.org/2000/01/rdf-schema#subClassOf"); + } else { + if ( element.iri() === "http://www.w3.org/2000/01/rdf-schema#subClassOf" ) + aProp.iri(graph.options().getGeneralMetaObjectProperty('iri') + aProp.id()); + + } + + + if ( graph.propertyCheckExistenceChecker(aProp, element.domain(), element.range()) === false ) { + graph.options().editSidebar().updateSelectionInformation(element); + return; + } + // // TODO: change its base IRI to proper value + // var ontoIRI="http://someTest.de"; + // aProp.baseIri(ontoIRI); + // aProp.iri(aProp.baseIri()+aProp.id()); + + + // add this to the data; + unfilteredData.properties.push(aProp); + if ( properties.indexOf(aProp) === -1 ) + properties.push(aProp); + var remId = unfilteredData.properties.indexOf(element); + if ( remId !== -1 ) + unfilteredData.properties.splice(remId, 1); + if ( properties.indexOf(aProp) === -1 ) + properties.push(aProp); + remId = properties.indexOf(element); + if ( remId !== -1 ) + properties.splice(remId, 1); + graph.fastUpdate(); + aProp.domain().addProperty(aProp); + aProp.range().addProperty(aProp); + if ( element.labelObject() && aProp.labelObject() ) { + aProp.labelObject().x = element.labelObject().x; + aProp.labelObject().px = element.labelObject().px; + aProp.labelObject().y = element.labelObject().y; + aProp.labelObject().py = element.labelObject().py; + } + + options.focuserModule().handle(aProp); + element = null; + }; + + graph.removeEditElements = function (){ + // just added to be called form outside + removeEditElements(); + }; + + function removeEditElements(){ + rangeDragger.hideDragger(true); + domainDragger.hideDragger(true); + shadowClone.hideClone(true); + + classDragger.hideDragger(true); + if ( addDataPropertyGroupElement ) + addDataPropertyGroupElement.classed("hidden", true); + if ( deleteGroupElement ) + deleteGroupElement.classed("hidden", true); + + + if ( hoveredNodeElement ) { + if ( hoveredNodeElement.pinned() === false ) { + hoveredNodeElement.locked(graph.paused()); + hoveredNodeElement.frozen(graph.paused()); + } + } + if ( hoveredPropertyElement ) { + if ( hoveredPropertyElement.pinned() === false ) { + hoveredPropertyElement.locked(graph.paused()); + hoveredPropertyElement.frozen(graph.paused()); + } + } + + + } + + graph.editorMode = function ( val ){ + var create_entry = d3.select("#empty"); + var create_container = d3.select("#emptyContainer"); + + var modeOfOpString = d3.select("#modeOfOperationString").node(); + if ( !arguments.length ) { + create_entry.node().checked = editMode; + if ( editMode === false ) { + create_container.node().title = "Enable editing in modes menu to create a new ontology"; + create_entry.node().title = "Enable editing in modes menu to create a new ontology"; + create_entry.style("pointer-events", "none"); + } else { + create_container.node().title = "Creates a new empty ontology"; + create_entry.node().title = "Creates a new empty ontology"; + d3.select("#useAccuracyHelper").style("color", "#2980b9"); + d3.select("#useAccuracyHelper").style("pointer-events", "auto"); + create_entry.node().disabled = false; + create_entry.style("pointer-events", "auto"); + } + + return editMode; + } + graph.options().setEditorModeForDefaultObject(val); + + // if (seenEditorHint===false && val===true){ + // seenEditorHint=true; + // graph.options().warningModule().showEditorHint(); + // } + editMode = val; + + if ( create_entry ) { + create_entry.classed("disabled", !editMode); + if ( !editMode ) { + create_container.node().title = "Enable editing in modes menu to create a new ontology"; + create_entry.node().title = "Enable editing in modes menu to create a new ontology"; + create_entry.node().disabled = true; + d3.select("#useAccuracyHelper").style("color", "#979797"); + d3.select("#useAccuracyHelper").style("pointer-events", "none"); + create_entry.style("pointer-events", "none"); + } else { + create_container.node().title = "Creates a new empty ontology"; + create_entry.node().title = "Creates a new empty ontology"; + d3.select("#useAccuracyHelper").style("color", "#2980b9"); + d3.select("#useAccuracyHelper").style("pointer-events", "auto"); + create_entry.style("pointer-events", "auto"); + } + } + + // adjust compact notation + // selector = compactNotationOption; + // box =ModuleCheckbox + var compactNotationContainer = d3.select("#compactnotationModuleCheckbox"); + if ( compactNotationContainer ) { + compactNotationContainer.classed("disabled", !editMode); + if ( !editMode ) { + compactNotationContainer.node().title = ""; + compactNotationContainer.node().disabled = false; + compactNotationContainer.style("pointer-events", "auto"); + d3.select("#compactNotationOption").style("color", ""); + d3.select("#compactNotationOption").node().title = ""; + options.literalFilter().enabled(true); + graph.update(); + } else { + // if editor Mode + //1) uncheck the element + d3.select("#compactNotationOption").node().title = "Compact notation can only be used in view mode"; + compactNotationContainer.node().disabled = true; + compactNotationContainer.node().checked = false; + options.compactNotationModule().enabled(false); + options.literalFilter().enabled(false); + graph.executeCompactNotationModule(); + graph.executeEmptyLiteralFilter(); + graph.lazyRefresh(); + compactNotationContainer.style("pointer-events", "none"); + d3.select("#compactNotationOption").style("color", "#979797"); + } + } + + if ( modeOfOpString ) { + if ( touchDevice === true ) { + modeOfOpString.innerHTML = "touch able device detected"; + } else { + modeOfOpString.innerHTML = "point & click device detected"; + } + } + var svgGraph = d3.selectAll(".vowlGraph"); + + if ( editMode === true ) { + options.leftSidebar().showSidebar(options.leftSidebar().getSidebarVisibility(), true); + options.leftSidebar().hideCollapseButton(false); + graph.options().editSidebar().updatePrefixUi(); + graph.options().editSidebar().updateElementWidth(); + svgGraph.on("dblclick.zoom", graph.modified_dblClickFunction); + + } else { + svgGraph.on("dblclick.zoom", originalD3_dblClickFunction); + options.leftSidebar().showSidebar(0); + options.leftSidebar().hideCollapseButton(true); + // hide hovered edit elements + removeEditElements(); + } + options.sidebar().updateShowedInformation(); + options.editSidebar().updateElementWidth(); + + }; + + function createLowerCasePrototypeMap( prototypeMap ){ + return d3.map(prototypeMap.values(), function ( Prototype ){ + return new Prototype().type().toLowerCase(); + }); + } + + function createNewNodeAtPosition( pos ){ + var aNode, prototype; + var forceUpdate = true; + // create a node of that id; + + var typeToCreate = d3.select("#defaultClass").node().title; + prototype = NodePrototypeMap.get(typeToCreate.toLowerCase()); + aNode = new prototype(graph); + var autoEditElement = false; + if ( typeToCreate === "owl:Thing" ) { + aNode.label("Thing"); + } + else { + aNode.label("NewClass"); + autoEditElement = true; + } + aNode.x = pos.x; + aNode.y = pos.y; + aNode.px = aNode.x; + aNode.py = aNode.y; + aNode.id("Class" + eN++); + // aNode.paused(true); + + aNode.baseIri(d3.select("#iriEditor").node().value); + aNode.iri(aNode.baseIri() + aNode.id()); + addNewNodeElement(aNode, forceUpdate); + options.focuserModule().handle(aNode, true); + aNode.frozen(graph.paused()); + aNode.locked(graph.paused()); + aNode.enableEditing(autoEditElement); + } + + + function addNewNodeElement( element ){ + unfilteredData.nodes.push(element); + if ( classNodes.indexOf(element) === -1 ) + classNodes.push(element); + + generateDictionary(unfilteredData); + graph.getUpdateDictionary(); + graph.fastUpdate(); + } + + graph.getTargetNode = function ( position ){ + var dx = position[0]; + var dy = position[1]; + var tN = null; + var minDist = 1000000000000; + // This is a bit OVERKILL for the computation of one node >> TODO: KD-TREE SEARCH + unfilteredData.nodes.forEach(function ( el ){ + var cDist = Math.sqrt((el.x - dx) * (el.x - dx) + (el.y - dy) * (el.y - dy)); + if ( cDist < minDist ) { + minDist = cDist; + tN = el; + } + }); + if ( hoveredNodeElement ) { + var offsetDist = hoveredNodeElement.actualRadius() + 30; + if ( minDist > offsetDist ) return null; + if ( tN.renderType() === "rect" ) return null; + if ( tN === hoveredNodeElement && minDist <= hoveredNodeElement.actualRadius() ) { + return tN; + } else if ( tN === hoveredNodeElement && minDist > hoveredNodeElement.actualRadius() ) { + return null; + } + return tN; + } + else { + + if ( minDist > (tN.actualRadius() + 30) ) + return null; + else return tN; + + } + }; + + graph.genericPropertySanityCheck = function ( domain, range, typeString, header, action ){ + if ( domain === range && typeString === "rdfs:subClassOf" ) { + graph.options().warningModule().showWarning(header, + "rdfs:subClassOf can not be created as loops (domain == range)", + action, 1, false); + return false; + } + if ( domain === range && typeString === "owl:disjointWith" ) { + graph.options().warningModule().showWarning(header, + "owl:disjointWith can not be created as loops (domain == range)", + action, 1, false); + return false; + } + // allProps[i].type()==="owl:allValuesFrom" || + // allProps[i].type()==="owl:someValuesFrom" + if ( domain.type() === "owl:Thing" && typeString === "owl:allValuesFrom" ) { + graph.options().warningModule().showWarning(header, + "owl:allValuesFrom can not originate from owl:Thing", + action, 1, false); + return false; + } + if ( domain.type() === "owl:Thing" && typeString === "owl:someValuesFrom" ) { + graph.options().warningModule().showWarning(header, + "owl:someValuesFrom can not originate from owl:Thing", + action, 1, false); + return false; + } + + if ( range.type() === "owl:Thing" && typeString === "owl:allValuesFrom" ) { + graph.options().warningModule().showWarning(header, + "owl:allValuesFrom can not be connected to owl:Thing", + action, 1, false); + return false; + } + if ( range.type() === "owl:Thing" && typeString === "owl:someValuesFrom" ) { + graph.options().warningModule().showWarning(header, + "owl:someValuesFrom can not be connected to owl:Thing", + action, 1, false); + return false; + } + + return true; // we can Change the domain or range + }; + + graph.checkIfIriClassAlreadyExist = function ( url ){ + // search for a class node with this url + var allNodes = unfilteredData.nodes; + for ( var i = 0; i < allNodes.length; i++ ) { + if ( elementTools.isDatatype(allNodes[i]) === true || allNodes[i].type() === "owl:Thing" ) + continue; + + // now we are a real class; + //get class IRI + var classIRI = allNodes[i].iri(); + + // this gives me the node for halo + if ( url === classIRI ) { + return allNodes[i]; + } + } + return false; + }; + + graph.classesSanityCheck = function ( classElement, targetType ){ + // this is added due to someValuesFrom properties + // we should not be able to change a classElement to a owl:Thing + // when it has a property attached to it that uses these restrictions + // + + if ( targetType === "owl:Class" ) return true; + + else { + // collect all properties which have that one as a domain or range + var allProps = unfilteredData.properties; + for ( var i = 0; i < allProps.length; i++ ) { + if ( allProps[i].range() === classElement || allProps[i].domain() === classElement ) { + // check for the type of that property + if ( allProps[i].type() === "owl:someValuesFrom" ) { + graph.options().warningModule().showWarning("Can not change class type", + "The element has a property that is of type owl:someValuesFrom", + "Element type not changed!", 1, true); + return false; + } + if ( allProps[i].type() === "owl:allValuesFrom" ) { + graph.options().warningModule().showWarning("Can not change class type", + "The element has a property that is of type owl:allValuesFrom", + "Element type not changed!", 1, true); + return false; + } + } + } + + + } + return true; + }; + + graph.propertyCheckExistenceChecker = function ( property, domain, range ){ + var allProps = unfilteredData.properties; + var i; + if ( property.type() === "rdfs:subClassOf" || property.type() === "owl:disjointWith" ) { + + for ( i = 0; i < allProps.length; i++ ) { + if ( allProps[i] === property ) continue; + if ( allProps[i].domain() === domain && allProps[i].range() === range && allProps[i].type() === property.type() ) { + graph.options().warningModule().showWarning("Warning", + "This triple already exist!", + "Element not created!", 1, false); + return false; + } + if ( allProps[i].domain() === range && allProps[i].range() === domain && allProps[i].type() === property.type() ) { + graph.options().warningModule().showWarning("Warning", + "Inverse assignment already exist! ", + "Element not created!", 1, false); + return false; + } + } + return true; + } + return true; + }; + + // graph.checkForTripleDuplicate=function(property){ + // var domain=property.domain(); + // var range=property.range(); + // console.log("checking for duplicates"); + // var b1= domain.isPropertyAssignedToThisElement(property); + // var b2= range.isPropertyAssignedToThisElement(property); + // + // console.log("test domain results in "+ b1); + // console.log("test range results in "+ b1); + // + // if (b1 && b2 ){ + // graph.options().warningModule().showWarning("Warning", + // "This triple already exist!", + // "Element not created!",1,false); + // return false; + // } + // return true; + // }; + + graph.sanityCheckProperty = function ( domain, range, typeString ){ + + // check for duplicate triple in the element; + + + if ( typeString === "owl:objectProperty" && graph.options().objectPropertyFilter().enabled() === true ) { + graph.options().warningModule().showWarning("Warning", + "Object properties are filtered out in the visualization!", + "Element not created!", 1, false); + return false; + } + + if ( typeString === "owl:disjointWith" && graph.options().disjointPropertyFilter().enabled() === true ) { + graph.options().warningModule().showWarning("Warning", + "owl:disjointWith properties are filtered out in the visualization!", + "Element not created!", 1, false); + return false; + } + + + if ( domain === range && typeString === "rdfs:subClassOf" ) { + graph.options().warningModule().showWarning("Warning", + "rdfs:subClassOf can not be created as loops (domain == range)", + "Element not created!", 1, false); + return false; + } + if ( domain === range && typeString === "owl:disjointWith" ) { + graph.options().warningModule().showWarning("Warning", + "owl:disjointWith can not be created as loops (domain == range)", + "Element not created!", 1, false); + return false; + } + + if ( domain.type() === "owl:Thing" && typeString === "owl:someValuesFrom" ) { + graph.options().warningModule().showWarning("Warning", + "owl:someValuesFrom can not originate from owl:Thing", + "Element not created!", 1, false); + return false; + } + if ( domain.type() === "owl:Thing" && typeString === "owl:allValuesFrom" ) { + graph.options().warningModule().showWarning("Warning", + "owl:allValuesFrom can not originate from owl:Thing", + "Element not created!", 1, false); + return false; + } + + if ( range.type() === "owl:Thing" && typeString === "owl:allValuesFrom" ) { + graph.options().warningModule().showWarning("Warning", + "owl:allValuesFrom can not be connected to owl:Thing", + "Element not created!", 1, false); + return false; + } + if ( range.type() === "owl:Thing" && typeString === "owl:someValuesFrom" ) { + graph.options().warningModule().showWarning("Warning", + "owl:someValuesFrom can not be connected to owl:Thing", + "Element not created!", 1, false); + return false; + } + return true; // we can create a property + }; + + function createNewObjectProperty( domain, range, draggerEndposition ){ + // check type of the property that we want to create; + + var defaultPropertyName = d3.select("#defaultProperty").node().title; + + // check if we are allow to create that property + if ( graph.sanityCheckProperty(domain, range, defaultPropertyName) === false ) return false; + + + var propPrototype = PropertyPrototypeMap.get(defaultPropertyName.toLowerCase()); + var aProp = new propPrototype(graph); + aProp.id("objectProperty" + eP++); + aProp.domain(domain); + aProp.range(range); + aProp.label("newObjectProperty"); + aProp.baseIri(d3.select("#iriEditor").node().value); + aProp.iri(aProp.baseIri() + aProp.id()); + + // check for duplicate; + if ( graph.propertyCheckExistenceChecker(aProp, domain, range) === false ) { + // delete aProp; + // hope for garbage collection here -.- + return false; + } + + var autoEditElement = false; + + if ( defaultPropertyName === "owl:objectProperty" ) { + autoEditElement = true; + } + var pX = 0.49 * (domain.x + range.x); + var pY = 0.49 * (domain.y + range.y); + + if ( domain === range ) { + // we use the dragger endposition to determine an angle to put the loop there; + var dirD_x = draggerEndposition[0] - domain.x; + var dirD_y = draggerEndposition[1] - domain.y; + + // normalize; + var len = Math.sqrt(dirD_x * dirD_x + dirD_y * dirD_y); + // it should be very hard to set the position on the same sport but why not handling this + var nx = dirD_x / len; + var ny = dirD_y / len; + // is Nan in javascript like in c len==len returns false when it is not a number? + if ( isNaN(len) ) { + nx = 0; + ny = -1; + } + + // get domain actual raidus + var offset = 2 * domain.actualRadius() + 50; + pX = domain.x + offset * nx; + pY = domain.y + offset * ny; + } + + // add this property to domain and range; + domain.addProperty(aProp); + range.addProperty(aProp); + + + // add this to the data; + unfilteredData.properties.push(aProp); + if ( properties.indexOf(aProp) === -1 ) + properties.push(aProp); + graph.fastUpdate(); + aProp.labelObject().x = pX; + aProp.labelObject().px = pX; + aProp.labelObject().y = pY; + aProp.labelObject().py = pY; + + aProp.frozen(graph.paused()); + aProp.locked(graph.paused()); + domain.frozen(graph.paused()); + domain.locked(graph.paused()); + range.frozen(graph.paused()); + range.locked(graph.paused()); + + + generateDictionary(unfilteredData); + graph.getUpdateDictionary(); + + options.focuserModule().handle(aProp); + graph.activateHoverElementsForProperties(true, aProp, false, touchDevice); + aProp.labelObject().increasedLoopAngle = true; + aProp.enableEditing(autoEditElement); + } + + graph.createDataTypeProperty = function ( node ){ + // random postion issues; + clearTimeout(nodeFreezer); + // tells user when element is filtered out + if ( graph.options().datatypeFilter().enabled() === true ) { + graph.options().warningModule().showWarning("Warning", + "Datatype properties are filtered out in the visualization!", + "Element not created!", 1, false); + return; + } + + + var aNode, prototype; + + // create a default datatype Node >> HERE LITERAL; + var defaultDatatypeName = d3.select("#defaultDatatype").node().title; + if ( defaultDatatypeName === "rdfs:Literal" ) { + prototype = NodePrototypeMap.get("rdfs:literal"); + aNode = new prototype(graph); + aNode.label("Literal"); + aNode.iri("http://www.w3.org/2000/01/rdf-schema#Literal"); + aNode.baseIri("http://www.w3.org/2000/01/rdf-schema#"); + } else { + prototype = NodePrototypeMap.get("rdfs:datatype"); + aNode = new prototype(graph); + var identifier = ""; + if ( defaultDatatypeName === "undefined" ) { + identifier = "undefined"; + + aNode.label(identifier); + // TODO : HANDLER FOR UNDEFINED DATATYPES!!<<<>>>>>>>>>>>.. + aNode.iri("http://www.undefinedDatatype.org/#" + identifier); + aNode.baseIri("http://www.undefinedDatatype.org/#"); + aNode.dType(defaultDatatypeName); + } else { + identifier = defaultDatatypeName.split(":")[1]; + aNode.label(identifier); + aNode.dType(defaultDatatypeName); + aNode.iri("http://www.w3.org/2001/XMLSchema#" + identifier); + aNode.baseIri("http://www.w3.org/2001/XMLSchema#"); + } + } + + + var nX = node.x - node.actualRadius() - 100; + var nY = node.y + node.actualRadius() + 100; + + aNode.x = nX; + aNode.y = nY; + aNode.px = aNode.x; + aNode.py = aNode.y; + aNode.id("NodeId" + eN++); + // add this property to the nodes; + unfilteredData.nodes.push(aNode); + if ( classNodes.indexOf(aNode) === -1 ) + classNodes.push(aNode); + + + // add also the datatype Property to it + var propPrototype = PropertyPrototypeMap.get("owl:datatypeproperty"); + var aProp = new propPrototype(graph); + aProp.id("datatypeProperty" + eP++); + + // create the connection + aProp.domain(node); + aProp.range(aNode); + aProp.label("newDatatypeProperty"); + + + // TODO: change its base IRI to proper value + var ontoIri = d3.select("#iriEditor").node().value; + aProp.baseIri(ontoIri); + aProp.iri(ontoIri + aProp.id()); + // add this to the data; + unfilteredData.properties.push(aProp); + if ( properties.indexOf(aProp) === -1 ) + properties.push(aProp); + graph.fastUpdate(); + generateDictionary(unfilteredData); + graph.getUpdateDictionary(); + + nodeFreezer = setTimeout(function (){ + if ( node && node.frozen() === true && node.pinned() === false && graph.paused() === false ) { + node.frozen(graph.paused()); + node.locked(graph.paused()); + } + }, 1000); + options.focuserModule().handle(undefined); + if ( node ) { + node.frozen(true); + node.locked(true); + } + }; + + graph.removeNodesViaResponse = function ( nodesToRemove, propsToRemove ){ + var i, remId; + // splice them; + for ( i = 0; i < propsToRemove.length; i++ ) { + remId = unfilteredData.properties.indexOf(propsToRemove[i]); + if ( remId !== -1 ) + unfilteredData.properties.splice(remId, 1); + remId = properties.indexOf(propsToRemove[i]); + if ( remId !== -1 ) + properties.splice(remId, 1); + propsToRemove[i] = null; + } + for ( i = 0; i < nodesToRemove.length; i++ ) { + remId = unfilteredData.nodes.indexOf(nodesToRemove[i]); + if ( remId !== -1 ) { + unfilteredData.nodes.splice(remId, 1); + } + remId = classNodes.indexOf(nodesToRemove[i]); + if ( remId !== -1 ) + classNodes.splice(remId, 1); + nodesToRemove[i] = null; + } + graph.fastUpdate(); + generateDictionary(unfilteredData); + graph.getUpdateDictionary(); + options.focuserModule().handle(undefined); + nodesToRemove = null; + propsToRemove = null; + + }; + + graph.removeNodeViaEditor = function ( node ){ + var propsToRemove = []; + var nodesToRemove = []; + var datatypes = 0; + + var remId; + + nodesToRemove.push(node); + for ( var i = 0; i < unfilteredData.properties.length; i++ ) { + if ( unfilteredData.properties[i].domain() === node || unfilteredData.properties[i].range() === node ) { + propsToRemove.push(unfilteredData.properties[i]); + if ( unfilteredData.properties[i].type().toLocaleLowerCase() === "owl:datatypeproperty" && + unfilteredData.properties[i].range() !== node ) { + nodesToRemove.push(unfilteredData.properties[i].range()); + datatypes++; + } + } + } + var removedItems = propsToRemove.length + nodesToRemove.length; + if ( removedItems > 2 ) { + var text = "You are about to delete 1 class and " + propsToRemove.length + " properties"; + if ( datatypes !== 0 ) { + text = "You are about to delete 1 class, " + datatypes + " datatypes and " + propsToRemove.length + " properties"; + } + + + graph.options().warningModule().responseWarning( + "Removing elements", + text, + "Awaiting response!", graph.removeNodesViaResponse, [nodesToRemove, propsToRemove], false); + + + // + // if (confirm("Remove :\n"+propsToRemove.length + " properties\n"+nodesToRemove.length+" classes? ")===false){ + // return; + // }else{ + // // todo : store for undo delete button ; + // } + } else { + // splice them; + for ( i = 0; i < propsToRemove.length; i++ ) { + remId = unfilteredData.properties.indexOf(propsToRemove[i]); + if ( remId !== -1 ) + unfilteredData.properties.splice(remId, 1); + remId = properties.indexOf(propsToRemove[i]); + if ( remId !== -1 ) + properties.splice(remId, 1); + propsToRemove[i] = null; + } + for ( i = 0; i < nodesToRemove.length; i++ ) { + remId = unfilteredData.nodes.indexOf(nodesToRemove[i]); + if ( remId !== -1 ) + unfilteredData.nodes.splice(remId, 1); + remId = classNodes.indexOf(nodesToRemove[i]); + if ( remId !== -1 ) + classNodes.splice(remId, 1); + nodesToRemove[i] = null; + } + graph.fastUpdate(); + generateDictionary(unfilteredData); + graph.getUpdateDictionary(); + options.focuserModule().handle(undefined); + nodesToRemove = null; + propsToRemove = null; + } + }; + + graph.removePropertyViaEditor = function ( property ){ + property.domain().removePropertyElement(property); + property.range().removePropertyElement(property); + var remId; + + if ( property.type().toLocaleLowerCase() === "owl:datatypeproperty" ) { + var datatype = property.range(); + remId = unfilteredData.nodes.indexOf(property.range()); + if ( remId !== -1 ) + unfilteredData.nodes.splice(remId, 1); + remId = classNodes.indexOf(property.range()); + if ( remId !== -1 ) + classNodes.splice(remId, 1); + datatype = null; + } + remId = unfilteredData.properties.indexOf(property); + if ( remId !== -1 ) + unfilteredData.properties.splice(remId, 1); + remId = properties.indexOf(property); + if ( remId !== -1 ) + properties.splice(remId, 1); + if ( property.inverse() ) { + // so we have inverse + property.inverse().inverse(0); + + } + + + hoveredPropertyElement = undefined; + graph.fastUpdate(); + generateDictionary(unfilteredData); + graph.getUpdateDictionary(); + options.focuserModule().handle(undefined); + property = null; + }; + + graph.executeColorExternalsModule = function (){ + options.colorExternalsModule().filter(unfilteredData.nodes, unfilteredData.properties); + }; + + graph.executeCompactNotationModule = function (){ + if ( unfilteredData ) { + options.compactNotationModule().filter(unfilteredData.nodes, unfilteredData.properties); + } + + }; + graph.executeEmptyLiteralFilter = function (){ + + if ( unfilteredData && unfilteredData.nodes.length > 1 ) { + options.literalFilter().filter(unfilteredData.nodes, unfilteredData.properties); + unfilteredData.nodes = options.literalFilter().filteredNodes(); + unfilteredData.properties = options.literalFilter().filteredProperties(); + } + + }; + + + /** --------------------------------------------------------- **/ + /** -- animation functions for the nodes -- **/ + /** --------------------------------------------------------- **/ + + graph.animateDynamicLabelWidth = function (){ + var wantedWidth = options.dynamicLabelWidth(); + var i; + for ( i = 0; i < classNodes.length; i++ ) { + var nodeElement = classNodes[i]; + if ( elementTools.isDatatype(nodeElement) ) { + nodeElement.animateDynamicLabelWidth(wantedWidth); + } + } + for ( i = 0; i < properties.length; i++ ) { + properties[i].animateDynamicLabelWidth(wantedWidth); + } + }; + + + /** --------------------------------------------------------- **/ + /** -- Touch behaviour functions -- **/ + /** --------------------------------------------------------- **/ + + graph.setTouchDevice = function ( val ){ + touchDevice = val; + }; + + graph.isTouchDevice = function (){ + return touchDevice; + }; + + graph.modified_dblClickFunction = function (){ + + d3.event.stopPropagation(); + d3.event.preventDefault(); + // get position where we want to add the node; + var grPos = getClickedScreenCoords(d3.event.clientX, d3.event.clientY, graph.translation(), graph.scaleFactor()); + createNewNodeAtPosition(grPos); + }; + + function doubletap(){ + var touch_time = d3.event.timeStamp; + var numTouchers = 1; + if ( d3.event && d3.event.touches && d3.event.touches.length ) + numTouchers = d3.event.touches.length; + + if ( touch_time - last_touch_time < 300 && numTouchers === 1 ) { + d3.event.stopPropagation(); + if ( editMode === true ) { + //graph.modified_dblClickFunction(); + d3.event.preventDefault(); + d3.event.stopPropagation(); + last_touch_time = touch_time; + return true; + } + } + last_touch_time = touch_time; + return false; + } + + + function touchzoomed(){ + forceNotZooming = true; + + + var touch_time = d3.event.timeStamp; + if ( touch_time - last_touch_time < 300 && d3.event.touches.length === 1 ) { + d3.event.stopPropagation(); + + if ( editMode === true ) { + //graph.modified_dblClickFunction(); + d3.event.preventDefault(); + d3.event.stopPropagation(); + zoom.translate(graphTranslation); + zoom.scale(zoomFactor); + graph.modified_dblTouchFunction(); + } + else { + forceNotZooming = false; + if ( originalD3_touchZoomFunction ) + originalD3_touchZoomFunction(); + } + return; + } + forceNotZooming = false; + last_touch_time = touch_time; + // TODO: WORK AROUND TO CHECK FOR ORIGINAL FUNCTION + if ( originalD3_touchZoomFunction ) + originalD3_touchZoomFunction(); + } + + graph.modified_dblTouchFunction = function ( d ){ + d3.event.stopPropagation(); + d3.event.preventDefault(); + var xy; + if ( editMode === true ) { + xy = d3.touches(d3.selectAll(".vowlGraph").node()); + } + var grPos = getClickedScreenCoords(xy[0][0], xy[0][1], graph.translation(), graph.scaleFactor()); + createNewNodeAtPosition(grPos); + }; + + /** --------------------------------------------------------- **/ + /** -- Hover and Selection functions, adding edit elements -- **/ + /** --------------------------------------------------------- **/ + + graph.ignoreOtherHoverEvents = function ( val ){ + if ( !arguments.length ) { + return ignoreOtherHoverEvents; + } + else ignoreOtherHoverEvents = val; + }; + + function delayedHiddingHoverElements( tbh ){ + if ( tbh === true ) return; + if ( hoveredNodeElement ) { + if ( hoveredNodeElement.editingTextElement === true ) return; + delayedHider = setTimeout(function (){ + deleteGroupElement.classed("hidden", true); + addDataPropertyGroupElement.classed("hidden", true); + classDragger.hideDragger(true); + if ( hoveredNodeElement && hoveredNodeElement.pinned() === false && graph.paused() === false && hoveredNodeElement.editingTextElement === false ) { + hoveredNodeElement.frozen(false); + hoveredNodeElement.locked(false); + } + }, 1000); + } + if ( hoveredPropertyElement ) { + if ( hoveredPropertyElement.editingTextElement === true ) return; + delayedHider = setTimeout(function (){ + deleteGroupElement.classed("hidden", true); + addDataPropertyGroupElement.classed("hidden", true); + classDragger.hideDragger(true); + rangeDragger.hideDragger(true); + domainDragger.hideDragger(true); + shadowClone.hideClone(true); + if ( hoveredPropertyElement && hoveredPropertyElement.focused() === true && graph.options().drawPropertyDraggerOnHover() === true ) { + hoveredPropertyElement.labelObject().increasedLoopAngle = false; + // lazy update + recalculatePositions(); + } + + if ( hoveredPropertyElement && hoveredPropertyElement.pinned() === false && graph.paused() === false && hoveredPropertyElement.editingTextElement === false ) { + hoveredPropertyElement.frozen(false); + hoveredPropertyElement.locked(false); + } + }, 1000); + } + + } + + + // TODO : experimental code for updating dynamic label with and its hover element + graph.hideHoverPropertyElementsForAnimation = function (){ + deleteGroupElement.classed("hidden", true); + }; + graph.showHoverElementsAfterAnimation = function ( property, inversed ){ + setDeleteHoverElementPositionProperty(property, inversed); + deleteGroupElement.classed("hidden", false); + + }; + + function editElementHoverOnHidden(){ + classDragger.nodeElement.classed("classDraggerNodeHovered", true); + classDragger.nodeElement.classed("classDraggerNode", false); + editElementHoverOn(); + } + + function editElementHoverOutHidden(){ + classDragger.nodeElement.classed("classDraggerNodeHovered", false); + classDragger.nodeElement.classed("classDraggerNode", true); + editElementHoverOut(); + } + + function editElementHoverOn( touch ){ + if ( touch === true ) return; + clearTimeout(delayedHider); // ignore touch behaviour + + } + + graph.killDelayedTimer = function (){ + clearTimeout(delayedHider); + clearTimeout(nodeFreezer); + }; + + + function editElementHoverOut( tbh ){ + if ( hoveredNodeElement ) { + if ( graph.ignoreOtherHoverEvents() === true || tbh === true || hoveredNodeElement.editingTextElement === true ) return; + delayedHider = setTimeout(function (){ + if ( graph.isADraggerActive() === true ) return; + deleteGroupElement.classed("hidden", true); + addDataPropertyGroupElement.classed("hidden", true); + classDragger.hideDragger(true); + if ( hoveredNodeElement && hoveredNodeElement.pinned() === false && graph.paused() === false ) { + hoveredNodeElement.frozen(false); + hoveredNodeElement.locked(false); + } + + }, 1000); + } + if ( hoveredPropertyElement ) { + if ( graph.ignoreOtherHoverEvents() === true || tbh === true || hoveredPropertyElement.editingTextElement === true ) return; + delayedHider = setTimeout(function (){ + if ( graph.isADraggerActive() === true ) return; + deleteGroupElement.classed("hidden", true); + addDataPropertyGroupElement.classed("hidden", true); + classDragger.hideDragger(true); + if ( hoveredPropertyElement && hoveredPropertyElement.pinned() === false && graph.paused() === false ) { + hoveredPropertyElement.frozen(false); + hoveredPropertyElement.locked(false); + } + + }, 1000); + } + } + + graph.activateHoverElementsForProperties = function ( val, property, inversed, touchBehaviour ){ + if ( editMode === false ) return; // nothing to do; + + if ( touchBehaviour === undefined ) + touchBehaviour = false; + + if ( val === true ) { + clearTimeout(delayedHider); + if ( hoveredPropertyElement ) { + if ( hoveredPropertyElement.domain() === hoveredPropertyElement.range() ) { + hoveredPropertyElement.labelObject().increasedLoopAngle = false; + recalculatePositions(); + } + } + + hoveredPropertyElement = property; + if ( graph.options().drawPropertyDraggerOnHover() === true ) { + + + if ( property.type() !== "owl:DatatypeProperty" ) { + if ( property.domain() === property.range() ) { + property.labelObject().increasedLoopAngle = true; + recalculatePositions(); + } + shadowClone.setParentProperty(property, inversed); + rangeDragger.setParentProperty(property, inversed); + rangeDragger.hideDragger(false); + rangeDragger.addMouseEvents(); + domainDragger.setParentProperty(property, inversed); + domainDragger.hideDragger(false); + domainDragger.addMouseEvents(); + + + } else if ( property.type() === "owl:DatatypeProperty" ) { + shadowClone.setParentProperty(property, inversed); + rangeDragger.setParentProperty(property, inversed); + rangeDragger.hideDragger(true); + rangeDragger.addMouseEvents(); + domainDragger.setParentProperty(property, inversed); + domainDragger.hideDragger(false); + domainDragger.addMouseEvents(); + } + } + else { // hide when we dont want that option + if ( graph.options().drawPropertyDraggerOnHover() === true ) { + rangeDragger.hideDragger(true); + domainDragger.hideDragger(true); + shadowClone.hideClone(true); + if ( property.domain() === property.range() ) { + property.labelObject().increasedLoopAngle = false; + recalculatePositions(); + } + } + } + + if ( hoveredNodeElement ) { + if ( hoveredNodeElement && hoveredNodeElement.pinned() === false && graph.paused() === false ) { + hoveredNodeElement.frozen(false); + hoveredNodeElement.locked(false); + } + } + hoveredNodeElement = undefined; + deleteGroupElement.classed("hidden", false); + setDeleteHoverElementPositionProperty(property, inversed); + deleteGroupElement.selectAll("*").on("click", function (){ + if ( touchBehaviour && property.focused() === false ) { + graph.options().focuserModule().handle(property); + return; + } + graph.removePropertyViaEditor(property); + d3.event.stopPropagation(); + }); + classDragger.hideDragger(true); + addDataPropertyGroupElement.classed("hidden", true); + } else { + delayedHiddingHoverElements(); + } + }; + + graph.updateDraggerElements = function (){ + + // set opacity style for all elements + + rangeDragger.draggerObject.classed("superOpacityElement", !graph.options().showDraggerObject()); + domainDragger.draggerObject.classed("superOpacityElement", !graph.options().showDraggerObject()); + classDragger.draggerObject.classed("superOpacityElement", !graph.options().showDraggerObject()); + + nodeContainer.selectAll(".superHiddenElement").classed("superOpacityElement", !graph.options().showDraggerObject()); + labelContainer.selectAll(".superHiddenElement").classed("superOpacityElement", !graph.options().showDraggerObject()); + + deleteGroupElement.selectAll(".superHiddenElement").classed("superOpacityElement", !graph.options().showDraggerObject()); + addDataPropertyGroupElement.selectAll(".superHiddenElement").classed("superOpacityElement", !graph.options().showDraggerObject()); + + + }; + + function setAddDataPropertyHoverElementPosition( node ){ + var delX, delY = 0; + if ( node.renderType() === "round" ) { + var scale = 0.5 * Math.sqrt(2.0); + var oX = scale * node.actualRadius(); + var oY = scale * node.actualRadius(); + delX = node.x - oX; + delY = node.y + oY; + addDataPropertyGroupElement.attr("transform", "translate(" + delX + "," + delY + ")"); + } + } + + function setDeleteHoverElementPosition( node ){ + var delX, delY = 0; + if ( node.renderType() === "round" ) { + var scale = 0.5 * Math.sqrt(2.0); + var oX = scale * node.actualRadius(); + var oY = scale * node.actualRadius(); + delX = node.x + oX; + delY = node.y - oY; + } else { + delX = node.x + 0.5 * node.width() + 6; + delY = node.y - 0.5 * node.height() - 6; + } + deleteGroupElement.attr("transform", "translate(" + delX + "," + delY + ")"); + } + + function setDeleteHoverElementPositionProperty( property, inversed ){ + if ( property && property.labelElement() ) { + var pos = [property.labelObject().x, property.labelObject().y]; + var widthElement = parseFloat(property.getShapeElement().attr("width")); + var heightElement = parseFloat(property.getShapeElement().attr("height")); + var delX = pos[0] + 0.5 * widthElement + 6; + var delY = pos[1] - 0.5 * heightElement - 6; + // this is the lower element + if ( property.labelElement().attr("transform") === "translate(0,15)" ) + delY += 15; + // this is upper element + if ( property.labelElement().attr("transform") === "translate(0,-15)" ) + delY -= 15; + deleteGroupElement.attr("transform", "translate(" + delX + "," + delY + ")"); + } else { + deleteGroupElement.classed("hidden", true);// hide when there is no property + } + + + } + + graph.activateHoverElements = function ( val, node, touchBehaviour ){ + if ( editMode === false ) { + return; // nothing to do; + } + if ( touchBehaviour === undefined ) touchBehaviour = false; + if ( val === true ) { + if ( graph.options().drawPropertyDraggerOnHover() === true ) { + rangeDragger.hideDragger(true); + domainDragger.hideDragger(true); + shadowClone.hideClone(true); + } + // make them visible + clearTimeout(delayedHider); + clearTimeout(nodeFreezer); + if ( hoveredNodeElement && node.pinned() === false && graph.paused() === false ) { + hoveredNodeElement.frozen(false); + hoveredNodeElement.locked(false); + } + hoveredNodeElement = node; + if ( node && node.frozen() === false && node.pinned() === false ) { + node.frozen(true); + node.locked(false); + } + if ( hoveredPropertyElement && hoveredPropertyElement.focused() === false ) { + hoveredPropertyElement.labelObject().increasedLoopAngle = false; + recalculatePositions(); + // update the loopAngles; + + } + hoveredPropertyElement = undefined; + deleteGroupElement.classed("hidden", false); + setDeleteHoverElementPosition(node); + + + deleteGroupElement.selectAll("*").on("click", function (){ + if ( touchBehaviour && node.focused() === false ) { + graph.options().focuserModule().handle(node); + return; + } + graph.removeNodeViaEditor(node); + d3.event.stopPropagation(); + }) + .on("mouseover", function (){ + editElementHoverOn(node, touchBehaviour); + }) + .on("mouseout", function (){ + editElementHoverOut(node, touchBehaviour); + }); + + addDataPropertyGroupElement.classed("hidden", true); + classDragger.nodeElement.on("mouseover", editElementHoverOn) + .on("mouseout", editElementHoverOut); + classDragger.draggerObject.on("mouseover", editElementHoverOnHidden) + .on("mouseout", editElementHoverOutHidden); + + // add the dragger element; + if ( node.renderType() === "round" ) { + classDragger.svgRoot(draggerLayer); + classDragger.setParentNode(node); + classDragger.hideDragger(false); + addDataPropertyGroupElement.classed("hidden", false); + setAddDataPropertyHoverElementPosition(node); + addDataPropertyGroupElement.selectAll("*").on("click", function (){ + if ( touchBehaviour && node.focused() === false ) { + graph.options().focuserModule().handle(node); + return; + } + graph.createDataTypeProperty(node); + d3.event.stopPropagation(); + }) + .on("mouseover", function (){ + editElementHoverOn(node, touchBehaviour); + }) + .on("mouseout", function (){ + editElementHoverOut(node, touchBehaviour); + }); + } else { + classDragger.hideDragger(true); + + } + + } else { + delayedHiddingHoverElements(node, touchBehaviour); + + } + }; + + + return graph; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 58 */ +/***/ (function(module, exports, __webpack_require__) { + + var __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(global, module) {/** + * @license + * Lodash (Custom Build) + * Build: `lodash core -o ./dist/lodash.core.js` + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ + ;(function() { + + /** Used as a safe reference for `undefined` in pre-ES5 environments. */ + var undefined; + + /** Used as the semantic version number. */ + var VERSION = '4.17.15'; + + /** Error message constants. */ + var FUNC_ERROR_TEXT = 'Expected a function'; + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + + /** Used to compose bitmasks for function metadata. */ + var WRAP_BIND_FLAG = 1, + WRAP_PARTIAL_FLAG = 32; + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0, + MAX_SAFE_INTEGER = 9007199254740991; + + /** `Object#toString` result references. */ + var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + asyncTag = '[object AsyncFunction]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + numberTag = '[object Number]', + objectTag = '[object Object]', + proxyTag = '[object Proxy]', + regexpTag = '[object RegExp]', + stringTag = '[object String]'; + + /** Used to match HTML entities and HTML characters. */ + var reUnescapedHtml = /[&<>"']/g, + reHasUnescapedHtml = RegExp(reUnescapedHtml.source); + + /** Used to detect unsigned integer values. */ + var reIsUint = /^(?:0|[1-9]\d*)$/; + + /** Used to map characters to HTML entities. */ + var htmlEscapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' + }; + + /** Detect free variable `global` from Node.js. */ + var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + + /** Detect free variable `self`. */ + var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + + /** Used as a reference to the global object. */ + var root = freeGlobal || freeSelf || Function('return this')(); + + /** Detect free variable `exports`. */ + var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + + /** Detect free variable `module`. */ + var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + + /*--------------------------------------------------------------------------*/ + + /** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ + function arrayPush(array, values) { + array.push.apply(array, values); + return array; + } + + /** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; + } + + /** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ + function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; + } + + /** + * The base implementation of `_.propertyOf` without support for deep paths. + * + * @private + * @param {Object} object The object to query. + * @returns {Function} Returns the new accessor function. + */ + function basePropertyOf(object) { + return function(key) { + return object == null ? undefined : object[key]; + }; + } + + /** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ + function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; + } + + /** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ + function baseValues(object, props) { + return baseMap(props, function(key) { + return object[key]; + }); + } + + /** + * Used by `_.escape` to convert characters to HTML entities. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ + var escapeHtmlChar = basePropertyOf(htmlEscapes); + + /** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ + function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; + } + + /*--------------------------------------------------------------------------*/ + + /** Used for built-in method references. */ + var arrayProto = Array.prototype, + objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** Used to generate unique IDs. */ + var idCounter = 0; + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString = objectProto.toString; + + /** Used to restore the original `_` reference in `_.noConflict`. */ + var oldDash = root._; + + /** Built-in value references. */ + var objectCreate = Object.create, + propertyIsEnumerable = objectProto.propertyIsEnumerable; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeIsFinite = root.isFinite, + nativeKeys = overArg(Object.keys, Object), + nativeMax = Math.max; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` object which wraps `value` to enable implicit method + * chain sequences. Methods that operate on and return arrays, collections, + * and functions can be chained together. Methods that retrieve a single value + * or may return a primitive value will automatically end the chain sequence + * and return the unwrapped value. Otherwise, the value must be unwrapped + * with `_#value`. + * + * Explicit chain sequences, which must be unwrapped with `_#value`, may be + * enabled using `_.chain`. + * + * The execution of chained methods is lazy, that is, it's deferred until + * `_#value` is implicitly or explicitly called. + * + * Lazy evaluation allows several methods to support shortcut fusion. + * Shortcut fusion is an optimization to merge iteratee calls; this avoids + * the creation of intermediate arrays and can greatly reduce the number of + * iteratee executions. Sections of a chain sequence qualify for shortcut + * fusion if the section is applied to an array and iteratees accept only + * one argument. The heuristic for whether a section qualifies for shortcut + * fusion is subject to change. + * + * Chaining is supported in custom builds as long as the `_#value` method is + * directly or indirectly included in the build. + * + * In addition to lodash methods, wrappers have `Array` and `String` methods. + * + * The wrapper `Array` methods are: + * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` + * + * The wrapper `String` methods are: + * `replace` and `split` + * + * The wrapper methods that support shortcut fusion are: + * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, + * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, + * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` + * + * The chainable wrapper methods are: + * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, + * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, + * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, + * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, + * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, + * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, + * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, + * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, + * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, + * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, + * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, + * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, + * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, + * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, + * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, + * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, + * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, + * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, + * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, + * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, + * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, + * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, + * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, + * `zipObject`, `zipObjectDeep`, and `zipWith` + * + * The wrapper methods that are **not** chainable by default are: + * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, + * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, + * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, + * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, + * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, + * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, + * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, + * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, + * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, + * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, + * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, + * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, + * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, + * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, + * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, + * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, + * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, + * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, + * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, + * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, + * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, + * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, + * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, + * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, + * `upperFirst`, `value`, and `words` + * + * @name _ + * @constructor + * @category Seq + * @param {*} value The value to wrap in a `lodash` instance. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var wrapped = _([1, 2, 3]); + * + * // Returns an unwrapped value. + * wrapped.reduce(_.add); + * // => 6 + * + * // Returns a wrapped value. + * var squares = wrapped.map(square); + * + * _.isArray(squares); + * // => false + * + * _.isArray(squares.value()); + * // => true + */ + function lodash(value) { + return value instanceof LodashWrapper + ? value + : new LodashWrapper(value); + } + + /** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} proto The object to inherit from. + * @returns {Object} Returns the new object. + */ + var baseCreate = (function() { + function object() {} + return function(proto) { + if (!isObject(proto)) { + return {}; + } + if (objectCreate) { + return objectCreate(proto); + } + object.prototype = proto; + var result = new object; + object.prototype = undefined; + return result; + }; + }()); + + /** + * The base constructor for creating `lodash` wrapper objects. + * + * @private + * @param {*} value The value to wrap. + * @param {boolean} [chainAll] Enable explicit method chain sequences. + */ + function LodashWrapper(value, chainAll) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__chain__ = !!chainAll; + } + + LodashWrapper.prototype = baseCreate(lodash.prototype); + LodashWrapper.prototype.constructor = LodashWrapper; + + /*------------------------------------------------------------------------*/ + + /** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } + } + + /** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function baseAssignValue(object, key, value) { + object[key] = value; + } + + /** + * The base implementation of `_.delay` and `_.defer` which accepts `args` + * to provide to `func`. + * + * @private + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {Array} args The arguments to provide to `func`. + * @returns {number|Object} Returns the timer id or timeout object. + */ + function baseDelay(func, wait, args) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return setTimeout(function() { func.apply(undefined, args); }, wait); + } + + /** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ + var baseEach = createBaseEach(baseForOwn); + + /** + * The base implementation of `_.every` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false` + */ + function baseEvery(collection, predicate) { + var result = true; + baseEach(collection, function(value, index, collection) { + result = !!predicate(value, index, collection); + return result; + }); + return result; + } + + /** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ + function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? (current === current && !false) + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; + } + + /** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function baseFilter(collection, predicate) { + var result = []; + baseEach(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; + } + + /** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ + function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + arrayPush(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; + } + + /** + * The base implementation of `baseForOwn` which iterates over `object` + * properties returned by `keysFunc` and invokes `iteratee` for each property. + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ + var baseFor = createBaseFor(); + + /** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ + function baseForOwn(object, iteratee) { + return object && baseFor(object, iteratee, keys); + } + + /** + * The base implementation of `_.functions` which creates an array of + * `object` function property names filtered from `props`. + * + * @private + * @param {Object} object The object to inspect. + * @param {Array} props The property names to filter. + * @returns {Array} Returns the function names. + */ + function baseFunctions(object, props) { + return baseFilter(props, function(key) { + return isFunction(object[key]); + }); + } + + /** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + function baseGetTag(value) { + return objectToString(value); + } + + /** + * The base implementation of `_.gt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + */ + function baseGt(value, other) { + return value > other; + } + + /** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ + var baseIsArguments = noop; + + /** + * The base implementation of `_.isDate` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a date object, else `false`. + */ + function baseIsDate(value) { + return isObjectLike(value) && baseGetTag(value) == dateTag; + } + + /** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ + function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); + } + + /** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = objIsArr ? arrayTag : baseGetTag(object), + othTag = othIsArr ? arrayTag : baseGetTag(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + stack || (stack = []); + var objStack = find(stack, function(entry) { + return entry[0] == object; + }); + var othStack = find(stack, function(entry) { + return entry[0] == other; + }); + if (objStack && othStack) { + return objStack[1] == other; + } + stack.push([object, other]); + stack.push([other, object]); + if (isSameTag && !objIsObj) { + var result = (objIsArr) + ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + stack.pop(); + return result; + } + if (!(bitmask & COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + var result = equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + stack.pop(); + return result; + } + } + if (!isSameTag) { + return false; + } + var result = equalObjects(object, other, bitmask, customizer, equalFunc, stack); + stack.pop(); + return result; + } + + /** + * The base implementation of `_.isRegExp` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + */ + function baseIsRegExp(value) { + return isObjectLike(value) && baseGetTag(value) == regexpTag; + } + + /** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ + function baseIteratee(func) { + if (typeof func == 'function') { + return func; + } + if (func == null) { + return identity; + } + return (typeof func == 'object' ? baseMatches : baseProperty)(func); + } + + /** + * The base implementation of `_.lt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + */ + function baseLt(value, other) { + return value < other; + } + + /** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function baseMap(collection, iteratee) { + var index = -1, + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; + } + + /** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ + function baseMatches(source) { + var props = nativeKeys(source); + return function(object) { + var length = props.length; + if (object == null) { + return !length; + } + object = Object(object); + while (length--) { + var key = props[length]; + if (!(key in object && + baseIsEqual(source[key], object[key], COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG) + )) { + return false; + } + } + return true; + }; + } + + /** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @returns {Object} Returns the new object. + */ + function basePick(object, props) { + object = Object(object); + return reduce(props, function(result, key) { + if (key in object) { + result[key] = object[key]; + } + return result; + }, {}); + } + + /** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ + function baseRest(func, start) { + return setToString(overRest(func, start, identity), func + ''); + } + + /** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = end > length ? length : end; + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; + } + + /** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ + function copyArray(source) { + return baseSlice(source, 0, source.length); + } + + /** + * The base implementation of `_.some` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ + function baseSome(collection, predicate) { + var result; + + baseEach(collection, function(value, index, collection) { + result = predicate(value, index, collection); + return !result; + }); + return !!result; + } + + /** + * The base implementation of `wrapperValue` which returns the result of + * performing a sequence of actions on the unwrapped `value`, where each + * successive action is supplied the return value of the previous. + * + * @private + * @param {*} value The unwrapped value. + * @param {Array} actions Actions to perform to resolve the unwrapped value. + * @returns {*} Returns the resolved value. + */ + function baseWrapperValue(value, actions) { + var result = value; + return reduce(actions, function(result, action) { + return action.func.apply(action.thisArg, arrayPush([result], action.args)); + }, result); + } + + /** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ + function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = false; + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = false; + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; + } + + /** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property identifiers to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ + function copyObject(source, props, object, customizer) { + var isNew = !object; + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : undefined; + + if (newValue === undefined) { + newValue = source[key]; + } + if (isNew) { + baseAssignValue(object, key, newValue); + } else { + assignValue(object, key, newValue); + } + } + return object; + } + + /** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ + function createAssigner(assigner) { + return baseRest(function(object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined; + + customizer = (assigner.length > 3 && typeof customizer == 'function') + ? (length--, customizer) + : undefined; + + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); + } + + /** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!isArrayLike(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; + } + + /** + * Creates a base function for methods like `_.forIn` and `_.forOwn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; + + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; + } + + /** + * Creates a function that produces an instance of `Ctor` regardless of + * whether it was invoked as part of a `new` expression or by `call` or `apply`. + * + * @private + * @param {Function} Ctor The constructor to wrap. + * @returns {Function} Returns the new wrapped function. + */ + function createCtor(Ctor) { + return function() { + // Use a `switch` statement to work with class constructors. See + // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist + // for more details. + var args = arguments; + var thisBinding = baseCreate(Ctor.prototype), + result = Ctor.apply(thisBinding, args); + + // Mimic the constructor's `return` behavior. + // See https://es5.github.io/#x13.2.2 for more details. + return isObject(result) ? result : thisBinding; + }; + } + + /** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ + function createFind(findIndexFunc) { + return function(collection, predicate, fromIndex) { + var iterable = Object(collection); + if (!isArrayLike(collection)) { + var iteratee = baseIteratee(predicate, 3); + collection = keys(collection); + predicate = function(key) { return iteratee(iterable[key], key, iterable); }; + } + var index = findIndexFunc(collection, predicate, fromIndex); + return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; + }; + } + + /** + * Creates a function that wraps `func` to invoke it with the `this` binding + * of `thisArg` and `partials` prepended to the arguments it receives. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} partials The arguments to prepend to those provided to + * the new function. + * @returns {Function} Returns the new wrapped function. + */ + function createPartial(func, bitmask, thisArg, partials) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + var isBind = bitmask & WRAP_BIND_FLAG, + Ctor = createCtor(func); + + function wrapper() { + var argsIndex = -1, + argsLength = arguments.length, + leftIndex = -1, + leftLength = partials.length, + args = Array(leftLength + argsLength), + fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + + while (++leftIndex < leftLength) { + args[leftIndex] = partials[leftIndex]; + } + while (argsLength--) { + args[leftIndex++] = arguments[++argsIndex]; + } + return fn.apply(isBind ? thisArg : this, args); + } + return wrapper; + } + + /** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ + function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? [] : undefined; + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + var compared; + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!baseSome(other, function(othValue, othIndex) { + if (!indexOf(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + return result; + } + + /** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return eq(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + } + return false; + } + + /** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + objProps = keys(object), + objLength = objProps.length, + othProps = keys(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { + return false; + } + } + var result = true; + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + var compared; + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + return result; + } + + /** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ + function flatRest(func) { + return setToString(overRest(func, undefined, flatten), func + ''); + } + + /** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ + function isFlattenable(value) { + return isArray(value) || isArguments(value); + } + + /** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ + function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); + } + + /** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ + function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object) + ) { + return eq(object[index], value); + } + return false; + } + + /** + * This function is like + * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * except that it includes inherited enumerable properties. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function nativeKeysIn(object) { + var result = []; + if (object != null) { + for (var key in Object(object)) { + result.push(key); + } + } + return result; + } + + /** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ + function objectToString(value) { + return nativeObjectToString.call(value); + } + + /** + * A specialized version of `baseRest` which transforms the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @param {Function} transform The rest array transform. + * @returns {Function} Returns the new function. + */ + function overRest(func, start, transform) { + start = nativeMax(start === undefined ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = transform(array); + return func.apply(this, otherArgs); + }; + } + + /** + * Sets the `toString` method of `func` to return `string`. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ + var setToString = identity; + + /*------------------------------------------------------------------------*/ + + /** + * Creates an array with all falsey values removed. The values `false`, `null`, + * `0`, `""`, `undefined`, and `NaN` are falsey. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to compact. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.compact([0, 1, false, 2, '', 3]); + * // => [1, 2, 3] + */ + function compact(array) { + return baseFilter(array, Boolean); + } + + /** + * Creates a new array concatenating `array` with any additional arrays + * and/or values. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to concatenate. + * @param {...*} [values] The values to concatenate. + * @returns {Array} Returns the new concatenated array. + * @example + * + * var array = [1]; + * var other = _.concat(array, 2, [3], [[4]]); + * + * console.log(other); + * // => [1, 2, 3, [4]] + * + * console.log(array); + * // => [1] + */ + function concat() { + var length = arguments.length; + if (!length) { + return []; + } + var args = Array(length - 1), + array = arguments[0], + index = length; + + while (index--) { + args[index - 1] = arguments[index]; + } + return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); + } + + /** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ + function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return baseFindIndex(array, baseIteratee(predicate, 3), index); + } + + /** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ + function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, 1) : []; + } + + /** + * Recursively flattens `array`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flattenDeep([1, [2, [3, [4]], 5]]); + * // => [1, 2, 3, 4, 5] + */ + function flattenDeep(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, INFINITY) : []; + } + + /** + * Gets the first element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias first + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the first element of `array`. + * @example + * + * _.head([1, 2, 3]); + * // => 1 + * + * _.head([]); + * // => undefined + */ + function head(array) { + return (array && array.length) ? array[0] : undefined; + } + + /** + * Gets the index at which the first occurrence of `value` is found in `array` + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. If `fromIndex` is negative, it's used as the + * offset from the end of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.indexOf([1, 2, 1, 2], 2); + * // => 1 + * + * // Search from the `fromIndex`. + * _.indexOf([1, 2, 1, 2], 2, 2); + * // => 3 + */ + function indexOf(array, value, fromIndex) { + var length = array == null ? 0 : array.length; + if (typeof fromIndex == 'number') { + fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : fromIndex; + } else { + fromIndex = 0; + } + var index = (fromIndex || 0) - 1, + isReflexive = value === value; + + while (++index < length) { + var other = array[index]; + if ((isReflexive ? other === value : other !== other)) { + return index; + } + } + return -1; + } + + /** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ + function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; + } + + /** + * Creates a slice of `array` from `start` up to, but not including, `end`. + * + * **Note:** This method is used instead of + * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are + * returned. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function slice(array, start, end) { + var length = array == null ? 0 : array.length; + start = start == null ? 0 : +start; + end = end === undefined ? length : +end; + return length ? baseSlice(array, start, end) : []; + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` wrapper instance that wraps `value` with explicit method + * chain sequences enabled. The result of such sequences must be unwrapped + * with `_#value`. + * + * @static + * @memberOf _ + * @since 1.3.0 + * @category Seq + * @param {*} value The value to wrap. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'pebbles', 'age': 1 } + * ]; + * + * var youngest = _ + * .chain(users) + * .sortBy('age') + * .map(function(o) { + * return o.user + ' is ' + o.age; + * }) + * .head() + * .value(); + * // => 'pebbles is 1' + */ + function chain(value) { + var result = lodash(value); + result.__chain__ = true; + return result; + } + + /** + * This method invokes `interceptor` and returns `value`. The interceptor + * is invoked with one argument; (value). The purpose of this method is to + * "tap into" a method chain sequence in order to modify intermediate results. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns `value`. + * @example + * + * _([1, 2, 3]) + * .tap(function(array) { + * // Mutate input array. + * array.pop(); + * }) + * .reverse() + * .value(); + * // => [2, 1] + */ + function tap(value, interceptor) { + interceptor(value); + return value; + } + + /** + * This method is like `_.tap` except that it returns the result of `interceptor`. + * The purpose of this method is to "pass thru" values replacing intermediate + * results in a method chain sequence. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns the result of `interceptor`. + * @example + * + * _(' abc ') + * .chain() + * .trim() + * .thru(function(value) { + * return [value]; + * }) + * .value(); + * // => ['abc'] + */ + function thru(value, interceptor) { + return interceptor(value); + } + + /** + * Creates a `lodash` wrapper instance with explicit method chain sequences enabled. + * + * @name chain + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * // A sequence without explicit chaining. + * _(users).head(); + * // => { 'user': 'barney', 'age': 36 } + * + * // A sequence with explicit chaining. + * _(users) + * .chain() + * .head() + * .pick('user') + * .value(); + * // => { 'user': 'barney' } + */ + function wrapperChain() { + return chain(this); + } + + /** + * Executes the chain sequence to resolve the unwrapped value. + * + * @name value + * @memberOf _ + * @since 0.1.0 + * @alias toJSON, valueOf + * @category Seq + * @returns {*} Returns the resolved unwrapped value. + * @example + * + * _([1, 2, 3]).value(); + * // => [1, 2, 3] + */ + function wrapperValue() { + return baseWrapperValue(this.__wrapped__, this.__actions__); + } + + /*------------------------------------------------------------------------*/ + + /** + * Checks if `predicate` returns truthy for **all** elements of `collection`. + * Iteration is stopped once `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * **Note:** This method returns `true` for + * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because + * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of + * elements of empty collections. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + * @example + * + * _.every([true, 1, null, 'yes'], Boolean); + * // => false + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.every(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.every(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.every(users, 'active'); + * // => false + */ + function every(collection, predicate, guard) { + predicate = guard ? undefined : predicate; + return baseEvery(collection, baseIteratee(predicate)); + } + + /** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + */ + function filter(collection, predicate) { + return baseFilter(collection, baseIteratee(predicate)); + } + + /** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ + var find = createFind(findIndex); + + /** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ + function forEach(collection, iteratee) { + return baseEach(collection, baseIteratee(iteratee)); + } + + /** + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ + function map(collection, iteratee) { + return baseMap(collection, baseIteratee(iteratee)); + } + + /** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ + function reduce(collection, iteratee, accumulator) { + return baseReduce(collection, baseIteratee(iteratee), accumulator, arguments.length < 3, baseEach); + } + + /** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable string keyed properties for objects. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ + function size(collection) { + if (collection == null) { + return 0; + } + collection = isArrayLike(collection) ? collection : nativeKeys(collection); + return collection.length; + } + + /** + * Checks if `predicate` returns truthy for **any** element of `collection`. + * Iteration is stopped once `predicate` returns truthy. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + * @example + * + * _.some([null, 0, 'yes', false], Boolean); + * // => true + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.some(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.some(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.some(users, 'active'); + * // => true + */ + function some(collection, predicate, guard) { + predicate = guard ? undefined : predicate; + return baseSome(collection, baseIteratee(predicate)); + } + + /** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + * The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, [function(o) { return o.user; }]); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]] + */ + function sortBy(collection, iteratee) { + var index = 0; + iteratee = baseIteratee(iteratee); + + return baseMap(baseMap(collection, function(value, key, collection) { + return { 'value': value, 'index': index++, 'criteria': iteratee(value, key, collection) }; + }).sort(function(object, other) { + return compareAscending(object.criteria, other.criteria) || (object.index - other.index); + }), baseProperty('value')); + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates a function that invokes `func`, with the `this` binding and arguments + * of the created function, while it's called less than `n` times. Subsequent + * calls to the created function return the result of the last `func` invocation. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {number} n The number of calls at which `func` is no longer invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * jQuery(element).on('click', _.before(5, addContactToList)); + * // => Allows adding up to 4 contacts to the list. + */ + function before(n, func) { + var result; + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + n = toInteger(n); + return function() { + if (--n > 0) { + result = func.apply(this, arguments); + } + if (n <= 1) { + func = undefined; + } + return result; + }; + } + + /** + * Creates a function that invokes `func` with the `this` binding of `thisArg` + * and `partials` prepended to the arguments it receives. + * + * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for partially applied arguments. + * + * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" + * property of bound functions. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to bind. + * @param {*} thisArg The `this` binding of `func`. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * function greet(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * } + * + * var object = { 'user': 'fred' }; + * + * var bound = _.bind(greet, object, 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * // Bound with placeholders. + * var bound = _.bind(greet, object, _, '!'); + * bound('hi'); + * // => 'hi fred!' + */ + var bind = baseRest(function(func, thisArg, partials) { + return createPartial(func, WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG, thisArg, partials); + }); + + /** + * Defers invoking the `func` until the current call stack has cleared. Any + * additional arguments are provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to defer. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.defer(function(text) { + * console.log(text); + * }, 'deferred'); + * // => Logs 'deferred' after one millisecond. + */ + var defer = baseRest(function(func, args) { + return baseDelay(func, 1, args); + }); + + /** + * Invokes `func` after `wait` milliseconds. Any additional arguments are + * provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.delay(function(text) { + * console.log(text); + * }, 1000, 'later'); + * // => Logs 'later' after one second. + */ + var delay = baseRest(function(func, wait, args) { + return baseDelay(func, toNumber(wait) || 0, args); + }); + + /** + * Creates a function that negates the result of the predicate `func`. The + * `func` predicate is invoked with the `this` binding and arguments of the + * created function. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} predicate The predicate to negate. + * @returns {Function} Returns the new negated function. + * @example + * + * function isEven(n) { + * return n % 2 == 0; + * } + * + * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); + * // => [1, 3, 5] + */ + function negate(predicate) { + if (typeof predicate != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return function() { + var args = arguments; + return !predicate.apply(this, args); + }; + } + + /** + * Creates a function that is restricted to invoking `func` once. Repeat calls + * to the function return the value of the first invocation. The `func` is + * invoked with the `this` binding and arguments of the created function. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var initialize = _.once(createApplication); + * initialize(); + * initialize(); + * // => `createApplication` is invoked once + */ + function once(func) { + return before(2, func); + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates a shallow clone of `value`. + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) + * and supports cloning arrays, array buffers, booleans, date objects, maps, + * numbers, `Object` objects, regexes, sets, strings, symbols, and typed + * arrays. The own enumerable properties of `arguments` objects are cloned + * as plain objects. An empty object is returned for uncloneable values such + * as error objects, functions, DOM nodes, and WeakMaps. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to clone. + * @returns {*} Returns the cloned value. + * @see _.cloneDeep + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var shallow = _.clone(objects); + * console.log(shallow[0] === objects[0]); + * // => true + */ + function clone(value) { + if (!isObject(value)) { + return value; + } + return isArray(value) ? copyArray(value) : copyObject(value, nativeKeys(value)); + } + + /** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ + function eq(value, other) { + return value === other || (value !== value && other !== other); + } + + /** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ + var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { + return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); + }; + + /** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ + var isArray = Array.isArray; + + /** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ + function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); + } + + /** + * Checks if `value` is classified as a boolean primitive or object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. + * @example + * + * _.isBoolean(false); + * // => true + * + * _.isBoolean(null); + * // => false + */ + function isBoolean(value) { + return value === true || value === false || + (isObjectLike(value) && baseGetTag(value) == boolTag); + } + + /** + * Checks if `value` is classified as a `Date` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a date object, else `false`. + * @example + * + * _.isDate(new Date); + * // => true + * + * _.isDate('Mon April 23 2012'); + * // => false + */ + var isDate = baseIsDate; + + /** + * Checks if `value` is an empty object, collection, map, or set. + * + * Objects are considered empty if they have no own enumerable string keyed + * properties. + * + * Array-like values such as `arguments` objects, arrays, buffers, strings, or + * jQuery-like collections are considered empty if they have a `length` of `0`. + * Similarly, maps and sets are considered empty if they have a `size` of `0`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is empty, else `false`. + * @example + * + * _.isEmpty(null); + * // => true + * + * _.isEmpty(true); + * // => true + * + * _.isEmpty(1); + * // => true + * + * _.isEmpty([1, 2, 3]); + * // => false + * + * _.isEmpty({ 'a': 1 }); + * // => false + */ + function isEmpty(value) { + if (isArrayLike(value) && + (isArray(value) || isString(value) || + isFunction(value.splice) || isArguments(value))) { + return !value.length; + } + return !nativeKeys(value).length; + } + + /** + * Performs a deep comparison between two values to determine if they are + * equivalent. + * + * **Note:** This method supports comparing arrays, array buffers, booleans, + * date objects, error objects, maps, numbers, `Object` objects, regexes, + * sets, strings, symbols, and typed arrays. `Object` objects are compared + * by their own, not inherited, enumerable properties. Functions and DOM + * nodes are compared by strict equality, i.e. `===`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.isEqual(object, other); + * // => true + * + * object === other; + * // => false + */ + function isEqual(value, other) { + return baseIsEqual(value, other); + } + + /** + * Checks if `value` is a finite primitive number. + * + * **Note:** This method is based on + * [`Number.isFinite`](https://mdn.io/Number/isFinite). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. + * @example + * + * _.isFinite(3); + * // => true + * + * _.isFinite(Number.MIN_VALUE); + * // => true + * + * _.isFinite(Infinity); + * // => false + * + * _.isFinite('3'); + * // => false + */ + function isFinite(value) { + return typeof value == 'number' && nativeIsFinite(value); + } + + /** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ + function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; + } + + /** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ + function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; + } + + /** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ + function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); + } + + /** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ + function isObjectLike(value) { + return value != null && typeof value == 'object'; + } + + /** + * Checks if `value` is `NaN`. + * + * **Note:** This method is based on + * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as + * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for + * `undefined` and other non-number values. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + * @example + * + * _.isNaN(NaN); + * // => true + * + * _.isNaN(new Number(NaN)); + * // => true + * + * isNaN(undefined); + * // => true + * + * _.isNaN(undefined); + * // => false + */ + function isNaN(value) { + // An `NaN` primitive is the only value that is not equal to itself. + // Perform the `toStringTag` check first to avoid errors with some + // ActiveX objects in IE. + return isNumber(value) && value != +value; + } + + /** + * Checks if `value` is `null`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `null`, else `false`. + * @example + * + * _.isNull(null); + * // => true + * + * _.isNull(void 0); + * // => false + */ + function isNull(value) { + return value === null; + } + + /** + * Checks if `value` is classified as a `Number` primitive or object. + * + * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are + * classified as numbers, use the `_.isFinite` method. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a number, else `false`. + * @example + * + * _.isNumber(3); + * // => true + * + * _.isNumber(Number.MIN_VALUE); + * // => true + * + * _.isNumber(Infinity); + * // => true + * + * _.isNumber('3'); + * // => false + */ + function isNumber(value) { + return typeof value == 'number' || + (isObjectLike(value) && baseGetTag(value) == numberTag); + } + + /** + * Checks if `value` is classified as a `RegExp` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + * @example + * + * _.isRegExp(/abc/); + * // => true + * + * _.isRegExp('/abc/'); + * // => false + */ + var isRegExp = baseIsRegExp; + + /** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ + function isString(value) { + return typeof value == 'string' || + (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); + } + + /** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ + function isUndefined(value) { + return value === undefined; + } + + /** + * Converts `value` to an array. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to convert. + * @returns {Array} Returns the converted array. + * @example + * + * _.toArray({ 'a': 1, 'b': 2 }); + * // => [1, 2] + * + * _.toArray('abc'); + * // => ['a', 'b', 'c'] + * + * _.toArray(1); + * // => [] + * + * _.toArray(null); + * // => [] + */ + function toArray(value) { + if (!isArrayLike(value)) { + return values(value); + } + return value.length ? copyArray(value) : []; + } + + /** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ + var toInteger = Number; + + /** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ + var toNumber = Number; + + /** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ + function toString(value) { + if (typeof value == 'string') { + return value; + } + return value == null ? '' : (value + ''); + } + + /*------------------------------------------------------------------------*/ + + /** + * Assigns own enumerable string keyed properties of source objects to the + * destination object. Source objects are applied from left to right. + * Subsequent sources overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object` and is loosely based on + * [`Object.assign`](https://mdn.io/Object/assign). + * + * @static + * @memberOf _ + * @since 0.10.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assignIn + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assign({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'c': 3 } + */ + var assign = createAssigner(function(object, source) { + copyObject(source, nativeKeys(source), object); + }); + + /** + * This method is like `_.assign` except that it iterates over own and + * inherited source properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias extend + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assign + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assignIn({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } + */ + var assignIn = createAssigner(function(object, source) { + copyObject(source, nativeKeysIn(source), object); + }); + + /** + * Creates an object that inherits from the `prototype` object. If a + * `properties` object is given, its own enumerable string keyed properties + * are assigned to the created object. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Object + * @param {Object} prototype The object to inherit from. + * @param {Object} [properties] The properties to assign to the object. + * @returns {Object} Returns the new object. + * @example + * + * function Shape() { + * this.x = 0; + * this.y = 0; + * } + * + * function Circle() { + * Shape.call(this); + * } + * + * Circle.prototype = _.create(Shape.prototype, { + * 'constructor': Circle + * }); + * + * var circle = new Circle; + * circle instanceof Circle; + * // => true + * + * circle instanceof Shape; + * // => true + */ + function create(prototype, properties) { + var result = baseCreate(prototype); + return properties == null ? result : assign(result, properties); + } + + /** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ + var defaults = baseRest(function(object, sources) { + object = Object(object); + + var index = -1; + var length = sources.length; + var guard = length > 2 ? sources[2] : undefined; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = keysIn(source); + var propsIndex = -1; + var propsLength = props.length; + + while (++propsIndex < propsLength) { + var key = props[propsIndex]; + var value = object[key]; + + if (value === undefined || + (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; + }); + + /** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ + function has(object, path) { + return object != null && hasOwnProperty.call(object, path); + } + + /** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ + var keys = nativeKeys; + + /** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ + var keysIn = nativeKeysIn; + + /** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ + var pick = flatRest(function(object, paths) { + return object == null ? {} : basePick(object, paths); + }); + + /** + * This method is like `_.get` except that if the resolved value is a + * function it's invoked with the `this` binding of its parent object and + * its result is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to resolve. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; + * + * _.result(object, 'a[0].b.c1'); + * // => 3 + * + * _.result(object, 'a[0].b.c2'); + * // => 4 + * + * _.result(object, 'a[0].b.c3', 'default'); + * // => 'default' + * + * _.result(object, 'a[0].b.c3', _.constant('default')); + * // => 'default' + */ + function result(object, path, defaultValue) { + var value = object == null ? undefined : object[path]; + if (value === undefined) { + value = defaultValue; + } + return isFunction(value) ? value.call(object) : value; + } + + /** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ + function values(object) { + return object == null ? [] : baseValues(object, keys(object)); + } + + /*------------------------------------------------------------------------*/ + + /** + * Converts the characters "&", "<", ">", '"', and "'" in `string` to their + * corresponding HTML entities. + * + * **Note:** No other characters are escaped. To escape additional + * characters use a third-party library like [_he_](https://mths.be/he). + * + * Though the ">" character is escaped for symmetry, characters like + * ">" and "/" don't need escaping in HTML and have no special meaning + * unless they're part of a tag or unquoted attribute value. See + * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) + * (under "semi-related fun fact") for more details. + * + * When working with HTML you should always + * [quote attribute values](http://wonko.com/post/html-escaping) to reduce + * XSS vectors. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escape('fred, barney, & pebbles'); + * // => 'fred, barney, & pebbles' + */ + function escape(string) { + string = toString(string); + return (string && reHasUnescapedHtml.test(string)) + ? string.replace(reUnescapedHtml, escapeHtmlChar) + : string; + } + + /*------------------------------------------------------------------------*/ + + /** + * This method returns the first argument it receives. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'a': 1 }; + * + * console.log(_.identity(object) === object); + * // => true + */ + function identity(value) { + return value; + } + + /** + * Creates a function that invokes `func` with the arguments of the created + * function. If `func` is a property name, the created function returns the + * property value for a given element. If `func` is an array or object, the + * created function returns `true` for elements that contain the equivalent + * source properties, otherwise it returns `false`. + * + * @static + * @since 4.0.0 + * @memberOf _ + * @category Util + * @param {*} [func=_.identity] The value to convert to a callback. + * @returns {Function} Returns the callback. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true })); + * // => [{ 'user': 'barney', 'age': 36, 'active': true }] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, _.iteratee(['user', 'fred'])); + * // => [{ 'user': 'fred', 'age': 40 }] + * + * // The `_.property` iteratee shorthand. + * _.map(users, _.iteratee('user')); + * // => ['barney', 'fred'] + * + * // Create custom iteratee shorthands. + * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) { + * return !_.isRegExp(func) ? iteratee(func) : function(string) { + * return func.test(string); + * }; + * }); + * + * _.filter(['abc', 'def'], /ef/); + * // => ['def'] + */ + var iteratee = baseIteratee; + + /** + * Creates a function that performs a partial deep comparison between a given + * object and `source`, returning `true` if the given object has equivalent + * property values, else `false`. + * + * **Note:** The created function is equivalent to `_.isMatch` with `source` + * partially applied. + * + * Partial comparisons will match empty array and empty object `source` + * values against any array or object value, respectively. See `_.isEqual` + * for a list of supported value comparisons. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Util + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + * @example + * + * var objects = [ + * { 'a': 1, 'b': 2, 'c': 3 }, + * { 'a': 4, 'b': 5, 'c': 6 } + * ]; + * + * _.filter(objects, _.matches({ 'a': 4, 'c': 6 })); + * // => [{ 'a': 4, 'b': 5, 'c': 6 }] + */ + function matches(source) { + return baseMatches(assign({}, source)); + } + + /** + * Adds all own enumerable string keyed function properties of a source + * object to the destination object. If `object` is a function, then methods + * are added to its prototype as well. + * + * **Note:** Use `_.runInContext` to create a pristine `lodash` function to + * avoid conflicts caused by modifying the original. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {Function|Object} [object=lodash] The destination object. + * @param {Object} source The object of functions to add. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.chain=true] Specify whether mixins are chainable. + * @returns {Function|Object} Returns `object`. + * @example + * + * function vowels(string) { + * return _.filter(string, function(v) { + * return /[aeiou]/i.test(v); + * }); + * } + * + * _.mixin({ 'vowels': vowels }); + * _.vowels('fred'); + * // => ['e'] + * + * _('fred').vowels().value(); + * // => ['e'] + * + * _.mixin({ 'vowels': vowels }, { 'chain': false }); + * _('fred').vowels(); + * // => ['e'] + */ + function mixin(object, source, options) { + var props = keys(source), + methodNames = baseFunctions(source, props); + + if (options == null && + !(isObject(source) && (methodNames.length || !props.length))) { + options = source; + source = object; + object = this; + methodNames = baseFunctions(source, keys(source)); + } + var chain = !(isObject(options) && 'chain' in options) || !!options.chain, + isFunc = isFunction(object); + + baseEach(methodNames, function(methodName) { + var func = source[methodName]; + object[methodName] = func; + if (isFunc) { + object.prototype[methodName] = function() { + var chainAll = this.__chain__; + if (chain || chainAll) { + var result = object(this.__wrapped__), + actions = result.__actions__ = copyArray(this.__actions__); + + actions.push({ 'func': func, 'args': arguments, 'thisArg': object }); + result.__chain__ = chainAll; + return result; + } + return func.apply(object, arrayPush([this.value()], arguments)); + }; + } + }); + + return object; + } + + /** + * Reverts the `_` variable to its previous value and returns a reference to + * the `lodash` function. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @returns {Function} Returns the `lodash` function. + * @example + * + * var lodash = _.noConflict(); + */ + function noConflict() { + if (root._ === this) { + root._ = oldDash; + } + return this; + } + + /** + * This method returns `undefined`. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example + * + * _.times(2, _.noop); + * // => [undefined, undefined] + */ + function noop() { + // No operation performed. + } + + /** + * Generates a unique ID. If `prefix` is given, the ID is appended to it. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {string} [prefix=''] The value to prefix the ID with. + * @returns {string} Returns the unique ID. + * @example + * + * _.uniqueId('contact_'); + * // => 'contact_104' + * + * _.uniqueId(); + * // => '105' + */ + function uniqueId(prefix) { + var id = ++idCounter; + return toString(prefix) + id; + } + + /*------------------------------------------------------------------------*/ + + /** + * Computes the maximum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the maximum value. + * @example + * + * _.max([4, 2, 8, 6]); + * // => 8 + * + * _.max([]); + * // => undefined + */ + function max(array) { + return (array && array.length) + ? baseExtremum(array, identity, baseGt) + : undefined; + } + + /** + * Computes the minimum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the minimum value. + * @example + * + * _.min([4, 2, 8, 6]); + * // => 2 + * + * _.min([]); + * // => undefined + */ + function min(array) { + return (array && array.length) + ? baseExtremum(array, identity, baseLt) + : undefined; + } + + /*------------------------------------------------------------------------*/ + + // Add methods that return wrapped values in chain sequences. + lodash.assignIn = assignIn; + lodash.before = before; + lodash.bind = bind; + lodash.chain = chain; + lodash.compact = compact; + lodash.concat = concat; + lodash.create = create; + lodash.defaults = defaults; + lodash.defer = defer; + lodash.delay = delay; + lodash.filter = filter; + lodash.flatten = flatten; + lodash.flattenDeep = flattenDeep; + lodash.iteratee = iteratee; + lodash.keys = keys; + lodash.map = map; + lodash.matches = matches; + lodash.mixin = mixin; + lodash.negate = negate; + lodash.once = once; + lodash.pick = pick; + lodash.slice = slice; + lodash.sortBy = sortBy; + lodash.tap = tap; + lodash.thru = thru; + lodash.toArray = toArray; + lodash.values = values; + + // Add aliases. + lodash.extend = assignIn; + + // Add methods to `lodash.prototype`. + mixin(lodash, lodash); + + /*------------------------------------------------------------------------*/ + + // Add methods that return unwrapped values in chain sequences. + lodash.clone = clone; + lodash.escape = escape; + lodash.every = every; + lodash.find = find; + lodash.forEach = forEach; + lodash.has = has; + lodash.head = head; + lodash.identity = identity; + lodash.indexOf = indexOf; + lodash.isArguments = isArguments; + lodash.isArray = isArray; + lodash.isBoolean = isBoolean; + lodash.isDate = isDate; + lodash.isEmpty = isEmpty; + lodash.isEqual = isEqual; + lodash.isFinite = isFinite; + lodash.isFunction = isFunction; + lodash.isNaN = isNaN; + lodash.isNull = isNull; + lodash.isNumber = isNumber; + lodash.isObject = isObject; + lodash.isRegExp = isRegExp; + lodash.isString = isString; + lodash.isUndefined = isUndefined; + lodash.last = last; + lodash.max = max; + lodash.min = min; + lodash.noConflict = noConflict; + lodash.noop = noop; + lodash.reduce = reduce; + lodash.result = result; + lodash.size = size; + lodash.some = some; + lodash.uniqueId = uniqueId; + + // Add aliases. + lodash.each = forEach; + lodash.first = head; + + mixin(lodash, (function() { + var source = {}; + baseForOwn(lodash, function(func, methodName) { + if (!hasOwnProperty.call(lodash.prototype, methodName)) { + source[methodName] = func; + } + }); + return source; + }()), { 'chain': false }); + + /*------------------------------------------------------------------------*/ + + /** + * The semantic version number. + * + * @static + * @memberOf _ + * @type {string} + */ + lodash.VERSION = VERSION; + + // Add `Array` methods to `lodash.prototype`. + baseEach(['pop', 'join', 'replace', 'reverse', 'split', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) { + var func = (/^(?:replace|split)$/.test(methodName) ? String.prototype : arrayProto)[methodName], + chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru', + retUnwrapped = /^(?:pop|join|replace|shift)$/.test(methodName); + + lodash.prototype[methodName] = function() { + var args = arguments; + if (retUnwrapped && !this.__chain__) { + var value = this.value(); + return func.apply(isArray(value) ? value : [], args); + } + return this[chainName](function(value) { + return func.apply(isArray(value) ? value : [], args); + }); + }; + }); + + // Add chain sequence methods to the `lodash` wrapper. + lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue; + + /*--------------------------------------------------------------------------*/ + + // Some AMD build optimizers, like r.js, check for condition patterns like: + if (true) { + // Expose Lodash on the global object to prevent errors when Lodash is + // loaded by a script tag in the presence of an AMD loader. + // See http://requirejs.org/docs/errors.html#mismatch for more details. + // Use `_.noConflict` to remove Lodash from the global object. + root._ = lodash; + + // Define as an anonymous module so, through path mapping, it can be + // referenced as the "underscore" module. + !(__WEBPACK_AMD_DEFINE_RESULT__ = function() { + return lodash; + }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + } + // Check for `exports` after `define` in case a build optimizer adds it. + else if (freeModule) { + // Export for Node.js. + (freeModule.exports = lodash)._ = lodash; + // Export for CommonJS support. + freeExports._ = lodash; + } + else { + // Export to the global object. + root._ = lodash; + } + }.call(this)); + + /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()), __webpack_require__(59)(module))) + +/***/ }), +/* 59 */ +/***/ (function(module, exports) { + + module.exports = function(module) { + if(!module.webpackPolyfill) { + module.deprecate = function() {}; + module.paths = []; + // module.parent = undefined by default + module.children = []; + module.webpackPolyfill = 1; + } + return module; + } + + +/***/ }), +/* 60 */ +/***/ (function(module, exports, __webpack_require__) { + + var ArrowLink = __webpack_require__(61); + var BoxArrowLink = __webpack_require__(22); + var PlainLink = __webpack_require__(23); + var OwlDisjointWith = __webpack_require__(46); + var SetOperatorProperty = __webpack_require__(56); + + /** + * Stores the passed properties in links. + * @returns {Function} + */ + module.exports = (function (){ + var linkCreator = {}; + + /** + * Creates links from the passed properties. + * @param properties + */ + linkCreator.createLinks = function ( properties ){ + var links = groupPropertiesToLinks(properties); + + for ( var i = 0, l = links.length; i < l; i++ ) { + var link = links[i]; + + countAndSetLayers(link, links); + countAndSetLoops(link, links); + } + + return links; + }; + + /** + * Creates links of properties and - if existing - their inverses. + * @param properties the properties + * @returns {Array} + */ + function groupPropertiesToLinks( properties ){ + var links = [], + property, + addedProperties = __webpack_require__(62)(); + + for ( var i = 0, l = properties.length; i < l; i++ ) { + property = properties[i]; + + if ( !addedProperties.has(property) ) { + var link = createLink(property); + + property.link(link); + if ( property.inverse() ) { + property.inverse().link(link); + } + + links.push(link); + + addedProperties.add(property); + if ( property.inverse() ) { + addedProperties.add(property.inverse()); + } + } + } + + return links; + } + + function countAndSetLayers( link, allLinks ){ + var layer, + layers, + i, l; + + if ( typeof link.layers() === "undefined" ) { + layers = []; + + // Search for other links that are another layer + for ( i = 0, l = allLinks.length; i < l; i++ ) { + var otherLink = allLinks[i]; + if ( link.domain() === otherLink.domain() && link.range() === otherLink.range() || + link.domain() === otherLink.range() && link.range() === otherLink.domain() ) { + layers.push(otherLink); + } + } + + // Set the results on each of the layers + for ( i = 0, l = layers.length; i < l; ++i ) { + layer = layers[i]; + + layer.layerIndex(i); + layer.layers(layers); + } + } + } + + function countAndSetLoops( link, allLinks ){ + var loop, + loops, + i, l; + + if ( typeof link.loops() === "undefined" ) { + loops = []; + + // Search for other links that are also loops of the same node + for ( i = 0, l = allLinks.length; i < l; i++ ) { + var otherLink = allLinks[i]; + if ( link.domain() === otherLink.domain() && link.domain() === otherLink.range() ) { + loops.push(otherLink); + } + } + + // Set the results on each of the loops + for ( i = 0, l = loops.length; i < l; ++i ) { + loop = loops[i]; + + loop.loopIndex(i); + loop.loops(loops); + } + } + } + + function createLink( property ){ + var domain = property.domain(); + var range = property.range(); + + if ( property instanceof OwlDisjointWith ) { + return new PlainLink(domain, range, property); + } else if ( property instanceof SetOperatorProperty ) { + return new BoxArrowLink(domain, range, property); + } + return new ArrowLink(domain, range, property); + } + + return function (){ + // Return a function to keep module interfaces consistent + return linkCreator; + }; + })(); + + +/***/ }), +/* 61 */ +/***/ (function(module, exports, __webpack_require__) { + + var PlainLink = __webpack_require__(23); + + + module.exports = ArrowLink; + + function ArrowLink( domain, range, property ){ + PlainLink.apply(this, arguments); + } + + ArrowLink.prototype = Object.create(PlainLink.prototype); + ArrowLink.prototype.constructor = ArrowLink; + + + ArrowLink.prototype.draw = function ( linkGroup, markerContainer ){ + var property = this.label().property(); + var inverse = this.label().inverse(); + + createPropertyMarker(markerContainer, property); + if ( inverse ) { + createInverseMarker(markerContainer, inverse); + } + + PlainLink.prototype.draw.apply(this, arguments); + + // attach the markers to the link + linkGroup.attr("marker-end", "url(#" + property.markerId() + ")"); + if ( inverse ) { + linkGroup.attr("marker-start", "url(#" + inverse.markerId() + ")"); + } + }; + + function createPropertyMarker( markerContainer, property ){ + var marker = appendBasicMarker(markerContainer, property); + //marker.attr("refX", 12); + var m1X = -12; + var m1Y = 8; + var m2X = -12; + var m2Y = -8; + marker.append("path") + //.attr("d", "M0,-8L12,0L0,8Z") + .attr("d", "M0,0L " + m1X + "," + m1Y + "L" + m2X + "," + m2Y + "L" + 0 + "," + 0) + .classed(property.markerType(), true); + + property.markerElement(marker); + } + + function createInverseMarker( markerContainer, inverse ){ + var m1X = -12; + var m1Y = 8; + var m2X = -12; + var m2Y = -8; + var inverseMarker = appendBasicMarker(markerContainer, inverse); + inverseMarker.append("path") + //.attr("d", "M12,-8L0,0L12,8Z") + .attr("d", "M0,0L " + -m1X + "," + -m1Y + "L" + -m2X + "," + -m2Y + "L" + 0 + "," + 0) + .classed(inverse.markerType(), true); + + inverse.markerElement(inverseMarker); + } + + function appendBasicMarker( markerContainer, property ){ + return markerContainer.append("marker") + .datum(property) + .attr("id", property.markerId()) + + .attr("viewBox", "-14 -10 28 20") + .attr("markerWidth", 10) + .attr("markerHeight", 10) + //.attr("markerUnits", "userSpaceOnUse") + .attr("orient", "auto"); + } + + +/***/ }), +/* 62 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {/** + * A simple incomplete encapsulation of the d3 set, which is able to store webvowl + * elements by using their id. + */ + module.exports = function ( array ){ + + var set = {}, + d3Set = d3.set(array); + + set.has = function ( webvowlElement ){ + return d3Set.has(webvowlElement.id()); + }; + + set.add = function ( webvowlElement ){ + return d3Set.add(webvowlElement.id()); + }; + + set.remove = function ( webvowlElement ){ + return d3Set.remove(webvowlElement.id()); + }; + + set.empty = function (){ + return d3Set.empty(); + }; + + set.size = function (){ + return d3Set.size(); + }; + + return set; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 63 */ +/***/ (function(module, exports, __webpack_require__) { + + var BaseProperty = __webpack_require__(42); + var BaseNode = __webpack_require__(9); + var DatatypeNode = __webpack_require__(35); + var Thing = __webpack_require__(31); + var ObjectProperty = __webpack_require__(50); + var DatatypeProperty = __webpack_require__(44); + var RdfsSubClassOf = __webpack_require__(55); + var Label = __webpack_require__(24); + + + var tools = {}; + module.exports = function (){ + return tools; + }; + + tools.isLabel = function ( element ){ + return element instanceof Label; + }; + + tools.isNode = function ( element ){ + return element instanceof BaseNode; + }; + + tools.isDatatype = function ( node ){ + return node instanceof DatatypeNode; + }; + + tools.isThing = function ( node ){ + return node instanceof Thing; + }; + + tools.isProperty = function ( element ){ + return element instanceof BaseProperty; + }; + + tools.isObjectProperty = function ( element ){ + return element instanceof ObjectProperty; + }; + + tools.isDatatypeProperty = function ( element ){ + return element instanceof DatatypeProperty; + }; + + tools.isRdfsSubClassOf = function ( property ){ + return property instanceof RdfsSubClassOf; + }; + + +/***/ }), +/* 64 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {module.exports = function (){ + var options = {}, + data, + graphContainerSelector, + classDistance = 200, + datatypeDistance = 120, + loopDistance = 150, + charge = -500, + gravity = 0.025, + linkStrength = 1, + height = 600, + width = 800, + selectionModules = [], + filterModules = [], + minMagnification = 0.01, + maxMagnification = 4, + compactNotation = false, + dynamicLabelWidth = true, + // some filters + literalFilter, + // menus + gravityMenu, + filterMenu, + loadingModule, + modeMenu, + pausedMenu, + pickAndPinModule, + resetMenu, + searchMenu, + ontologyMenu, + sidebar, + leftSidebar, + editSidebar, + navigationMenu, + exportMenu, + graphObject, + zoomSlider, + datatypeFilter, + focuserModule, + colorExternalsModule, + compactNotationModule, + objectPropertyFilter, + subclassFilter, + setOperatorFilter, + maxLabelWidth = 120, + metadataObject = {}, + generalOntologyMetaData = {}, + disjointPropertyFilter, + rectangularRep = false, + warningModule, + prefixModule, + drawPropertyDraggerOnHover = true, + showDraggerObject = false, + directInputModule, + scaleNodesByIndividuals = true, + useAccuracyHelper = true, + showRenderingStatistic = true, + showInputModality = false, + hideDebugOptions = true, + nodeDegreeFilter, + debugMenu, + + supportedDatatypes = ["rdfs:Literal", "xsd:boolean", "xsd:double", "xsd:integer", "xsd:string", "undefined"], + supportedClasses = ["owl:Thing", "owl:Class", "owl:DeprecatedClass"], + supportedProperties = ["owl:objectProperty", + "rdfs:subClassOf", + "owl:disjointWith", + "owl:allValuesFrom", + "owl:someValuesFrom" + ], + prefixList = { + rdf: 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', + rdfs: 'http://www.w3.org/2000/01/rdf-schema#', + owl: 'http://www.w3.org/2002/07/owl#', + xsd: 'http://www.w3.org/2001/XMLSchema#', + dc: 'http://purl.org/dc/elements/1.1/#', + xml: 'http://www.w3.org/XML/1998/namespace' + }; + + options.clearMetaObject = function (){ + generalOntologyMetaData = {}; + }; + options.clearGeneralMetaObject = function (){ + generalOntologyMetaData = {}; + }; + + options.debugMenu = function ( val ){ + if ( !arguments.length ) return debugMenu; + debugMenu = val; + }; + + options.getHideDebugFeatures = function (){ + return hideDebugOptions; + }; + options.executeHiddenDebugFeatuers = function (){ + hideDebugOptions = !hideDebugOptions; + d3.selectAll(".debugOption").classed("hidden", hideDebugOptions); + if ( hideDebugOptions === false ) { + graphObject.setForceTickFunctionWithFPS(); + } + else { + graphObject.setDefaultForceTickFunction(); + } + if ( debugMenu ) { + debugMenu.updateSettings(); + } + options.setHideDebugFeaturesForDefaultObject(hideDebugOptions); + }; + + + options.addOrUpdateGeneralObjectEntry = function ( property, value ){ + if ( generalOntologyMetaData.hasOwnProperty(property) ) { + //console.log("Updating Property:"+ property); + if ( property === "iri" ) { + if ( validURL(value) === false ) { + warningModule.showWarning("Invalid Ontology IRI", "Input IRI does not represent an URL", "Restoring previous IRI for ontology", 1, false); + return false; + } + } + generalOntologyMetaData[property] = value; + } else { + generalOntologyMetaData[property] = value; + } + return true; + }; + + options.getGeneralMetaObjectProperty = function ( property ){ + if ( generalOntologyMetaData.hasOwnProperty(property) ) { + return generalOntologyMetaData[property]; + } + }; + + options.getGeneralMetaObject = function (){ + return generalOntologyMetaData; + }; + + options.addOrUpdateMetaObjectEntry = function ( property, value ){ + + if ( metadataObject.hasOwnProperty(property) ) { + metadataObject[property] = value; + } else { + metadataObject[property] = value; + } + }; + + options.getMetaObjectProperty = function ( property ){ + if ( metadataObject.hasOwnProperty(property) ) { + return metadataObject[property]; + } + }; + options.getMetaObject = function (){ + return metadataObject; + }; + + + options.prefixList = function (){ + return prefixList; + }; + options.addPrefix = function ( prefix, url ){ + prefixList[prefix] = url; + }; + + function validURL( str ){ + var urlregex = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/; + return urlregex.test(str); + } + + options.updatePrefix = function ( oldPrefix, newPrefix, oldURL, newURL ){ + if ( oldPrefix === newPrefix && oldURL === newURL ) { + // console.log("Nothing to update"); + return true; + } + if ( oldPrefix === newPrefix && oldURL !== newURL && validURL(newURL) === true ) { + // console.log("Update URL"); + prefixList[oldPrefix] = newURL; + } else if ( oldPrefix === newPrefix && oldURL !== newURL && validURL(newURL) === false ) { + if ( validURL(newURL) === false ) { + warningModule.showWarning("Invalid Prefix IRI", "Input IRI does not represent an IRI", "You should enter a valid IRI in form of a URL", 1, false); + return false; + } + + return false; + } + if ( oldPrefix !== newPrefix && validURL(newURL) === true ) { + + // sanity check + if ( prefixList.hasOwnProperty(newPrefix) ) { + // console.log("Already have this prefix!"); + warningModule.showWarning("Prefix Already Exist", "Prefix: " + newPrefix + " is already defined", "You should use an other one", 1, false); + return false; + } + options.removePrefix(oldPrefix); + options.addPrefix(newPrefix, newURL); + editSidebar.updateEditDeleteButtonIds(oldPrefix, newPrefix); + return true; + } + + // console.log("Is new URL ("+newURL+") valid? >> "+validURL(newURL)); + if ( validURL(newURL) === false ) { + warningModule.showWarning("Invalid Prefix IRI", "Input IRI does not represent an URL", "You should enter a valid URL", 1, false); + + } + return false; + }; + + options.removePrefix = function ( prefix ){ + delete prefixList[prefix]; + }; + + + options.supportedDatatypes = function (){ + return supportedDatatypes; + }; + options.supportedClasses = function (){ + return supportedClasses; + }; + options.supportedProperties = function (){ + return supportedProperties; + }; + + options.datatypeFilter = function ( val ){ + if ( !arguments.length ) return datatypeFilter; + datatypeFilter = val; + }; + + options.showDraggerObject = function ( val ){ + if ( !arguments.length ) { + return showDraggerObject; + } + showDraggerObject = val; + }; + options.useAccuracyHelper = function ( val ){ + if ( !arguments.length ) { + return useAccuracyHelper; + } + useAccuracyHelper = val; + }; + options.showAccuracyHelper = function ( val ){ + if ( !arguments.length ) { + return options.showDraggerObject(); + } + options.showDraggerObject(val); + }; + options.showRenderingStatistic = function ( val ){ + if ( !arguments.length ) { + return showRenderingStatistic; + } + showRenderingStatistic = val; + }; + options.showInputModality = function ( val ){ + if ( !arguments.length ) { + return showInputModality; + } + showInputModality = val; + }; + + options.drawPropertyDraggerOnHover = function ( val ){ + if ( !arguments.length ) return drawPropertyDraggerOnHover; + drawPropertyDraggerOnHover = val; + }; + + options.warningModule = function ( val ){ + if ( !arguments.length ) return warningModule; + warningModule = val; + }; + options.directInputModule = function ( val ){ + if ( !arguments.length ) return directInputModule; + directInputModule = val; + }; + options.prefixModule = function ( val ){ + if ( !arguments.length ) return prefixModule; + prefixModule = val; + }; + + options.focuserModule = function ( val ){ + if ( !arguments.length ) return focuserModule; + focuserModule = val; + }; + options.colorExternalsModule = function ( val ){ + if ( !arguments.length ) return colorExternalsModule; + colorExternalsModule = val; + }; + options.compactNotationModule = function ( val ){ + if ( !arguments.length ) return compactNotationModule; + compactNotationModule = val; + }; + + options.maxLabelWidth = function ( val ){ + if ( !arguments.length ) return maxLabelWidth; + maxLabelWidth = val; + }; + options.objectPropertyFilter = function ( val ){ + if ( !arguments.length ) return objectPropertyFilter; + objectPropertyFilter = val; + }; + options.disjointPropertyFilter = function ( val ){ + if ( !arguments.length ) return disjointPropertyFilter; + disjointPropertyFilter = val; + }; + options.subclassFilter = function ( val ){ + if ( !arguments.length ) return subclassFilter; + subclassFilter = val; + }; + options.setOperatorFilter = function ( val ){ + if ( !arguments.length ) return setOperatorFilter; + setOperatorFilter = val; + }; + options.leftSidebar = function ( val ){ + if ( !arguments.length ) return leftSidebar; + leftSidebar = val; + }; + options.editSidebar = function ( val ){ + if ( !arguments.length ) return editSidebar; + editSidebar = val; + }; + + options.zoomSlider = function ( val ){ + if ( !arguments.length ) return zoomSlider; + zoomSlider = val; + }; + + options.graphObject = function ( val ){ + if ( !arguments.length ) return graphObject; + graphObject = val; + }; + + + var defaultOptionsConfig = {}; + defaultOptionsConfig.sidebar = "1"; + defaultOptionsConfig.doc = -1; + defaultOptionsConfig.cd = 200; + defaultOptionsConfig.dd = 120; + defaultOptionsConfig.editorMode = "false"; + defaultOptionsConfig.filter_datatypes = "false"; + defaultOptionsConfig.filter_objectProperties = "false"; + defaultOptionsConfig.filter_sco = "false"; + defaultOptionsConfig.filter_disjoint = "true"; + defaultOptionsConfig.filter_setOperator = "false"; + defaultOptionsConfig.mode_dynamic = "true"; + defaultOptionsConfig.mode_scaling = "true"; + defaultOptionsConfig.mode_compact = "false"; + defaultOptionsConfig.mode_colorExt = "true"; + defaultOptionsConfig.mode_multiColor = "false"; + defaultOptionsConfig.debugFeatures = "false"; + defaultOptionsConfig.rect = 0; + + + options.initialConfig = function (){ + var initCfg = {}; + initCfg.sidebar = "1"; + initCfg.doc = -1; + initCfg.cd = 200; + initCfg.dd = 120; + initCfg.editorMode = "false"; + initCfg.filter_datatypes = "false"; + initCfg.filter_objectProperties = "false"; + initCfg.filter_sco = "false"; + initCfg.filter_disjoint = "true"; + initCfg.filter_setOperator = "false"; + initCfg.mode_dynamic = "true"; + initCfg.mode_scaling = "true"; + initCfg.mode_compact = "false"; + initCfg.mode_colorExt = "true"; + initCfg.mode_multiColor = "false"; + initCfg.mode_pnp = "false"; + initCfg.debugFeatures = "false"; + initCfg.rect = 0; + return initCfg; + }; + + options.setEditorModeForDefaultObject = function ( val ){ + defaultOptionsConfig.editorMode = String(val); + }; + options.setHideDebugFeaturesForDefaultObject = function ( val ){ + defaultOptionsConfig.debugFeatures = String(!val); + }; + + function updateConfigObject(){ + defaultOptionsConfig.sidebar = options.sidebar().getSidebarVisibility(); + defaultOptionsConfig.cd = options.classDistance(); + defaultOptionsConfig.dd = options.datatypeDistance(); + defaultOptionsConfig.filter_datatypes = String(options.filterMenu().getCheckBoxValue("datatypeFilterCheckbox")); + defaultOptionsConfig.filter_sco = String(options.filterMenu().getCheckBoxValue("subclassFilterCheckbox")); + defaultOptionsConfig.filter_disjoint = String(options.filterMenu().getCheckBoxValue("disjointFilterCheckbox")); + defaultOptionsConfig.filter_setOperator = String(options.filterMenu().getCheckBoxValue("setoperatorFilterCheckbox")); + defaultOptionsConfig.filter_objectProperties = String(options.filterMenu().getCheckBoxValue("objectPropertyFilterCheckbox")); + defaultOptionsConfig.mode_dynamic = String(options.dynamicLabelWidth()); + defaultOptionsConfig.mode_scaling = String(options.modeMenu().getCheckBoxValue("nodescalingModuleCheckbox")); + defaultOptionsConfig.mode_compact = String(options.modeMenu().getCheckBoxValue("compactnotationModuleCheckbox")); + defaultOptionsConfig.mode_colorExt = String(options.modeMenu().getCheckBoxValue("colorexternalsModuleCheckbox")); + defaultOptionsConfig.mode_multiColor = String(options.modeMenu().colorModeState()); + defaultOptionsConfig.mode_pnp = String(options.modeMenu().getCheckBoxValue("pickandpinModuleCheckbox")); + defaultOptionsConfig.rect = 0; + } + + options.defaultConfig = function (){ + updateConfigObject(); + return defaultOptionsConfig; + }; + + options.exportMenu = function ( val ){ + if ( !arguments.length ) return exportMenu; + exportMenu = val; + }; + + options.rectangularRepresentation = function ( val ){ + if ( !arguments.length ) { + return rectangularRep; + } else { + var intVal = parseInt(val); + if ( intVal === 0 ) { + rectangularRep = false; + } else { + rectangularRep = true; + } + } + }; + + options.dynamicLabelWidth = function ( val ){ + if ( !arguments.length ) + return dynamicLabelWidth; + else { + dynamicLabelWidth = val; + } + }; + options.sidebar = function ( s ){ + if ( !arguments.length ) return sidebar; + sidebar = s; + return options; + + }; + + options.navigationMenu = function ( m ){ + if ( !arguments.length ) return navigationMenu; + navigationMenu = m; + return options; + + }; + + options.ontologyMenu = function ( m ){ + if ( !arguments.length ) return ontologyMenu; + ontologyMenu = m; + return options; + }; + + options.searchMenu = function ( m ){ + if ( !arguments.length ) return searchMenu; + searchMenu = m; + return options; + }; + + options.resetMenu = function ( m ){ + if ( !arguments.length ) return resetMenu; + resetMenu = m; + return options; + }; + + options.pausedMenu = function ( m ){ + if ( !arguments.length ) return pausedMenu; + pausedMenu = m; + return options; + }; + + options.pickAndPinModule = function ( m ){ + if ( !arguments.length ) return pickAndPinModule; + pickAndPinModule = m; + return options; + }; + + options.gravityMenu = function ( m ){ + if ( !arguments.length ) return gravityMenu; + gravityMenu = m; + return options; + }; + + options.filterMenu = function ( m ){ + if ( !arguments.length ) return filterMenu; + filterMenu = m; + return options; + }; + + options.modeMenu = function ( m ){ + if ( !arguments.length ) return modeMenu; + modeMenu = m; + return options; + }; + + options.charge = function ( p ){ + if ( !arguments.length ) return charge; + charge = +p; + return options; + }; + + options.classDistance = function ( p ){ + if ( !arguments.length ) return classDistance; + classDistance = +p; + return options; + }; + + options.compactNotation = function ( p ){ + + if ( !arguments.length ) return compactNotation; + compactNotation = p; + return options; + }; + + options.data = function ( p ){ + if ( !arguments.length ) return data; + data = p; + return options; + }; + + options.datatypeDistance = function ( p ){ + if ( !arguments.length ) return datatypeDistance; + datatypeDistance = +p; + return options; + }; + + options.filterModules = function ( p ){ + if ( !arguments.length ) return filterModules; + filterModules = p; + return options; + }; + + options.graphContainerSelector = function ( p ){ + if ( !arguments.length ) return graphContainerSelector; + graphContainerSelector = p; + return options; + }; + + options.gravity = function ( p ){ + if ( !arguments.length ) return gravity; + gravity = +p; + return options; + }; + + options.height = function ( p ){ + if ( !arguments.length ) return height; + height = +p; + return options; + }; + + options.linkStrength = function ( p ){ + if ( !arguments.length ) return linkStrength; + linkStrength = +p; + return options; + }; + + options.loopDistance = function ( p ){ + if ( !arguments.length ) return loopDistance; + loopDistance = p; + return options; + }; + + options.minMagnification = function ( p ){ + if ( !arguments.length ) return minMagnification; + minMagnification = +p; + return options; + }; + + options.maxMagnification = function ( p ){ + if ( !arguments.length ) return maxMagnification; + maxMagnification = +p; + return options; + }; + + options.scaleNodesByIndividuals = function ( p ){ + if ( !arguments.length ) return scaleNodesByIndividuals; + scaleNodesByIndividuals = p; + return options; + }; + + options.selectionModules = function ( p ){ + if ( !arguments.length ) return selectionModules; + selectionModules = p; + return options; + }; + + options.width = function ( p ){ + if ( !arguments.length ) return width; + width = +p; + return options; + }; + + options.literalFilter = function ( p ){ + if ( !arguments.length ) return literalFilter; + literalFilter = p; + return options; + }; + options.nodeDegreeFilter = function ( p ){ + if ( !arguments.length ) return nodeDegreeFilter; + nodeDegreeFilter = p; + return options; + }; + + options.loadingModule = function ( p ){ + if ( !arguments.length ) return loadingModule; + loadingModule = p; + return options; + }; + + // define url loadable options; + // update all set values in the default object + options.setOptionsFromURL = function ( opts, changeEditFlag ){ + if ( opts.sidebar !== undefined ) sidebar.showSidebar(parseInt(opts.sidebar), true); + if ( opts.doc ) { + var asInt = parseInt(opts.doc); + filterMenu.setDegreeSliderValue(asInt); + graphObject.setGlobalDOF(asInt); + // reset the value to be -1; + defaultOptionsConfig.doc = -1; + } + var settingFlag = false; + if ( opts.editorMode ) { + if ( opts.editorMode === "true" ) settingFlag = true; + d3.select("#editorModeModuleCheckbox").node().checked = settingFlag; + + if ( changeEditFlag && changeEditFlag === true ) { + graphObject.editorMode(settingFlag); + } + + // update config object + defaultOptionsConfig.editorMode = opts.editorMode; + + } + if ( opts.cd ) { // class distance + options.classDistance(opts.cd); // class distance + defaultOptionsConfig.cd = opts.cd; + } + if ( opts.dd ) { // data distance + options.datatypeDistance(opts.dd); + defaultOptionsConfig.cd = opts.cd; + } + if ( opts.cd || opts.dd ) options.gravityMenu().reset(); // reset the values so the slider is updated; + + + settingFlag = false; + if ( opts.filter_datatypes ) { + if ( opts.filter_datatypes === "true" ) settingFlag = true; + filterMenu.setCheckBoxValue("datatypeFilterCheckbox", settingFlag); + defaultOptionsConfig.filter_datatypes = opts.filter_datatypes; + } + if ( opts.debugFeatures ) { + if ( opts.debugFeatures === "true" ) settingFlag = true; + hideDebugOptions = settingFlag; + if ( options.getHideDebugFeatures() === false ) { + options.executeHiddenDebugFeatuers(); + } + defaultOptionsConfig.debugFeatures = opts.debugFeatures; + } + + settingFlag = false; + if ( opts.filter_objectProperties ) { + if ( opts.filter_objectProperties === "true" ) settingFlag = true; + filterMenu.setCheckBoxValue("objectPropertyFilterCheckbox", settingFlag); + defaultOptionsConfig.filter_objectProperties = opts.filter_objectProperties; + } + settingFlag = false; + if ( opts.filter_sco ) { + if ( opts.filter_sco === "true" ) settingFlag = true; + filterMenu.setCheckBoxValue("subclassFilterCheckbox", settingFlag); + defaultOptionsConfig.filter_sco = opts.filter_sco; + } + settingFlag = false; + if ( opts.filter_disjoint ) { + if ( opts.filter_disjoint === "true" ) settingFlag = true; + filterMenu.setCheckBoxValue("disjointFilterCheckbox", settingFlag); + defaultOptionsConfig.filter_disjoint = opts.filter_disjoint; + } + settingFlag = false; + if ( opts.filter_setOperator ) { + if ( opts.filter_setOperator === "true" ) settingFlag = true; + filterMenu.setCheckBoxValue("setoperatorFilterCheckbox", settingFlag); + defaultOptionsConfig.filter_setOperator = opts.filter_setOperator; + } + filterMenu.updateSettings(); + + // modesMenu + settingFlag = false; + if ( opts.mode_dynamic ) { + if ( opts.mode_dynamic === "true" ) settingFlag = true; + modeMenu.setDynamicLabelWidth(settingFlag); + dynamicLabelWidth = settingFlag; + defaultOptionsConfig.mode_dynamic = opts.mode_dynamic; + } + // settingFlag=false; + // THIS SHOULD NOT BE SET USING THE OPTIONS ON THE URL + // if (opts.mode_picnpin) { + // graph.options().filterMenu().setCheckBoxValue("pickandpin ModuleCheckbox", settingFlag); + // } + + settingFlag = false; + if ( opts.mode_pnp ) { + if ( opts.mode_pnp === "true" ) settingFlag = true; + modeMenu.setCheckBoxValue("pickandpinModuleCheckbox", settingFlag); + defaultOptionsConfig.mode_pnp = opts.mode_pnp; + } + + settingFlag = false; + if ( opts.mode_scaling ) { + if ( opts.mode_scaling === "true" ) settingFlag = true; + modeMenu.setCheckBoxValue("nodescalingModuleCheckbox", settingFlag); + defaultOptionsConfig.mode_scaling = opts.mode_scaling; + } + + settingFlag = false; + if ( opts.mode_compact ) { + if ( opts.mode_compact === "true" ) settingFlag = true; + modeMenu.setCheckBoxValue("compactnotationModuleCheckbox", settingFlag); + defaultOptionsConfig.mode_compact = opts.mode_compact; + } + + settingFlag = false; + if ( opts.mode_colorExt ) { + if ( opts.mode_colorExt === "true" ) settingFlag = true; + modeMenu.setCheckBoxValue("colorexternalsModuleCheckbox", settingFlag); + defaultOptionsConfig.mode_colorExt = opts.mode_colorExt; + } + + settingFlag = false; + if ( opts.mode_multiColor ) { + if ( opts.mode_multiColor === "true" ) settingFlag = true; + modeMenu.setColorSwitchStateUsingURL(settingFlag); + defaultOptionsConfig.mode_multiColor = opts.mode_multiColor; + } + modeMenu.updateSettingsUsingURL(); + options.rectangularRepresentation(opts.rect); + }; + + return options; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 65 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var OwlDisjointWith = __webpack_require__(46); + var attributeParser = __webpack_require__(66)(); + var equivalentPropertyMerger = __webpack_require__(67)(); + var nodePrototypeMap = __webpack_require__(5)(); + var propertyPrototypeMap = __webpack_require__(40)(); + + /** + * Encapsulates the parsing and preparation logic of the input data. + * @param graph the graph object that will be passed to the elements + * @returns {{}} + */ + module.exports = function ( graph ){ + var parser = {}, + nodes, + properties, + classMap, + settingsData, + settingsImported = false, + settingsImportGraphZoomAndTranslation = false, + dictionary = [], + propertyMap; + + parser.getDictionary = function (){ + return dictionary; + }; + + parser.setDictionary = function ( d ){ + dictionary = d; + }; + + parser.settingsImported = function (){ + return settingsImported; + }; + parser.settingsImportGraphZoomAndTranslation = function (){ + return settingsImportGraphZoomAndTranslation; + }; + + parser.parseSettings = function (){ + settingsImported = true; + settingsImportGraphZoomAndTranslation = false; + + if ( !settingsData ) { + settingsImported = false; + return; + } + /** global settings **********************************************************/ + if ( settingsData.global ) { + if ( settingsData.global.zoom ) { + var zoomFactor = settingsData.global.zoom; + graph.setZoom(zoomFactor); + settingsImportGraphZoomAndTranslation = true; + } + + if ( settingsData.global.translation ) { + var translation = settingsData.global.translation; + graph.setTranslation(translation); + settingsImportGraphZoomAndTranslation = true; + } + + if ( settingsData.global.paused ) { + var paused = settingsData.global.paused; + graph.options().pausedMenu().setPauseValue(paused); + } + } + /** Gravity Settings **********************************************************/ + if ( settingsData.gravity ) { + if ( settingsData.gravity.classDistance ) { + var classDistance = settingsData.gravity.classDistance; + graph.options().classDistance(classDistance); + } + if ( settingsData.gravity.datatypeDistance ) { + var datatypeDistance = settingsData.gravity.datatypeDistance; + graph.options().datatypeDistance(datatypeDistance); + } + graph.options().gravityMenu().reset(); // reads the options values and sets the gui values + } + + + // shared variable declaration + + var i; + var id; + var checked; + /** Filter Settings **********************************************************/ + if ( settingsData.filter ) { + // checkbox settings + if ( settingsData.filter.checkBox ) { + var filter_cb = settingsData.filter.checkBox; + for ( i = 0; i < filter_cb.length; i++ ) { + id = filter_cb[i].id; + checked = filter_cb[i].checked; + graph.options().filterMenu().setCheckBoxValue(id, checked); + } + } + // node degree filter settings + if ( settingsData.filter.degreeSliderValue ) { + var degreeSliderValue = settingsData.filter.degreeSliderValue; + graph.options().filterMenu().setDegreeSliderValue(degreeSliderValue); + } + graph.options().filterMenu().updateSettings(); + } + + /** Modes Setting **********************************************************/ + if ( settingsData.modes ) { + // checkbox settings + if ( settingsData.modes.checkBox ) { + var modes_cb = settingsData.modes.checkBox; + for ( i = 0; i < modes_cb.length; i++ ) { + id = modes_cb[i].id; + checked = modes_cb[i].checked; + graph.options().modeMenu().setCheckBoxValue(id, checked); + } + } + // color switch settings + var state = settingsData.modes.colorSwitchState; + // state could be undefined + if ( state === true || state === false ) { + graph.options().modeMenu().setColorSwitchState(state); + } + graph.options().modeMenu().updateSettings(); + } + graph.updateStyle(); // updates graph representation(setting charges and distances) + }; + + + /** + * Parses the ontology data and preprocesses it (e.g. connecting inverse properties and so on). + * @param ontologyData the loaded ontology json file + */ + parser.parse = function ( ontologyData ){ + if ( !ontologyData ) { + nodes = []; + properties = []; + dictionary = []; + return; + } + dictionary = []; + if ( ontologyData.settings ) settingsData = ontologyData.settings; + else settingsData = undefined; + + var classes = combineClasses(ontologyData.class, ontologyData.classAttribute), + datatypes = combineClasses(ontologyData.datatype, ontologyData.datatypeAttribute), + combinedClassesAndDatatypes = classes.concat(datatypes), + unparsedProperties = ontologyData.property || [], + combinedProperties; + + // Inject properties for unions, intersections, ... + addSetOperatorProperties(combinedClassesAndDatatypes, unparsedProperties); + combinedProperties = combineProperties(unparsedProperties, ontologyData.propertyAttribute); + classMap = mapElements(combinedClassesAndDatatypes); + propertyMap = mapElements(combinedProperties); + mergeRangesOfEquivalentProperties(combinedProperties, combinedClassesAndDatatypes); + + // Process the graph data + convertTypesToIris(combinedClassesAndDatatypes, ontologyData.namespace); + convertTypesToIris(combinedProperties, ontologyData.namespace); + nodes = createNodeStructure(combinedClassesAndDatatypes, classMap); + properties = createPropertyStructure(combinedProperties, classMap, propertyMap); + }; + + /** + * @return {Array} the preprocessed nodes + */ + parser.nodes = function (){ + return nodes; + }; + + /** + * @returns {Array} the preprocessed properties + */ + parser.properties = function (){ + return properties; + }; + + /** + * Combines the passed objects with its attributes and prototypes. This also applies + * attributes defined in the base of the prototype. + */ + function combineClasses( baseObjects, attributes ){ + var combinations = []; + var prototypeMap = createLowerCasePrototypeMap(nodePrototypeMap); + + if ( baseObjects ) { + baseObjects.forEach(function ( element ){ + var matchingAttribute; + + if ( attributes ) { + // Look for an attribute with the same id and merge them + for ( var i = 0; i < attributes.length; i++ ) { + var attribute = attributes[i]; + if ( element.id === attribute.id ) { + matchingAttribute = attribute; + break; + } + } + addAdditionalAttributes(element, matchingAttribute); + } + + // Then look for a prototype to add its properties + var Prototype = prototypeMap.get(element.type.toLowerCase()); + + if ( Prototype ) { + addAdditionalAttributes(element, Prototype); // TODO might be unnecessary + + var node = new Prototype(graph); + node.annotations(element.annotations) + .baseIri(element.baseIri) + .comment(element.comment) + .complement(element.complement) + .disjointUnion(element.disjointUnion) + .description(element.description) + .equivalents(element.equivalent) + .id(element.id) + .intersection(element.intersection) + .label(element.label) + // .type(element.type) Ignore, because we predefined it + .union(element.union) + .iri(element.iri); + if ( element.pos ) { + node.x = element.pos[0]; + node.y = element.pos[1]; + node.px = node.x; + node.py = node.y; + } + //class element pin + var elementPinned = element.pinned; + if ( elementPinned === true ) { + node.pinned(true); + graph.options().pickAndPinModule().addPinnedElement(node); + } + // Create node objects for all individuals + if ( element.individuals ) { + element.individuals.forEach(function ( individual ){ + var individualNode = new Prototype(graph); + individualNode.label(individual.labels) + .iri(individual.iri); + + node.individuals().push(individualNode); + }); + } + + if ( element.attributes ) { + var deduplicatedAttributes = d3.set(element.attributes.concat(node.attributes())); + node.attributes(deduplicatedAttributes.values()); + } + combinations.push(node); + } else { + console.error("Unknown element type: " + element.type); + } + }); + } + + return combinations; + } + + function combineProperties( baseObjects, attributes ){ + var combinations = []; + var prototypeMap = createLowerCasePrototypeMap(propertyPrototypeMap); + + if ( baseObjects ) { + baseObjects.forEach(function ( element ){ + var matchingAttribute; + + if ( attributes ) { + // Look for an attribute with the same id and merge them + for ( var i = 0; i < attributes.length; i++ ) { + var attribute = attributes[i]; + if ( element.id === attribute.id ) { + matchingAttribute = attribute; + break; + } + } + addAdditionalAttributes(element, matchingAttribute); + } + + // Then look for a prototype to add its properties + var Prototype = prototypeMap.get(element.type.toLowerCase()); + + if ( Prototype ) { + // Create the matching object and set the properties + var property = new Prototype(graph); + property.annotations(element.annotations) + .baseIri(element.baseIri) + .cardinality(element.cardinality) + .comment(element.comment) + .domain(element.domain) + .description(element.description) + .equivalents(element.equivalent) + .id(element.id) + .inverse(element.inverse) + .label(element.label) + .minCardinality(element.minCardinality) + .maxCardinality(element.maxCardinality) + .range(element.range) + .subproperties(element.subproperty) + .superproperties(element.superproperty) + // .type(element.type) Ignore, because we predefined it + .iri(element.iri); + + // adding property position + if ( element.pos ) { + property.x = element.pos[0]; + property.y = element.pos[1]; + property.px = element.pos[0]; + property.py = element.pos[1]; + } + var elementPinned = element.pinned; + if ( elementPinned === true ) { + property.pinned(true); + graph.options().pickAndPinModule().addPinnedElement(property); + } + + + if ( element.attributes ) { + var deduplicatedAttributes = d3.set(element.attributes.concat(property.attributes())); + property.attributes(deduplicatedAttributes.values()); + } + combinations.push(property); + } else { + console.error("Unknown element type: " + element.type); + } + + }); + } + + return combinations; + } + + function createLowerCasePrototypeMap( prototypeMap ){ + return d3.map(prototypeMap.values(), function ( Prototype ){ + return new Prototype().type().toLowerCase(); + }); + } + + function mergeRangesOfEquivalentProperties( properties, nodes ){ + // pass clones of arrays into the merger to keep the current functionality of this module + var newNodes = equivalentPropertyMerger.merge(properties.slice(), nodes.slice(), propertyMap, classMap, graph); + + // replace all the existing nodes and map the nodes again + nodes.length = 0; + Array.prototype.push.apply(nodes, newNodes); + classMap = mapElements(nodes); + } + + /** + * Checks all attributes which have to be rewritten. + * For example: + * equivalent is filled with only ID's of the corresponding nodes. It would be better to used the + * object instead of the ID so we swap the ID's with the correct object reference and can delete it from drawing + * because it is not necessary. + */ + function createNodeStructure( rawNodes, classMap ){ + var nodes = []; + + // Set the default values + var maxIndividualCount = 0; + rawNodes.forEach(function ( node ){ + maxIndividualCount = Math.max(maxIndividualCount, node.individuals().length); + node.visible(true); + }); + + rawNodes.forEach(function ( node ){ + // Merge and connect the equivalent nodes + processEquivalentIds(node, classMap); + + attributeParser.parseClassAttributes(node); + + node.maxIndividualCount(maxIndividualCount); + }); + + // Collect all nodes that should be displayed + rawNodes.forEach(function ( node ){ + if ( node.visible() ) { + nodes.push(node); + } + }); + + return nodes; + } + + /** + * Sets the disjoint attribute of the nodes if a disjoint label is found. + * @param property + */ + function processDisjoints( property ){ + if ( property instanceof OwlDisjointWith === false ) { + return; + } + + var domain = property.domain(), + range = property.range(); + + // Check the domain. + if ( !domain.disjointWith() ) { + domain.disjointWith([]); + } + + // Check the range. + if ( !range.disjointWith() ) { + range.disjointWith([]); + } + + domain.disjointWith().push(property.range()); + range.disjointWith().push(property.domain()); + } + + /** + * Connect all properties and also their sub- and superproperties. + * We iterate over the rawProperties array because it is way faster than iterating + * over an object and its attributes. + * + * @param rawProperties the properties + * @param classMap a map of all classes + * @param propertyMap the properties in a map + */ + function createPropertyStructure( rawProperties, classMap, propertyMap ){ + var properties = []; + // Set default values + rawProperties.forEach(function ( property ){ + property.visible(true); + }); + + // Connect properties + rawProperties.forEach(function ( property ){ + var domain, + range, + domainObject, + rangeObject, + inverse; + + /* Skip properties that have no information about their domain and range, like + inverse properties with optional inverse and optional domain and range attributes */ + if ( (property.domain() && property.range()) || property.inverse() ) { + + var inversePropertyId = findId(property.inverse()); + // Look if an inverse property exists + if ( inversePropertyId ) { + inverse = propertyMap[inversePropertyId]; + if ( !inverse ) { + console.warn("No inverse property was found for id: " + inversePropertyId); + property.inverse(undefined); + } + } + + // Either domain and range are set on this property or at the inverse + if ( typeof property.domain() !== "undefined" && typeof property.range() !== "undefined" ) { + domain = findId(property.domain()); + range = findId(property.range()); + + domainObject = classMap[domain]; + rangeObject = classMap[range]; + } else if ( inverse ) { + // Domain and range need to be switched + domain = findId(inverse.range()); + range = findId(inverse.domain()); + + domainObject = classMap[domain]; + rangeObject = classMap[range]; + } else { + console.warn("Domain and range not found for property: " + property.id()); + } + + // Set the references on this property + property.domain(domainObject); + property.range(rangeObject); + + // Also set the attributes of the inverse property + if ( inverse ) { + property.inverse(inverse); + inverse.inverse(property); + + // Switch domain and range + inverse.domain(rangeObject); + inverse.range(domainObject); + } + } + // Reference sub- and superproperties + referenceSubOrSuperProperties(property.subproperties()); + referenceSubOrSuperProperties(property.superproperties()); + }); + + // Merge equivalent properties and process disjoints. + rawProperties.forEach(function ( property ){ + processEquivalentIds(property, propertyMap); + processDisjoints(property); + + attributeParser.parsePropertyAttributes(property); + }); + // Add additional information to the properties + rawProperties.forEach(function ( property ){ + // Properties of merged classes should point to/from the visible equivalent class + var propertyWasRerouted = false; + + if ( property.domain() === undefined ) { + console.warn("No Domain was found for id:" + property.id()); + return; + } + + if ( wasNodeMerged(property.domain()) ) { + property.domain(property.domain().equivalentBase()); + propertyWasRerouted = true; + } + if ( property.range() === undefined ) { + console.warn("No range was found for id:" + property.id()); + return; + } + if ( wasNodeMerged(property.range()) ) { + property.range(property.range().equivalentBase()); + propertyWasRerouted = true; + } + // But there should not be two equal properties between the same domain and range + var equalProperty = getOtherEqualProperty(rawProperties, property); + + if ( propertyWasRerouted && equalProperty ) { + property.visible(false); + + equalProperty.redundantProperties().push(property); + } + + // Hide property if source or target node is hidden + if ( !property.domain().visible() || !property.range().visible() ) { + property.visible(false); + } + + // Collect all properties that should be displayed + if ( property.visible() ) { + properties.push(property); + } + }); + return properties; + } + + function referenceSubOrSuperProperties( subOrSuperPropertiesArray ){ + var i, l; + + if ( !subOrSuperPropertiesArray ) { + return; + } + + for ( i = 0, l = subOrSuperPropertiesArray.length; i < l; ++i ) { + var subOrSuperPropertyId = findId(subOrSuperPropertiesArray[i]); + var subOrSuperProperty = propertyMap[subOrSuperPropertyId]; + + if ( subOrSuperProperty ) { + // Replace id with object + subOrSuperPropertiesArray[i] = subOrSuperProperty; + } else { + console.warn("No sub-/superproperty was found for id: " + subOrSuperPropertyId); + } + } + } + + function wasNodeMerged( node ){ + return !node.visible() && node.equivalentBase(); + } + + function getOtherEqualProperty( properties, referenceProperty ){ + var i, l, property; + + for ( i = 0, l = properties.length; i < l; i++ ) { + property = properties[i]; + + if ( referenceProperty === property ) { + continue; + } + if ( referenceProperty.domain() !== property.domain() || + referenceProperty.range() !== property.range() ) { + continue; + } + + // Check for an equal IRI, if non existent compare label and type + if ( referenceProperty.iri() && property.iri() ) { + if ( referenceProperty.iri() === property.iri() ) { + return property; + } + } else if ( referenceProperty.type() === property.type() && + referenceProperty.defaultLabel() === property.defaultLabel() ) { + return property; + } + } + + return undefined; + } + + /** + * Generates and adds properties for links to set operators. + * @param classes unprocessed classes + * @param properties unprocessed properties + */ + function addSetOperatorProperties( classes, properties ){ + function addProperties( domainId, rangeIds, operatorType ){ + if ( !rangeIds ) { + return; + } + + rangeIds.forEach(function ( rangeId, index ){ + var property = { + id: "GENERATED-" + operatorType + "-" + domainId + "-" + rangeId + "-" + index, + type: "setOperatorProperty", + domain: domainId, + range: rangeId + }; + + properties.push(property); + }); + } + + classes.forEach(function ( clss ){ + addProperties(clss.id(), clss.complement(), "COMPLEMENT"); + addProperties(clss.id(), clss.intersection(), "INTERSECTION"); + addProperties(clss.id(), clss.union(), "UNION"); + addProperties(clss.id(), clss.disjointUnion(), "DISJOINTUNION"); + }); + } + + /** + * Replaces the ids of equivalent nodes/properties with the matching objects, cross references them + * and tags them as processed. + * @param element a node or a property + * @param elementMap a map where nodes/properties can be looked up + */ + function processEquivalentIds( element, elementMap ){ + var eqIds = element.equivalents(); + + if ( !eqIds || element.equivalentBase() ) { + return; + } + + // Replace ids with the corresponding objects + for ( var i = 0, l = eqIds.length; i < l; ++i ) { + var eqId = findId(eqIds[i]); + var eqObject = elementMap[eqId]; + + if ( eqObject ) { + // Cross reference both objects + eqObject.equivalents(eqObject.equivalents()); + eqObject.equivalents().push(element); + eqObject.equivalentBase(element); + eqIds[i] = eqObject; + + // Hide other equivalent nodes + eqObject.visible(false); + } else { + console.warn("No class/property was found for equivalent id: " + eqId); + } + } + } + + /** + * Tries to convert the type to an iri and sets it. + * @param elements classes or properties + * @param namespaces an array of namespaces + */ + function convertTypesToIris( elements, namespaces ){ + elements.forEach(function ( element ){ + if ( typeof element.iri() === "string" ) { + element.iri(replaceNamespace(element.iri(), namespaces)); + } + }); + } + + /** + * Creates a map by mapping the array with the passed function. + * @param array the array + * @returns {{}} + */ + function mapElements( array ){ + var map = {}; + for ( var i = 0, length = array.length; i < length; i++ ) { + var element = array[i]; + map[element.id()] = element; + } + return map; + } + + /** + * Adds the attributes of the additional object to the base object, but doesn't + * overwrite existing ones. + * + * @param base the base object + * @param addition the object with additional data + * @returns the combination is also returned + */ + function addAdditionalAttributes( base, addition ){ + // Check for an undefined value + addition = addition || {}; + + for ( var addAttribute in addition ) { + // Add the attribute if it doesn't exist + if ( !(addAttribute in base) && addition.hasOwnProperty(addAttribute) ) { + base[addAttribute] = addition[addAttribute]; + } + } + return base; + } + + /** + * Replaces the namespace (and the separator) if one exists and returns the new value. + * @param address the address with a namespace in it + * @param namespaces an array of namespaces + * @returns {string} the processed address with the (possibly) replaced namespace + */ + function replaceNamespace( address, namespaces ){ + var separatorIndex = address.indexOf(":"); + if ( separatorIndex === -1 ) { + return address; + } + var namespaceName = address.substring(0, separatorIndex); + + for ( var i = 0, length = namespaces.length; i < length; ++i ) { + var namespace = namespaces[i]; + if ( namespaceName === namespace.name ) { + return namespace.iri + address.substring(separatorIndex + 1); + } + } + + return address; + } + + /** + * Looks whether the passed object is already the id or if it was replaced + * with the object that belongs to the id. + * @param object an id, a class or a property + * @returns {string} the id of the passed object or undefined + */ + function findId( object ){ + if ( !object ) { + return undefined; + } else if ( typeof object === "string" ) { + return object; + } else if ( "id" in object ) { + return object.id(); + } else { + console.warn("No Id was found for this object: " + object); + return undefined; + } + } + + return parser; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 66 */ +/***/ (function(module, exports) { + + /** + * Parses the attributes an element has and sets the corresponding attributes. + * @returns {Function} + */ + module.exports = (function (){ + var attributeParser = {}, + // Style + ANONYMOUS = "anonymous", + DATATYPE = "datatype", + DEPRECATED = "deprecated", + EXTERNAL = "external", + OBJECT = "object", + RDF = "rdf", + // Representations + ASYMMETRIC = "asymmetric", + FUNCTIONAL = "functional", + INVERSE_FUNCTIONAL = "inverse functional", + IRREFLEXIVE = "irreflexive", + KEY = "key", + REFLEXIVE = "reflexive", + SYMMETRIC = "symmetric", + TRANSITIVE = "transitive", + // Attribute groups + VISUAL_ATTRIBUTE_GROUPS = [ + [DEPRECATED, DATATYPE, OBJECT, RDF], + [ANONYMOUS] + ], + CLASS_INDICATIONS = [DEPRECATED, EXTERNAL], + PROPERTY_INDICATIONS = [ASYMMETRIC, FUNCTIONAL, INVERSE_FUNCTIONAL, IRREFLEXIVE, KEY, REFLEXIVE, SYMMETRIC, + TRANSITIVE]; + + /** + * Parses and sets the attributes of a class. + * @param clazz + */ + attributeParser.parseClassAttributes = function ( clazz ){ + if ( !(clazz.attributes() instanceof Array) ) { + return; + } + + parseVisualAttributes(clazz); + parseClassIndications(clazz); + }; + + function parseVisualAttributes( element ){ + VISUAL_ATTRIBUTE_GROUPS.forEach(function ( attributeGroup ){ + setVisualAttributeOfGroup(element, attributeGroup); + }); + } + + function setVisualAttributeOfGroup( element, group ){ + var i, l, attribute; + + for ( i = 0, l = group.length; i < l; i++ ) { + attribute = group[i]; + if ( element.attributes().indexOf(attribute) >= 0 ) { + element.visualAttributes().push(attribute); + + // Just a single attribute is possible + break; + } + } + } + + function parseClassIndications( clazz ){ + var i, l, indication; + + for ( i = 0, l = CLASS_INDICATIONS.length; i < l; i++ ) { + indication = CLASS_INDICATIONS[i]; + + if ( clazz.attributes().indexOf(indication) >= 0 ) { + clazz.indications().push(indication); + } + } + } + + /** + * Parses and sets the attributes of a property. + * @param property + */ + attributeParser.parsePropertyAttributes = function ( property ){ + if ( !(property.attributes() instanceof Array) ) { + return; + } + + parseVisualAttributes(property); + parsePropertyIndications(property); + }; + + function parsePropertyIndications( property ){ + var i, l, indication; + + for ( i = 0, l = PROPERTY_INDICATIONS.length; i < l; i++ ) { + indication = PROPERTY_INDICATIONS[i]; + + if ( property.attributes().indexOf(indication) >= 0 ) { + property.indications().push(indication); + } + } + } + + + return function (){ + // Return a function to keep module interfaces consistent + return attributeParser; + }; + })(); + + +/***/ }), +/* 67 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var OwlThing = __webpack_require__(31); + var RdfsLiteral = __webpack_require__(38); + var elementTools = __webpack_require__(63)(); + + var equivalentPropertyMerger = {}; + module.exports = function (){ + return equivalentPropertyMerger; + }; + + var PREFIX = "GENERATED-MERGED_RANGE-"; + var OBJECT_PROPERTY_DEFAULT_RANGE_TYPE = "owl:Thing"; + var DATA_PROPERTY_DEFAULT_RANGE_TYPE = "rdfs:Literal"; + + + equivalentPropertyMerger.merge = function ( properties, nodes, propertyMap, nodeMap, graph ){ + var totalNodeIdsToHide = d3.set(); + var processedPropertyIds = d3.set(); + var mergeNodes = []; + + for ( var i = 0; i < properties.length; i++ ) { + var property = properties[i]; + var equivalents = property.equivalents().map(createIdToPropertyMapper(propertyMap)); + + if ( equivalents.length === 0 || processedPropertyIds.has(property.id()) ) { + continue; + } + + var propertyWithEquivalents = equivalents.concat(property); + + var mergeNode = findMergeNode(propertyWithEquivalents, nodeMap); + if ( !mergeNode ) { + if ( mergeNode !== undefined ) { + mergeNode = createDefaultMergeNode(property, graph); + mergeNodes.push(mergeNode); + } + } + + var nodeIdsToHide = replaceRangesAndCollectNodesToHide(propertyWithEquivalents, mergeNode, properties, + processedPropertyIds); + for ( var j = 0; j < nodeIdsToHide.length; j++ ) { + totalNodeIdsToHide.add(nodeIdsToHide[j]); + } + } + + return filterVisibleNodes(nodes.concat(mergeNodes), totalNodeIdsToHide); + }; + + + function createIdToPropertyMapper( propertyMap ){ + return function ( id ){ + return propertyMap[id]; + }; + } + + function findMergeNode( propertyWithEquivalents, nodeMap ){ + var typeMap = mapPropertiesRangesToType(propertyWithEquivalents, nodeMap); + var typeSet = d3.set(typeMap.keys()); + + // default types are the fallback values and should be ignored for the type determination + typeSet.remove(OBJECT_PROPERTY_DEFAULT_RANGE_TYPE); + typeSet.remove(DATA_PROPERTY_DEFAULT_RANGE_TYPE); + + // exactly one type to chose from -> take the node of this type as range + if ( typeSet.size() === 1 ) { + var type = typeSet.values()[0]; + var ranges = typeMap.get(type); + + if ( ranges.length === 1 ) { + return ranges[0]; + } + } + } + + function mapPropertiesRangesToType( properties, nodeMap ){ + var typeMap = d3.map(); + + properties.forEach(function ( property ){ + if ( property === undefined ) //@ WORKAROUND + return; + + var range = nodeMap[property.range()]; + var type = range.type(); + + if ( !typeMap.has(type) ) { + typeMap.set(type, []); + } + + typeMap.get(type).push(range); + }); + + return typeMap; + } + + function createDefaultMergeNode( property, graph ){ + var range; + + if ( elementTools.isDatatypeProperty(property) ) { + range = new RdfsLiteral(graph); + } else { + range = new OwlThing(graph); + } + range.id(PREFIX + property.id()); + + return range; + } + + function replaceRangesAndCollectNodesToHide( propertyWithEquivalents, mergeNode, properties, processedPropertyIds ){ + var nodesToHide = []; + + propertyWithEquivalents.forEach(function ( property ){ + + if ( property === undefined || mergeNode === undefined ) // @ WORKAROUND + return; + var oldRangeId = property.range(); + property.range(mergeNode.id()); + if ( !isDomainOrRangeOfOtherProperty(oldRangeId, properties) ) { + nodesToHide.push(oldRangeId); + } + + processedPropertyIds.add(property.id()); + }); + + return nodesToHide; + } + + function isDomainOrRangeOfOtherProperty( nodeId, properties ){ + for ( var i = 0; i < properties.length; i++ ) { + var property = properties[i]; + if ( property.domain() === nodeId || property.range() === nodeId ) { + return true; + } + } + + return false; + } + + function filterVisibleNodes( nodes, nodeIdsToHide ){ + var filteredNodes = []; + + nodes.forEach(function ( node ){ + if ( !nodeIdsToHide.has(node.id()) ) { + filteredNodes.push(node); + } + }); + + return filteredNodes; + } + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 68 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {module.exports = function ( graph ){ + /** variable defs **/ + var Class_dragger = {}; + Class_dragger.nodeId = 10001; + Class_dragger.parent = undefined; + Class_dragger.x = 0; + Class_dragger.y = 0; + Class_dragger.rootElement = undefined; + Class_dragger.rootNodeLayer = undefined; + Class_dragger.pathLayer = undefined; + Class_dragger.mouseEnteredVar = false; + Class_dragger.mouseButtonPressed = false; + Class_dragger.nodeElement = undefined; + Class_dragger.draggerObject = undefined; + Class_dragger.pathElement = undefined; + Class_dragger.typus = "Class_dragger"; + + Class_dragger.type = function (){ + return Class_dragger.typus; + }; + + Class_dragger.parentNode = function (){ + return Class_dragger.parent; + }; + + Class_dragger.hideClass_dragger = function ( val ){ + Class_dragger.pathElement.classed("hidden", val); + Class_dragger.nodeElement.classed("hidden", val); + Class_dragger.draggerObject.classed("hidden", val); + }; + + Class_dragger.setParentNode = function ( parentNode ){ + Class_dragger.parent = parentNode; + + if ( Class_dragger.mouseButtonPressed === false ) { + if ( Class_dragger.parent.actualRadius && Class_dragger.parent.actualRadius() ) { + Class_dragger.x = Class_dragger.parent.x + 10 + Class_dragger.parent.actualRadius(); + Class_dragger.y = Class_dragger.parent.y + 10 + Class_dragger.parent.actualRadius(); + } else { + Class_dragger.x = Class_dragger.parent.x + 60; + Class_dragger.y = Class_dragger.parent.y + 60; + } + } + Class_dragger.updateElement(); + }; + + Class_dragger.hideDragger = function ( val ){ + if ( Class_dragger.pathElement ) Class_dragger.pathElement.classed("hidden", val); + if ( Class_dragger.nodeElement ) Class_dragger.nodeElement.classed("hidden", val); + if ( Class_dragger.draggerObject ) Class_dragger.draggerObject.classed("hidden", val); + + }; + /** BASE HANDLING FUNCTIONS ------------------------------------------------- **/ + Class_dragger.id = function ( index ){ + if ( !arguments.length ) { + return Class_dragger.nodeId; + } + Class_dragger.nodeId = index; + }; + + Class_dragger.svgPathLayer = function ( layer ){ + Class_dragger.pathLayer = layer.append('g'); + }; + + Class_dragger.svgRoot = function ( root ){ + if ( !arguments.length ) + return Class_dragger.rootElement; + Class_dragger.rootElement = root; + Class_dragger.rootNodeLayer = Class_dragger.rootElement.append('g'); + Class_dragger.addMouseEvents(); + }; + + /** DRAWING FUNCTIONS ------------------------------------------------- **/ + Class_dragger.drawNode = function (){ + Class_dragger.pathElement = Class_dragger.pathLayer.append('line') + .classed("classNodeDragPath", true); + Class_dragger.pathElement.attr("x1", 0) + .attr("y1", 0) + .attr("x2", 0) + .attr("y2", 0); + + // var lineData = [ + // {"x": 0, "y": 0}, + // {"x": 0, "y": 40}, + // {"x": -40, "y": 0}, + // {"x": 0, "y": -40}, + // {"x": 0, "y": 0} + // ]; + + var lineData = [ + { "x": -40, "y": 0 }, // start + { "x": -20, "y": -10 }, + { "x": 20, "y": -50 }, + { "x": -10, "y": 0 }, // center + { "x": 20, "y": 50 }, + { "x": -20, "y": 10 }, + { "x": -40, "y": 0 } + ]; + + + var lineFunction = d3.svg.line() + .x(function ( d ){ + return d.x; + }) + .y(function ( d ){ + return d.y; + }) + .interpolate("basis-closed"); + var pathData = "M 20,40 C 0,15 0,-15 20,-40 L -40,0 Z"; + // var pathData="M 20,40 C 0,15 0,-15 20,-40 20,-40 -35.22907,-23.905556 -45.113897,0.06313453 -35.22907,20.095453 20,40 20,40 Z"; + // var pathData="M 39.107144,51.25 C 0,17.362169 0,-13.75 39.285715,-49.821429 c 0,0 -69.58321,34.511175 -100.714286,50.35714329 C -22.96643,20.324376 39.107144,51.25 39.107144,51.25 Z"; + + Class_dragger.nodeElement = Class_dragger.rootNodeLayer.append('path').attr("d", pathData); + Class_dragger.nodeElement.classed("classDraggerNode", true); + Class_dragger.draggerObject = Class_dragger.rootNodeLayer.append("circle"); + if ( graph.options().useAccuracyHelper() ) { + Class_dragger.draggerObject.attr("r", 40) + .attr("cx", 0) + .attr("cy", 0) + .classed("superHiddenElement", true); + Class_dragger.draggerObject.classed("superOpacityElement", !graph.options().showDraggerObject()); + } + + + }; + + Class_dragger.updateElement = function (){ + + // Class_dragger.pathLayer.attr("transform", "translate(" + Class_dragger.x + "," + Class_dragger.y + ")"); + // Class_dragger.rootElement.attr("transform", "translate(" + Class_dragger.x + "," + Class_dragger.y + ")"); + if ( Class_dragger.pathElement ) { + + // compute start point ; + + + var sX = Class_dragger.parent.x, + sY = Class_dragger.parent.y, + eX = Class_dragger.x, + eY = Class_dragger.y; + + + // this is used only when you dont have a proper layout ordering; + var dirX = eX - sX; + var dirY = eY - sY; + var len = Math.sqrt((dirX * dirX) + (dirY * dirY)); + + var nX = dirX / len; + var nY = dirY / len; + + var ppX = sX + nX * Class_dragger.parent.actualRadius(); + var ppY = sY + nY * Class_dragger.parent.actualRadius(); + + var ncx = nX * 15; + var ncy = nY * 15; + Class_dragger.draggerObject.attr("cx", ncx) + .attr("cy", ncy); + + Class_dragger.pathElement.attr("x1", ppX) + .attr("y1", ppY) + .attr("x2", eX) + .attr("y2", eY); + } + var angle = Math.atan2(Class_dragger.parent.y - Class_dragger.y, Class_dragger.parent.x - Class_dragger.x) * 180 / Math.PI; + + Class_dragger.nodeElement.attr("transform", "translate(" + Class_dragger.x + "," + Class_dragger.y + ")" + "rotate(" + angle + ")"); + Class_dragger.draggerObject.attr("transform", "translate(" + Class_dragger.x + "," + Class_dragger.y + ")"); + // console.log("update Elmenent root element"+Class_dragger.x + "," + Class_dragger.y ); + // + // Class_dragger.nodeElement.attr("transform", function (d) { + // return "rotate(" + angle + ")"; + // }); + }; + + /** MOUSE HANDLING FUNCTIONS ------------------------------------------------- **/ + + Class_dragger.addMouseEvents = function (){ + // console.log("adding mouse events"); + Class_dragger.rootNodeLayer.selectAll("*").on("mouseover", Class_dragger.onMouseOver) + .on("mouseout", Class_dragger.onMouseOut) + .on("click", function (){ + }) + .on("dblclick", function (){ + }) + .on("mousedown", Class_dragger.mouseDown) + .on("mouseup", Class_dragger.mouseUp); + }; + + Class_dragger.mouseDown = function (){ + Class_dragger.nodeElement.style("cursor", "move"); + Class_dragger.nodeElement.classed("classDraggerNodeHovered", true); + Class_dragger.mouseButtonPressed = true; + console.log("Mouse DOWN from Dragger"); + }; + + Class_dragger.mouseUp = function (){ + Class_dragger.nodeElement.style("cursor", "auto"); + Class_dragger.mouseButtonPressed = false; + console.log("Mouse UP from Dragger"); + }; + + + Class_dragger.mouseEntered = function ( p ){ + if ( !arguments.length ) return Class_dragger.mouseEnteredVar; + Class_dragger.mouseEnteredVar = p; + return Class_dragger; + }; + + Class_dragger.selectedViaTouch = function ( val ){ + Class_dragger.nodeElement.classed("classDraggerNode", !val); + Class_dragger.nodeElement.classed("classDraggerNodeHovered", val); + + }; + + Class_dragger.onMouseOver = function (){ + if ( Class_dragger.mouseEntered() ) { + return; + } + Class_dragger.nodeElement.classed("classDraggerNode", false); + Class_dragger.nodeElement.classed("classDraggerNodeHovered", true); + var selectedNode = Class_dragger.rootElement.node(), + nodeContainer = selectedNode.parentNode; + nodeContainer.appendChild(selectedNode); + + Class_dragger.mouseEntered(true); + + }; + Class_dragger.onMouseOut = function (){ + if ( Class_dragger.mouseButtonPressed === true ) + return; + Class_dragger.nodeElement.classed("classDraggerNodeHovered", false); + Class_dragger.nodeElement.classed("classDraggerNode", true); + Class_dragger.mouseEntered(false); + }; + + Class_dragger.setPosition = function ( x, y ){ + + Class_dragger.x = x; + Class_dragger.y = y; + Class_dragger.updateElement(); + }; + + Class_dragger.setAdditionalClassForClass_dragger = function ( name, val ){ + // console.log("Class_dragger should sett the class here") + // Class_dragger.nodeElement.classed(name,val); + + }; + return Class_dragger; + }; + + + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 69 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {module.exports = function ( graph ){ + /** variable defs **/ + var Range_dragger = {}; + Range_dragger.nodeId = 10002; + Range_dragger.parent = undefined; + Range_dragger.x = 0; + Range_dragger.y = 0; + Range_dragger.rootElement = undefined; + Range_dragger.rootNodeLayer = undefined; + Range_dragger.pathLayer = undefined; + Range_dragger.mouseEnteredVar = false; + Range_dragger.mouseButtonPressed = false; + Range_dragger.nodeElement = undefined; + Range_dragger.draggerObject = undefined; + + Range_dragger.pathElement = undefined; + Range_dragger.typus = "Range_dragger"; + + Range_dragger.type = function (){ + return Range_dragger.typus; + }; + + // TODO: We need the endPoint of the Link here! + Range_dragger.parentNode = function (){ + return Range_dragger.parent; + }; + + Range_dragger.hide_dragger = function ( val ){ + Range_dragger.pathElement.classed("hidden", val); + Range_dragger.nodeElement.classed("hidden", val); + Range_dragger.draggerObject.classed("hidden", val); + }; + Range_dragger.hideDragger = function ( val ){ + if ( Range_dragger.pathElement ) Range_dragger.pathElement.classed("hidden", val); + if ( Range_dragger.nodeElement ) Range_dragger.nodeElement.classed("hidden", val); + if ( Range_dragger.draggerObject ) Range_dragger.draggerObject.classed("hidden", val); + + + }; + + Range_dragger.reDrawEverthing = function (){ + Range_dragger.setParentProperty(Range_dragger.parent); + }; + Range_dragger.updateRange = function ( newRange ){ + + if ( graph.genericPropertySanityCheck(Range_dragger.parent.domain(), newRange, + Range_dragger.parent.type(), + "Could not update range", "Restoring previous range") === false ) return; + + // check for triple duplicates! + + if ( graph.propertyCheckExistenceChecker(Range_dragger.parent, Range_dragger.parent.domain(), newRange) === false ) + return; + if ( Range_dragger.parent.labelElement() === undefined ) return; + if ( Range_dragger.parent.labelElement().attr("transform") === "translate(0,15)" || + Range_dragger.parent.labelElement().attr("transform") === "translate(0,-15)" ) { + var prop = Range_dragger.parent; + Range_dragger.parent.inverse().inverse(null); + Range_dragger.parent.inverse(null); + prop.range(newRange); + } + + else { + Range_dragger.parent.range(newRange); + } + // update the position of the new range + var rX = newRange.x; + var rY = newRange.y; + + var dX = Range_dragger.parent.domain().x; + var dY = Range_dragger.parent.domain().y; + + + // center + var cX = 0.49 * (dX + rX); + var cY = 0.49 * (dY + rY); + // put position there; + Range_dragger.parent.labelElement().x = cX; + Range_dragger.parent.labelElement().px = cX; + Range_dragger.parent.labelElement().y = cY; + Range_dragger.parent.labelElement().py = cY; + + }; + + Range_dragger.setParentProperty = function ( parentProperty, inversed ){ + Range_dragger.parent = parentProperty; + var iP; + var renElem; + Range_dragger.isLoopProperty = false; + if ( parentProperty.domain() === parentProperty.range() ) Range_dragger.isLoopProperty = true; + Range_dragger.parent = parentProperty; + renElem = parentProperty.labelObject(); + if ( inversed === true ) { + if ( parentProperty.labelElement() && parentProperty.labelElement().attr("transform") === "translate(0,15)" ) { + iP = renElem.linkDomainIntersection; + if ( renElem.linkDomainIntersection ) { + Range_dragger.x = iP.x; + Range_dragger.y = iP.y; + } + } else { + iP = renElem.linkRangeIntersection; + if ( renElem.linkRangeIntersection ) { + Range_dragger.x = iP.x; + Range_dragger.y = iP.y; + } + } + } + else { + iP = renElem.linkRangeIntersection; + if ( renElem.linkRangeIntersection ) { + Range_dragger.x = iP.x; + Range_dragger.y = iP.y; + } + } + + Range_dragger.updateElement(); + }; + + + /** BASE HANDLING FUNCTIONS ------------------------------------------------- **/ + Range_dragger.id = function ( index ){ + if ( !arguments.length ) { + return Range_dragger.nodeId; + } + Range_dragger.nodeId = index; + }; + + Range_dragger.svgPathLayer = function ( layer ){ + Range_dragger.pathLayer = layer.append('g'); + }; + + Range_dragger.svgRoot = function ( root ){ + if ( !arguments.length ) + return Range_dragger.rootElement; + Range_dragger.rootElement = root; + Range_dragger.rootNodeLayer = Range_dragger.rootElement.append('g'); + Range_dragger.addMouseEvents(); + }; + + /** DRAWING FUNCTIONS ------------------------------------------------- **/ + Range_dragger.drawNode = function (){ + Range_dragger.pathElement = Range_dragger.pathLayer.append('line') + .classed("classNodeDragPath", true); + Range_dragger.pathElement.attr("x1", 0) + .attr("y1", 0) + .attr("x2", 0) + .attr("y2", 0); + + // var lineData = [ + // {"x": 0, "y": 0}, + // {"x": 0, "y": 40}, + // {"x": -40, "y": 0}, + // {"x": 0, "y": -40}, + // {"x": 0, "y": 0} + // ]; + + var lineData = [ + { "x": -40, "y": 0 }, // start + { "x": -20, "y": -10 }, + { "x": 20, "y": -50 }, + { "x": -10, "y": 0 }, // center + { "x": 20, "y": 50 }, + { "x": -20, "y": 10 }, + { "x": -40, "y": 0 } + ]; + + + var lineFunction = d3.svg.line() + .x(function ( d ){ + return d.x; + }) + .y(function ( d ){ + return d.y; + }) + .interpolate("basis-closed"); + var pathData = "M 61,40 C 41,15 41,-15 61,-40 L 1,0 Z"; + + Range_dragger.nodeElement = Range_dragger.rootNodeLayer.append('path').attr("d", pathData); + Range_dragger.nodeElement.classed("classDraggerNode", true); + if ( graph.options().useAccuracyHelper() ) { + Range_dragger.draggerObject = Range_dragger.rootNodeLayer.append("circle"); + Range_dragger.draggerObject.attr("r", 40) + .attr("cx", 0) + .attr("cy", 0) + .classed("superHiddenElement", true); + Range_dragger.draggerObject.classed("superOpacityElement", !graph.options().showDraggerObject()); + } + + + }; + + Range_dragger.updateElementViaDomainDragger = function ( x, y ){ + + var range_x = x; + var range_y = y; + + var dex = Range_dragger.parent.range().x; + var dey = Range_dragger.parent.range().y; + + var dir_X = x - dex; + var dir_Y = y - dey; + + var len = Math.sqrt(dir_X * dir_X + dir_Y * dir_Y); + + var nX = dir_X / len; + var nY = dir_Y / len; + + + var ep_range_x = dex + nX * Range_dragger.parent.range().actualRadius(); + var ep_range_y = dey + nY * Range_dragger.parent.range().actualRadius(); + + + var dx = range_x - ep_range_x; + var dy = range_y - ep_range_y; + len = Math.sqrt(dx * dx + dy * dy); + nX = dx / len; + nY = dy / len; + + var angle = Math.atan2(ep_range_y - range_y, ep_range_x - range_x) * 180 / Math.PI + 180; + Range_dragger.nodeElement.attr("transform", "translate(" + ep_range_x + "," + ep_range_y + ")" + "rotate(" + angle + ")"); + var doX = ep_range_x + nX * 40; + var doY = ep_range_y + nY * 40; + Range_dragger.draggerObject.attr("transform", "translate(" + doX + "," + doY + ")"); + + }; + + + Range_dragger.updateElement = function (){ + if ( Range_dragger.mouseButtonPressed === true || Range_dragger.parent === undefined ) return; + + var range = Range_dragger.parent.range(); + var iP = Range_dragger.parent.labelObject().linkRangeIntersection; + if ( Range_dragger.parent.labelElement() === undefined ) return; + var offsetForLoop = 48; + if ( Range_dragger.parent.labelElement().attr("transform") === "translate(0,15)" ) { + range = Range_dragger.parent.inverse().domain(); + iP = Range_dragger.parent.labelObject().linkDomainIntersection; + offsetForLoop = -48; + } + + if ( iP === undefined ) return; + var range_x = range.x; + var range_y = range.y; + + var ep_range_x = iP.x; + var ep_range_y = iP.y; + // offset for dragger object + var dx = range_x - ep_range_x; + var dy = range_y - ep_range_y; + var len = Math.sqrt(dx * dx + dy * dy); + var nX = dx / len; + var nY = dy / len; + var angle = Math.atan2(ep_range_y - range_y, ep_range_x - range_x) * 180 / Math.PI; + + var doX = ep_range_x - nX * 40; + var doY = ep_range_y - nY * 40; + + if ( Range_dragger.isLoopProperty === true ) + angle -= offsetForLoop; + + + Range_dragger.nodeElement.attr("transform", "translate(" + ep_range_x + "," + ep_range_y + ")" + "rotate(" + angle + ")"); + Range_dragger.draggerObject.attr("transform", "translate(" + doX + "," + doY + ")"); + + + }; + + /** MOUSE HANDLING FUNCTIONS ------------------------------------------------- **/ + + Range_dragger.addMouseEvents = function (){ + var rootLayer = Range_dragger.rootNodeLayer.selectAll("*"); + rootLayer.on("mouseover", Range_dragger.onMouseOver) + .on("mouseout", Range_dragger.onMouseOut) + .on("click", function (){ + }) + .on("dblclick", function (){ + }) + .on("mousedown", Range_dragger.mouseDown) + .on("mouseup", Range_dragger.mouseUp); + }; + + Range_dragger.mouseDown = function (){ + Range_dragger.nodeElement.style("cursor", "move"); + Range_dragger.nodeElement.classed("classDraggerNodeHovered", true); + Range_dragger.mouseButtonPressed = true; + }; + + Range_dragger.mouseUp = function (){ + Range_dragger.nodeElement.style("cursor", "auto"); + Range_dragger.nodeElement.classed("classDraggerNodeHovered", false); + Range_dragger.mouseButtonPressed = false; + }; + + + Range_dragger.mouseEntered = function ( p ){ + if ( !arguments.length ) return Range_dragger.mouseEnteredVar; + Range_dragger.mouseEnteredVar = p; + return Range_dragger; + }; + + Range_dragger.selectedViaTouch = function ( val ){ + Range_dragger.nodeElement.classed("classDraggerNode", !val); + Range_dragger.nodeElement.classed("classDraggerNodeHovered", val); + + }; + + Range_dragger.onMouseOver = function (){ + if ( Range_dragger.mouseEntered() ) { + return; + } + Range_dragger.nodeElement.classed("classDraggerNode", false); + Range_dragger.nodeElement.classed("classDraggerNodeHovered", true); + var selectedNode = Range_dragger.rootElement.node(), + nodeContainer = selectedNode.parentNode; + nodeContainer.appendChild(selectedNode); + + Range_dragger.mouseEntered(true); + + }; + Range_dragger.onMouseOut = function (){ + if ( Range_dragger.mouseButtonPressed === true ) + return; + Range_dragger.nodeElement.classed("classDraggerNodeHovered", false); + Range_dragger.nodeElement.classed("classDraggerNode", true); + Range_dragger.mouseEntered(false); + }; + + Range_dragger.setPosition = function ( x, y ){ + var range_x = Range_dragger.parent.domain().x; + var range_y = Range_dragger.parent.domain().y; + + // var position of the rangeEndPoint + var ep_range_x = x; + var ep_range_y = y; + + // offset for dragger object + var dx = range_x - ep_range_x; + var dy = range_y - ep_range_y; + + var len = Math.sqrt(dx * dx + dy * dy); + + var nX = dx / len; + var nY = dy / len; + + + var angle = Math.atan2(dy, dx) * 180 / Math.PI; + var doX = ep_range_x + nX * 40; + var doY = ep_range_y + nY * 40; + Range_dragger.nodeElement.attr("transform", "translate(" + ep_range_x + "," + ep_range_y + ")" + "rotate(" + angle + ")"); + Range_dragger.draggerObject.attr("transform", "translate(" + doX + "," + doY + ")"); + Range_dragger.x = x; + Range_dragger.y = y; + + }; + + Range_dragger.setAdditionalClassForClass_dragger = function ( name, val ){ + + }; + return Range_dragger; + }; + + + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 70 */ +/***/ (function(module, exports) { + + module.exports = function ( graph ){ + /** variable defs **/ + var Domain_dragger = {}; + Domain_dragger.nodeId = 10002; + Domain_dragger.parent = undefined; + Domain_dragger.x = 0; + Domain_dragger.y = 0; + Domain_dragger.rootElement = undefined; + Domain_dragger.rootNodeLayer = undefined; + Domain_dragger.pathLayer = undefined; + Domain_dragger.mouseEnteredVar = false; + Domain_dragger.mouseButtonPressed = false; + Domain_dragger.nodeElement = undefined; + Domain_dragger.draggerObject = undefined; + + Domain_dragger.pathElement = undefined; + Domain_dragger.typus = "Domain_dragger"; + + Domain_dragger.type = function (){ + return Domain_dragger.typus; + }; + + + // TODO: We need the endPoint of the Link here! + Domain_dragger.parentNode = function (){ + return Domain_dragger.parent; + }; + + Domain_dragger.hide_dragger = function ( val ){ + Domain_dragger.pathElement.classed("hidden", val); + Domain_dragger.nodeElement.classed("hidden", val); + Domain_dragger.draggerObject.classed("hidden", val); + }; + + Domain_dragger.reDrawEverthing = function (){ + Domain_dragger.setParentProperty(Domain_dragger.parent); + }; + Domain_dragger.updateDomain = function ( newDomain ){ + + if ( graph.genericPropertySanityCheck(Domain_dragger.parent.range(), newDomain, Domain_dragger.parent.type(), + "Could not update domain", "Restoring previous domain") === false ) { + Domain_dragger.updateElement(); + return; + } + + if ( graph.propertyCheckExistenceChecker(Domain_dragger.parent, newDomain, Domain_dragger.parent.range()) === false ) + return; + + + if ( Domain_dragger.parent.labelElement() === undefined ) { + Domain_dragger.updateElement(); + return; + } + if ( Domain_dragger.parent.labelElement().attr("transform") === "translate(0,15)" || + Domain_dragger.parent.labelElement().attr("transform") === "translate(0,-15)" ) { + var prop = Domain_dragger.parent; + Domain_dragger.parent.inverse().inverse(null); + Domain_dragger.parent.inverse(null); + console.log("SPLITTING ITEMS!"); + prop.domain(newDomain); + } + else { + Domain_dragger.parent.domain(newDomain); + } + + // update the position of the new range + var rX = Domain_dragger.parent.range().x; + var rY = Domain_dragger.parent.range().y; + var dX = newDomain.x; + var dY = newDomain.y; + + // center + var cX = 0.49 * (dX + rX); + var cY = 0.49 * (dY + rY); + // put position there; + Domain_dragger.parent.labelObject().x = cX; + Domain_dragger.parent.labelObject().px = cX; + Domain_dragger.parent.labelObject().y = cY; + Domain_dragger.parent.labelObject().py = cY; + Domain_dragger.updateElement(); + + }; + + Domain_dragger.setParentProperty = function ( parentProperty, inverted ){ + Domain_dragger.invertedProperty = inverted; + var renElem; + var iP; + Domain_dragger.isLoopProperty = false; + if ( parentProperty.domain() === parentProperty.range() ) + Domain_dragger.isLoopProperty = true; + + Domain_dragger.parent = parentProperty; + renElem = parentProperty.labelObject(); + if ( inverted === true ) { + + // this is the lower element + if ( parentProperty.labelElement() && parentProperty.labelElement().attr("transform") === "translate(0,15)" ) { + // console.log("This is the lower element!"); + iP = renElem.linkRangeIntersection; + if ( renElem.linkRangeIntersection ) { + Domain_dragger.x = iP.x; + Domain_dragger.y = iP.y; + } + } + else { + // console.log("This is the upper element"); + iP = renElem.linkDomainIntersection; + if ( renElem.linkDomainIntersection ) { + Domain_dragger.x = iP.x; + Domain_dragger.y = iP.y; + } + } + } + else { + // console.log("This is single element"); + iP = renElem.linkDomainIntersection; + if ( renElem.linkDomainIntersection ) { + Domain_dragger.x = iP.x; + Domain_dragger.y = iP.y; + } + } + Domain_dragger.updateElement(); + + }; + + Domain_dragger.hideDragger = function ( val ){ + if ( Domain_dragger.pathElement ) Domain_dragger.pathElement.classed("hidden", val); + if ( Domain_dragger.nodeElement ) Domain_dragger.nodeElement.classed("hidden", val); + if ( Domain_dragger.draggerObject ) Domain_dragger.draggerObject.classed("hidden", val); + + + }; + /** BASE HANDLING FUNCTIONS ------------------------------------------------- **/ + Domain_dragger.id = function ( index ){ + if ( !arguments.length ) { + return Domain_dragger.nodeId; + } + Domain_dragger.nodeId = index; + }; + + Domain_dragger.svgPathLayer = function ( layer ){ + Domain_dragger.pathLayer = layer.append('g'); + }; + + Domain_dragger.svgRoot = function ( root ){ + if ( !arguments.length ) + return Domain_dragger.rootElement; + Domain_dragger.rootElement = root; + Domain_dragger.rootNodeLayer = Domain_dragger.rootElement.append('g'); + Domain_dragger.addMouseEvents(); + }; + + /** DRAWING FUNCTIONS ------------------------------------------------- **/ + Domain_dragger.drawNode = function (){ + Domain_dragger.pathElement = Domain_dragger.pathLayer.append('line') + .classed("classNodeDragPath", true); + Domain_dragger.pathElement.attr("x1", 0) + .attr("y1", 0) + .attr("x2", 0) + .attr("y2", 0); + + var pathData = "M 10,40 C -10,15 -10,-15 10,-40 -8.8233455,-13.641384 -36.711107,-5.1228436 -50,0 -36.696429,4.9079017 -8.6403157,13.745728 10,40 Z"; + Domain_dragger.nodeElement = Domain_dragger.rootNodeLayer.append('path').attr("d", pathData); + Domain_dragger.nodeElement.classed("classDraggerNode", true); + if ( graph.options().useAccuracyHelper() ) { + Domain_dragger.draggerObject = Domain_dragger.rootNodeLayer.append("circle"); + Domain_dragger.draggerObject.attr("r", 40) + .attr("cx", 0) + .attr("cy", 0) + .classed("superHiddenElement", true); + Domain_dragger.draggerObject.classed("superOpacityElement", !graph.options().showDraggerObject()); + } + + + }; + Domain_dragger.updateElementViaRangeDragger = function ( x, y ){ + var range_x = x; + var range_y = y; + + var dex = Domain_dragger.parent.domain().x; + var dey = Domain_dragger.parent.domain().y; + + var dir_X = x - dex; + var dir_Y = y - dey; + + var len = Math.sqrt(dir_X * dir_X + dir_Y * dir_Y); + + var nX = dir_X / len; + var nY = dir_Y / len; + + + var ep_range_x = dex + nX * Domain_dragger.parent.domain().actualRadius(); + var ep_range_y = dey + nY * Domain_dragger.parent.domain().actualRadius(); + + var angle = Math.atan2(ep_range_y - range_y, ep_range_x - range_x) * 180 / Math.PI; + + Domain_dragger.nodeElement.attr("transform", "translate(" + ep_range_x + "," + ep_range_y + ")" + "rotate(" + angle + ")"); + var dox = ep_range_x + nX * 20; + var doy = ep_range_y + nY * 20; + Domain_dragger.draggerObject.attr("transform", "translate(" + dox + "," + doy + ")"); + }; + + + Domain_dragger.updateElement = function (){ + if ( Domain_dragger.mouseButtonPressed === true || Domain_dragger.parent === undefined ) return; + + var domain = Domain_dragger.parent.domain(); + var iP = Domain_dragger.parent.labelObject().linkDomainIntersection; + if ( Domain_dragger.parent.labelElement() === undefined ) return; + if ( Domain_dragger.parent.labelElement().attr("transform") === "translate(0,15)" ) { + Domain_dragger.parent.inverse().domain(); + iP = Domain_dragger.parent.labelObject().linkRangeIntersection; + + } + var range_x = domain.x; + var range_y = domain.y; + + + if ( iP === undefined ) return; + var ep_range_x = iP.x; + var ep_range_y = iP.y; + + var dx = range_x - ep_range_x; + var dy = range_y - ep_range_y; + var len = Math.sqrt(dx * dx + dy * dy); + + var nX = dx / len; + var nY = dy / len; + + var dox = ep_range_x - nX * 20; + var doy = ep_range_y - nY * 20; + var angle = Math.atan2(ep_range_y - range_y, ep_range_x - range_x) * 180 / Math.PI + 180; + + Domain_dragger.nodeElement.attr("transform", "translate(" + ep_range_x + "," + ep_range_y + ")" + "rotate(" + angle + ")"); + Domain_dragger.draggerObject.attr("transform", "translate(" + dox + "," + doy + ")"); + }; + + /** MOUSE HANDLING FUNCTIONS ------------------------------------------------- **/ + + Domain_dragger.addMouseEvents = function (){ + var rootLayer = Domain_dragger.rootNodeLayer.selectAll("*"); + rootLayer.on("mouseover", Domain_dragger.onMouseOver) + .on("mouseout", Domain_dragger.onMouseOut) + .on("click", function (){ + }) + .on("dblclick", function (){ + }) + .on("mousedown", Domain_dragger.mouseDown) + .on("mouseup", Domain_dragger.mouseUp); + }; + + Domain_dragger.mouseDown = function (){ + Domain_dragger.nodeElement.style("cursor", "move"); + Domain_dragger.nodeElement.classed("classDraggerNodeHovered", true); + Domain_dragger.mouseButtonPressed = true; + }; + + Domain_dragger.mouseUp = function (){ + Domain_dragger.nodeElement.style("cursor", "auto"); + Domain_dragger.nodeElement.classed("classDraggerNodeHovered", false); + Domain_dragger.mouseButtonPressed = false; + }; + + + Domain_dragger.mouseEntered = function ( p ){ + if ( !arguments.length ) return Domain_dragger.mouseEnteredVar; + Domain_dragger.mouseEnteredVar = p; + return Domain_dragger; + }; + + Domain_dragger.selectedViaTouch = function ( val ){ + Domain_dragger.nodeElement.classed("classDraggerNode", !val); + Domain_dragger.nodeElement.classed("classDraggerNodeHovered", val); + + }; + + Domain_dragger.onMouseOver = function (){ + if ( Domain_dragger.mouseEntered() ) { + return; + } + Domain_dragger.nodeElement.classed("classDraggerNode", false); + Domain_dragger.nodeElement.classed("classDraggerNodeHovered", true); + var selectedNode = Domain_dragger.rootElement.node(), + nodeContainer = selectedNode.parentNode; + nodeContainer.appendChild(selectedNode); + + Domain_dragger.mouseEntered(true); + + }; + Domain_dragger.onMouseOut = function (){ + if ( Domain_dragger.mouseButtonPressed === true ) + return; + Domain_dragger.nodeElement.classed("classDraggerNodeHovered", false); + Domain_dragger.nodeElement.classed("classDraggerNode", true); + Domain_dragger.mouseEntered(false); + }; + + Domain_dragger.setPosition = function ( x, y ){ + var range_x = Domain_dragger.parent.range().x; + var range_y = Domain_dragger.parent.range().y; + + // var position of the rangeEndPoint + var ep_range_x = x; + var ep_range_y = y; + + // offset for dragger object + var dx = range_x - ep_range_x; + var dy = range_y - ep_range_y; + + var len = Math.sqrt(dx * dx + dy * dy); + + var nX = dx / len; + var nY = dy / len; + var dox = ep_range_x + nX * 20; + var doy = ep_range_y + nY * 20; + + var angle = Math.atan2(range_y - ep_range_y, range_x - ep_range_x) * 180 / Math.PI + 180; + + Domain_dragger.nodeElement.attr("transform", "translate(" + ep_range_x + "," + ep_range_y + ")" + "rotate(" + angle + ")"); + Domain_dragger.draggerObject.attr("transform", "translate(" + dox + "," + doy + ")"); + + Domain_dragger.x = x; + Domain_dragger.y = y; + + }; + + Domain_dragger.setAdditionalClassForClass_dragger = function ( name, val ){ + // console.log("Class_dragger should sett the class here") + // Class_dragger.nodeElement.classed(name,val); + + }; + return Domain_dragger; + }; + + + + +/***/ }), +/* 71 */ +/***/ (function(module, exports, __webpack_require__) { + + var CenteringTextElement = __webpack_require__(14); + var elementTools = __webpack_require__(63)(); + var math = __webpack_require__(43)(); + module.exports = function ( graph ){ + /** variable defs **/ + var ShadowClone = {}; + ShadowClone.nodeId = 10003; + ShadowClone.parent = undefined; + ShadowClone.s_x = 0; + ShadowClone.s_y = 0; + ShadowClone.e_x = 0; + ShadowClone.e_y = 0; + ShadowClone.rootElement = undefined; + ShadowClone.rootNodeLayer = undefined; + ShadowClone.pathLayer = undefined; + ShadowClone.nodeElement = undefined; + ShadowClone.pathElement = undefined; + ShadowClone.typus = "shadowClone"; + + + ShadowClone.type = function (){ + return ShadowClone.typus; + }; + + // TODO: We need the endPoint of the Link here! + ShadowClone.parentNode = function (){ + return ShadowClone.parent; + }; + + ShadowClone.setParentProperty = function ( parentProperty, inverted ){ + ShadowClone.invertedProperty = inverted; + ShadowClone.parent = parentProperty; + var renElment; + if ( inverted === true ) { + renElment = parentProperty.inverse().labelObject(); + if ( renElment.linkRangeIntersection && renElment.linkDomainIntersection ) { + var iiP_range = renElment.linkDomainIntersection; + var iiP_domain = renElment.linkRangeIntersection; + ShadowClone.s_x = iiP_domain.x; + ShadowClone.s_y = iiP_domain.y; + ShadowClone.e_x = iiP_range.x; + ShadowClone.e_y = iiP_range.y; + } + } + else { + renElment = parentProperty.labelObject(); + + if ( renElment.linkRangeIntersection && renElment.linkDomainIntersection ) { + var iP_range = renElment.linkRangeIntersection; + var iP_domain = renElment.linkDomainIntersection; + ShadowClone.s_x = iP_domain.x; + ShadowClone.s_y = iP_domain.y; + ShadowClone.e_x = iP_range.x; + ShadowClone.e_y = iP_range.y; + } + + } + + ShadowClone.rootNodeLayer.remove(); + ShadowClone.rootNodeLayer = ShadowClone.rootElement.append('g'); + ShadowClone.rootNodeLayer.datum(parentProperty); + + // ShadowClone.pathElement.remove(); + // ShadowClone.pathElement = ShadowClone.pathLayer.append('line'); + // + // ShadowClone.pathElement.attr("x1", ShadowClone.s_x) + // .attr("y1", ShadowClone.s_y) + // .attr("x2", ShadowClone.e_x) + // .attr("y2", ShadowClone.e_y); + ShadowClone.pathElement.remove(); + ShadowClone.pathElement = ShadowClone.pathLayer.append('line'); + ShadowClone.markerElement = ShadowClone.pathLayer.append("marker"); + ShadowClone.markerElement.attr("id", "shadowCloneMarker"); + ShadowClone.pathElement.attr("x1", ShadowClone.e_x) + .attr("y1", ShadowClone.e_y) + .attr("x2", ShadowClone.s_x) + .attr("y2", ShadowClone.s_y); + ShadowClone.pathElement.classed(parentProperty.linkType(), true); + + if ( parentProperty.markerElement() ) { + ShadowClone.markerElement.attr("viewBox", parentProperty.markerElement().attr("viewBox")) + .attr("markerWidth", parentProperty.markerElement().attr("markerWidth")) + .attr("markerHeight", parentProperty.markerElement().attr("markerHeight")) + .attr("orient", parentProperty.markerElement().attr("orient")); + + var markerPath = parentProperty.markerElement().select("path"); + ShadowClone.markerElement.append("path") + .attr("d", markerPath.attr("d")) + .classed(parentProperty.markerType(), true); + + ShadowClone.pathElement.attr("marker-end", "url(#" + "shadowCloneMarker" + ")"); + ShadowClone.markerElement.classed("hidden", !elementTools.isDatatypeProperty(parentProperty)); + } + var rect = ShadowClone.rootNodeLayer.append("rect") + .classed(parentProperty.styleClass(), true) + .classed("property", true) + .attr("x", -parentProperty.width() / 2) + .attr("y", -parentProperty.height() / 2) + .attr("width", parentProperty.width()) + .attr("height", parentProperty.height()); + + if ( parentProperty.visualAttributes() ) { + rect.classed(parentProperty.visualAttributes(), true); + } + rect.classed("datatype", false); + var bgColor = parentProperty.backgroundColor(); + + if ( parentProperty.attributes().indexOf("deprecated") > -1 ) { + bgColor = undefined; + rect.classed("deprecatedproperty", true); + } else { + rect.classed("deprecatedproperty", false); + } + rect.style("fill", bgColor); + + // add Text; + var equivalentsString = parentProperty.equivalentsString(); + var suffixForFollowingEquivalents = equivalentsString ? "," : ""; + + + var textElement = new CenteringTextElement(ShadowClone.rootNodeLayer, bgColor); + textElement.addText(parentProperty.labelForCurrentLanguage(), "", suffixForFollowingEquivalents); + textElement.addEquivalents(equivalentsString); + textElement.addSubText(parentProperty.indicationString()); + + + var cx = 0.5 * (ShadowClone.s_x + ShadowClone.e_x); + var cy = 0.5 * (ShadowClone.s_y + ShadowClone.e_y); + ShadowClone.rootNodeLayer.attr("transform", "translate(" + cx + "," + cy + ")"); + ShadowClone.rootNodeLayer.classed("hidden", true); + ShadowClone.pathElement.classed("hidden", true); + + + }; + + ShadowClone.hideClone = function ( val ){ + if ( ShadowClone.rootNodeLayer ) ShadowClone.rootNodeLayer.classed("hidden", val); + if ( ShadowClone.pathElement ) ShadowClone.pathElement.classed("hidden", val); + }; + + ShadowClone.hideParentProperty = function ( val ){ + + var labelObj = ShadowClone.parent.labelObject(); + if ( labelObj ) { + if ( ShadowClone.parent.labelElement().attr("transform") === "translate(0,15)" || + ShadowClone.parent.labelElement().attr("transform") === "translate(0,-15)" ) + ShadowClone.parent.inverse().hide(val); + + + } + ShadowClone.parent.hide(val); + + + }; + + /** BASE HANDLING FUNCTIONS ------------------------------------------------- **/ + ShadowClone.id = function ( index ){ + if ( !arguments.length ) { + return ShadowClone.nodeId; + } + ShadowClone.nodeId = index; + }; + + ShadowClone.svgPathLayer = function ( layer ){ + ShadowClone.pathLayer = layer.append('g'); + }; + + ShadowClone.svgRoot = function ( root ){ + if ( !arguments.length ) + return ShadowClone.rootElement; + ShadowClone.rootElement = root; + ShadowClone.rootNodeLayer = ShadowClone.rootElement.append('g'); + + }; + + /** DRAWING FUNCTIONS ------------------------------------------------- **/ + ShadowClone.drawClone = function (){ + ShadowClone.pathElement = ShadowClone.pathLayer.append('line'); + + ShadowClone.pathElement.attr("x1", 0) + .attr("y1", 0) + .attr("x2", 0) + .attr("y2", 0); + + }; + + + ShadowClone.updateElement = function (){ + ShadowClone.pathElement.attr("x1", ShadowClone.e_x) + .attr("y1", ShadowClone.e_y) + .attr("x2", ShadowClone.s_x) + .attr("y2", ShadowClone.s_y); + + var cx = 0.5 * (ShadowClone.s_x + ShadowClone.e_x); + var cy = 0.5 * (ShadowClone.s_y + ShadowClone.e_y); + ShadowClone.rootNodeLayer.attr("transform", "translate(" + cx + "," + cy + ")"); + }; + + ShadowClone.setInitialPosition = function (){ + + var renElment = ShadowClone.parent.labelObject(); + if ( renElment.linkRangeIntersection && renElment.linkDomainIntersection ) { + var iP_range = renElment.linkRangeIntersection; + var iP_domain = renElment.linkDomainIntersection; + ShadowClone.e_x = iP_domain.x; + ShadowClone.e_y = iP_domain.y; + ShadowClone.s_x = iP_range.x; + ShadowClone.s_y = iP_range.y; + } + ShadowClone.updateElement(); + return; + // + // var rex=ShadowClone.parent.range().x; + // var rey=ShadowClone.parent.range().y; + // + // + // var dex=ShadowClone.parent.domain().x; + // var dey=ShadowClone.parent.domain().y; + // + // + // var dir_X= rex-dex; + // var dir_Y= rey-dey; + // + // var len=Math.sqrt(dir_X*dir_X+dir_Y*dir_Y); + // var nX=dir_X/len; + // var nY=dir_Y/len; + // ShadowClone.s_x=rex-nX*ShadowClone.parent.range().actualRadius(); + // ShadowClone.s_y=rey-nY*ShadowClone.parent.range().actualRadius(); + // + // ShadowClone.e_x=dex+nX*ShadowClone.parent.domain().actualRadius(); + // ShadowClone.e_y=dey+nY*ShadowClone.parent.domain().actualRadius(); + // ShadowClone.updateElement(); + + }; + ShadowClone.setPositionDomain = function ( e_x, e_y ){ + + var rex = ShadowClone.parent.range().x; + var rey = ShadowClone.parent.range().y; + + + if ( elementTools.isDatatype(ShadowClone.parent.range()) === true ) { + var intersection = math.calculateIntersection({ x: e_x, y: e_y }, ShadowClone.parent.range(), 0); + ShadowClone.s_x = intersection.x; + ShadowClone.s_y = intersection.y; + } else { + var dir_X = rex - e_x; + var dir_Y = rey - e_y; + + var len = Math.sqrt(dir_X * dir_X + dir_Y * dir_Y); + + var nX = dir_X / len; + var nY = dir_Y / len; + ShadowClone.s_x = rex - nX * ShadowClone.parent.range().actualRadius(); + ShadowClone.s_y = rey - nY * ShadowClone.parent.range().actualRadius(); + + } + + + ShadowClone.e_x = e_x; + ShadowClone.e_y = e_y; + ShadowClone.updateElement(); + }; + + ShadowClone.setPosition = function ( s_x, s_y ){ + ShadowClone.s_x = s_x; + ShadowClone.s_y = s_y; + + // add normalized dir; + + var dex = ShadowClone.parent.domain().x; + var dey = ShadowClone.parent.domain().y; + + var dir_X = s_x - dex; + var dir_Y = s_y - dey; + + var len = Math.sqrt(dir_X * dir_X + dir_Y * dir_Y); + + var nX = dir_X / len; + var nY = dir_Y / len; + + + ShadowClone.e_x = dex + nX * ShadowClone.parent.domain().actualRadius(); + ShadowClone.e_y = dey + nY * ShadowClone.parent.domain().actualRadius(); + + + ShadowClone.updateElement(); + + + }; + + + /** MOUSE HANDLING FUNCTIONS ------------------------------------------------- **/ + + return ShadowClone; + }; + + + + +/***/ }), +/* 72 */ +/***/ (function(module, exports) { + + module.exports = function ( graph ){ + /** variable defs **/ + var prefixRepresentationModule = {}; + + var currentPrefixModel; + + prefixRepresentationModule.updatePrefixModel = function (){ + currentPrefixModel = graph.options().prefixList(); + }; + + + prefixRepresentationModule.validURL = function ( url ){ + return validURL(url); + }; + function validURL( str ){ + var urlregex = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/; + return urlregex.test(str); + } + + function splitURLIntoBaseAndResource( fullURL ){ + var splitedURL = { base: "", resource: "" }; + if ( fullURL === undefined ) { + splitedURL = { base: "ERROR", resource: "NOT FOUND" }; + return splitedURL; + } + + var resource, base; + // check if there is a last hashTag + if ( fullURL.indexOf("#") > -1 ) { + resource = fullURL.substring(fullURL.lastIndexOf('#') + 1); + base = fullURL.substring(0, fullURL.length - resource.length); + // overwrite base if it is ontologyIri; + if ( base === graph.options().getGeneralMetaObjectProperty('iri') ) { + base = ":"; + } + splitedURL.base = base; + splitedURL.resource = resource; + } else { + resource = fullURL.substring(fullURL.lastIndexOf('/') + 1); + base = fullURL.substring(0, fullURL.length - resource.length); + // overwrite base if it is ontologyIri; + if ( base === graph.options().getGeneralMetaObjectProperty('iri') ) { + base = ":"; + } + splitedURL.base = base; + splitedURL.resource = resource; + } + return splitedURL; + } + + prefixRepresentationModule.getPrefixRepresentationForFullURI = function ( fullURL ){ + prefixRepresentationModule.updatePrefixModel(); + var splittedURL = splitURLIntoBaseAndResource(fullURL); + + // lazy approach , for + // loop over prefix model + for ( var name in currentPrefixModel ) { + if ( currentPrefixModel.hasOwnProperty(name) ) { + // THIS IS CASE SENSITIVE! + if ( currentPrefixModel[name] === splittedURL.base ) { + return name + ":" + splittedURL.resource; + } + } + } + + if ( splittedURL.base === ":" ) { + return ":" + splittedURL.resource; + } + + return fullURL; + }; + + + return prefixRepresentationModule; + }; + + + + +/***/ }), +/* 73 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var _ = __webpack_require__(58); + + module.exports = function (){ + + var DEFAULT_STATE = true; + var COLOR_MODES = [ + { type: "same", range: [d3.rgb("#36C"), d3.rgb("#36C")] }, + { type: "gradient", range: [d3.rgb("#36C"), d3.rgb("#EE2867")] } // taken from LD-VOWL + ]; + + var filter = {}, + nodes, + properties, + enabled = DEFAULT_STATE, + filteredNodes, + filteredProperties, + colorModeType = "same"; + + + filter.filter = function ( untouchedNodes, untouchedProperties ){ + nodes = untouchedNodes; + properties = untouchedProperties; + + var externalElements = filterExternalElements(nodes.concat(properties)); + + if ( enabled ) { + setColorsForExternals(externalElements); + } else { + resetBackgroundColors(externalElements); + } + + filteredNodes = nodes; + filteredProperties = properties; + }; + + function filterExternalElements( elements ){ + return elements.filter(function ( element ){ + if ( element.visualAttributes().indexOf("deprecated") >= 0 ) { + // deprecated is the only attribute which has preference over external + return false; + } + + return element.attributes().indexOf("external") >= 0; + }); + } + + function setColorsForExternals( elements ){ + var iriMap = mapExternalsToBaseUri(elements); + var entries = iriMap.entries(); + + var colorScale = d3.scale.linear() + .domain([0, entries.length - 1]) + .range(_.find(COLOR_MODES, { type: colorModeType }).range) + .interpolate(d3.interpolateHsl); + + for ( var i = 0; i < entries.length; i++ ) { + var groupedElements = entries[i].value; + setBackgroundColorForElements(groupedElements, colorScale(i)); + } + } + + function mapExternalsToBaseUri( elements ){ + var map = d3.map(); + + elements.forEach(function ( element ){ + var baseIri = element.baseIri(); + + if ( !map.has(baseIri) ) { + map.set(baseIri, []); + } + map.get(baseIri).push(element); + }); + + return map; + } + + function setBackgroundColorForElements( elements, backgroundColor ){ + elements.forEach(function ( element ){ + element.backgroundColor(backgroundColor); + }); + } + + function resetBackgroundColors( elements ){ + console.log("Resetting color"); + elements.forEach(function ( element ){ + element.backgroundColor(null); + }); + } + + filter.colorModeType = function ( p ){ + if ( !arguments.length ) return colorModeType; + colorModeType = p; + return filter; + }; + + filter.enabled = function ( p ){ + if ( !arguments.length ) return enabled; + enabled = p; + return filter; + }; + + filter.reset = function (){ + enabled = DEFAULT_STATE; + }; + + + // Functions a filter must have + filter.filteredNodes = function (){ + return filteredNodes; + }; + + filter.filteredProperties = function (){ + return filteredProperties; + }; + + + return filter; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 74 */ +/***/ (function(module, exports) { + + /** + * This module abuses the filter function a bit like the statistics module. Nothing is filtered. + * + * @returns {{}} + */ + + + module.exports = function ( graph ){ + + var DEFAULT_STATE = false; + + var filter = {}, + nodes, + properties, + enabled = DEFAULT_STATE, + filteredNodes, + filteredProperties; + + + /** + * If enabled, redundant details won't be drawn anymore. + * @param untouchedNodes + * @param untouchedProperties + */ + filter.filter = function ( untouchedNodes, untouchedProperties ){ + nodes = untouchedNodes; + properties = untouchedProperties; + graph.options().compactNotation(enabled); + filteredNodes = nodes; + filteredProperties = properties; + }; + + filter.enabled = function ( p ){ + if ( !arguments.length ) return enabled; + enabled = p; + return filter; + }; + + filter.reset = function (){ + enabled = DEFAULT_STATE; + }; + + + // Functions a filter must have + filter.filteredNodes = function (){ + return filteredNodes; + }; + + filter.filteredProperties = function (){ + return filteredProperties; + }; + + + return filter; + }; + + +/***/ }), +/* 75 */ +/***/ (function(module, exports, __webpack_require__) { + + var elementTools = __webpack_require__(63)(); + var filterTools = __webpack_require__(76)(); + + module.exports = function (){ + + var filter = {}, + nodes, + properties, + enabled = false, + filteredNodes, + filteredProperties; + + + /** + * If enabled, all datatypes and literals including connected properties are filtered. + * @param untouchedNodes + * @param untouchedProperties + */ + filter.filter = function ( untouchedNodes, untouchedProperties ){ + nodes = untouchedNodes; + properties = untouchedProperties; + + if ( this.enabled() ) { + removeDatatypesAndLiterals(); + } + + filteredNodes = nodes; + filteredProperties = properties; + }; + + function removeDatatypesAndLiterals(){ + var filteredData = filterTools.filterNodesAndTidy(nodes, properties, isNoDatatypeOrLiteral); + + nodes = filteredData.nodes; + properties = filteredData.properties; + } + + function isNoDatatypeOrLiteral( node ){ + return !elementTools.isDatatype(node); + } + + filter.enabled = function ( p ){ + if ( !arguments.length ) return enabled; + enabled = p; + return filter; + }; + + + // Functions a filter must have + filter.filteredNodes = function (){ + return filteredNodes; + }; + + filter.filteredProperties = function (){ + return filteredProperties; + }; + + + return filter; + }; + + +/***/ }), +/* 76 */ +/***/ (function(module, exports, __webpack_require__) { + + var elementTools = __webpack_require__(63)(); + + module.exports = (function (){ + + var tools = {}; + + /** + * Filters the passed nodes and removes dangling properties. + * @param nodes + * @param properties + * @param shouldKeepNode function that returns true if the node should be kept + * @returns {{nodes: Array, properties: Array}} the filtered nodes and properties + */ + tools.filterNodesAndTidy = function ( nodes, properties, shouldKeepNode ){ + var removedNodes = __webpack_require__(62)(), + cleanedNodes = [], + cleanedProperties = []; + + nodes.forEach(function ( node ){ + if ( shouldKeepNode(node) ) { + cleanedNodes.push(node); + } else { + removedNodes.add(node); + } + }); + + properties.forEach(function ( property ){ + if ( propertyHasVisibleNodes(removedNodes, property) ) { + cleanedProperties.push(property); + } else if ( elementTools.isDatatypeProperty(property) ) { + // Remove floating datatypes/literals, because they belong to their datatype property + var index = cleanedNodes.indexOf(property.range()); + if ( index >= 0 ) { + cleanedNodes.splice(index, 1); + } + } + }); + + return { + nodes: cleanedNodes, + properties: cleanedProperties + }; + }; + + /** + * Returns true, if the domain and the range of this property have not been removed. + * @param removedNodes + * @param property + * @returns {boolean} true if property isn't dangling + */ + function propertyHasVisibleNodes( removedNodes, property ){ + return !removedNodes.has(property.domain()) && !removedNodes.has(property.range()); + } + + + return function (){ + return tools; + }; + })(); + + +/***/ }), +/* 77 */ +/***/ (function(module, exports, __webpack_require__) { + + var OwlDisjointWith = __webpack_require__(46); + + module.exports = function (){ + + var filter = {}, + nodes, + properties, + // According to the specification enabled by default + enabled = true, + filteredNodes, + filteredProperties; + + + /** + * If enabled, all disjoint with properties are filtered. + * @param untouchedNodes + * @param untouchedProperties + */ + filter.filter = function ( untouchedNodes, untouchedProperties ){ + nodes = untouchedNodes; + properties = untouchedProperties; + + if ( this.enabled() ) { + removeDisjointWithProperties(); + } + + filteredNodes = nodes; + filteredProperties = properties; + }; + + function removeDisjointWithProperties(){ + var cleanedProperties = [], + i, l, property; + + for ( i = 0, l = properties.length; i < l; i++ ) { + property = properties[i]; + + if ( !(property instanceof OwlDisjointWith) ) { + cleanedProperties.push(property); + } + } + + properties = cleanedProperties; + } + + filter.enabled = function ( p ){ + if ( !arguments.length ) return enabled; + enabled = p; + return filter; + }; + + + // Functions a filter must have + filter.filteredNodes = function (){ + return filteredNodes; + }; + + filter.filteredProperties = function (){ + return filteredProperties; + }; + + + return filter; + }; + + +/***/ }), +/* 78 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {module.exports = function ( graph ){ + var focuser = {}, + focusedElement; + var elementTools = webvowl.util.elementTools(); + focuser.handle = function ( selectedElement, forced ){ + // Don't display details on a drag event, which will be prevented + if ( d3.event && d3.event.defaultPrevented && forced === undefined ) { + return; + } + + if ( focusedElement !== undefined ) { + focusedElement.toggleFocus(); + } + + if ( focusedElement !== selectedElement && selectedElement ) { + selectedElement.toggleFocus(); + focusedElement = selectedElement; + } else { + focusedElement = undefined; + } + if ( focusedElement && focusedElement.focused() ) { + graph.options().editSidebar().updateSelectionInformation(focusedElement); + if ( elementTools.isProperty(selectedElement) === true ) { + var inversed = false; + if ( selectedElement.inverse() ) { + inversed = true; + } + graph.activateHoverElementsForProperties(true, selectedElement, inversed, graph.isTouchDevice()); + } + else { + graph.activateHoverElements(true, selectedElement, graph.isTouchDevice()); + } + } + else { + graph.options().editSidebar().updateSelectionInformation(undefined); + graph.removeEditElements(); + } + }; + + /** + * Removes the focus if an element is focussed. + */ + focuser.reset = function (){ + if ( focusedElement ) { + focusedElement.toggleFocus(); + focusedElement = undefined; + } + }; + + return focuser; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 79 */ +/***/ (function(module, exports) { + + /** @WORKAROUND CODE: + * clears empty literals that are provided by owl2vowl: 0.2.2x*/ + + + module.exports = function (){ + + var filter = {}, + enabled = true, + filteredNodes, + removedNodes, + filteredProperties; + + filter.enabled = function ( val ){ + if ( !arguments.length ) { + return enabled; + } + enabled = val; + }; + + filter.filter = function ( nodes, properties ){ + if ( enabled === false ) { + filteredNodes = nodes; + filteredProperties = properties; + removedNodes = []; + return; + } + var literalUsageMap = []; + var thingUsageMap = []; + var node; + for ( var i = 0; i < properties.length; i++ ) { + // get property range; + var prop = properties[i]; + + // checking for literals + if ( prop.range() ) { + node = prop.range(); + if ( node.type() === "rdfs:Literal" ) { + literalUsageMap[node.id()] = 1; + } + } + // checking for thing + if ( prop.range() ) { + node = prop.range(); + if ( node.type() === "owl:Thing" ) { + thingUsageMap[node.id()] = 1; + } + } + if ( prop.domain() ) { + node = prop.domain(); + if ( node.type() === "owl:Thing" ) { + thingUsageMap[node.id()] = 1; + } + } + + } + var nodesToRemove = []; + var newNodes = []; + // todo: test and make it faster + for ( i = 0; i < nodes.length; i++ ) { + var nodeId = nodes[i].id(); + if ( nodes[i].type() === "rdfs:Literal" ) { + if ( literalUsageMap[nodeId] === undefined ) { + nodesToRemove.push(nodeId); + } + else { + newNodes.push(nodes[i]); + } + // check for node type == OWL:THING + } else if ( nodes[i].type() === "owl:Thing" ) { + if ( thingUsageMap[nodeId] === undefined ) { + nodesToRemove.push(nodeId); + } + else { + newNodes.push(nodes[i]); + } + } else { + newNodes.push(nodes[i]); + } + } + + filteredNodes = newNodes; + filteredProperties = properties; + removedNodes = nodesToRemove; + }; + + + // Functions a filter must have + filter.filteredNodes = function (){ + return filteredNodes; + }; + + filter.removedNodes = function (){ + return removedNodes; + }; + + filter.filteredProperties = function (){ + return filteredProperties; + }; + + + return filter; + }; + + +/***/ }), +/* 80 */ +/***/ (function(module, exports, __webpack_require__) { + + var elementTools = __webpack_require__(63)(); + var filterTools = __webpack_require__(76)(); + + module.exports = function ( menu ){ + + var filter = {}, + nodes, + properties, + enabled = true, + filteredNodes, + filteredProperties, + maxDegreeSetter, + degreeGetter, + lastFiltedDegree, + degreeSetter; + + + var NODE_COUNT_LIMIT_FOR_AUTO_ENABLING = 50; + + + filter.initialize = function ( nodes, properties ){ + lastFiltedDegree = -1; + var maxLinkCount = findMaxLinkCount(nodes); + if ( maxDegreeSetter instanceof Function ) { + maxDegreeSetter(maxLinkCount); + } + + menu.setDefaultDegreeValue(findAutoDefaultDegree(nodes, properties, maxLinkCount)); + var defaultDegree = findDefaultDegree(maxLinkCount); + if ( degreeSetter instanceof Function ) { + degreeSetter(defaultDegree); + if ( defaultDegree > 0 ) { + menu.highlightForDegreeSlider(true); + menu.getGraphObject().setFilterWarning(true); + + } + } else { + console.error("No degree setter function set."); + } + }; + + function findAutoDefaultDegree( nodes, properties, maxDegree ){ + for ( var degree = 0; degree < maxDegree; degree++ ) { + var filteredData = filterByNodeDegree(nodes, properties, degree); + + if ( filteredData.nodes.length <= NODE_COUNT_LIMIT_FOR_AUTO_ENABLING ) { + return degree; + } + } + return 0; + } + + function findDefaultDegree( maxDegree ){ + var globalDegOfFilter = menu.getGraphObject().getGlobalDOF(); + if ( globalDegOfFilter >= 0 ) { + if ( globalDegOfFilter <= maxDegree ) { + return globalDegOfFilter; + } else { + menu.getGraphObject().setGlobalDOF(maxDegree); + return maxDegree; + } + } + return menu.getDefaultDegreeValue(); + } + + /** + * If enabled, all nodes are filter by their node degree. + * @param untouchedNodes + * @param untouchedProperties + */ + filter.filter = function ( untouchedNodes, untouchedProperties ){ + nodes = untouchedNodes; + properties = untouchedProperties; + + if ( this.enabled() ) { + if ( degreeGetter instanceof Function ) { + filterByNodeDegreeAndApply(degreeGetter()); + } else { + console.error("No degree query function set."); + } + } + + filteredNodes = nodes; + filteredProperties = properties; + + if ( filteredNodes.length === 0 ) { + degreeSetter(0); + filteredNodes = untouchedNodes; + filteredProperties = untouchedProperties; + } + lastFiltedDegree = degreeGetter(); + }; + + function findMaxLinkCount( nodes ){ + var maxLinkCount = 0; + for ( var i = 0, l = nodes.length; i < l; i++ ) { + var linksWithoutDatatypes = filterOutDatatypes(nodes[i].links()); + + maxLinkCount = Math.max(maxLinkCount, linksWithoutDatatypes.length); + } + return maxLinkCount; + } + + function filterOutDatatypes( links ){ + return links.filter(function ( link ){ + return !elementTools.isDatatypeProperty(link.property()); + }); + } + + function filterByNodeDegreeAndApply( minDegree ){ + var filteredData = filterByNodeDegree(nodes, properties, minDegree); + nodes = filteredData.nodes; + properties = filteredData.properties; + } + + function filterByNodeDegree( nodes, properties, minDegree ){ + return filterTools.filterNodesAndTidy(nodes, properties, hasRequiredDegree(minDegree)); + } + + function hasRequiredDegree( minDegree ){ + return function ( node ){ + return filterOutDatatypes(node.links()).length >= minDegree; + }; + } + + filter.setMaxDegreeSetter = function ( _maxDegreeSetter ){ + maxDegreeSetter = _maxDegreeSetter; + }; + + filter.setDegreeGetter = function ( _degreeGetter ){ + degreeGetter = _degreeGetter; + }; + + filter.setDegreeSetter = function ( _degreeSetter ){ + degreeSetter = _degreeSetter; + }; + + filter.enabled = function ( p ){ + if ( !arguments.length ) return enabled; + enabled = p; + return filter; + }; + + + // Functions a filter must have + filter.filteredNodes = function (){ + return filteredNodes; + }; + + filter.filteredProperties = function (){ + return filteredProperties; + }; + + + return filter; + }; + + +/***/ }), +/* 81 */ +/***/ (function(module, exports) { + + /** + * This module abuses the filter function a bit like the statistics module. Nothing is filtered. + * + * @returns {{}} + */ + module.exports = function ( graph ){ + + var DEFAULT_STATE = true; + + var filter = {}, + nodes, + properties, + enabled = DEFAULT_STATE, + filteredNodes, + filteredProperties; + + + /** + * If enabled, the scaling of nodes according to individuals will be enabled. + * @param untouchedNodes + * @param untouchedProperties + */ + filter.filter = function ( untouchedNodes, untouchedProperties ){ + nodes = untouchedNodes; + properties = untouchedProperties; + + graph.options().scaleNodesByIndividuals(enabled); + + filteredNodes = nodes; + filteredProperties = properties; + }; + + filter.enabled = function ( p ){ + if ( !arguments.length ) return enabled; + enabled = p; + return filter; + }; + + filter.reset = function (){ + enabled = DEFAULT_STATE; + }; + + + // Functions a filter must have + filter.filteredNodes = function (){ + return filteredNodes; + }; + + filter.filteredProperties = function (){ + return filteredProperties; + }; + + + return filter; + }; + + +/***/ }), +/* 82 */ +/***/ (function(module, exports, __webpack_require__) { + + var elementTools = __webpack_require__(63)(); + + + module.exports = function (){ + + var filter = {}, + nodes, + properties, + enabled = false, + filteredNodes, + filteredProperties; + + + /** + * If enabled, all object properties and things without any other property are filtered. + * @param untouchedNodes + * @param untouchedProperties + */ + filter.filter = function ( untouchedNodes, untouchedProperties ){ + nodes = untouchedNodes; + properties = untouchedProperties; + + if ( this.enabled() ) { + removeObjectProperties(); + } + + filteredNodes = nodes; + filteredProperties = properties; + }; + + function removeObjectProperties(){ + properties = properties.filter(isNoObjectProperty); + nodes = nodes.filter(isNoFloatingThing); + } + + function isNoObjectProperty( property ){ + return !elementTools.isObjectProperty(property); + } + + function isNoFloatingThing( node ){ + var isNoThing = !elementTools.isThing(node); + var hasNonFilteredProperties = hasPropertiesOtherThanObjectProperties(node, properties); + return isNoThing || hasNonFilteredProperties; + } + + function hasPropertiesOtherThanObjectProperties( node, properties ){ + for ( var i = 0; i < properties.length; i++ ) { + var property = properties[i]; + if ( property.domain() !== node && property.range() !== node ) { + continue; + } + + if ( isNoObjectProperty(property) ) { + return true; + } + } + + return false; + } + + filter.enabled = function ( p ){ + if ( !arguments.length ) return enabled; + enabled = p; + return filter; + }; + + + // Functions a filter must have + filter.filteredNodes = function (){ + return filteredNodes; + }; + + filter.filteredProperties = function (){ + return filteredProperties; + }; + + + return filter; + }; + + +/***/ }), +/* 83 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var _ = __webpack_require__(84); + var elementTools = __webpack_require__(63)(); + + module.exports = function (){ + var pap = {}, + enabled = false, + pinnedElements = []; + + pap.addPinnedElement = function ( element ){ + // check if element is already in list + var indexInArray = pinnedElements.indexOf(element); + if ( indexInArray === -1 ) { + pinnedElements.push(element); + } + }; + + pap.handle = function ( selection, forced ){ + if ( !enabled ) { + return; + } + + if ( !forced ) { + if ( wasNotDragged() ) { + return; + } + } + if ( elementTools.isProperty(selection) ) { + if ( selection.inverse() && selection.inverse().pinned() ) { + return; + } else if ( hasNoParallelProperties(selection) ) { + return; + } + } + + if ( !selection.pinned() ) { + selection.drawPin(); + pap.addPinnedElement(selection); + } + }; + + function wasNotDragged(){ + return !d3.event.defaultPrevented; + } + + function hasNoParallelProperties( property ){ + return _.intersection(property.domain().links(), property.range().links()).length === 1; + } + + pap.enabled = function ( p ){ + if ( !arguments.length ) return enabled; + enabled = p; + return pap; + }; + + pap.reset = function (){ + pinnedElements.forEach(function ( element ){ + element.removePin(); + }); + // Clear the array of stored nodes + pinnedElements.length = 0; + }; + + return pap; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 84 */ +/***/ (function(module, exports, __webpack_require__) { + + module.exports = { + 'chunk': __webpack_require__(85), + 'compact': __webpack_require__(105), + 'concat': __webpack_require__(106), + 'difference': __webpack_require__(114), + 'differenceBy': __webpack_require__(167), + 'differenceWith': __webpack_require__(229), + 'drop': __webpack_require__(230), + 'dropRight': __webpack_require__(231), + 'dropRightWhile': __webpack_require__(232), + 'dropWhile': __webpack_require__(234), + 'fill': __webpack_require__(235), + 'findIndex': __webpack_require__(239), + 'findLastIndex': __webpack_require__(240), + 'first': __webpack_require__(241), + 'flatten': __webpack_require__(243), + 'flattenDeep': __webpack_require__(244), + 'flattenDepth': __webpack_require__(245), + 'fromPairs': __webpack_require__(246), + 'head': __webpack_require__(242), + 'indexOf': __webpack_require__(247), + 'initial': __webpack_require__(248), + 'intersection': __webpack_require__(249), + 'intersectionBy': __webpack_require__(252), + 'intersectionWith': __webpack_require__(253), + 'join': __webpack_require__(254), + 'last': __webpack_require__(228), + 'lastIndexOf': __webpack_require__(255), + 'nth': __webpack_require__(257), + 'pull': __webpack_require__(259), + 'pullAll': __webpack_require__(260), + 'pullAllBy': __webpack_require__(263), + 'pullAllWith': __webpack_require__(264), + 'pullAt': __webpack_require__(265), + 'remove': __webpack_require__(272), + 'reverse': __webpack_require__(273), + 'slice': __webpack_require__(274), + 'sortedIndex': __webpack_require__(275), + 'sortedIndexBy': __webpack_require__(278), + 'sortedIndexOf': __webpack_require__(279), + 'sortedLastIndex': __webpack_require__(280), + 'sortedLastIndexBy': __webpack_require__(281), + 'sortedLastIndexOf': __webpack_require__(282), + 'sortedUniq': __webpack_require__(283), + 'sortedUniqBy': __webpack_require__(285), + 'tail': __webpack_require__(286), + 'take': __webpack_require__(287), + 'takeRight': __webpack_require__(288), + 'takeRightWhile': __webpack_require__(289), + 'takeWhile': __webpack_require__(290), + 'union': __webpack_require__(291), + 'unionBy': __webpack_require__(295), + 'unionWith': __webpack_require__(296), + 'uniq': __webpack_require__(297), + 'uniqBy': __webpack_require__(298), + 'uniqWith': __webpack_require__(299), + 'unzip': __webpack_require__(300), + 'unzipWith': __webpack_require__(301), + 'without': __webpack_require__(302), + 'xor': __webpack_require__(303), + 'xorBy': __webpack_require__(305), + 'xorWith': __webpack_require__(306), + 'zip': __webpack_require__(307), + 'zipObject': __webpack_require__(308), + 'zipObjectDeep': __webpack_require__(312), + 'zipWith': __webpack_require__(314) + }; + + +/***/ }), +/* 85 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSlice = __webpack_require__(86), + isIterateeCall = __webpack_require__(87), + toInteger = __webpack_require__(100); + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeCeil = Math.ceil, + nativeMax = Math.max; + + /** + * Creates an array of elements split into groups the length of `size`. + * If `array` can't be split evenly, the final chunk will be the remaining + * elements. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to process. + * @param {number} [size=1] The length of each chunk + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the new array of chunks. + * @example + * + * _.chunk(['a', 'b', 'c', 'd'], 2); + * // => [['a', 'b'], ['c', 'd']] + * + * _.chunk(['a', 'b', 'c', 'd'], 3); + * // => [['a', 'b', 'c'], ['d']] + */ + function chunk(array, size, guard) { + if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) { + size = 1; + } else { + size = nativeMax(toInteger(size), 0); + } + var length = array == null ? 0 : array.length; + if (!length || size < 1) { + return []; + } + var index = 0, + resIndex = 0, + result = Array(nativeCeil(length / size)); + + while (index < length) { + result[resIndex++] = baseSlice(array, index, (index += size)); + } + return result; + } + + module.exports = chunk; + + +/***/ }), +/* 86 */ +/***/ (function(module, exports) { + + /** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = end > length ? length : end; + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; + } + + module.exports = baseSlice; + + +/***/ }), +/* 87 */ +/***/ (function(module, exports, __webpack_require__) { + + var eq = __webpack_require__(88), + isArrayLike = __webpack_require__(89), + isIndex = __webpack_require__(99), + isObject = __webpack_require__(97); + + /** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ + function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object) + ) { + return eq(object[index], value); + } + return false; + } + + module.exports = isIterateeCall; + + +/***/ }), +/* 88 */ +/***/ (function(module, exports) { + + /** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ + function eq(value, other) { + return value === other || (value !== value && other !== other); + } + + module.exports = eq; + + +/***/ }), +/* 89 */ +/***/ (function(module, exports, __webpack_require__) { + + var isFunction = __webpack_require__(90), + isLength = __webpack_require__(98); + + /** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ + function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); + } + + module.exports = isArrayLike; + + +/***/ }), +/* 90 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseGetTag = __webpack_require__(91), + isObject = __webpack_require__(97); + + /** `Object#toString` result references. */ + var asyncTag = '[object AsyncFunction]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + proxyTag = '[object Proxy]'; + + /** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ + function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; + } + + module.exports = isFunction; + + +/***/ }), +/* 91 */ +/***/ (function(module, exports, __webpack_require__) { + + var Symbol = __webpack_require__(92), + getRawTag = __webpack_require__(95), + objectToString = __webpack_require__(96); + + /** `Object#toString` result references. */ + var nullTag = '[object Null]', + undefinedTag = '[object Undefined]'; + + /** Built-in value references. */ + var symToStringTag = Symbol ? Symbol.toStringTag : undefined; + + /** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag && symToStringTag in Object(value)) + ? getRawTag(value) + : objectToString(value); + } + + module.exports = baseGetTag; + + +/***/ }), +/* 92 */ +/***/ (function(module, exports, __webpack_require__) { + + var root = __webpack_require__(93); + + /** Built-in value references. */ + var Symbol = root.Symbol; + + module.exports = Symbol; + + +/***/ }), +/* 93 */ +/***/ (function(module, exports, __webpack_require__) { + + var freeGlobal = __webpack_require__(94); + + /** Detect free variable `self`. */ + var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + + /** Used as a reference to the global object. */ + var root = freeGlobal || freeSelf || Function('return this')(); + + module.exports = root; + + +/***/ }), +/* 94 */ +/***/ (function(module, exports) { + + /* WEBPACK VAR INJECTION */(function(global) {/** Detect free variable `global` from Node.js. */ + var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + + module.exports = freeGlobal; + + /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()))) + +/***/ }), +/* 95 */ +/***/ (function(module, exports, __webpack_require__) { + + var Symbol = __webpack_require__(92); + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString = objectProto.toString; + + /** Built-in value references. */ + var symToStringTag = Symbol ? Symbol.toStringTag : undefined; + + /** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ + function getRawTag(value) { + var isOwn = hasOwnProperty.call(value, symToStringTag), + tag = value[symToStringTag]; + + try { + value[symToStringTag] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; + } + } + return result; + } + + module.exports = getRawTag; + + +/***/ }), +/* 96 */ +/***/ (function(module, exports) { + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString = objectProto.toString; + + /** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ + function objectToString(value) { + return nativeObjectToString.call(value); + } + + module.exports = objectToString; + + +/***/ }), +/* 97 */ +/***/ (function(module, exports) { + + /** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ + function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); + } + + module.exports = isObject; + + +/***/ }), +/* 98 */ +/***/ (function(module, exports) { + + /** Used as references for various `Number` constants. */ + var MAX_SAFE_INTEGER = 9007199254740991; + + /** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ + function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; + } + + module.exports = isLength; + + +/***/ }), +/* 99 */ +/***/ (function(module, exports) { + + /** Used as references for various `Number` constants. */ + var MAX_SAFE_INTEGER = 9007199254740991; + + /** Used to detect unsigned integer values. */ + var reIsUint = /^(?:0|[1-9]\d*)$/; + + /** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ + function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); + } + + module.exports = isIndex; + + +/***/ }), +/* 100 */ +/***/ (function(module, exports, __webpack_require__) { + + var toFinite = __webpack_require__(101); + + /** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ + function toInteger(value) { + var result = toFinite(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; + } + + module.exports = toInteger; + + +/***/ }), +/* 101 */ +/***/ (function(module, exports, __webpack_require__) { + + var toNumber = __webpack_require__(102); + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0, + MAX_INTEGER = 1.7976931348623157e+308; + + /** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ + function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; + } + + module.exports = toFinite; + + +/***/ }), +/* 102 */ +/***/ (function(module, exports, __webpack_require__) { + + var isObject = __webpack_require__(97), + isSymbol = __webpack_require__(103); + + /** Used as references for various `Number` constants. */ + var NAN = 0 / 0; + + /** Used to match leading and trailing whitespace. */ + var reTrim = /^\s+|\s+$/g; + + /** Used to detect bad signed hexadecimal string values. */ + var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + + /** Used to detect binary string values. */ + var reIsBinary = /^0b[01]+$/i; + + /** Used to detect octal string values. */ + var reIsOctal = /^0o[0-7]+$/i; + + /** Built-in method references without a dependency on `root`. */ + var freeParseInt = parseInt; + + /** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ + function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + if (isObject(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = isObject(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = value.replace(reTrim, ''); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); + } + + module.exports = toNumber; + + +/***/ }), +/* 103 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseGetTag = __webpack_require__(91), + isObjectLike = __webpack_require__(104); + + /** `Object#toString` result references. */ + var symbolTag = '[object Symbol]'; + + /** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ + function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && baseGetTag(value) == symbolTag); + } + + module.exports = isSymbol; + + +/***/ }), +/* 104 */ +/***/ (function(module, exports) { + + /** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ + function isObjectLike(value) { + return value != null && typeof value == 'object'; + } + + module.exports = isObjectLike; + + +/***/ }), +/* 105 */ +/***/ (function(module, exports) { + + /** + * Creates an array with all falsey values removed. The values `false`, `null`, + * `0`, `""`, `undefined`, and `NaN` are falsey. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to compact. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.compact([0, 1, false, 2, '', 3]); + * // => [1, 2, 3] + */ + function compact(array) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (value) { + result[resIndex++] = value; + } + } + return result; + } + + module.exports = compact; + + +/***/ }), +/* 106 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayPush = __webpack_require__(107), + baseFlatten = __webpack_require__(108), + copyArray = __webpack_require__(113), + isArray = __webpack_require__(112); + + /** + * Creates a new array concatenating `array` with any additional arrays + * and/or values. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to concatenate. + * @param {...*} [values] The values to concatenate. + * @returns {Array} Returns the new concatenated array. + * @example + * + * var array = [1]; + * var other = _.concat(array, 2, [3], [[4]]); + * + * console.log(other); + * // => [1, 2, 3, [4]] + * + * console.log(array); + * // => [1] + */ + function concat() { + var length = arguments.length; + if (!length) { + return []; + } + var args = Array(length - 1), + array = arguments[0], + index = length; + + while (index--) { + args[index - 1] = arguments[index]; + } + return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); + } + + module.exports = concat; + + +/***/ }), +/* 107 */ +/***/ (function(module, exports) { + + /** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ + function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; + } + + module.exports = arrayPush; + + +/***/ }), +/* 108 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayPush = __webpack_require__(107), + isFlattenable = __webpack_require__(109); + + /** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ + function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + arrayPush(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; + } + + module.exports = baseFlatten; + + +/***/ }), +/* 109 */ +/***/ (function(module, exports, __webpack_require__) { + + var Symbol = __webpack_require__(92), + isArguments = __webpack_require__(110), + isArray = __webpack_require__(112); + + /** Built-in value references. */ + var spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined; + + /** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ + function isFlattenable(value) { + return isArray(value) || isArguments(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); + } + + module.exports = isFlattenable; + + +/***/ }), +/* 110 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIsArguments = __webpack_require__(111), + isObjectLike = __webpack_require__(104); + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** Built-in value references. */ + var propertyIsEnumerable = objectProto.propertyIsEnumerable; + + /** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ + var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { + return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); + }; + + module.exports = isArguments; + + +/***/ }), +/* 111 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseGetTag = __webpack_require__(91), + isObjectLike = __webpack_require__(104); + + /** `Object#toString` result references. */ + var argsTag = '[object Arguments]'; + + /** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ + function baseIsArguments(value) { + return isObjectLike(value) && baseGetTag(value) == argsTag; + } + + module.exports = baseIsArguments; + + +/***/ }), +/* 112 */ +/***/ (function(module, exports) { + + /** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ + var isArray = Array.isArray; + + module.exports = isArray; + + +/***/ }), +/* 113 */ +/***/ (function(module, exports) { + + /** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ + function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; + } + + module.exports = copyArray; + + +/***/ }), +/* 114 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseDifference = __webpack_require__(115), + baseFlatten = __webpack_require__(108), + baseRest = __webpack_require__(157), + isArrayLikeObject = __webpack_require__(166); + + /** + * Creates an array of `array` values not included in the other given arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. The order and references of result values are + * determined by the first array. + * + * **Note:** Unlike `_.pullAll`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @see _.without, _.xor + * @example + * + * _.difference([2, 1], [2, 3]); + * // => [1] + */ + var difference = baseRest(function(array, values) { + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) + : []; + }); + + module.exports = difference; + + +/***/ }), +/* 115 */ +/***/ (function(module, exports, __webpack_require__) { + + var SetCache = __webpack_require__(116), + arrayIncludes = __webpack_require__(148), + arrayIncludesWith = __webpack_require__(153), + arrayMap = __webpack_require__(154), + baseUnary = __webpack_require__(155), + cacheHas = __webpack_require__(156); + + /** Used as the size to enable large array optimizations. */ + var LARGE_ARRAY_SIZE = 200; + + /** + * The base implementation of methods like `_.difference` without support + * for excluding multiple arrays or iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Array} values The values to exclude. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + */ + function baseDifference(array, values, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + isCommon = true, + length = array.length, + result = [], + valuesLength = values.length; + + if (!length) { + return result; + } + if (iteratee) { + values = arrayMap(values, baseUnary(iteratee)); + } + if (comparator) { + includes = arrayIncludesWith; + isCommon = false; + } + else if (values.length >= LARGE_ARRAY_SIZE) { + includes = cacheHas; + isCommon = false; + values = new SetCache(values); + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee == null ? value : iteratee(value); + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var valuesIndex = valuesLength; + while (valuesIndex--) { + if (values[valuesIndex] === computed) { + continue outer; + } + } + result.push(value); + } + else if (!includes(values, computed, comparator)) { + result.push(value); + } + } + return result; + } + + module.exports = baseDifference; + + +/***/ }), +/* 116 */ +/***/ (function(module, exports, __webpack_require__) { + + var MapCache = __webpack_require__(117), + setCacheAdd = __webpack_require__(146), + setCacheHas = __webpack_require__(147); + + /** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ + function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new MapCache; + while (++index < length) { + this.add(values[index]); + } + } + + // Add methods to `SetCache`. + SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; + SetCache.prototype.has = setCacheHas; + + module.exports = SetCache; + + +/***/ }), +/* 117 */ +/***/ (function(module, exports, __webpack_require__) { + + var mapCacheClear = __webpack_require__(118), + mapCacheDelete = __webpack_require__(140), + mapCacheGet = __webpack_require__(143), + mapCacheHas = __webpack_require__(144), + mapCacheSet = __webpack_require__(145); + + /** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function MapCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + // Add methods to `MapCache`. + MapCache.prototype.clear = mapCacheClear; + MapCache.prototype['delete'] = mapCacheDelete; + MapCache.prototype.get = mapCacheGet; + MapCache.prototype.has = mapCacheHas; + MapCache.prototype.set = mapCacheSet; + + module.exports = MapCache; + + +/***/ }), +/* 118 */ +/***/ (function(module, exports, __webpack_require__) { + + var Hash = __webpack_require__(119), + ListCache = __webpack_require__(132), + Map = __webpack_require__(139); + + /** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ + function mapCacheClear() { + this.size = 0; + this.__data__ = { + 'hash': new Hash, + 'map': new (Map || ListCache), + 'string': new Hash + }; + } + + module.exports = mapCacheClear; + + +/***/ }), +/* 119 */ +/***/ (function(module, exports, __webpack_require__) { + + var hashClear = __webpack_require__(120), + hashDelete = __webpack_require__(128), + hashGet = __webpack_require__(129), + hashHas = __webpack_require__(130), + hashSet = __webpack_require__(131); + + /** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function Hash(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + // Add methods to `Hash`. + Hash.prototype.clear = hashClear; + Hash.prototype['delete'] = hashDelete; + Hash.prototype.get = hashGet; + Hash.prototype.has = hashHas; + Hash.prototype.set = hashSet; + + module.exports = Hash; + + +/***/ }), +/* 120 */ +/***/ (function(module, exports, __webpack_require__) { + + var nativeCreate = __webpack_require__(121); + + /** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ + function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; + this.size = 0; + } + + module.exports = hashClear; + + +/***/ }), +/* 121 */ +/***/ (function(module, exports, __webpack_require__) { + + var getNative = __webpack_require__(122); + + /* Built-in method references that are verified to be native. */ + var nativeCreate = getNative(Object, 'create'); + + module.exports = nativeCreate; + + +/***/ }), +/* 122 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIsNative = __webpack_require__(123), + getValue = __webpack_require__(127); + + /** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ + function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; + } + + module.exports = getNative; + + +/***/ }), +/* 123 */ +/***/ (function(module, exports, __webpack_require__) { + + var isFunction = __webpack_require__(90), + isMasked = __webpack_require__(124), + isObject = __webpack_require__(97), + toSource = __webpack_require__(126); + + /** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ + var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + + /** Used to detect host constructors (Safari). */ + var reIsHostCtor = /^\[object .+?Constructor\]$/; + + /** Used for built-in method references. */ + var funcProto = Function.prototype, + objectProto = Object.prototype; + + /** Used to resolve the decompiled source of functions. */ + var funcToString = funcProto.toString; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** Used to detect if a method is native. */ + var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' + ); + + /** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ + function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = isFunction(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); + } + + module.exports = baseIsNative; + + +/***/ }), +/* 124 */ +/***/ (function(module, exports, __webpack_require__) { + + var coreJsData = __webpack_require__(125); + + /** Used to detect methods masquerading as native. */ + var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; + }()); + + /** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ + function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); + } + + module.exports = isMasked; + + +/***/ }), +/* 125 */ +/***/ (function(module, exports, __webpack_require__) { + + var root = __webpack_require__(93); + + /** Used to detect overreaching core-js shims. */ + var coreJsData = root['__core-js_shared__']; + + module.exports = coreJsData; + + +/***/ }), +/* 126 */ +/***/ (function(module, exports) { + + /** Used for built-in method references. */ + var funcProto = Function.prototype; + + /** Used to resolve the decompiled source of functions. */ + var funcToString = funcProto.toString; + + /** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ + function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; + } + + module.exports = toSource; + + +/***/ }), +/* 127 */ +/***/ (function(module, exports) { + + /** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ + function getValue(object, key) { + return object == null ? undefined : object[key]; + } + + module.exports = getValue; + + +/***/ }), +/* 128 */ +/***/ (function(module, exports) { + + /** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function hashDelete(key) { + var result = this.has(key) && delete this.__data__[key]; + this.size -= result ? 1 : 0; + return result; + } + + module.exports = hashDelete; + + +/***/ }), +/* 129 */ +/***/ (function(module, exports, __webpack_require__) { + + var nativeCreate = __webpack_require__(121); + + /** Used to stand-in for `undefined` hash values. */ + var HASH_UNDEFINED = '__lodash_hash_undefined__'; + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty.call(data, key) ? data[key] : undefined; + } + + module.exports = hashGet; + + +/***/ }), +/* 130 */ +/***/ (function(module, exports, __webpack_require__) { + + var nativeCreate = __webpack_require__(121); + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function hashHas(key) { + var data = this.__data__; + return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); + } + + module.exports = hashHas; + + +/***/ }), +/* 131 */ +/***/ (function(module, exports, __webpack_require__) { + + var nativeCreate = __webpack_require__(121); + + /** Used to stand-in for `undefined` hash values. */ + var HASH_UNDEFINED = '__lodash_hash_undefined__'; + + /** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ + function hashSet(key, value) { + var data = this.__data__; + this.size += this.has(key) ? 0 : 1; + data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + return this; + } + + module.exports = hashSet; + + +/***/ }), +/* 132 */ +/***/ (function(module, exports, __webpack_require__) { + + var listCacheClear = __webpack_require__(133), + listCacheDelete = __webpack_require__(134), + listCacheGet = __webpack_require__(136), + listCacheHas = __webpack_require__(137), + listCacheSet = __webpack_require__(138); + + /** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function ListCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + // Add methods to `ListCache`. + ListCache.prototype.clear = listCacheClear; + ListCache.prototype['delete'] = listCacheDelete; + ListCache.prototype.get = listCacheGet; + ListCache.prototype.has = listCacheHas; + ListCache.prototype.set = listCacheSet; + + module.exports = ListCache; + + +/***/ }), +/* 133 */ +/***/ (function(module, exports) { + + /** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ + function listCacheClear() { + this.__data__ = []; + this.size = 0; + } + + module.exports = listCacheClear; + + +/***/ }), +/* 134 */ +/***/ (function(module, exports, __webpack_require__) { + + var assocIndexOf = __webpack_require__(135); + + /** Used for built-in method references. */ + var arrayProto = Array.prototype; + + /** Built-in value references. */ + var splice = arrayProto.splice; + + /** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + --this.size; + return true; + } + + module.exports = listCacheDelete; + + +/***/ }), +/* 135 */ +/***/ (function(module, exports, __webpack_require__) { + + var eq = __webpack_require__(88); + + /** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; + } + + module.exports = assocIndexOf; + + +/***/ }), +/* 136 */ +/***/ (function(module, exports, __webpack_require__) { + + var assocIndexOf = __webpack_require__(135); + + /** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + return index < 0 ? undefined : data[index][1]; + } + + module.exports = listCacheGet; + + +/***/ }), +/* 137 */ +/***/ (function(module, exports, __webpack_require__) { + + var assocIndexOf = __webpack_require__(135); + + /** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; + } + + module.exports = listCacheHas; + + +/***/ }), +/* 138 */ +/***/ (function(module, exports, __webpack_require__) { + + var assocIndexOf = __webpack_require__(135); + + /** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ + function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + ++this.size; + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; + } + + module.exports = listCacheSet; + + +/***/ }), +/* 139 */ +/***/ (function(module, exports, __webpack_require__) { + + var getNative = __webpack_require__(122), + root = __webpack_require__(93); + + /* Built-in method references that are verified to be native. */ + var Map = getNative(root, 'Map'); + + module.exports = Map; + + +/***/ }), +/* 140 */ +/***/ (function(module, exports, __webpack_require__) { + + var getMapData = __webpack_require__(141); + + /** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function mapCacheDelete(key) { + var result = getMapData(this, key)['delete'](key); + this.size -= result ? 1 : 0; + return result; + } + + module.exports = mapCacheDelete; + + +/***/ }), +/* 141 */ +/***/ (function(module, exports, __webpack_require__) { + + var isKeyable = __webpack_require__(142); + + /** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ + function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; + } + + module.exports = getMapData; + + +/***/ }), +/* 142 */ +/***/ (function(module, exports) { + + /** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ + function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); + } + + module.exports = isKeyable; + + +/***/ }), +/* 143 */ +/***/ (function(module, exports, __webpack_require__) { + + var getMapData = __webpack_require__(141); + + /** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function mapCacheGet(key) { + return getMapData(this, key).get(key); + } + + module.exports = mapCacheGet; + + +/***/ }), +/* 144 */ +/***/ (function(module, exports, __webpack_require__) { + + var getMapData = __webpack_require__(141); + + /** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function mapCacheHas(key) { + return getMapData(this, key).has(key); + } + + module.exports = mapCacheHas; + + +/***/ }), +/* 145 */ +/***/ (function(module, exports, __webpack_require__) { + + var getMapData = __webpack_require__(141); + + /** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ + function mapCacheSet(key, value) { + var data = getMapData(this, key), + size = data.size; + + data.set(key, value); + this.size += data.size == size ? 0 : 1; + return this; + } + + module.exports = mapCacheSet; + + +/***/ }), +/* 146 */ +/***/ (function(module, exports) { + + /** Used to stand-in for `undefined` hash values. */ + var HASH_UNDEFINED = '__lodash_hash_undefined__'; + + /** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ + function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; + } + + module.exports = setCacheAdd; + + +/***/ }), +/* 147 */ +/***/ (function(module, exports) { + + /** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ + function setCacheHas(value) { + return this.__data__.has(value); + } + + module.exports = setCacheHas; + + +/***/ }), +/* 148 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIndexOf = __webpack_require__(149); + + /** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ + function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && baseIndexOf(array, value, 0) > -1; + } + + module.exports = arrayIncludes; + + +/***/ }), +/* 149 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseFindIndex = __webpack_require__(150), + baseIsNaN = __webpack_require__(151), + strictIndexOf = __webpack_require__(152); + + /** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseIndexOf(array, value, fromIndex) { + return value === value + ? strictIndexOf(array, value, fromIndex) + : baseFindIndex(array, baseIsNaN, fromIndex); + } + + module.exports = baseIndexOf; + + +/***/ }), +/* 150 */ +/***/ (function(module, exports) { + + /** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; + } + + module.exports = baseFindIndex; + + +/***/ }), +/* 151 */ +/***/ (function(module, exports) { + + /** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ + function baseIsNaN(value) { + return value !== value; + } + + module.exports = baseIsNaN; + + +/***/ }), +/* 152 */ +/***/ (function(module, exports) { + + /** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; + } + + module.exports = strictIndexOf; + + +/***/ }), +/* 153 */ +/***/ (function(module, exports) { + + /** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ + function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; + } + + module.exports = arrayIncludesWith; + + +/***/ }), +/* 154 */ +/***/ (function(module, exports) { + + /** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; + } + + module.exports = arrayMap; + + +/***/ }), +/* 155 */ +/***/ (function(module, exports) { + + /** + * The base implementation of `_.unary` without support for storing metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + */ + function baseUnary(func) { + return function(value) { + return func(value); + }; + } + + module.exports = baseUnary; + + +/***/ }), +/* 156 */ +/***/ (function(module, exports) { + + /** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function cacheHas(cache, key) { + return cache.has(key); + } + + module.exports = cacheHas; + + +/***/ }), +/* 157 */ +/***/ (function(module, exports, __webpack_require__) { + + var identity = __webpack_require__(158), + overRest = __webpack_require__(159), + setToString = __webpack_require__(161); + + /** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ + function baseRest(func, start) { + return setToString(overRest(func, start, identity), func + ''); + } + + module.exports = baseRest; + + +/***/ }), +/* 158 */ +/***/ (function(module, exports) { + + /** + * This method returns the first argument it receives. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'a': 1 }; + * + * console.log(_.identity(object) === object); + * // => true + */ + function identity(value) { + return value; + } + + module.exports = identity; + + +/***/ }), +/* 159 */ +/***/ (function(module, exports, __webpack_require__) { + + var apply = __webpack_require__(160); + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMax = Math.max; + + /** + * A specialized version of `baseRest` which transforms the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @param {Function} transform The rest array transform. + * @returns {Function} Returns the new function. + */ + function overRest(func, start, transform) { + start = nativeMax(start === undefined ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = transform(array); + return apply(func, this, otherArgs); + }; + } + + module.exports = overRest; + + +/***/ }), +/* 160 */ +/***/ (function(module, exports) { + + /** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ + function apply(func, thisArg, args) { + switch (args.length) { + case 0: return func.call(thisArg); + case 1: return func.call(thisArg, args[0]); + case 2: return func.call(thisArg, args[0], args[1]); + case 3: return func.call(thisArg, args[0], args[1], args[2]); + } + return func.apply(thisArg, args); + } + + module.exports = apply; + + +/***/ }), +/* 161 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSetToString = __webpack_require__(162), + shortOut = __webpack_require__(165); + + /** + * Sets the `toString` method of `func` to return `string`. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ + var setToString = shortOut(baseSetToString); + + module.exports = setToString; + + +/***/ }), +/* 162 */ +/***/ (function(module, exports, __webpack_require__) { + + var constant = __webpack_require__(163), + defineProperty = __webpack_require__(164), + identity = __webpack_require__(158); + + /** + * The base implementation of `setToString` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ + var baseSetToString = !defineProperty ? identity : function(func, string) { + return defineProperty(func, 'toString', { + 'configurable': true, + 'enumerable': false, + 'value': constant(string), + 'writable': true + }); + }; + + module.exports = baseSetToString; + + +/***/ }), +/* 163 */ +/***/ (function(module, exports) { + + /** + * Creates a function that returns `value`. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {*} value The value to return from the new function. + * @returns {Function} Returns the new constant function. + * @example + * + * var objects = _.times(2, _.constant({ 'a': 1 })); + * + * console.log(objects); + * // => [{ 'a': 1 }, { 'a': 1 }] + * + * console.log(objects[0] === objects[1]); + * // => true + */ + function constant(value) { + return function() { + return value; + }; + } + + module.exports = constant; + + +/***/ }), +/* 164 */ +/***/ (function(module, exports, __webpack_require__) { + + var getNative = __webpack_require__(122); + + var defineProperty = (function() { + try { + var func = getNative(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} + }()); + + module.exports = defineProperty; + + +/***/ }), +/* 165 */ +/***/ (function(module, exports) { + + /** Used to detect hot functions by number of calls within a span of milliseconds. */ + var HOT_COUNT = 800, + HOT_SPAN = 16; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeNow = Date.now; + + /** + * Creates a function that'll short out and invoke `identity` instead + * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` + * milliseconds. + * + * @private + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new shortable function. + */ + function shortOut(func) { + var count = 0, + lastCalled = 0; + + return function() { + var stamp = nativeNow(), + remaining = HOT_SPAN - (stamp - lastCalled); + + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return arguments[0]; + } + } else { + count = 0; + } + return func.apply(undefined, arguments); + }; + } + + module.exports = shortOut; + + +/***/ }), +/* 166 */ +/***/ (function(module, exports, __webpack_require__) { + + var isArrayLike = __webpack_require__(89), + isObjectLike = __webpack_require__(104); + + /** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, + * else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ + function isArrayLikeObject(value) { + return isObjectLike(value) && isArrayLike(value); + } + + module.exports = isArrayLikeObject; + + +/***/ }), +/* 167 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseDifference = __webpack_require__(115), + baseFlatten = __webpack_require__(108), + baseIteratee = __webpack_require__(168), + baseRest = __webpack_require__(157), + isArrayLikeObject = __webpack_require__(166), + last = __webpack_require__(228); + + /** + * This method is like `_.difference` except that it accepts `iteratee` which + * is invoked for each element of `array` and `values` to generate the criterion + * by which they're compared. The order and references of result values are + * determined by the first array. The iteratee is invoked with one argument: + * (value). + * + * **Note:** Unlike `_.pullAllBy`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [1.2] + * + * // The `_.property` iteratee shorthand. + * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'); + * // => [{ 'x': 2 }] + */ + var differenceBy = baseRest(function(array, values) { + var iteratee = last(values); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; + } + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), baseIteratee(iteratee, 2)) + : []; + }); + + module.exports = differenceBy; + + +/***/ }), +/* 168 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseMatches = __webpack_require__(169), + baseMatchesProperty = __webpack_require__(211), + identity = __webpack_require__(158), + isArray = __webpack_require__(112), + property = __webpack_require__(225); + + /** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ + function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity; + } + if (typeof value == 'object') { + return isArray(value) + ? baseMatchesProperty(value[0], value[1]) + : baseMatches(value); + } + return property(value); + } + + module.exports = baseIteratee; + + +/***/ }), +/* 169 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIsMatch = __webpack_require__(170), + getMatchData = __webpack_require__(208), + matchesStrictComparable = __webpack_require__(210); + + /** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ + function baseMatches(source) { + var matchData = getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || baseIsMatch(object, source, matchData); + }; + } + + module.exports = baseMatches; + + +/***/ }), +/* 170 */ +/***/ (function(module, exports, __webpack_require__) { + + var Stack = __webpack_require__(171), + baseIsEqual = __webpack_require__(177); + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + + /** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ + function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new Stack; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; + } + + module.exports = baseIsMatch; + + +/***/ }), +/* 171 */ +/***/ (function(module, exports, __webpack_require__) { + + var ListCache = __webpack_require__(132), + stackClear = __webpack_require__(172), + stackDelete = __webpack_require__(173), + stackGet = __webpack_require__(174), + stackHas = __webpack_require__(175), + stackSet = __webpack_require__(176); + + /** + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function Stack(entries) { + var data = this.__data__ = new ListCache(entries); + this.size = data.size; + } + + // Add methods to `Stack`. + Stack.prototype.clear = stackClear; + Stack.prototype['delete'] = stackDelete; + Stack.prototype.get = stackGet; + Stack.prototype.has = stackHas; + Stack.prototype.set = stackSet; + + module.exports = Stack; + + +/***/ }), +/* 172 */ +/***/ (function(module, exports, __webpack_require__) { + + var ListCache = __webpack_require__(132); + + /** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ + function stackClear() { + this.__data__ = new ListCache; + this.size = 0; + } + + module.exports = stackClear; + + +/***/ }), +/* 173 */ +/***/ (function(module, exports) { + + /** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function stackDelete(key) { + var data = this.__data__, + result = data['delete'](key); + + this.size = data.size; + return result; + } + + module.exports = stackDelete; + + +/***/ }), +/* 174 */ +/***/ (function(module, exports) { + + /** + * Gets the stack value for `key`. + * + * @private + * @name get + * @memberOf Stack + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function stackGet(key) { + return this.__data__.get(key); + } + + module.exports = stackGet; + + +/***/ }), +/* 175 */ +/***/ (function(module, exports) { + + /** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function stackHas(key) { + return this.__data__.has(key); + } + + module.exports = stackHas; + + +/***/ }), +/* 176 */ +/***/ (function(module, exports, __webpack_require__) { + + var ListCache = __webpack_require__(132), + Map = __webpack_require__(139), + MapCache = __webpack_require__(117); + + /** Used as the size to enable large array optimizations. */ + var LARGE_ARRAY_SIZE = 200; + + /** + * Sets the stack `key` to `value`. + * + * @private + * @name set + * @memberOf Stack + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the stack cache instance. + */ + function stackSet(key, value) { + var data = this.__data__; + if (data instanceof ListCache) { + var pairs = data.__data__; + if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { + pairs.push([key, value]); + this.size = ++data.size; + return this; + } + data = this.__data__ = new MapCache(pairs); + } + data.set(key, value); + this.size = data.size; + return this; + } + + module.exports = stackSet; + + +/***/ }), +/* 177 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIsEqualDeep = __webpack_require__(178), + isObjectLike = __webpack_require__(104); + + /** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ + function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); + } + + module.exports = baseIsEqual; + + +/***/ }), +/* 178 */ +/***/ (function(module, exports, __webpack_require__) { + + var Stack = __webpack_require__(171), + equalArrays = __webpack_require__(179), + equalByTag = __webpack_require__(181), + equalObjects = __webpack_require__(185), + getTag = __webpack_require__(203), + isArray = __webpack_require__(112), + isBuffer = __webpack_require__(194), + isTypedArray = __webpack_require__(196); + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG = 1; + + /** `Object#toString` result references. */ + var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + objectTag = '[object Object]'; + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = objIsArr ? arrayTag : getTag(object), + othTag = othIsArr ? arrayTag : getTag(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && isBuffer(object)) { + if (!isBuffer(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new Stack); + return (objIsArr || isTypedArray(object)) + ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new Stack); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new Stack); + return equalObjects(object, other, bitmask, customizer, equalFunc, stack); + } + + module.exports = baseIsEqualDeep; + + +/***/ }), +/* 179 */ +/***/ (function(module, exports, __webpack_require__) { + + var SetCache = __webpack_require__(116), + arraySome = __webpack_require__(180), + cacheHas = __webpack_require__(156); + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + + /** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ + function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(array); + if (stacked && stack.get(other)) { + return stacked == other; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!arraySome(other, function(othValue, othIndex) { + if (!cacheHas(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; + } + + module.exports = equalArrays; + + +/***/ }), +/* 180 */ +/***/ (function(module, exports) { + + /** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ + function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; + } + + module.exports = arraySome; + + +/***/ }), +/* 181 */ +/***/ (function(module, exports, __webpack_require__) { + + var Symbol = __webpack_require__(92), + Uint8Array = __webpack_require__(182), + eq = __webpack_require__(88), + equalArrays = __webpack_require__(179), + mapToArray = __webpack_require__(183), + setToArray = __webpack_require__(184); + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + + /** `Object#toString` result references. */ + var boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + + var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]'; + + /** Used to convert symbols to primitives and strings. */ + var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + + /** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new Uint8Array(object), new Uint8Array(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return eq(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = mapToArray; + + case setTag: + var isPartial = bitmask & COMPARE_PARTIAL_FLAG; + convert || (convert = setToArray); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; + } + + module.exports = equalByTag; + + +/***/ }), +/* 182 */ +/***/ (function(module, exports, __webpack_require__) { + + var root = __webpack_require__(93); + + /** Built-in value references. */ + var Uint8Array = root.Uint8Array; + + module.exports = Uint8Array; + + +/***/ }), +/* 183 */ +/***/ (function(module, exports) { + + /** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ + function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; + } + + module.exports = mapToArray; + + +/***/ }), +/* 184 */ +/***/ (function(module, exports) { + + /** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ + function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; + } + + module.exports = setToArray; + + +/***/ }), +/* 185 */ +/***/ (function(module, exports, __webpack_require__) { + + var getAllKeys = __webpack_require__(186); + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG = 1; + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + objProps = getAllKeys(object), + objLength = objProps.length, + othProps = getAllKeys(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { + return false; + } + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked && stack.get(other)) { + return stacked == other; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; + } + + module.exports = equalObjects; + + +/***/ }), +/* 186 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseGetAllKeys = __webpack_require__(187), + getSymbols = __webpack_require__(188), + keys = __webpack_require__(191); + + /** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ + function getAllKeys(object) { + return baseGetAllKeys(object, keys, getSymbols); + } + + module.exports = getAllKeys; + + +/***/ }), +/* 187 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayPush = __webpack_require__(107), + isArray = __webpack_require__(112); + + /** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ + function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); + } + + module.exports = baseGetAllKeys; + + +/***/ }), +/* 188 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayFilter = __webpack_require__(189), + stubArray = __webpack_require__(190); + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Built-in value references. */ + var propertyIsEnumerable = objectProto.propertyIsEnumerable; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeGetSymbols = Object.getOwnPropertySymbols; + + /** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ + var getSymbols = !nativeGetSymbols ? stubArray : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return arrayFilter(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); + }; + + module.exports = getSymbols; + + +/***/ }), +/* 189 */ +/***/ (function(module, exports) { + + /** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; + } + + module.exports = arrayFilter; + + +/***/ }), +/* 190 */ +/***/ (function(module, exports) { + + /** + * This method returns a new empty array. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {Array} Returns the new empty array. + * @example + * + * var arrays = _.times(2, _.stubArray); + * + * console.log(arrays); + * // => [[], []] + * + * console.log(arrays[0] === arrays[1]); + * // => false + */ + function stubArray() { + return []; + } + + module.exports = stubArray; + + +/***/ }), +/* 191 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayLikeKeys = __webpack_require__(192), + baseKeys = __webpack_require__(199), + isArrayLike = __webpack_require__(89); + + /** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ + function keys(object) { + return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); + } + + module.exports = keys; + + +/***/ }), +/* 192 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseTimes = __webpack_require__(193), + isArguments = __webpack_require__(110), + isArray = __webpack_require__(112), + isBuffer = __webpack_require__(194), + isIndex = __webpack_require__(99), + isTypedArray = __webpack_require__(196); + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ + function arrayLikeKeys(value, inherited) { + var isArr = isArray(value), + isArg = !isArr && isArguments(value), + isBuff = !isArr && !isArg && isBuffer(value), + isType = !isArr && !isArg && !isBuff && isTypedArray(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? baseTimes(value.length, String) : [], + length = result.length; + + for (var key in value) { + if ((inherited || hasOwnProperty.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + isIndex(key, length) + ))) { + result.push(key); + } + } + return result; + } + + module.exports = arrayLikeKeys; + + +/***/ }), +/* 193 */ +/***/ (function(module, exports) { + + /** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ + function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; + } + + module.exports = baseTimes; + + +/***/ }), +/* 194 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(module) {var root = __webpack_require__(93), + stubFalse = __webpack_require__(195); + + /** Detect free variable `exports`. */ + var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + + /** Detect free variable `module`. */ + var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + + /** Detect the popular CommonJS extension `module.exports`. */ + var moduleExports = freeModule && freeModule.exports === freeExports; + + /** Built-in value references. */ + var Buffer = moduleExports ? root.Buffer : undefined; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; + + /** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */ + var isBuffer = nativeIsBuffer || stubFalse; + + module.exports = isBuffer; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(59)(module))) + +/***/ }), +/* 195 */ +/***/ (function(module, exports) { + + /** + * This method returns `false`. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {boolean} Returns `false`. + * @example + * + * _.times(2, _.stubFalse); + * // => [false, false] + */ + function stubFalse() { + return false; + } + + module.exports = stubFalse; + + +/***/ }), +/* 196 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIsTypedArray = __webpack_require__(197), + baseUnary = __webpack_require__(155), + nodeUtil = __webpack_require__(198); + + /* Node.js helper references. */ + var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; + + /** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ + var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; + + module.exports = isTypedArray; + + +/***/ }), +/* 197 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseGetTag = __webpack_require__(91), + isLength = __webpack_require__(98), + isObjectLike = __webpack_require__(104); + + /** `Object#toString` result references. */ + var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + mapTag = '[object Map]', + numberTag = '[object Number]', + objectTag = '[object Object]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + weakMapTag = '[object WeakMap]'; + + var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + + /** Used to identify `toStringTag` values of typed arrays. */ + var typedArrayTags = {}; + typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = + typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = + typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = + typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = + typedArrayTags[uint32Tag] = true; + typedArrayTags[argsTag] = typedArrayTags[arrayTag] = + typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = + typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = + typedArrayTags[errorTag] = typedArrayTags[funcTag] = + typedArrayTags[mapTag] = typedArrayTags[numberTag] = + typedArrayTags[objectTag] = typedArrayTags[regexpTag] = + typedArrayTags[setTag] = typedArrayTags[stringTag] = + typedArrayTags[weakMapTag] = false; + + /** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ + function baseIsTypedArray(value) { + return isObjectLike(value) && + isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; + } + + module.exports = baseIsTypedArray; + + +/***/ }), +/* 198 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(module) {var freeGlobal = __webpack_require__(94); + + /** Detect free variable `exports`. */ + var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + + /** Detect free variable `module`. */ + var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + + /** Detect the popular CommonJS extension `module.exports`. */ + var moduleExports = freeModule && freeModule.exports === freeExports; + + /** Detect free variable `process` from Node.js. */ + var freeProcess = moduleExports && freeGlobal.process; + + /** Used to access faster Node.js helpers. */ + var nodeUtil = (function() { + try { + // Use `util.types` for Node.js 10+. + var types = freeModule && freeModule.require && freeModule.require('util').types; + + if (types) { + return types; + } + + // Legacy `process.binding('util')` for Node.js < 10. + return freeProcess && freeProcess.binding && freeProcess.binding('util'); + } catch (e) {} + }()); + + module.exports = nodeUtil; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(59)(module))) + +/***/ }), +/* 199 */ +/***/ (function(module, exports, __webpack_require__) { + + var isPrototype = __webpack_require__(200), + nativeKeys = __webpack_require__(201); + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeys(object) { + if (!isPrototype(object)) { + return nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; + } + + module.exports = baseKeys; + + +/***/ }), +/* 200 */ +/***/ (function(module, exports) { + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ + function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; + + return value === proto; + } + + module.exports = isPrototype; + + +/***/ }), +/* 201 */ +/***/ (function(module, exports, __webpack_require__) { + + var overArg = __webpack_require__(202); + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeKeys = overArg(Object.keys, Object); + + module.exports = nativeKeys; + + +/***/ }), +/* 202 */ +/***/ (function(module, exports) { + + /** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ + function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; + } + + module.exports = overArg; + + +/***/ }), +/* 203 */ +/***/ (function(module, exports, __webpack_require__) { + + var DataView = __webpack_require__(204), + Map = __webpack_require__(139), + Promise = __webpack_require__(205), + Set = __webpack_require__(206), + WeakMap = __webpack_require__(207), + baseGetTag = __webpack_require__(91), + toSource = __webpack_require__(126); + + /** `Object#toString` result references. */ + var mapTag = '[object Map]', + objectTag = '[object Object]', + promiseTag = '[object Promise]', + setTag = '[object Set]', + weakMapTag = '[object WeakMap]'; + + var dataViewTag = '[object DataView]'; + + /** Used to detect maps, sets, and weakmaps. */ + var dataViewCtorString = toSource(DataView), + mapCtorString = toSource(Map), + promiseCtorString = toSource(Promise), + setCtorString = toSource(Set), + weakMapCtorString = toSource(WeakMap); + + /** + * Gets the `toStringTag` of `value`. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + var getTag = baseGetTag; + + // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. + if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || + (Map && getTag(new Map) != mapTag) || + (Promise && getTag(Promise.resolve()) != promiseTag) || + (Set && getTag(new Set) != setTag) || + (WeakMap && getTag(new WeakMap) != weakMapTag)) { + getTag = function(value) { + var result = baseGetTag(value), + Ctor = result == objectTag ? value.constructor : undefined, + ctorString = Ctor ? toSource(Ctor) : ''; + + if (ctorString) { + switch (ctorString) { + case dataViewCtorString: return dataViewTag; + case mapCtorString: return mapTag; + case promiseCtorString: return promiseTag; + case setCtorString: return setTag; + case weakMapCtorString: return weakMapTag; + } + } + return result; + }; + } + + module.exports = getTag; + + +/***/ }), +/* 204 */ +/***/ (function(module, exports, __webpack_require__) { + + var getNative = __webpack_require__(122), + root = __webpack_require__(93); + + /* Built-in method references that are verified to be native. */ + var DataView = getNative(root, 'DataView'); + + module.exports = DataView; + + +/***/ }), +/* 205 */ +/***/ (function(module, exports, __webpack_require__) { + + var getNative = __webpack_require__(122), + root = __webpack_require__(93); + + /* Built-in method references that are verified to be native. */ + var Promise = getNative(root, 'Promise'); + + module.exports = Promise; + + +/***/ }), +/* 206 */ +/***/ (function(module, exports, __webpack_require__) { + + var getNative = __webpack_require__(122), + root = __webpack_require__(93); + + /* Built-in method references that are verified to be native. */ + var Set = getNative(root, 'Set'); + + module.exports = Set; + + +/***/ }), +/* 207 */ +/***/ (function(module, exports, __webpack_require__) { + + var getNative = __webpack_require__(122), + root = __webpack_require__(93); + + /* Built-in method references that are verified to be native. */ + var WeakMap = getNative(root, 'WeakMap'); + + module.exports = WeakMap; + + +/***/ }), +/* 208 */ +/***/ (function(module, exports, __webpack_require__) { + + var isStrictComparable = __webpack_require__(209), + keys = __webpack_require__(191); + + /** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ + function getMatchData(object) { + var result = keys(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, isStrictComparable(value)]; + } + return result; + } + + module.exports = getMatchData; + + +/***/ }), +/* 209 */ +/***/ (function(module, exports, __webpack_require__) { + + var isObject = __webpack_require__(97); + + /** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ + function isStrictComparable(value) { + return value === value && !isObject(value); + } + + module.exports = isStrictComparable; + + +/***/ }), +/* 210 */ +/***/ (function(module, exports) { + + /** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ + function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; + } + + module.exports = matchesStrictComparable; + + +/***/ }), +/* 211 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIsEqual = __webpack_require__(177), + get = __webpack_require__(212), + hasIn = __webpack_require__(222), + isKey = __webpack_require__(215), + isStrictComparable = __webpack_require__(209), + matchesStrictComparable = __webpack_require__(210), + toKey = __webpack_require__(221); + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + + /** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ + function baseMatchesProperty(path, srcValue) { + if (isKey(path) && isStrictComparable(srcValue)) { + return matchesStrictComparable(toKey(path), srcValue); + } + return function(object) { + var objValue = get(object, path); + return (objValue === undefined && objValue === srcValue) + ? hasIn(object, path) + : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); + }; + } + + module.exports = baseMatchesProperty; + + +/***/ }), +/* 212 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseGet = __webpack_require__(213); + + /** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ + function get(object, path, defaultValue) { + var result = object == null ? undefined : baseGet(object, path); + return result === undefined ? defaultValue : result; + } + + module.exports = get; + + +/***/ }), +/* 213 */ +/***/ (function(module, exports, __webpack_require__) { + + var castPath = __webpack_require__(214), + toKey = __webpack_require__(221); + + /** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ + function baseGet(object, path) { + path = castPath(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[toKey(path[index++])]; + } + return (index && index == length) ? object : undefined; + } + + module.exports = baseGet; + + +/***/ }), +/* 214 */ +/***/ (function(module, exports, __webpack_require__) { + + var isArray = __webpack_require__(112), + isKey = __webpack_require__(215), + stringToPath = __webpack_require__(216), + toString = __webpack_require__(219); + + /** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ + function castPath(value, object) { + if (isArray(value)) { + return value; + } + return isKey(value, object) ? [value] : stringToPath(toString(value)); + } + + module.exports = castPath; + + +/***/ }), +/* 215 */ +/***/ (function(module, exports, __webpack_require__) { + + var isArray = __webpack_require__(112), + isSymbol = __webpack_require__(103); + + /** Used to match property names within property paths. */ + var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + + /** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ + function isKey(value, object) { + if (isArray(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || isSymbol(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); + } + + module.exports = isKey; + + +/***/ }), +/* 216 */ +/***/ (function(module, exports, __webpack_require__) { + + var memoizeCapped = __webpack_require__(217); + + /** Used to match property names within property paths. */ + var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + + /** Used to match backslashes in property paths. */ + var reEscapeChar = /\\(\\)?/g; + + /** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ + var stringToPath = memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; + }); + + module.exports = stringToPath; + + +/***/ }), +/* 217 */ +/***/ (function(module, exports, __webpack_require__) { + + var memoize = __webpack_require__(218); + + /** Used as the maximum memoize cache size. */ + var MAX_MEMOIZE_SIZE = 500; + + /** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ + function memoizeCapped(func) { + var result = memoize(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; + } + + module.exports = memoizeCapped; + + +/***/ }), +/* 218 */ +/***/ (function(module, exports, __webpack_require__) { + + var MapCache = __webpack_require__(117); + + /** Error message constants. */ + var FUNC_ERROR_TEXT = 'Expected a function'; + + /** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided, it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is used as the map cache key. The `func` + * is invoked with the `this` binding of the memoized function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the + * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) + * method interface of `clear`, `delete`, `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoized function. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * var other = { 'c': 3, 'd': 4 }; + * + * var values = _.memoize(_.values); + * values(object); + * // => [1, 2] + * + * values(other); + * // => [3, 4] + * + * object.a = 2; + * values(object); + * // => [1, 2] + * + * // Modify the result cache. + * values.cache.set(object, ['a', 'b']); + * values(object); + * // => ['a', 'b'] + * + * // Replace `_.memoize.Cache`. + * _.memoize.Cache = WeakMap; + */ + function memoize(func, resolver) { + if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function() { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; + + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result) || cache; + return result; + }; + memoized.cache = new (memoize.Cache || MapCache); + return memoized; + } + + // Expose `MapCache`. + memoize.Cache = MapCache; + + module.exports = memoize; + + +/***/ }), +/* 219 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseToString = __webpack_require__(220); + + /** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ + function toString(value) { + return value == null ? '' : baseToString(value); + } + + module.exports = toString; + + +/***/ }), +/* 220 */ +/***/ (function(module, exports, __webpack_require__) { + + var Symbol = __webpack_require__(92), + arrayMap = __webpack_require__(154), + isArray = __webpack_require__(112), + isSymbol = __webpack_require__(103); + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0; + + /** Used to convert symbols to primitives and strings. */ + var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + + /** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ + function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isArray(value)) { + // Recursively convert values (susceptible to call stack limits). + return arrayMap(value, baseToString) + ''; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + } + + module.exports = baseToString; + + +/***/ }), +/* 221 */ +/***/ (function(module, exports, __webpack_require__) { + + var isSymbol = __webpack_require__(103); + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0; + + /** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ + function toKey(value) { + if (typeof value == 'string' || isSymbol(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + } + + module.exports = toKey; + + +/***/ }), +/* 222 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseHasIn = __webpack_require__(223), + hasPath = __webpack_require__(224); + + /** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ + function hasIn(object, path) { + return object != null && hasPath(object, path, baseHasIn); + } + + module.exports = hasIn; + + +/***/ }), +/* 223 */ +/***/ (function(module, exports) { + + /** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ + function baseHasIn(object, key) { + return object != null && key in Object(object); + } + + module.exports = baseHasIn; + + +/***/ }), +/* 224 */ +/***/ (function(module, exports, __webpack_require__) { + + var castPath = __webpack_require__(214), + isArguments = __webpack_require__(110), + isArray = __webpack_require__(112), + isIndex = __webpack_require__(99), + isLength = __webpack_require__(98), + toKey = __webpack_require__(221); + + /** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ + function hasPath(object, path, hasFunc) { + path = castPath(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = toKey(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && isLength(length) && isIndex(key, length) && + (isArray(object) || isArguments(object)); + } + + module.exports = hasPath; + + +/***/ }), +/* 225 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseProperty = __webpack_require__(226), + basePropertyDeep = __webpack_require__(227), + isKey = __webpack_require__(215), + toKey = __webpack_require__(221); + + /** + * Creates a function that returns the value at `path` of a given object. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + * @example + * + * var objects = [ + * { 'a': { 'b': 2 } }, + * { 'a': { 'b': 1 } } + * ]; + * + * _.map(objects, _.property('a.b')); + * // => [2, 1] + * + * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); + * // => [1, 2] + */ + function property(path) { + return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path); + } + + module.exports = property; + + +/***/ }), +/* 226 */ +/***/ (function(module, exports) { + + /** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ + function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; + } + + module.exports = baseProperty; + + +/***/ }), +/* 227 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseGet = __webpack_require__(213); + + /** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ + function basePropertyDeep(path) { + return function(object) { + return baseGet(object, path); + }; + } + + module.exports = basePropertyDeep; + + +/***/ }), +/* 228 */ +/***/ (function(module, exports) { + + /** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ + function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; + } + + module.exports = last; + + +/***/ }), +/* 229 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseDifference = __webpack_require__(115), + baseFlatten = __webpack_require__(108), + baseRest = __webpack_require__(157), + isArrayLikeObject = __webpack_require__(166), + last = __webpack_require__(228); + + /** + * This method is like `_.difference` except that it accepts `comparator` + * which is invoked to compare elements of `array` to `values`. The order and + * references of result values are determined by the first array. The comparator + * is invoked with two arguments: (arrVal, othVal). + * + * **Note:** Unlike `_.pullAllWith`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * + * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual); + * // => [{ 'x': 2, 'y': 1 }] + */ + var differenceWith = baseRest(function(array, values) { + var comparator = last(values); + if (isArrayLikeObject(comparator)) { + comparator = undefined; + } + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator) + : []; + }); + + module.exports = differenceWith; + + +/***/ }), +/* 230 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSlice = __webpack_require__(86), + toInteger = __webpack_require__(100); + + /** + * Creates a slice of `array` with `n` elements dropped from the beginning. + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.drop([1, 2, 3]); + * // => [2, 3] + * + * _.drop([1, 2, 3], 2); + * // => [3] + * + * _.drop([1, 2, 3], 5); + * // => [] + * + * _.drop([1, 2, 3], 0); + * // => [1, 2, 3] + */ + function drop(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + return baseSlice(array, n < 0 ? 0 : n, length); + } + + module.exports = drop; + + +/***/ }), +/* 231 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSlice = __webpack_require__(86), + toInteger = __webpack_require__(100); + + /** + * Creates a slice of `array` with `n` elements dropped from the end. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.dropRight([1, 2, 3]); + * // => [1, 2] + * + * _.dropRight([1, 2, 3], 2); + * // => [1] + * + * _.dropRight([1, 2, 3], 5); + * // => [] + * + * _.dropRight([1, 2, 3], 0); + * // => [1, 2, 3] + */ + function dropRight(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + n = length - n; + return baseSlice(array, 0, n < 0 ? 0 : n); + } + + module.exports = dropRight; + + +/***/ }), +/* 232 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIteratee = __webpack_require__(168), + baseWhile = __webpack_require__(233); + + /** + * Creates a slice of `array` excluding elements dropped from the end. + * Elements are dropped until `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.dropRightWhile(users, function(o) { return !o.active; }); + * // => objects for ['barney'] + * + * // The `_.matches` iteratee shorthand. + * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false }); + * // => objects for ['barney', 'fred'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.dropRightWhile(users, ['active', false]); + * // => objects for ['barney'] + * + * // The `_.property` iteratee shorthand. + * _.dropRightWhile(users, 'active'); + * // => objects for ['barney', 'fred', 'pebbles'] + */ + function dropRightWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, baseIteratee(predicate, 3), true, true) + : []; + } + + module.exports = dropRightWhile; + + +/***/ }), +/* 233 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSlice = __webpack_require__(86); + + /** + * The base implementation of methods like `_.dropWhile` and `_.takeWhile` + * without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to query. + * @param {Function} predicate The function invoked per iteration. + * @param {boolean} [isDrop] Specify dropping elements instead of taking them. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the slice of `array`. + */ + function baseWhile(array, predicate, isDrop, fromRight) { + var length = array.length, + index = fromRight ? length : -1; + + while ((fromRight ? index-- : ++index < length) && + predicate(array[index], index, array)) {} + + return isDrop + ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) + : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); + } + + module.exports = baseWhile; + + +/***/ }), +/* 234 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIteratee = __webpack_require__(168), + baseWhile = __webpack_require__(233); + + /** + * Creates a slice of `array` excluding elements dropped from the beginning. + * Elements are dropped until `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.dropWhile(users, function(o) { return !o.active; }); + * // => objects for ['pebbles'] + * + * // The `_.matches` iteratee shorthand. + * _.dropWhile(users, { 'user': 'barney', 'active': false }); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.dropWhile(users, ['active', false]); + * // => objects for ['pebbles'] + * + * // The `_.property` iteratee shorthand. + * _.dropWhile(users, 'active'); + * // => objects for ['barney', 'fred', 'pebbles'] + */ + function dropWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, baseIteratee(predicate, 3), true) + : []; + } + + module.exports = dropWhile; + + +/***/ }), +/* 235 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseFill = __webpack_require__(236), + isIterateeCall = __webpack_require__(87); + + /** + * Fills elements of `array` with `value` from `start` up to, but not + * including, `end`. + * + * **Note:** This method mutates `array`. + * + * @static + * @memberOf _ + * @since 3.2.0 + * @category Array + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3]; + * + * _.fill(array, 'a'); + * console.log(array); + * // => ['a', 'a', 'a'] + * + * _.fill(Array(3), 2); + * // => [2, 2, 2] + * + * _.fill([4, 6, 8, 10], '*', 1, 3); + * // => [4, '*', '*', 10] + */ + function fill(array, value, start, end) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { + start = 0; + end = length; + } + return baseFill(array, value, start, end); + } + + module.exports = fill; + + +/***/ }), +/* 236 */ +/***/ (function(module, exports, __webpack_require__) { + + var toInteger = __webpack_require__(100), + toLength = __webpack_require__(237); + + /** + * The base implementation of `_.fill` without an iteratee call guard. + * + * @private + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + */ + function baseFill(array, value, start, end) { + var length = array.length; + + start = toInteger(start); + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = (end === undefined || end > length) ? length : toInteger(end); + if (end < 0) { + end += length; + } + end = start > end ? 0 : toLength(end); + while (start < end) { + array[start++] = value; + } + return array; + } + + module.exports = baseFill; + + +/***/ }), +/* 237 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseClamp = __webpack_require__(238), + toInteger = __webpack_require__(100); + + /** Used as references for the maximum length and index of an array. */ + var MAX_ARRAY_LENGTH = 4294967295; + + /** + * Converts `value` to an integer suitable for use as the length of an + * array-like object. + * + * **Note:** This method is based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toLength(3.2); + * // => 3 + * + * _.toLength(Number.MIN_VALUE); + * // => 0 + * + * _.toLength(Infinity); + * // => 4294967295 + * + * _.toLength('3.2'); + * // => 3 + */ + function toLength(value) { + return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0; + } + + module.exports = toLength; + + +/***/ }), +/* 238 */ +/***/ (function(module, exports) { + + /** + * The base implementation of `_.clamp` which doesn't coerce arguments. + * + * @private + * @param {number} number The number to clamp. + * @param {number} [lower] The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the clamped number. + */ + function baseClamp(number, lower, upper) { + if (number === number) { + if (upper !== undefined) { + number = number <= upper ? number : upper; + } + if (lower !== undefined) { + number = number >= lower ? number : lower; + } + } + return number; + } + + module.exports = baseClamp; + + +/***/ }), +/* 239 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseFindIndex = __webpack_require__(150), + baseIteratee = __webpack_require__(168), + toInteger = __webpack_require__(100); + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMax = Math.max; + + /** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ + function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return baseFindIndex(array, baseIteratee(predicate, 3), index); + } + + module.exports = findIndex; + + +/***/ }), +/* 240 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseFindIndex = __webpack_require__(150), + baseIteratee = __webpack_require__(168), + toInteger = __webpack_require__(100); + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMax = Math.max, + nativeMin = Math.min; + + /** + * This method is like `_.findIndex` except that it iterates over elements + * of `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=array.length-1] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); + * // => 2 + * + * // The `_.matches` iteratee shorthand. + * _.findLastIndex(users, { 'user': 'barney', 'active': true }); + * // => 0 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findLastIndex(users, ['active', false]); + * // => 2 + * + * // The `_.property` iteratee shorthand. + * _.findLastIndex(users, 'active'); + * // => 0 + */ + function findLastIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = length - 1; + if (fromIndex !== undefined) { + index = toInteger(fromIndex); + index = fromIndex < 0 + ? nativeMax(length + index, 0) + : nativeMin(index, length - 1); + } + return baseFindIndex(array, baseIteratee(predicate, 3), index, true); + } + + module.exports = findLastIndex; + + +/***/ }), +/* 241 */ +/***/ (function(module, exports, __webpack_require__) { + + module.exports = __webpack_require__(242); + + +/***/ }), +/* 242 */ +/***/ (function(module, exports) { + + /** + * Gets the first element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias first + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the first element of `array`. + * @example + * + * _.head([1, 2, 3]); + * // => 1 + * + * _.head([]); + * // => undefined + */ + function head(array) { + return (array && array.length) ? array[0] : undefined; + } + + module.exports = head; + + +/***/ }), +/* 243 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseFlatten = __webpack_require__(108); + + /** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ + function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, 1) : []; + } + + module.exports = flatten; + + +/***/ }), +/* 244 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseFlatten = __webpack_require__(108); + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0; + + /** + * Recursively flattens `array`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flattenDeep([1, [2, [3, [4]], 5]]); + * // => [1, 2, 3, 4, 5] + */ + function flattenDeep(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, INFINITY) : []; + } + + module.exports = flattenDeep; + + +/***/ }), +/* 245 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseFlatten = __webpack_require__(108), + toInteger = __webpack_require__(100); + + /** + * Recursively flatten `array` up to `depth` times. + * + * @static + * @memberOf _ + * @since 4.4.0 + * @category Array + * @param {Array} array The array to flatten. + * @param {number} [depth=1] The maximum recursion depth. + * @returns {Array} Returns the new flattened array. + * @example + * + * var array = [1, [2, [3, [4]], 5]]; + * + * _.flattenDepth(array, 1); + * // => [1, 2, [3, [4]], 5] + * + * _.flattenDepth(array, 2); + * // => [1, 2, 3, [4], 5] + */ + function flattenDepth(array, depth) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + depth = depth === undefined ? 1 : toInteger(depth); + return baseFlatten(array, depth); + } + + module.exports = flattenDepth; + + +/***/ }), +/* 246 */ +/***/ (function(module, exports) { + + /** + * The inverse of `_.toPairs`; this method returns an object composed + * from key-value `pairs`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} pairs The key-value pairs. + * @returns {Object} Returns the new object. + * @example + * + * _.fromPairs([['a', 1], ['b', 2]]); + * // => { 'a': 1, 'b': 2 } + */ + function fromPairs(pairs) { + var index = -1, + length = pairs == null ? 0 : pairs.length, + result = {}; + + while (++index < length) { + var pair = pairs[index]; + result[pair[0]] = pair[1]; + } + return result; + } + + module.exports = fromPairs; + + +/***/ }), +/* 247 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIndexOf = __webpack_require__(149), + toInteger = __webpack_require__(100); + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMax = Math.max; + + /** + * Gets the index at which the first occurrence of `value` is found in `array` + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. If `fromIndex` is negative, it's used as the + * offset from the end of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.indexOf([1, 2, 1, 2], 2); + * // => 1 + * + * // Search from the `fromIndex`. + * _.indexOf([1, 2, 1, 2], 2, 2); + * // => 3 + */ + function indexOf(array, value, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return baseIndexOf(array, value, index); + } + + module.exports = indexOf; + + +/***/ }), +/* 248 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSlice = __webpack_require__(86); + + /** + * Gets all but the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.initial([1, 2, 3]); + * // => [1, 2] + */ + function initial(array) { + var length = array == null ? 0 : array.length; + return length ? baseSlice(array, 0, -1) : []; + } + + module.exports = initial; + + +/***/ }), +/* 249 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayMap = __webpack_require__(154), + baseIntersection = __webpack_require__(250), + baseRest = __webpack_require__(157), + castArrayLikeObject = __webpack_require__(251); + + /** + * Creates an array of unique values that are included in all given arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. The order and references of result values are + * determined by the first array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersection([2, 1], [2, 3]); + * // => [2] + */ + var intersection = baseRest(function(arrays) { + var mapped = arrayMap(arrays, castArrayLikeObject); + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped) + : []; + }); + + module.exports = intersection; + + +/***/ }), +/* 250 */ +/***/ (function(module, exports, __webpack_require__) { + + var SetCache = __webpack_require__(116), + arrayIncludes = __webpack_require__(148), + arrayIncludesWith = __webpack_require__(153), + arrayMap = __webpack_require__(154), + baseUnary = __webpack_require__(155), + cacheHas = __webpack_require__(156); + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMin = Math.min; + + /** + * The base implementation of methods like `_.intersection`, without support + * for iteratee shorthands, that accepts an array of arrays to inspect. + * + * @private + * @param {Array} arrays The arrays to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of shared values. + */ + function baseIntersection(arrays, iteratee, comparator) { + var includes = comparator ? arrayIncludesWith : arrayIncludes, + length = arrays[0].length, + othLength = arrays.length, + othIndex = othLength, + caches = Array(othLength), + maxLength = Infinity, + result = []; + + while (othIndex--) { + var array = arrays[othIndex]; + if (othIndex && iteratee) { + array = arrayMap(array, baseUnary(iteratee)); + } + maxLength = nativeMin(array.length, maxLength); + caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120)) + ? new SetCache(othIndex && array) + : undefined; + } + array = arrays[0]; + + var index = -1, + seen = caches[0]; + + outer: + while (++index < length && result.length < maxLength) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (!(seen + ? cacheHas(seen, computed) + : includes(result, computed, comparator) + )) { + othIndex = othLength; + while (--othIndex) { + var cache = caches[othIndex]; + if (!(cache + ? cacheHas(cache, computed) + : includes(arrays[othIndex], computed, comparator)) + ) { + continue outer; + } + } + if (seen) { + seen.push(computed); + } + result.push(value); + } + } + return result; + } + + module.exports = baseIntersection; + + +/***/ }), +/* 251 */ +/***/ (function(module, exports, __webpack_require__) { + + var isArrayLikeObject = __webpack_require__(166); + + /** + * Casts `value` to an empty array if it's not an array like object. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array|Object} Returns the cast array-like object. + */ + function castArrayLikeObject(value) { + return isArrayLikeObject(value) ? value : []; + } + + module.exports = castArrayLikeObject; + + +/***/ }), +/* 252 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayMap = __webpack_require__(154), + baseIntersection = __webpack_require__(250), + baseIteratee = __webpack_require__(168), + baseRest = __webpack_require__(157), + castArrayLikeObject = __webpack_require__(251), + last = __webpack_require__(228); + + /** + * This method is like `_.intersection` except that it accepts `iteratee` + * which is invoked for each element of each `arrays` to generate the criterion + * by which they're compared. The order and references of result values are + * determined by the first array. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [2.1] + * + * // The `_.property` iteratee shorthand. + * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }] + */ + var intersectionBy = baseRest(function(arrays) { + var iteratee = last(arrays), + mapped = arrayMap(arrays, castArrayLikeObject); + + if (iteratee === last(mapped)) { + iteratee = undefined; + } else { + mapped.pop(); + } + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped, baseIteratee(iteratee, 2)) + : []; + }); + + module.exports = intersectionBy; + + +/***/ }), +/* 253 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayMap = __webpack_require__(154), + baseIntersection = __webpack_require__(250), + baseRest = __webpack_require__(157), + castArrayLikeObject = __webpack_require__(251), + last = __webpack_require__(228); + + /** + * This method is like `_.intersection` except that it accepts `comparator` + * which is invoked to compare elements of `arrays`. The order and references + * of result values are determined by the first array. The comparator is + * invoked with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.intersectionWith(objects, others, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }] + */ + var intersectionWith = baseRest(function(arrays) { + var comparator = last(arrays), + mapped = arrayMap(arrays, castArrayLikeObject); + + comparator = typeof comparator == 'function' ? comparator : undefined; + if (comparator) { + mapped.pop(); + } + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped, undefined, comparator) + : []; + }); + + module.exports = intersectionWith; + + +/***/ }), +/* 254 */ +/***/ (function(module, exports) { + + /** Used for built-in method references. */ + var arrayProto = Array.prototype; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeJoin = arrayProto.join; + + /** + * Converts all elements in `array` into a string separated by `separator`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to convert. + * @param {string} [separator=','] The element separator. + * @returns {string} Returns the joined string. + * @example + * + * _.join(['a', 'b', 'c'], '~'); + * // => 'a~b~c' + */ + function join(array, separator) { + return array == null ? '' : nativeJoin.call(array, separator); + } + + module.exports = join; + + +/***/ }), +/* 255 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseFindIndex = __webpack_require__(150), + baseIsNaN = __webpack_require__(151), + strictLastIndexOf = __webpack_require__(256), + toInteger = __webpack_require__(100); + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMax = Math.max, + nativeMin = Math.min; + + /** + * This method is like `_.indexOf` except that it iterates over elements of + * `array` from right to left. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=array.length-1] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.lastIndexOf([1, 2, 1, 2], 2); + * // => 3 + * + * // Search from the `fromIndex`. + * _.lastIndexOf([1, 2, 1, 2], 2, 2); + * // => 1 + */ + function lastIndexOf(array, value, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = length; + if (fromIndex !== undefined) { + index = toInteger(fromIndex); + index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1); + } + return value === value + ? strictLastIndexOf(array, value, index) + : baseFindIndex(array, baseIsNaN, index, true); + } + + module.exports = lastIndexOf; + + +/***/ }), +/* 256 */ +/***/ (function(module, exports) { + + /** + * A specialized version of `_.lastIndexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function strictLastIndexOf(array, value, fromIndex) { + var index = fromIndex + 1; + while (index--) { + if (array[index] === value) { + return index; + } + } + return index; + } + + module.exports = strictLastIndexOf; + + +/***/ }), +/* 257 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseNth = __webpack_require__(258), + toInteger = __webpack_require__(100); + + /** + * Gets the element at index `n` of `array`. If `n` is negative, the nth + * element from the end is returned. + * + * @static + * @memberOf _ + * @since 4.11.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=0] The index of the element to return. + * @returns {*} Returns the nth element of `array`. + * @example + * + * var array = ['a', 'b', 'c', 'd']; + * + * _.nth(array, 1); + * // => 'b' + * + * _.nth(array, -2); + * // => 'c'; + */ + function nth(array, n) { + return (array && array.length) ? baseNth(array, toInteger(n)) : undefined; + } + + module.exports = nth; + + +/***/ }), +/* 258 */ +/***/ (function(module, exports, __webpack_require__) { + + var isIndex = __webpack_require__(99); + + /** + * The base implementation of `_.nth` which doesn't coerce arguments. + * + * @private + * @param {Array} array The array to query. + * @param {number} n The index of the element to return. + * @returns {*} Returns the nth element of `array`. + */ + function baseNth(array, n) { + var length = array.length; + if (!length) { + return; + } + n += n < 0 ? length : 0; + return isIndex(n, length) ? array[n] : undefined; + } + + module.exports = baseNth; + + +/***/ }), +/* 259 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseRest = __webpack_require__(157), + pullAll = __webpack_require__(260); + + /** + * Removes all given values from `array` using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove` + * to remove elements from an array by predicate. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {...*} [values] The values to remove. + * @returns {Array} Returns `array`. + * @example + * + * var array = ['a', 'b', 'c', 'a', 'b', 'c']; + * + * _.pull(array, 'a', 'c'); + * console.log(array); + * // => ['b', 'b'] + */ + var pull = baseRest(pullAll); + + module.exports = pull; + + +/***/ }), +/* 260 */ +/***/ (function(module, exports, __webpack_require__) { + + var basePullAll = __webpack_require__(261); + + /** + * This method is like `_.pull` except that it accepts an array of values to remove. + * + * **Note:** Unlike `_.difference`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @returns {Array} Returns `array`. + * @example + * + * var array = ['a', 'b', 'c', 'a', 'b', 'c']; + * + * _.pullAll(array, ['a', 'c']); + * console.log(array); + * // => ['b', 'b'] + */ + function pullAll(array, values) { + return (array && array.length && values && values.length) + ? basePullAll(array, values) + : array; + } + + module.exports = pullAll; + + +/***/ }), +/* 261 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayMap = __webpack_require__(154), + baseIndexOf = __webpack_require__(149), + baseIndexOfWith = __webpack_require__(262), + baseUnary = __webpack_require__(155), + copyArray = __webpack_require__(113); + + /** Used for built-in method references. */ + var arrayProto = Array.prototype; + + /** Built-in value references. */ + var splice = arrayProto.splice; + + /** + * The base implementation of `_.pullAllBy` without support for iteratee + * shorthands. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns `array`. + */ + function basePullAll(array, values, iteratee, comparator) { + var indexOf = comparator ? baseIndexOfWith : baseIndexOf, + index = -1, + length = values.length, + seen = array; + + if (array === values) { + values = copyArray(values); + } + if (iteratee) { + seen = arrayMap(array, baseUnary(iteratee)); + } + while (++index < length) { + var fromIndex = 0, + value = values[index], + computed = iteratee ? iteratee(value) : value; + + while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) { + if (seen !== array) { + splice.call(seen, fromIndex, 1); + } + splice.call(array, fromIndex, 1); + } + } + return array; + } + + module.exports = basePullAll; + + +/***/ }), +/* 262 */ +/***/ (function(module, exports) { + + /** + * This function is like `baseIndexOf` except that it accepts a comparator. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @param {Function} comparator The comparator invoked per element. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseIndexOfWith(array, value, fromIndex, comparator) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (comparator(array[index], value)) { + return index; + } + } + return -1; + } + + module.exports = baseIndexOfWith; + + +/***/ }), +/* 263 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIteratee = __webpack_require__(168), + basePullAll = __webpack_require__(261); + + /** + * This method is like `_.pullAll` except that it accepts `iteratee` which is + * invoked for each element of `array` and `values` to generate the criterion + * by which they're compared. The iteratee is invoked with one argument: (value). + * + * **Note:** Unlike `_.differenceBy`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns `array`. + * @example + * + * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }]; + * + * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x'); + * console.log(array); + * // => [{ 'x': 2 }] + */ + function pullAllBy(array, values, iteratee) { + return (array && array.length && values && values.length) + ? basePullAll(array, values, baseIteratee(iteratee, 2)) + : array; + } + + module.exports = pullAllBy; + + +/***/ }), +/* 264 */ +/***/ (function(module, exports, __webpack_require__) { + + var basePullAll = __webpack_require__(261); + + /** + * This method is like `_.pullAll` except that it accepts `comparator` which + * is invoked to compare elements of `array` to `values`. The comparator is + * invoked with two arguments: (arrVal, othVal). + * + * **Note:** Unlike `_.differenceWith`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.6.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns `array`. + * @example + * + * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }]; + * + * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual); + * console.log(array); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }] + */ + function pullAllWith(array, values, comparator) { + return (array && array.length && values && values.length) + ? basePullAll(array, values, undefined, comparator) + : array; + } + + module.exports = pullAllWith; + + +/***/ }), +/* 265 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayMap = __webpack_require__(154), + baseAt = __webpack_require__(266), + basePullAt = __webpack_require__(267), + compareAscending = __webpack_require__(270), + flatRest = __webpack_require__(271), + isIndex = __webpack_require__(99); + + /** + * Removes elements from `array` corresponding to `indexes` and returns an + * array of removed elements. + * + * **Note:** Unlike `_.at`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {...(number|number[])} [indexes] The indexes of elements to remove. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = ['a', 'b', 'c', 'd']; + * var pulled = _.pullAt(array, [1, 3]); + * + * console.log(array); + * // => ['a', 'c'] + * + * console.log(pulled); + * // => ['b', 'd'] + */ + var pullAt = flatRest(function(array, indexes) { + var length = array == null ? 0 : array.length, + result = baseAt(array, indexes); + + basePullAt(array, arrayMap(indexes, function(index) { + return isIndex(index, length) ? +index : index; + }).sort(compareAscending)); + + return result; + }); + + module.exports = pullAt; + + +/***/ }), +/* 266 */ +/***/ (function(module, exports, __webpack_require__) { + + var get = __webpack_require__(212); + + /** + * The base implementation of `_.at` without support for individual paths. + * + * @private + * @param {Object} object The object to iterate over. + * @param {string[]} paths The property paths to pick. + * @returns {Array} Returns the picked elements. + */ + function baseAt(object, paths) { + var index = -1, + length = paths.length, + result = Array(length), + skip = object == null; + + while (++index < length) { + result[index] = skip ? undefined : get(object, paths[index]); + } + return result; + } + + module.exports = baseAt; + + +/***/ }), +/* 267 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseUnset = __webpack_require__(268), + isIndex = __webpack_require__(99); + + /** Used for built-in method references. */ + var arrayProto = Array.prototype; + + /** Built-in value references. */ + var splice = arrayProto.splice; + + /** + * The base implementation of `_.pullAt` without support for individual + * indexes or capturing the removed elements. + * + * @private + * @param {Array} array The array to modify. + * @param {number[]} indexes The indexes of elements to remove. + * @returns {Array} Returns `array`. + */ + function basePullAt(array, indexes) { + var length = array ? indexes.length : 0, + lastIndex = length - 1; + + while (length--) { + var index = indexes[length]; + if (length == lastIndex || index !== previous) { + var previous = index; + if (isIndex(index)) { + splice.call(array, index, 1); + } else { + baseUnset(array, index); + } + } + } + return array; + } + + module.exports = basePullAt; + + +/***/ }), +/* 268 */ +/***/ (function(module, exports, __webpack_require__) { + + var castPath = __webpack_require__(214), + last = __webpack_require__(228), + parent = __webpack_require__(269), + toKey = __webpack_require__(221); + + /** + * The base implementation of `_.unset`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The property path to unset. + * @returns {boolean} Returns `true` if the property is deleted, else `false`. + */ + function baseUnset(object, path) { + path = castPath(path, object); + object = parent(object, path); + return object == null || delete object[toKey(last(path))]; + } + + module.exports = baseUnset; + + +/***/ }), +/* 269 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseGet = __webpack_require__(213), + baseSlice = __webpack_require__(86); + + /** + * Gets the parent value at `path` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} path The path to get the parent value of. + * @returns {*} Returns the parent value. + */ + function parent(object, path) { + return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1)); + } + + module.exports = parent; + + +/***/ }), +/* 270 */ +/***/ (function(module, exports, __webpack_require__) { + + var isSymbol = __webpack_require__(103); + + /** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ + function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = isSymbol(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = isSymbol(other); + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; + } + + module.exports = compareAscending; + + +/***/ }), +/* 271 */ +/***/ (function(module, exports, __webpack_require__) { + + var flatten = __webpack_require__(243), + overRest = __webpack_require__(159), + setToString = __webpack_require__(161); + + /** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ + function flatRest(func) { + return setToString(overRest(func, undefined, flatten), func + ''); + } + + module.exports = flatRest; + + +/***/ }), +/* 272 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIteratee = __webpack_require__(168), + basePullAt = __webpack_require__(267); + + /** + * Removes all elements from `array` that `predicate` returns truthy for + * and returns an array of the removed elements. The predicate is invoked + * with three arguments: (value, index, array). + * + * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull` + * to pull elements from an array by value. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = [1, 2, 3, 4]; + * var evens = _.remove(array, function(n) { + * return n % 2 == 0; + * }); + * + * console.log(array); + * // => [1, 3] + * + * console.log(evens); + * // => [2, 4] + */ + function remove(array, predicate) { + var result = []; + if (!(array && array.length)) { + return result; + } + var index = -1, + indexes = [], + length = array.length; + + predicate = baseIteratee(predicate, 3); + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result.push(value); + indexes.push(index); + } + } + basePullAt(array, indexes); + return result; + } + + module.exports = remove; + + +/***/ }), +/* 273 */ +/***/ (function(module, exports) { + + /** Used for built-in method references. */ + var arrayProto = Array.prototype; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeReverse = arrayProto.reverse; + + /** + * Reverses `array` so that the first element becomes the last, the second + * element becomes the second to last, and so on. + * + * **Note:** This method mutates `array` and is based on + * [`Array#reverse`](https://mdn.io/Array/reverse). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3]; + * + * _.reverse(array); + * // => [3, 2, 1] + * + * console.log(array); + * // => [3, 2, 1] + */ + function reverse(array) { + return array == null ? array : nativeReverse.call(array); + } + + module.exports = reverse; + + +/***/ }), +/* 274 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSlice = __webpack_require__(86), + isIterateeCall = __webpack_require__(87), + toInteger = __webpack_require__(100); + + /** + * Creates a slice of `array` from `start` up to, but not including, `end`. + * + * **Note:** This method is used instead of + * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are + * returned. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function slice(array, start, end) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + if (end && typeof end != 'number' && isIterateeCall(array, start, end)) { + start = 0; + end = length; + } + else { + start = start == null ? 0 : toInteger(start); + end = end === undefined ? length : toInteger(end); + } + return baseSlice(array, start, end); + } + + module.exports = slice; + + +/***/ }), +/* 275 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSortedIndex = __webpack_require__(276); + + /** + * Uses a binary search to determine the lowest index at which `value` + * should be inserted into `array` in order to maintain its sort order. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * _.sortedIndex([30, 50], 40); + * // => 1 + */ + function sortedIndex(array, value) { + return baseSortedIndex(array, value); + } + + module.exports = sortedIndex; + + +/***/ }), +/* 276 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSortedIndexBy = __webpack_require__(277), + identity = __webpack_require__(158), + isSymbol = __webpack_require__(103); + + /** Used as references for the maximum length and index of an array. */ + var MAX_ARRAY_LENGTH = 4294967295, + HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; + + /** + * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which + * performs a binary search of `array` to determine the index at which `value` + * should be inserted into `array` in order to maintain its sort order. + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + */ + function baseSortedIndex(array, value, retHighest) { + var low = 0, + high = array == null ? low : array.length; + + if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { + while (low < high) { + var mid = (low + high) >>> 1, + computed = array[mid]; + + if (computed !== null && !isSymbol(computed) && + (retHighest ? (computed <= value) : (computed < value))) { + low = mid + 1; + } else { + high = mid; + } + } + return high; + } + return baseSortedIndexBy(array, value, identity, retHighest); + } + + module.exports = baseSortedIndex; + + +/***/ }), +/* 277 */ +/***/ (function(module, exports, __webpack_require__) { + + var isSymbol = __webpack_require__(103); + + /** Used as references for the maximum length and index of an array. */ + var MAX_ARRAY_LENGTH = 4294967295, + MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeFloor = Math.floor, + nativeMin = Math.min; + + /** + * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy` + * which invokes `iteratee` for `value` and each element of `array` to compute + * their sort ranking. The iteratee is invoked with one argument; (value). + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} iteratee The iteratee invoked per element. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + */ + function baseSortedIndexBy(array, value, iteratee, retHighest) { + value = iteratee(value); + + var low = 0, + high = array == null ? 0 : array.length, + valIsNaN = value !== value, + valIsNull = value === null, + valIsSymbol = isSymbol(value), + valIsUndefined = value === undefined; + + while (low < high) { + var mid = nativeFloor((low + high) / 2), + computed = iteratee(array[mid]), + othIsDefined = computed !== undefined, + othIsNull = computed === null, + othIsReflexive = computed === computed, + othIsSymbol = isSymbol(computed); + + if (valIsNaN) { + var setLow = retHighest || othIsReflexive; + } else if (valIsUndefined) { + setLow = othIsReflexive && (retHighest || othIsDefined); + } else if (valIsNull) { + setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull); + } else if (valIsSymbol) { + setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol); + } else if (othIsNull || othIsSymbol) { + setLow = false; + } else { + setLow = retHighest ? (computed <= value) : (computed < value); + } + if (setLow) { + low = mid + 1; + } else { + high = mid; + } + } + return nativeMin(high, MAX_ARRAY_INDEX); + } + + module.exports = baseSortedIndexBy; + + +/***/ }), +/* 278 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIteratee = __webpack_require__(168), + baseSortedIndexBy = __webpack_require__(277); + + /** + * This method is like `_.sortedIndex` except that it accepts `iteratee` + * which is invoked for `value` and each element of `array` to compute their + * sort ranking. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * var objects = [{ 'x': 4 }, { 'x': 5 }]; + * + * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.sortedIndexBy(objects, { 'x': 4 }, 'x'); + * // => 0 + */ + function sortedIndexBy(array, value, iteratee) { + return baseSortedIndexBy(array, value, baseIteratee(iteratee, 2)); + } + + module.exports = sortedIndexBy; + + +/***/ }), +/* 279 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSortedIndex = __webpack_require__(276), + eq = __webpack_require__(88); + + /** + * This method is like `_.indexOf` except that it performs a binary + * search on a sorted `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.sortedIndexOf([4, 5, 5, 5, 6], 5); + * // => 1 + */ + function sortedIndexOf(array, value) { + var length = array == null ? 0 : array.length; + if (length) { + var index = baseSortedIndex(array, value); + if (index < length && eq(array[index], value)) { + return index; + } + } + return -1; + } + + module.exports = sortedIndexOf; + + +/***/ }), +/* 280 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSortedIndex = __webpack_require__(276); + + /** + * This method is like `_.sortedIndex` except that it returns the highest + * index at which `value` should be inserted into `array` in order to + * maintain its sort order. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * _.sortedLastIndex([4, 5, 5, 5, 6], 5); + * // => 4 + */ + function sortedLastIndex(array, value) { + return baseSortedIndex(array, value, true); + } + + module.exports = sortedLastIndex; + + +/***/ }), +/* 281 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIteratee = __webpack_require__(168), + baseSortedIndexBy = __webpack_require__(277); + + /** + * This method is like `_.sortedLastIndex` except that it accepts `iteratee` + * which is invoked for `value` and each element of `array` to compute their + * sort ranking. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * var objects = [{ 'x': 4 }, { 'x': 5 }]; + * + * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); + * // => 1 + * + * // The `_.property` iteratee shorthand. + * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x'); + * // => 1 + */ + function sortedLastIndexBy(array, value, iteratee) { + return baseSortedIndexBy(array, value, baseIteratee(iteratee, 2), true); + } + + module.exports = sortedLastIndexBy; + + +/***/ }), +/* 282 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSortedIndex = __webpack_require__(276), + eq = __webpack_require__(88); + + /** + * This method is like `_.lastIndexOf` except that it performs a binary + * search on a sorted `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5); + * // => 3 + */ + function sortedLastIndexOf(array, value) { + var length = array == null ? 0 : array.length; + if (length) { + var index = baseSortedIndex(array, value, true) - 1; + if (eq(array[index], value)) { + return index; + } + } + return -1; + } + + module.exports = sortedLastIndexOf; + + +/***/ }), +/* 283 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSortedUniq = __webpack_require__(284); + + /** + * This method is like `_.uniq` except that it's designed and optimized + * for sorted arrays. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.sortedUniq([1, 1, 2]); + * // => [1, 2] + */ + function sortedUniq(array) { + return (array && array.length) + ? baseSortedUniq(array) + : []; + } + + module.exports = sortedUniq; + + +/***/ }), +/* 284 */ +/***/ (function(module, exports, __webpack_require__) { + + var eq = __webpack_require__(88); + + /** + * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ + function baseSortedUniq(array, iteratee) { + var index = -1, + length = array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + if (!index || !eq(computed, seen)) { + var seen = computed; + result[resIndex++] = value === 0 ? 0 : value; + } + } + return result; + } + + module.exports = baseSortedUniq; + + +/***/ }), +/* 285 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIteratee = __webpack_require__(168), + baseSortedUniq = __webpack_require__(284); + + /** + * This method is like `_.uniqBy` except that it's designed and optimized + * for sorted arrays. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor); + * // => [1.1, 2.3] + */ + function sortedUniqBy(array, iteratee) { + return (array && array.length) + ? baseSortedUniq(array, baseIteratee(iteratee, 2)) + : []; + } + + module.exports = sortedUniqBy; + + +/***/ }), +/* 286 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSlice = __webpack_require__(86); + + /** + * Gets all but the first element of `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.tail([1, 2, 3]); + * // => [2, 3] + */ + function tail(array) { + var length = array == null ? 0 : array.length; + return length ? baseSlice(array, 1, length) : []; + } + + module.exports = tail; + + +/***/ }), +/* 287 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSlice = __webpack_require__(86), + toInteger = __webpack_require__(100); + + /** + * Creates a slice of `array` with `n` elements taken from the beginning. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.take([1, 2, 3]); + * // => [1] + * + * _.take([1, 2, 3], 2); + * // => [1, 2] + * + * _.take([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.take([1, 2, 3], 0); + * // => [] + */ + function take(array, n, guard) { + if (!(array && array.length)) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + return baseSlice(array, 0, n < 0 ? 0 : n); + } + + module.exports = take; + + +/***/ }), +/* 288 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSlice = __webpack_require__(86), + toInteger = __webpack_require__(100); + + /** + * Creates a slice of `array` with `n` elements taken from the end. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.takeRight([1, 2, 3]); + * // => [3] + * + * _.takeRight([1, 2, 3], 2); + * // => [2, 3] + * + * _.takeRight([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.takeRight([1, 2, 3], 0); + * // => [] + */ + function takeRight(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + n = length - n; + return baseSlice(array, n < 0 ? 0 : n, length); + } + + module.exports = takeRight; + + +/***/ }), +/* 289 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIteratee = __webpack_require__(168), + baseWhile = __webpack_require__(233); + + /** + * Creates a slice of `array` with elements taken from the end. Elements are + * taken until `predicate` returns falsey. The predicate is invoked with + * three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.takeRightWhile(users, function(o) { return !o.active; }); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.matches` iteratee shorthand. + * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false }); + * // => objects for ['pebbles'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.takeRightWhile(users, ['active', false]); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.property` iteratee shorthand. + * _.takeRightWhile(users, 'active'); + * // => [] + */ + function takeRightWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, baseIteratee(predicate, 3), false, true) + : []; + } + + module.exports = takeRightWhile; + + +/***/ }), +/* 290 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIteratee = __webpack_require__(168), + baseWhile = __webpack_require__(233); + + /** + * Creates a slice of `array` with elements taken from the beginning. Elements + * are taken until `predicate` returns falsey. The predicate is invoked with + * three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.takeWhile(users, function(o) { return !o.active; }); + * // => objects for ['barney', 'fred'] + * + * // The `_.matches` iteratee shorthand. + * _.takeWhile(users, { 'user': 'barney', 'active': false }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.takeWhile(users, ['active', false]); + * // => objects for ['barney', 'fred'] + * + * // The `_.property` iteratee shorthand. + * _.takeWhile(users, 'active'); + * // => [] + */ + function takeWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, baseIteratee(predicate, 3)) + : []; + } + + module.exports = takeWhile; + + +/***/ }), +/* 291 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseFlatten = __webpack_require__(108), + baseRest = __webpack_require__(157), + baseUniq = __webpack_require__(292), + isArrayLikeObject = __webpack_require__(166); + + /** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2], [1, 2]); + * // => [2, 1] + */ + var union = baseRest(function(arrays) { + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true)); + }); + + module.exports = union; + + +/***/ }), +/* 292 */ +/***/ (function(module, exports, __webpack_require__) { + + var SetCache = __webpack_require__(116), + arrayIncludes = __webpack_require__(148), + arrayIncludesWith = __webpack_require__(153), + cacheHas = __webpack_require__(156), + createSet = __webpack_require__(293), + setToArray = __webpack_require__(184); + + /** Used as the size to enable large array optimizations. */ + var LARGE_ARRAY_SIZE = 200; + + /** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ + function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : createSet(array); + if (set) { + return setToArray(set); + } + isCommon = false; + includes = cacheHas; + seen = new SetCache; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; + } + + module.exports = baseUniq; + + +/***/ }), +/* 293 */ +/***/ (function(module, exports, __webpack_require__) { + + var Set = __webpack_require__(206), + noop = __webpack_require__(294), + setToArray = __webpack_require__(184); + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0; + + /** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ + var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) { + return new Set(values); + }; + + module.exports = createSet; + + +/***/ }), +/* 294 */ +/***/ (function(module, exports) { + + /** + * This method returns `undefined`. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example + * + * _.times(2, _.noop); + * // => [undefined, undefined] + */ + function noop() { + // No operation performed. + } + + module.exports = noop; + + +/***/ }), +/* 295 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseFlatten = __webpack_require__(108), + baseIteratee = __webpack_require__(168), + baseRest = __webpack_require__(157), + baseUniq = __webpack_require__(292), + isArrayLikeObject = __webpack_require__(166), + last = __webpack_require__(228); + + /** + * This method is like `_.union` except that it accepts `iteratee` which is + * invoked for each element of each `arrays` to generate the criterion by + * which uniqueness is computed. Result values are chosen from the first + * array in which the value occurs. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.unionBy([2.1], [1.2, 2.3], Math.floor); + * // => [2.1, 1.2] + * + * // The `_.property` iteratee shorthand. + * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */ + var unionBy = baseRest(function(arrays) { + var iteratee = last(arrays); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; + } + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), baseIteratee(iteratee, 2)); + }); + + module.exports = unionBy; + + +/***/ }), +/* 296 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseFlatten = __webpack_require__(108), + baseRest = __webpack_require__(157), + baseUniq = __webpack_require__(292), + isArrayLikeObject = __webpack_require__(166), + last = __webpack_require__(228); + + /** + * This method is like `_.union` except that it accepts `comparator` which + * is invoked to compare elements of `arrays`. Result values are chosen from + * the first array in which the value occurs. The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of combined values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.unionWith(objects, others, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] + */ + var unionWith = baseRest(function(arrays) { + var comparator = last(arrays); + comparator = typeof comparator == 'function' ? comparator : undefined; + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator); + }); + + module.exports = unionWith; + + +/***/ }), +/* 297 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseUniq = __webpack_require__(292); + + /** + * Creates a duplicate-free version of an array, using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons, in which only the first occurrence of each element + * is kept. The order of result values is determined by the order they occur + * in the array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.uniq([2, 1, 2]); + * // => [2, 1] + */ + function uniq(array) { + return (array && array.length) ? baseUniq(array) : []; + } + + module.exports = uniq; + + +/***/ }), +/* 298 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseIteratee = __webpack_require__(168), + baseUniq = __webpack_require__(292); + + /** + * This method is like `_.uniq` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * uniqueness is computed. The order of result values is determined by the + * order they occur in the array. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.uniqBy([2.1, 1.2, 2.3], Math.floor); + * // => [2.1, 1.2] + * + * // The `_.property` iteratee shorthand. + * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */ + function uniqBy(array, iteratee) { + return (array && array.length) ? baseUniq(array, baseIteratee(iteratee, 2)) : []; + } + + module.exports = uniqBy; + + +/***/ }), +/* 299 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseUniq = __webpack_require__(292); + + /** + * This method is like `_.uniq` except that it accepts `comparator` which + * is invoked to compare elements of `array`. The order of result values is + * determined by the order they occur in the array.The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.uniqWith(objects, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }] + */ + function uniqWith(array, comparator) { + comparator = typeof comparator == 'function' ? comparator : undefined; + return (array && array.length) ? baseUniq(array, undefined, comparator) : []; + } + + module.exports = uniqWith; + + +/***/ }), +/* 300 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayFilter = __webpack_require__(189), + arrayMap = __webpack_require__(154), + baseProperty = __webpack_require__(226), + baseTimes = __webpack_require__(193), + isArrayLikeObject = __webpack_require__(166); + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMax = Math.max; + + /** + * This method is like `_.zip` except that it accepts an array of grouped + * elements and creates an array regrouping the elements to their pre-zip + * configuration. + * + * @static + * @memberOf _ + * @since 1.2.0 + * @category Array + * @param {Array} array The array of grouped elements to process. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]); + * // => [['a', 1, true], ['b', 2, false]] + * + * _.unzip(zipped); + * // => [['a', 'b'], [1, 2], [true, false]] + */ + function unzip(array) { + if (!(array && array.length)) { + return []; + } + var length = 0; + array = arrayFilter(array, function(group) { + if (isArrayLikeObject(group)) { + length = nativeMax(group.length, length); + return true; + } + }); + return baseTimes(length, function(index) { + return arrayMap(array, baseProperty(index)); + }); + } + + module.exports = unzip; + + +/***/ }), +/* 301 */ +/***/ (function(module, exports, __webpack_require__) { + + var apply = __webpack_require__(160), + arrayMap = __webpack_require__(154), + unzip = __webpack_require__(300); + + /** + * This method is like `_.unzip` except that it accepts `iteratee` to specify + * how regrouped values should be combined. The iteratee is invoked with the + * elements of each group: (...group). + * + * @static + * @memberOf _ + * @since 3.8.0 + * @category Array + * @param {Array} array The array of grouped elements to process. + * @param {Function} [iteratee=_.identity] The function to combine + * regrouped values. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip([1, 2], [10, 20], [100, 200]); + * // => [[1, 10, 100], [2, 20, 200]] + * + * _.unzipWith(zipped, _.add); + * // => [3, 30, 300] + */ + function unzipWith(array, iteratee) { + if (!(array && array.length)) { + return []; + } + var result = unzip(array); + if (iteratee == null) { + return result; + } + return arrayMap(result, function(group) { + return apply(iteratee, undefined, group); + }); + } + + module.exports = unzipWith; + + +/***/ }), +/* 302 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseDifference = __webpack_require__(115), + baseRest = __webpack_require__(157), + isArrayLikeObject = __webpack_require__(166); + + /** + * Creates an array excluding all given values using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * **Note:** Unlike `_.pull`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...*} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @see _.difference, _.xor + * @example + * + * _.without([2, 1, 2, 3], 1, 2); + * // => [3] + */ + var without = baseRest(function(array, values) { + return isArrayLikeObject(array) + ? baseDifference(array, values) + : []; + }); + + module.exports = without; + + +/***/ }), +/* 303 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayFilter = __webpack_require__(189), + baseRest = __webpack_require__(157), + baseXor = __webpack_require__(304), + isArrayLikeObject = __webpack_require__(166); + + /** + * Creates an array of unique values that is the + * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference) + * of the given arrays. The order of result values is determined by the order + * they occur in the arrays. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of filtered values. + * @see _.difference, _.without + * @example + * + * _.xor([2, 1], [2, 3]); + * // => [1, 3] + */ + var xor = baseRest(function(arrays) { + return baseXor(arrayFilter(arrays, isArrayLikeObject)); + }); + + module.exports = xor; + + +/***/ }), +/* 304 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseDifference = __webpack_require__(115), + baseFlatten = __webpack_require__(108), + baseUniq = __webpack_require__(292); + + /** + * The base implementation of methods like `_.xor`, without support for + * iteratee shorthands, that accepts an array of arrays to inspect. + * + * @private + * @param {Array} arrays The arrays to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of values. + */ + function baseXor(arrays, iteratee, comparator) { + var length = arrays.length; + if (length < 2) { + return length ? baseUniq(arrays[0]) : []; + } + var index = -1, + result = Array(length); + + while (++index < length) { + var array = arrays[index], + othIndex = -1; + + while (++othIndex < length) { + if (othIndex != index) { + result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator); + } + } + } + return baseUniq(baseFlatten(result, 1), iteratee, comparator); + } + + module.exports = baseXor; + + +/***/ }), +/* 305 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayFilter = __webpack_require__(189), + baseIteratee = __webpack_require__(168), + baseRest = __webpack_require__(157), + baseXor = __webpack_require__(304), + isArrayLikeObject = __webpack_require__(166), + last = __webpack_require__(228); + + /** + * This method is like `_.xor` except that it accepts `iteratee` which is + * invoked for each element of each `arrays` to generate the criterion by + * which by which they're compared. The order of result values is determined + * by the order they occur in the arrays. The iteratee is invoked with one + * argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [1.2, 3.4] + * + * // The `_.property` iteratee shorthand. + * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 2 }] + */ + var xorBy = baseRest(function(arrays) { + var iteratee = last(arrays); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; + } + return baseXor(arrayFilter(arrays, isArrayLikeObject), baseIteratee(iteratee, 2)); + }); + + module.exports = xorBy; + + +/***/ }), +/* 306 */ +/***/ (function(module, exports, __webpack_require__) { + + var arrayFilter = __webpack_require__(189), + baseRest = __webpack_require__(157), + baseXor = __webpack_require__(304), + isArrayLikeObject = __webpack_require__(166), + last = __webpack_require__(228); + + /** + * This method is like `_.xor` except that it accepts `comparator` which is + * invoked to compare elements of `arrays`. The order of result values is + * determined by the order they occur in the arrays. The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.xorWith(objects, others, _.isEqual); + * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] + */ + var xorWith = baseRest(function(arrays) { + var comparator = last(arrays); + comparator = typeof comparator == 'function' ? comparator : undefined; + return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator); + }); + + module.exports = xorWith; + + +/***/ }), +/* 307 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseRest = __webpack_require__(157), + unzip = __webpack_require__(300); + + /** + * Creates an array of grouped elements, the first of which contains the + * first elements of the given arrays, the second of which contains the + * second elements of the given arrays, and so on. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zip(['a', 'b'], [1, 2], [true, false]); + * // => [['a', 1, true], ['b', 2, false]] + */ + var zip = baseRest(unzip); + + module.exports = zip; + + +/***/ }), +/* 308 */ +/***/ (function(module, exports, __webpack_require__) { + + var assignValue = __webpack_require__(309), + baseZipObject = __webpack_require__(311); + + /** + * This method is like `_.fromPairs` except that it accepts two arrays, + * one of property identifiers and one of corresponding values. + * + * @static + * @memberOf _ + * @since 0.4.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject(['a', 'b'], [1, 2]); + * // => { 'a': 1, 'b': 2 } + */ + function zipObject(props, values) { + return baseZipObject(props || [], values || [], assignValue); + } + + module.exports = zipObject; + + +/***/ }), +/* 309 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseAssignValue = __webpack_require__(310), + eq = __webpack_require__(88); + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } + } + + module.exports = assignValue; + + +/***/ }), +/* 310 */ +/***/ (function(module, exports, __webpack_require__) { + + var defineProperty = __webpack_require__(164); + + /** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function baseAssignValue(object, key, value) { + if (key == '__proto__' && defineProperty) { + defineProperty(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } + } + + module.exports = baseAssignValue; + + +/***/ }), +/* 311 */ +/***/ (function(module, exports) { + + /** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property identifiers. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ + function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; + + while (++index < length) { + var value = index < valsLength ? values[index] : undefined; + assignFunc(result, props[index], value); + } + return result; + } + + module.exports = baseZipObject; + + +/***/ }), +/* 312 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseSet = __webpack_require__(313), + baseZipObject = __webpack_require__(311); + + /** + * This method is like `_.zipObject` except that it supports property paths. + * + * @static + * @memberOf _ + * @since 4.1.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]); + * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } } + */ + function zipObjectDeep(props, values) { + return baseZipObject(props || [], values || [], baseSet); + } + + module.exports = zipObjectDeep; + + +/***/ }), +/* 313 */ +/***/ (function(module, exports, __webpack_require__) { + + var assignValue = __webpack_require__(309), + castPath = __webpack_require__(214), + isIndex = __webpack_require__(99), + isObject = __webpack_require__(97), + toKey = __webpack_require__(221); + + /** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ + function baseSet(object, path, value, customizer) { + if (!isObject(object)) { + return object; + } + path = castPath(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = toKey(path[index]), + newValue = value; + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = isObject(objValue) + ? objValue + : (isIndex(path[index + 1]) ? [] : {}); + } + } + assignValue(nested, key, newValue); + nested = nested[key]; + } + return object; + } + + module.exports = baseSet; + + +/***/ }), +/* 314 */ +/***/ (function(module, exports, __webpack_require__) { + + var baseRest = __webpack_require__(157), + unzipWith = __webpack_require__(301); + + /** + * This method is like `_.zip` except that it accepts `iteratee` to specify + * how grouped values should be combined. The iteratee is invoked with the + * elements of each group: (...group). + * + * @static + * @memberOf _ + * @since 3.8.0 + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @param {Function} [iteratee=_.identity] The function to combine + * grouped values. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) { + * return a + b + c; + * }); + * // => [111, 222] + */ + var zipWith = baseRest(function(arrays) { + var length = arrays.length, + iteratee = length > 1 ? arrays[length - 1] : undefined; + + iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined; + return unzipWith(arrays, iteratee); + }); + + module.exports = zipWith; + + +/***/ }), +/* 315 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {module.exports = function ( handlerFunction ){ + var viewer = {}, + lastSelectedElement; + + viewer.handle = function ( selectedElement ){ + // Don't display details on a drag event, which will be prevented + if ( d3.event.defaultPrevented ) { + return; + } + + var isSelection = true; + + // Deselection of the focused element + if ( lastSelectedElement === selectedElement ) { + isSelection = false; + } + + if ( handlerFunction instanceof Function ) { + if ( isSelection ) { + handlerFunction(selectedElement); + } else { + handlerFunction(undefined); + } + } + + if ( isSelection ) { + lastSelectedElement = selectedElement; + } else { + lastSelectedElement = undefined; + } + }; + + /** + * Resets the displayed information to its default. + */ + viewer.reset = function (){ + if ( lastSelectedElement ) { + handlerFunction(undefined); + lastSelectedElement = undefined; + } + }; + + return viewer; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 316 */ +/***/ (function(module, exports, __webpack_require__) { + + var SetOperatorNode = __webpack_require__(20); + + module.exports = function (){ + + var filter = {}, + nodes, + properties, + enabled = false, + filteredNodes, + filteredProperties, + filterTools = __webpack_require__(76)(); + + + /** + * If enabled, all set operators including connected properties are filtered. + * @param untouchedNodes + * @param untouchedProperties + */ + filter.filter = function ( untouchedNodes, untouchedProperties ){ + nodes = untouchedNodes; + properties = untouchedProperties; + + if ( this.enabled() ) { + removeSetOperators(); + } + + filteredNodes = nodes; + filteredProperties = properties; + }; + + function removeSetOperators(){ + var filteredData = filterTools.filterNodesAndTidy(nodes, properties, isNoSetOperator); + + nodes = filteredData.nodes; + properties = filteredData.properties; + } + + function isNoSetOperator( node ){ + return !(node instanceof SetOperatorNode); + } + + filter.enabled = function ( p ){ + if ( !arguments.length ) return enabled; + enabled = p; + return filter; + }; + + + // Functions a filter must have + filter.filteredNodes = function (){ + return filteredNodes; + }; + + filter.filteredProperties = function (){ + return filteredProperties; + }; + + + return filter; + }; + + +/***/ }), +/* 317 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(d3) {var SetOperatorNode = __webpack_require__(20); + var OwlThing = __webpack_require__(31); + var OwlNothing = __webpack_require__(30); + var elementTools = __webpack_require__(63)(); + + module.exports = function (){ + + var statistics = {}, + nodeCount, + occurencesOfClassAndDatatypeTypes = {}, + edgeCount, + occurencesOfPropertyTypes = {}, + classCount, + datatypeCount, + datatypePropertyCount, + objectPropertyCount, + propertyCount, + totalIndividualCount, + filteredNodes, + filteredProperties; + + + statistics.filter = function ( classesAndDatatypes, properties ){ + resetStoredData(); + + storeTotalCounts(classesAndDatatypes, properties); + storeClassAndDatatypeCount(classesAndDatatypes); + storePropertyCount(properties); + + storeOccurencesOfTypes(classesAndDatatypes, occurencesOfClassAndDatatypeTypes); + storeOccurencesOfTypes(properties, occurencesOfPropertyTypes); + + storeTotalIndividualCount(classesAndDatatypes); + + filteredNodes = classesAndDatatypes; + filteredProperties = properties; + }; + + function resetStoredData(){ + nodeCount = 0; + edgeCount = 0; + classCount = 0; + datatypeCount = 0; + datatypePropertyCount = 0; + objectPropertyCount = 0; + propertyCount = 0; + totalIndividualCount = 0; + } + + function storeTotalCounts( classesAndDatatypes, properties ){ + nodeCount = classesAndDatatypes.length; + + var seenProperties = __webpack_require__(62)(), i, l, property; + for ( i = 0, l = properties.length; i < l; i++ ) { + property = properties[i]; + if ( !seenProperties.has(property) ) { + edgeCount += 1; + } + + seenProperties.add(property); + if ( property.inverse() ) { + seenProperties.add(property.inverse()); + } + } + } + + function storeClassAndDatatypeCount( classesAndDatatypes ){ + // Each datatype should be counted just a single time + var datatypeSet = d3.set(), + hasThing = false, + hasNothing = false; + classCount = 0; + var old = 0, newcc = 0; + classesAndDatatypes.forEach(function ( node ){ + if ( elementTools.isDatatype(node) ) { + datatypeSet.add(node.defaultLabel()); + } else if ( !(node instanceof SetOperatorNode) ) { + if ( node instanceof OwlThing ) { + hasThing = true; + } else if ( node instanceof OwlNothing ) { + hasNothing = true; + } else { + old = classCount; + var adds = 1 + countElementArray(node.equivalents()); + classCount += adds; + newcc = classCount; + } + } else if ( node instanceof SetOperatorNode ) { + old = classCount; + classCount += 1; + newcc = classCount; + } + }); + + // count things and nothings just a single time + // classCount += hasThing ? 1 : 0; + // classCount += hasNothing ? 1 : 0; + + datatypeCount = datatypeSet.size(); + } + + function storePropertyCount( properties ){ + for ( var i = 0, l = properties.length; i < l; i++ ) { + var property = properties[i]; + var attr; + var result = false; + if ( property.attributes ) { + attr = property.attributes(); + if ( attr && attr.indexOf("datatype") !== -1 ) { + result = true; + } + } + if ( result === true ) { + datatypePropertyCount += getExtendedPropertyCount(property); + } else if ( elementTools.isObjectProperty(property) ) { + objectPropertyCount += getExtendedPropertyCount(property); + } + } + propertyCount = objectPropertyCount + datatypePropertyCount; + } + + function getExtendedPropertyCount( property ){ + // count the property itself + var count = 1; + + // and count properties this property represents + count += countElementArray(property.equivalents()); + count += countElementArray(property.redundantProperties()); + + return count; + } + + function countElementArray( properties ){ + if ( properties ) { + return properties.length; + } + return 0; + } + + function storeOccurencesOfTypes( elements, storage ){ + elements.forEach(function ( element ){ + var type = element.type(), + typeCount = storage[type]; + + if ( typeof typeCount === "undefined" ) { + typeCount = 0; + } else { + typeCount += 1; + } + storage[type] = typeCount; + }); + } + + function storeTotalIndividualCount( nodes ){ + var sawIndividuals = {}; + var totalCount = 0; + for ( var i = 0, l = nodes.length; i < l; i++ ) { + var individuals = nodes[i].individuals(); + + var tempCount = 0; + for ( var iA = 0; iA < individuals.length; iA++ ) { + if ( sawIndividuals[individuals[iA].iri()] === undefined ) { + sawIndividuals[individuals[iA].iri()] = 1; // this iri for that individual is now set to 1 >> seen it + tempCount++; + } + } + totalCount += tempCount; + } + totalIndividualCount = totalCount; + sawIndividuals = {}; // clear the object + + } + + + statistics.nodeCount = function (){ + return nodeCount; + }; + + statistics.occurencesOfClassAndDatatypeTypes = function (){ + return occurencesOfClassAndDatatypeTypes; + }; + + statistics.edgeCount = function (){ + return edgeCount; + }; + + statistics.occurencesOfPropertyTypes = function (){ + return occurencesOfPropertyTypes; + }; + + statistics.classCount = function (){ + return classCount; + }; + + statistics.datatypeCount = function (){ + return datatypeCount; + }; + + statistics.datatypePropertyCount = function (){ + return datatypePropertyCount; + }; + + statistics.objectPropertyCount = function (){ + return objectPropertyCount; + }; + + statistics.propertyCount = function (){ + return propertyCount; + }; + + statistics.totalIndividualCount = function (){ + return totalIndividualCount; + }; + + + // Functions a filter must have + statistics.filteredNodes = function (){ + return filteredNodes; + }; + + statistics.filteredProperties = function (){ + return filteredProperties; + }; + + + return statistics; + }; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) + +/***/ }), +/* 318 */ +/***/ (function(module, exports, __webpack_require__) { + + var elementTools = __webpack_require__(63)(); + + module.exports = function (){ + + var filter = {}, + nodes, + properties, + enabled = false, + filteredNodes, + filteredProperties; + + + /** + * If enabled subclasses that have only subclass properties are filtered. + * @param untouchedNodes + * @param untouchedProperties + */ + filter.filter = function ( untouchedNodes, untouchedProperties ){ + nodes = untouchedNodes; + properties = untouchedProperties; + + if ( this.enabled() ) { + hideSubclassesWithoutOwnProperties(); + } + + filteredNodes = nodes; + filteredProperties = properties; + }; + + function hideSubclassesWithoutOwnProperties(){ + var unneededProperties = [], + unneededClasses = [], + subclasses = [], + connectedProperties, + subclass, + property, + i, // index, + l; // length + + + for ( i = 0, l = properties.length; i < l; i++ ) { + property = properties[i]; + if ( elementTools.isRdfsSubClassOf(property) ) { + subclasses.push(property.domain()); + } + } + + for ( i = 0, l = subclasses.length; i < l; i++ ) { + subclass = subclasses[i]; + connectedProperties = findRelevantConnectedProperties(subclass, properties); + + // Only remove the node and its properties, if they're all subclassOf properties + if ( areOnlySubclassProperties(connectedProperties) && + doesNotInheritFromMultipleClasses(subclass, connectedProperties) ) { + + unneededProperties = unneededProperties.concat(connectedProperties); + unneededClasses.push(subclass); + } + } + + nodes = removeUnneededElements(nodes, unneededClasses); + properties = removeUnneededElements(properties, unneededProperties); + } + + /** + * Looks recursively for connected properties. Because just subclasses are relevant, + * we just look recursively for their properties. + * + * @param node + * @param allProperties + * @param visitedNodes a visited nodes which is used on recursive invocation + * @returns {Array} + */ + function findRelevantConnectedProperties( node, allProperties, visitedNodes ){ + var connectedProperties = [], + property, + i, + l; + + for ( i = 0, l = allProperties.length; i < l; i++ ) { + property = allProperties[i]; + if ( property.domain() === node || + property.range() === node ) { + + connectedProperties.push(property); + + + /* Special case: SuperClass <-(1) Subclass <-(2) Subclass ->(3) e.g. Datatype + * We need to find the last property recursively. Otherwise, we would remove the subClassOf + * property (1) because we didn't see the datatype property (3). + */ + + // Look only for subclass properties, because these are the relevant properties + if ( elementTools.isRdfsSubClassOf(property) ) { + var domain = property.domain(); + visitedNodes = visitedNodes || __webpack_require__(62)(); + + // If we have the range, there might be a nested property on the domain + if ( node === property.range() && !visitedNodes.has(domain) ) { + visitedNodes.add(domain); + var nestedConnectedProperties = findRelevantConnectedProperties(domain, allProperties, visitedNodes); + connectedProperties = connectedProperties.concat(nestedConnectedProperties); + } + } + } + } + + return connectedProperties; + } + + function areOnlySubclassProperties( connectedProperties ){ + var onlySubclassProperties = true, + property, + i, + l; + + for ( i = 0, l = connectedProperties.length; i < l; i++ ) { + property = connectedProperties[i]; + + if ( !elementTools.isRdfsSubClassOf(property) ) { + onlySubclassProperties = false; + break; + } + } + + return onlySubclassProperties; + } + + function doesNotInheritFromMultipleClasses( subclass, connectedProperties ){ + var superClassCount = 0; + + for ( var i = 0, l = connectedProperties.length; i < l; i++ ) { + var property = connectedProperties[i]; + + if ( property.domain() === subclass ) { + superClassCount += 1; + } + + if ( superClassCount > 1 ) { + return false; + } + } + + return true; + } + + function removeUnneededElements( array, removableElements ){ + var disjoint = [], + element, + i, + l; + + for ( i = 0, l = array.length; i < l; i++ ) { + element = array[i]; + if ( removableElements.indexOf(element) === -1 ) { + disjoint.push(element); + } + } + return disjoint; + } + + filter.enabled = function ( p ){ + if ( !arguments.length ) return enabled; + enabled = p; + return filter; + }; + + + // Functions a filter must have + filter.filteredNodes = function (){ + return filteredNodes; + }; + + filter.filteredProperties = function (){ + return filteredProperties; + }; + + + return filter; + }; + + +/***/ }) +/******/ ]); \ No newline at end of file diff --git a/tto/webvowl/license.txt b/tto/webvowl/license.txt new file mode 100644 index 0000000..6df36db --- /dev/null +++ b/tto/webvowl/license.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-2019 Vincent Link, Steffen Lohmann, Eduard Marbach, Stefan Negru, Vitalis Wiens + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.