<p>Ausgehend von folgendem RDFS-Datenmodell sollen Personen (ex:Person) beschrieben werden. Dabei sollen der Name (ex:hasName), das Geschlecht (ex:gender), die GND-ID (ex:gndID) und Freundschaftsbeziehungen zu anderen Personen beschrieben werden.</p>
<p>Ausgehend von folgendem RDFS-Datenmodell sollen Personen (ex:Person) beschrieben werden. Dabei sollen der Name (ex:name), das Geschlecht (ex:gender), die GND-ID (ex:gndID) und Freundschaftsbeziehungen zu anderen Personen beschrieben werden.</p>
<preclass="example-data nohighlight">
ex:Person a rdfs:Class ;
rdfs:label "Person" .
ex:hasName a rdf:Property ;
ex:name a rdf:Property ;
rdfs:domain ex:Person ;
rdfs:label "Has name" ;
rdfs:label "Name" ;
rdfs:range rdfs:Literal .
ex:gender a rdf:Property ;
...
...
@@ -299,9 +299,9 @@
rdfs:label "Gender" ;
rdfs:range rdfs:Literal .
ex:hasFriend a rdf:Property ;
ex:friend a rdf:Property ;
rdfs:domain ex:Person ;
rdfs:label "Has friend" ;
rdfs:label "Friend" ;
rdfs:range ex:Person .
ex:gndID a rdf:Property ;
...
...
@@ -320,9 +320,9 @@
rdfs:label "Person Shape" ;
sh:targetClass ex:Person ;
roger:formNode true ;
sh:property exshapes:hasNameShape ,
sh:property exshapes:nameShape ,
exshapes:genderShape ,
exshapes:hasFriendShape ,
exshapes:friendShape ,
exshapes:gndIDShape .
</pre>
<p>Ein Node Shape ist immer eine Instanz von <code>sh:NodeShape</code>. Mittels <code>rdfs:label</code> wird die Bezeichnung des Node Shapes angegeben (Achtung: Dies ist die Bezeichnung des Node Shapes, nicht des Formulars. Die Bezeichnung des Formulars wird aus dem Wert von <code>rdfs:label</code> der entsprechenden Klasse aus dem RDFS-Datenmodell generiert). <code>sh:targetClass</code> gibt an, auf welche Klasse im RDFS-Datenmodell dieses Node Shape angewendet werden soll. Dies bedeutet, dass alle Instanzen dieser Klasse auf Basis dieses Node Shapes validiert werden. Ob aus einem Node Shape ein eigenes Formular erzeugt werden soll, ergibt sich aus dem Property <code>roger:formNode</code> ("true" erzeugt ein eigenes Formular, "false" nicht). Das Property <code>sh:property</code> beschreibt, welche Formularfelder dieses Formular enthalten soll durch die Aufzählung der Property Shapes für diejenigen Kanten (Edges) des Graphen, die mit diesem Node verbunden sein können.</p>
...
...
@@ -331,9 +331,9 @@
<h2>Erfassung des Namens</h2>
<p>Property Shapes dienen dazu, die Daten und die zugehörigen Formularfelder zu beschreiben. Shapes werden mittels <code>a sh:PropertyShape</code> als Property Shapes ausgewiesen.</p>
<preclass="example-shapes nohighlight">
exshapes:hasNameShape
exshapes:nameShape
a sh:PropertyShape ;
sh:path ex:hasName ;
sh:path ex:name ;
sh:datatype xsd:string ;
dash:editor dash:TextFieldEditor ;
sh:name "Name" ;
...
...
@@ -366,18 +366,18 @@
<sectiondata-dfn-for="Foo"class="informative">
<h2>Erfassung einer Freundschaftsbeziehung</h2>
<preclass="example-shapes nohighlight">
exshapes:hasFriendShape
exshapes:friendShape
a sh:PropertyShape ;
sh:path ex:hasFriend ;
sh:path ex:friend ;
sh:name "Friend" ;
sh:class ex:Person ;
dash:editor dash:AutoCompleteEditor ;
<!-- roger:autoCompleteProperty ex:hasName ; -->
<!-- roger:autoCompleteProperty ex:name ; -->
sh:nodeKind sh:IRI ;
sh:description "Select another person as a friend" ;
sh:order "2"^^xsd:decimal .
</pre>
<p>Bei der Erfassung von Freundschaftsbeziehungen wird die Person, die gerade beschrieben wird, mit einer anderen Person verknüpft. Dass der Wert des Properties <code>ex:hasFriend</code> eine durch einen IRI repräsentierte Ressource sein muss (also kein Literal sein darf), wird durch den Wert <code>sh:IRI</code> des Properties <code>sh:nodeKind</code> beschrieben. Die Klasse, zu der diese Ressource gehören muss, wird dabei durch das Property <code>sh:class</code> beschrieben. Das Property <code>dash:editor</code> nimmt den Wert <code>dash:AutoCompleteEditor</code> an, um ein Eingabefeld zu erzeugen, dass die Auswahl einer klar umrissenen Menge an möglichen URIs (IRIs) durch die Vervollständigung der Nutzereingabe unterstützt. <!-- Die möglichen URIs werden via <code>sh:class</code> definiert. Eine Suchfunktion ermöglicht es, in den Knoten zu suchen, die der angegebenen Klasse entsprechen. Mit <code>roger:autoCompleteProperty</code> wird diese Suchfunktion konfiguriert und angegeben, in welchen Properties gesucht wird. --></p>
<p>Bei der Erfassung von Freundschaftsbeziehungen wird die Person, die gerade beschrieben wird, mit einer anderen Person verknüpft. Dass der Wert des Properties <code>ex:friend</code> eine durch einen IRI repräsentierte Ressource sein muss (also kein Literal sein darf), wird durch den Wert <code>sh:IRI</code> des Properties <code>sh:nodeKind</code> beschrieben. Die Klasse, zu der diese Ressource gehören muss, wird dabei durch das Property <code>sh:class</code> beschrieben. Das Property <code>dash:editor</code> nimmt den Wert <code>dash:AutoCompleteEditor</code> an, um ein Eingabefeld zu erzeugen, dass die Auswahl einer klar umrissenen Menge an möglichen URIs (IRIs) durch die Vervollständigung der Nutzereingabe unterstützt. <!-- Die möglichen URIs werden via <code>sh:class</code> definiert. Eine Suchfunktion ermöglicht es, in den Knoten zu suchen, die der angegebenen Klasse entsprechen. Mit <code>roger:autoCompleteProperty</code> wird diese Suchfunktion konfiguriert und angegeben, in welchen Properties gesucht wird. --></p>
<p>Das Formularfeld, das auf Basis dieses Property Shapes generiert wird, sieht so aus:</p>
<!-- Hier einen Screenshot einfügen -->
</section>
...
...
@@ -419,9 +419,9 @@
rdfs:label "Person Shape" ;
sh:targetClass ex:Person ;
roger:formNode true ;
sh:property exshapes:hasNameShape ,
sh:property exshapes:nameShape ,
exshapes:genderShape ,
exshapes:hasFriendShape ,
exshapes:friendShape ,
exshapes:gndIDShape .
</pre>
<p>Ein Node Shape hat im Kontext von ROGER folgende verpflichtende Properties:</p>
...
...
@@ -435,9 +435,9 @@
<h2>Property Shapes</h2>
<p>Property Shapes beschreiben die Formularfelder und die Daten, die dort eingegeben werden sollen.</p>
<preclass="example-shapes nohighlight">
exshapes:hasNameShape
exshapes:nameShape
a sh:PropertyShape ;
sh:path ex:hasName ;
sh:path ex:name ;
sh:name "Name" ;
sh:order "0"^^xsd:decimal ;
...
...
...
@@ -470,9 +470,9 @@
<p><ahref="https://www.w3.org/TR/shacl/"><code>sh:path</code></a> gibt an, welches Property aus dem zugrunde liegenden RDFS-Datenmodell mit dem Property Shape beschrieben wird - also für welches Property das Formularfeld Daten erzeugt.</p>
<p>In ROGER ist <code>sh:path</code> ein verpflichtendes Property für Property Shapes.</p>
<p><ahref="https://www.w3.org/TR/shacl/#MinCountConstraintComponent"><code>sh:minCount</code></a> gibt die Mindestanzahl der Werte an. Damit wird festgelegt, wie oft das entsprechende Formularfeld mindestens ausgefüllt werden muss. Durch die Angabe eines Wertes größer als 0 wird das entsprechende Formularfeld zu einem Pflichtfeld. Das wird in der Anwendung durch ein rotes Sternchen gekennzeichnet.</p>
<p>In ROGER ist <code>sh:minCount</code> ein optionales Property für Property Shapes.</p>
<p><ahref="https://www.w3.org/TR/shacl/#MaxCountConstraintComponen"><code>sh:maxCount</code></a> gibt die Höchstanzahl der Werte an. Damit wird festgelegt, wie oft das entsprechende Formularfeld höchstens ausgefüllt werden darf. Wird <code>sh:maxCount</code> angegeben muss sein Wert immer größer als 0 sein. Wenn <code>sh:maxCount</code> nicht angegeben wird, ist das entsprechende Formularfeld beliebig oft wiederholbar. Werden sowohl <code>sh:minCount</code> als auch <code>sh:maxCount</code> angegeben, muss der Wert von <code>sh:maxCount</code> größer oder gleich dem Wert von <code>sh:minCount</code> sein.</p>
<p>In ROGER ist <code>sh:maxCount</code> ein optionales Property für Property Shapes.</p>
<p>Achtung: Wenn <code>sh:datatype</code> verwendet wird, darf <ahref="#nodekind"><code>sh:nodekind</code></a> nur den Wert <code>sh:Literal</code> haben. Die Spezifizierung mittels <code>sh:nodekind</code> ist in diesem Fall optional.</p>
<p>Wenn Werte vorgegeben werden, bspw. mittels <ahref="#shaclein"><code>sh:in</code></a> müssen diese Werte dem angegeben Datentyp entsprechen.</p>
<p>Grundsätzlich sind alle Werte erlaubt, die in der SHACL-Spezifikation definiert sind. Jedoch sind die möglichen Werte je nach <ahref="#editors">Eingabefeld</a> eingeschränkt. In den Erläuterungen zu den Eingabefeldern sind die erlaubten Werte aufgeführt.</p>
<p>Achtung: Wenn im Property Shape mit <ahref="#datatype"><code>sh:datatype</code></a> ein Datentyp vorgegeben ist, muss <code>sh:nodekind</code> den Wert <code>sh:Literal</code> haben. In diesem Fall ist die Angabe von <code>sh:nodekind</code> optional.</p>
<p><ahref="https://www.w3.org/TR/shacl/#ClassConstraintComponent"><code>sh:class</code></a> gibt die Klasse (aus dem RDFS-Datenmodell) an, von der der Wert des Propertys eine Instanz sein muss.</p>
<p>In ROGER ist <code>sh:class</code> ein optionales Property für Property Shapes.</p>
<p>Wenn <code>dash:TextFieldEditor</code> in Verbindung mit <ahref="#defaultValue"><code>sh:defaultValue</code></a> verwendet wird, ist der dort angegebene Wert im Formularfeld voreingetragen, lässt sich aber verändern.</p>
<p><ahref="#node"><code>sh:node</code></a> verweist auf ein Node Shape, auf dessen Basis das Unterformular erzeugt wird.</p>
<p>In Verbindung mit <code>dash:DetailsEditor</code> muss <ahref="#nodekind"><code>sh:nodekind</code></a> den Wert <code>sh:BlankNode</code> annehmen.</p>
<p><ahref="https://www.w3.org/TR/shacl/#name"><code>sh:description</code></a> erläutert das Formularfeld. Diese Erläuterung wird in einem Popover in der ROGER-Anwendung angezeigt.<!-- prüfen, ob das stimmt! --></p>
<p>In ROGER ist <code>sh:description</code> ein optionales Property für Property Shapes.</p>