Difference between revisions of "Facet Based Resource Model"

From Gcube Wiki
Jump to: navigation, search
m (Schema Facet)
(Complex Types)
 
(437 intermediate revisions by 3 users not shown)
Line 1: Line 1:
 
<!-- CATEGORIES -->  
 
<!-- CATEGORIES -->  
<!-- [[Category: gCube Features]] -->
+
[[Category: gCube Features]]
 +
[[Category: Developer's Guide]]
 +
[[Category: Information System]]
 
<!-- CATEGORIES -->
 
<!-- CATEGORIES -->
 
{| align="right"
 
{| align="right"
Line 6: Line 8:
 
|}
 
|}
  
== Basic Concepts ==
+
The Information System Model (henceforth IS Model) is used by [[Information System Resource Registry]]
 +
 
 +
== Disclaimer ==
 +
 
 +
This Model is part of research conducted in the context of a PhD.
 +
This wiki page represents just a partial view of the full rationale of the research.
 +
To have a complete overview of the rationale of the model, please refer to the PhD thesis which is publicly available at:
 +
 
 +
https://etd.adm.unipi.it/t/etd-05102019-114151/
 +
 
 +
https://openportal.isti.cnr.it/doc?id=people______::470484e51fcb9e307a418c800efc44c8
 +
 
 +
 
 +
If you need to refer to such work you can cite the PhD Thesis.
 +
 
 +
BibText:
 +
 
 +
<pre>
 +
@phdthesis{frosini2019transactional,
 +
  title={Transactional REST Information System for Federated Research Infrastructures enabling Virtual Research Environments},
 +
  author={Frosini, Luca},
 +
  year={2019},
 +
  school={UNIVERSIT{\`A} DI PISA}
 +
}
 +
</pre>
 +
 
 +
An previous paper about this work is:
 +
 
 +
BibText:
 +
 
 +
<pre>
 +
@article{frosini2018facet,
 +
  title={A Facet-based Open and Extensible Resource Model for Research Data Infrastructures.},
 +
  author={Frosini, Luca and Pagano, Pasquale},
 +
  journal={Grey Journal (TGJ)},
 +
  volume={14},
 +
  number={2},
 +
  year={2018}
 +
}
 +
</pre>
 +
 
 +
== IS Model ==
 +
 
 +
The [[#IS_Model|Information System Model]] (henceforth IS Model) is a graph model with Entities as nodes and Relations as edges.
 +
 
 +
[[File:Is-model.png|800px]]
 +
<br /> <br />
 +
[[File:Is-model-er.png|500px]]
  
 
* Two typologies of '''entities''' are envisaged:  
 
* Two typologies of '''entities''' are envisaged:  
 
** '''[[#Resources | Resources]]''', i.e. entities representing a description of "thing" to be managed;   
 
** '''[[#Resources | Resources]]''', i.e. entities representing a description of "thing" to be managed;   
*** Every Resource is characterised by a number of [[#Facets | Facets]].
+
*** Every Resource is described by a number of [[#Facets | Facets]].
 
** '''[[#Facets | Facets]]''', i.e. entities contributing to "build" a description of a Resource. Every facet, once attached to a Resource profile captures a certain aspect / characterization of the resource;   
 
** '''[[#Facets | Facets]]''', i.e. entities contributing to "build" a description of a Resource. Every facet, once attached to a Resource profile captures a certain aspect / characterization of the resource;   
*** Every facet is characterised by a number of [[#Property| properties]];  
+
*** Every facet is characterised by a number of [[#Properties| properties]];  
  
 
* Two typologies of '''[[#Relations|relations]]''' are envisaged:
 
* Two typologies of '''[[#Relations|relations]]''' are envisaged:
 
** '''[[#isRelatedTo | isRelatedTo]]''', i.e. a relation linking any two [[#Resources | Resources]].  
 
** '''[[#isRelatedTo | isRelatedTo]]''', i.e. a relation linking any two [[#Resources | Resources]].  
** '''[[#consistsOf | consistsOf]]''', i.e. a relation connecting each [[#Resources | Resource]] with one of the [[#Facets | Facets]] characterizing it;
+
** '''[[#ConsistsOf | ConsistsOf]]''', i.e. a relation connecting each [[#Resources | Resource]] with one of the [[#Facets | Facets]] characterizing it;
  
 
* Each entity and relation  
 
* Each entity and relation  
** has an '''[[#header | header]]''' automatically generated for the sake of identification and provenance of the specific information;  
+
** has an '''[[#Header|header]]''' automatically generated for the sake of identification and provenance of the specific information;  
 
** can be '''specialized'''  
 
** can be '''specialized'''  
*** A number of specializations are identified below. Such specializations are managed by the gCube Core services, i.e. Core services builds upon these specialization to realize its management tasks;     
+
*** A number of specializations are identified below. Such specializations are managed by the gCube Core services, i.e. Core services builds upon these specializations to realize its management tasks;     
 
*** Other specializations can be defined by clients, the system make it possible to store these additional typologies of relations and facets and to discover them.
 
*** Other specializations can be defined by clients, the system make it possible to store these additional typologies of relations and facets and to discover them.
 
+
* Facet and Relation instances can have additional [[#Properties| properties]] which are not defined in the schema (henceforth schema-mixed mode).
 
* On relations:
 
* On relations:
** Any relation has a direction, i.e. a "source" ('''out''' bound of the relation) and a "target" ('''in''' bound of the relation). Anyway the relation can be also navigated in the opposite direction;
+
** Any relation has a direction, i.e. a "source" ('''out''' bound of the relation) and a "target" ('''in''' bound of the relation). Anyway, the relation can be also navigated in the opposite direction;
 
** It is not permitted to define a Relation having a Facet as "source". In other words:
 
** It is not permitted to define a Relation having a Facet as "source". In other words:
 
*** It is not permitted to define a Relation connecting a Facet with another one;
 
*** It is not permitted to define a Relation connecting a Facet with another one;
 
*** It is not permitted to define a Relation connecting a Facet with a Resource (as target);  
 
*** It is not permitted to define a Relation connecting a Facet with a Resource (as target);  
** A Facet instance can be linked (by [[#consistsOf | consistsOf]] or any specialization of it) from different Resources.
+
** A Facet instance can be linked (by [[#ConsistsOf | ConsistsOf]] or any specialization of it) from different Resources.
  
[[File:Is-model.png]]
+
We derived the term Facet directly from the dictionary definition. Merriam Webster Dictionary defines facet as “any of the definable aspects that make up a subject (as of contemplation) or an object (as of consideration)”<ref>https://www.merriam-webster.com/dictionary/facet</ref>.
 +
The Free Dictionary defines a facet as “One of numerous aspects, as of a subject” <ref>https://www.thefreedictionary.com/facet</ref>.
  
=== Property ===
 
  
Any Property can be enriched with the following attributes:
+
=== Type Attributes ===
 +
 
 +
Any attribute defined in the type schema is characterised by:
  
 
* '''Name''' : Property Name
 
* '''Name''' : Property Name
* '''Type''' : The Type of the Property (e.g. String, Integer, ...). See [[#Property_Type|Property Type]]
+
* '''Type''' : The Type of the Property (e.g. String, Integer, ...). It can be a [[#Basic_Types|Basic Type]] or a [[#Derived_Types|Derived Type]] or a [[#Complex_Types|Complex Type]]
 
* '''Description''' : The description of the Property. <code>default=null</code>.
 
* '''Description''' : The description of the Property. <code>default=null</code>.
 
* '''Mandatory''' ('''M'''): Indicate if the Property is mandatory. <code>default=false</code>.
 
* '''Mandatory''' ('''M'''): Indicate if the Property is mandatory. <code>default=false</code>.
Line 45: Line 96:
 
* '''Max''' ('''Max'''): <code>default=null</code>
 
* '''Max''' ('''Max'''): <code>default=null</code>
 
* '''Min''' ('''Min'''): <code>default=null</code>
 
* '''Min''' ('''Min'''): <code>default=null</code>
* '''Regexpr''' ('''Reg''')): A [https://en.wikipedia.org/wiki/Regular_expression Regular Expression] to validate the property value.<code>default=null</code>. A goog online tool for regex is avalable at [https://regex101.com/ https://regex101.com/]
+
* '''Regex''' ('''Reg''')): A [https://en.wikipedia.org/wiki/Regular_expression Regular Expression] to validate the property value, <code>default=null</code>. A good online tool for regex is avalable at [https://regex101.com/ https://regex101.com/]
 
+
==== Property Type ====
+
  
===== Basic Property Type =====
+
==== Basic Types ====
  
 
{|class="wikitable"
 
{|class="wikitable"
 
! Type  
 
! Type  
! Description
 
 
! Java type  
 
! Java type  
 +
! Description
 
|-
 
|-
 
| Boolean
 
| Boolean
| Handles only the values <em>True</em> or <em>False</em>
 
 
| <code>java.lang.Boolean</code> or <code>boolean</code>
 
| <code>java.lang.Boolean</code> or <code>boolean</code>
 +
| Handles only the values <em>True</em> or <em>False</em>.
 
|-
 
|-
 
| Integer
 
| Integer
| 32-bit signed Integers
 
 
| <code>java.lang.Integer</code> or <code>int</code> or  <code>java.math.BigInteger</code>
 
| <code>java.lang.Integer</code> or <code>int</code> or  <code>java.math.BigInteger</code>
 +
| 32-bit signed Integers.
 
|-
 
|-
 
| Short
 
| Short
| Small 16-bit signed integers
 
 
| <code>java.lang.Short</code> or <code>short</code>
 
| <code>java.lang.Short</code> or <code>short</code>
 +
| Small 16-bit signed integers.
 
|-
 
|-
 
| Long
 
| Long
| Big 64-bit signed integers
 
 
| <code>java.lang.Long</code> or <code>long</code>
 
| <code>java.lang.Long</code> or <code>long</code>
 +
| Big 64-bit signed integers.
 
|-
 
|-
 
| Float
 
| Float
| Decimal numbers
 
 
| <code>java.lang.Float</code> or <code>float</code>
 
| <code>java.lang.Float</code> or <code>float</code>
 +
| Decimal numbers.
 
|-
 
|-
 
| Double
 
| Double
| Decimal numbers with high precision
 
 
| <code>java.lang.Double</code> or <code>double</code>
 
| <code>java.lang.Double</code> or <code>double</code>
 +
| Decimal numbers with high precision.
 
|-
 
|-
 
| Date
 
| Date
| Any date with the precision up to milliseconds.
 
 
| <code>java.util.Date</code>
 
| <code>java.util.Date</code>
 +
| Any date with the precision up to milliseconds.
 
|-
 
|-
 
| String
 
| String
| Any string as alphanumeric sequence of chars
 
 
| <code>java.lang.String</code>
 
| <code>java.lang.String</code>
|-
+
| Any string as alphanumeric sequence of chars.
| Embedded
+
| This is an Object contained inside the owner Entity and has no [[#Header|Header]]. It is reachable only by navigating the owner Entity.
+
| <code>?  extends org.gcube.informationsystem.model.embedded.Embedded</code>
+
|-
+
| Embedded list
+
| List of Objects contained inside the owner Entity and have no [[#Header|Header]]. They are reachable only by navigating the owner Entity.
+
| <code>List&lt;?  extends org.gcube.informationsystem.model.embedded.Embedded&gt;</code>
+
|-
+
| Embedded set
+
| Set (no duplicates) of Objects contained inside the owner Entity and have no [[#Header|Header]]. They are reachable only by navigating the owner Entity.
+
| <code>Set&lt;? extends org.gcube.informationsystem.model.embedded.Embedded&gt;</code>
+
|-
+
| Embedded map
+
| Map of Objects contained inside the owner Entity and have no [[#Header|Header]]. They are reachable only by navigating the owner Entity.
+
| <code>Map&lt;String, ? extends org.gcube.informationsystem.model.embedded.Embedded&gt;</code>
+
 
|-
 
|-
 
| Byte
 
| Byte
| Single byte. usesful to store small 8-bit signed integers
 
 
| <code>java.lang.Byte</code> or <code>byte</code>
 
| <code>java.lang.Byte</code> or <code>byte</code>
 +
| Single byte. useful to store small 8-bit signed integers.
 
|-
 
|-
 
| Binary
 
| Binary
| Can contain any value as byte array
 
 
| <code>java.lang.Byte[]</code> or <code>byte[]</code>
 
| <code>java.lang.Byte[]</code> or <code>byte[]</code>
 +
| Can contain any value as byte array.
 
|}
 
|}
  
===== Derived Property Type =====
+
==== Derived Types ====
  
 
The following are obtained using a String as real type and adding a validation regex.
 
The following are obtained using a String as real type and adding a validation regex.
Line 119: Line 152:
 
{|class="wikitable"
 
{|class="wikitable"
 
! Type  
 
! Type  
! Description
 
 
! Java type  
 
! Java type  
 +
! Description
 
|-
 
|-
 
| Enum
 
| Enum
 +
| <code>java.lang.Enum</code> or <code>enum</code>
 
| by default it is represented using the String representation of the Enum. So that the primitive type used will be String. The enumeration is checked by setting <code>Regexpr</code> property. The Regular Expression is auto-generated and it will be something like '''<code>^(FIRST-ENUM-STRING_REPRESENTATION<nowiki>|</nowiki>SECOND-ENUM-STRING_REPRESENTATION<nowiki>|</nowiki>...<nowiki>|</nowiki>LAST_ENUM_STRING_REPRESENTATION)$</code>'''.
 
| by default it is represented using the String representation of the Enum. So that the primitive type used will be String. The enumeration is checked by setting <code>Regexpr</code> property. The Regular Expression is auto-generated and it will be something like '''<code>^(FIRST-ENUM-STRING_REPRESENTATION<nowiki>|</nowiki>SECOND-ENUM-STRING_REPRESENTATION<nowiki>|</nowiki>...<nowiki>|</nowiki>LAST_ENUM_STRING_REPRESENTATION)$</code>'''.
 
Otherwise (if indicated using an annotation), it can be represented using the Integer value of the Enum. So that the primitive type used will be Integer. The enumeration is checked using <code>Max</code> and <code>Min</code> properties.  
 
Otherwise (if indicated using an annotation), it can be represented using the Integer value of the Enum. So that the primitive type used will be Integer. The enumeration is checked using <code>Max</code> and <code>Min</code> properties.  
| <code>java.lang.Enum</code> or <code>enum</code>
 
 
|-
 
|-
 
| UUID
 
| UUID
 +
| <code>java.util.UUID</code>
 
| String representation of the UUID. The check is obtained using the regular expression '''<code>^([a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}){1}$</code>'''
 
| String representation of the UUID. The check is obtained using the regular expression '''<code>^([a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}){1}$</code>'''
| <code>java.util.UUID</code>
 
 
|-
 
|-
 
| URL
 
| URL
 +
| <code>java.net.URL</code>
 
| String representation of the URL. No check actually.
 
| String representation of the URL. No check actually.
| <code>java.net.URL</code>
 
 
|-
 
|-
 
| URI
 
| URI
 +
| <code>java.net.URI</code>
 
| String representation of the URI. No check actually.
 
| String representation of the URI. No check actually.
| <code>java.net.URI</code>
+
|-
 +
| TypeVersion
 +
| <code>org.gcube.informationsystem.utils.TypeVersion</code>
 +
| A type representing and validating a version in the following format X.X.X Major(Integer).Minor(Integer).Revision(Integer) (e.g 1.0.0, 2.3.0, 2.0.1). The check is obtained using the regular expression '''<code>^[1-9][0-9]{0,}\.(0<nowiki>|</nowiki>([1-9][0-9]{0,}))\.(0<nowiki>|</nowiki>([1-9][0-9]{0,}))$</code>'''.
 
|}
 
|}
  
=== Header ===
+
==== Complex Types ====
 +
 
 +
Any property defined by composing basic types, complex types and other complex types. Any complex type can be defined by extending [[#Property|Property]] type.
  
Every Entity and Relation has an Header automatically filled by the System. The Header has the following properties:
 
 
{|class="wikitable"
 
{|class="wikitable"
! Name
+
! Type
! Type
+
! Java type
! Description
+
! Description  
! Attributes
+
 
|-
 
|-
| uuid
+
| Property
| UUID
+
| <code>?  extends org.gcube.informationsystem.model.reference.properties.Property</code>
| This uuid can be used to univocally identify the Entity or the Relation
+
| This is an Object contained inside the owner Entity and has no [[#Header|Header]]. It is reachable only by navigating the owner Entity/Relation.
| <code>Mandatory=true</code> <code>NotNull=true</code> <code>ReadOnly=true</code>
+
 
|-
 
|-
| creator
+
| <del>Property list</del>
| String
+
| <del><code>List&lt;?  extends org.gcube.informationsystem.model.reference.properties.Property&gt;</code></del>
| Filled at creation time. The creator is retrieved using the authorization token
+
| <del>List of Objects contained inside the owner Entity and have no [[#Header|Header]]. They are reachable only by navigating the owner Entity/Relation.</del>
| <code>Mandatory=true</code> <code>NotNull=true</code> <code>ReadOnly=true</code>
+
 
|-
 
|-
| creationTime
+
| <del>Property set</del>
| Date
+
| <del><code>Set&lt;? org.gcube.informationsystem.model.reference.properties.Property&gt;</code></del>
| Creation time in milliseconds. Represent the difference, measured in milliseconds, between the creation time and midnight, January 1, 1970 UTC
+
| <del>Set (no duplicates) of Objects contained inside the owner Entity and have no [[#Header|Header]]. They are reachable only by navigating the owner Entity/Relation.</del>
| <code>Mandatory=true</code> <code>NotNull=true</code> <code>ReadOnly=true</code>
+
 
|-
 
|-
| lastUpdateTime
+
| Property map
| Date
+
| <code>Map&lt;String, ? extends org.gcube.informationsystem.model.reference.properties.Propertyd&gt;</code>
| Last Update time in milliseconds. Represent the difference, measured in milliseconds, between the last update time and midnight, January 1, 1970 UTC
+
| Map of Objects contained inside the owner Entity and have no [[#Header|Header]]. They are reachable only by navigating the owner Entity/Relation.
| <code>Mandatory=true</code> <code>NotNull=true</code>
+
 
|}
 
|}
  
=== Resources and (isRelatedTo) Relations ===
+
=== Property ===
  
[[File:Gcube-reources-and-isrelatedto-relations.png|1024px]]
+
It does not define any field. It is just used as a base class.
  
== Facets ==
+
The Java Interface declaration for such a type is available at:
  
Early ideas and thinking on facets were documented at [[Resource_Model_(2nd_generation)#Facets | 2nd Generation Resource Model : Facets]]
+
https://code-repo.d4science.org/gCubeSystem/information-system-model/src/branch/master/src/main/java/org/gcube/informationsystem/model/reference/properties/Property.java
  
=== Facet ===
+
===== Header =====
  
Facets are collections of attributes conceived to capture a certain feature / aspect of the [[#Resource | Resource]] they are associated with.
+
Every Entity and Relation has an Header automatically created/updated by the System.
 
+
Every Facet has:
+
* An [[#Header|Header]] automatically generated to capture identification- and provenace-related aspects of the facet once it is instantiated;
+
* Zero or more [[#Property|properties]]. Besides the per-facet envisaged properties, clients can add new ones.  
+
 
+
==== Access Point Facet ====
+
  
 
{|class="wikitable"
 
{|class="wikitable"
|+ Access Point Facet <code>extends</code> [[#Facet|Facet]]
+
|+ Header <code>''extends''</code> Property
|-
+
| colspan=4| '''Goal:''' This facet captures information on an “access point” of a resource, i.e. any web-based endpoint to programmatically interact with the resource via a known protocol.
+
|-
+
! colspan=4 | Properties
+
|-
+
 
! Name
 
! Name
 
! Type
 
! Type
! Description
 
 
! Attributes
 
! Attributes
|-
 
| entryName
 
| String
 
| A distinguishing string to be used by clients to identify the access point of interest;
 
|
 
|-
 
| endpoint*
 
| URI
 
| The URI which characterizes the specific endpoint instance;
 
| <code>Mandatory=true</code> <code>ReadOnly=true</code> <code>NotNull=true</code>
 
|-
 
| protocol
 
| String
 
| The high-level protocol used by the access point. The String could contains the version if needed. E.g. WMS not http which is already contained in URI.
 
|
 
|-
 
| description
 
| String
 
| A human oriented text accompanying the access point.
 
|
 
|-
 
| authorization
 
| String
 
| Contains authorization information. E.g: a token, username:password. By relying on schema it should be sufficient to capture also whether the content is encrypted or not
 
|
 
|-
 
| authorizationSchema
 
| URI
 
| URI of the Schema to be used for a proper interpretation of the authorization value.
 
|
 
|-
 
| properties
 
| String
 
| This can be an arbitrarily complex element whose "structure" is defined by the associated schema
 
|
 
|-
 
| propertiesSchema
 
| URI
 
| URI of the Schema to be used for a proper interpretation of the properties value.
 
|
 
|-
 
! colspan=4 | Known Usage
 
|-
 
| colspan=4 | '''[[#Dataset|Dataset]]''' [[#consistsOf|consistsOf]] '''0..n''' [[#Access_Point_Facet|Access Point Facet]]: Each access point captures a possible web-based method for accessing the dataset. Any embargo-related information can be captured by the access policy property of the consistsOf.
 
|-
 
| colspan=4 | '''[[#Concrete_Dataset|Concrete Dataset]]''' [[#consistsOf|consistsOf]] '''1..n''' [[#Access_Point_Facet|Access Point Facet]]: Each access point captures a possible web-based method for accessing the dataset. Any embargo-related information can be captured by the access policy property of the consistsOf.
 
|-
 
| colspan=4 | '''[[#E-Service|E-Service]]''' [[#consistsOf|consistsOf]] '''1..n''' [[#Access_Point_Facet|Access Point Facet]]: Each access point captures a possible web-based method for accessing the service.
 
|-
 
| colspan=4 | '''[[#Software|Software]]''' [[#consistsOf|consistsOf]] '''1..n''' [[#Access_Point_Facet|Access Point Facet]]: Each access point captures a possible web-based method for accessing a software manifestation. Examples are links to maven artifact on nexus, javadoc, wiki, svn, etc.
 
|}
 
 
==== Contact Facet ====
 
 
{|class="wikitable"
 
|+ Contact Facet <code>extends</code> [[#Facet|Facet]]
 
|-
 
| colspan=5| '''Goal:''' This facet captures information on a ''point of contact'' for the resource, i.e. a person or a department serving as the coordinator or focal point of information concerning the resource. As you can see in the known usages part, there are diverse points of contact that can be associated to a given resource and the role of the association is captured by using a specific relation.   
 
|-
 
! colspan=4 | Properties
 
|-
 
! Name
 
! Type
 
 
! Description
 
! Description
! Attributes
 
!
 
 
|-
 
|-
| title
+
| uuid
| String
+
| UUID
| A name describing the profession or marital status of the point of contact. E.g. Dr, Mrs, Mr.
+
| <code>Mandatory=true</code> <br/><code>NotNull=true</code> <br/><code>ReadOnly=true</code>
| <code>Mandatory=false</code>  
+
| This UUID is be used to identify the Entity or the Relation univocally.
 
|-
 
|-
| name
+
| createdBy
 
| String
 
| String
| First Name
+
| <code>Mandatory=true</code> <br/><code>NotNull=true</code> <br/><code>ReadOnly=true</code>
| <code>Mandatory=true</code> <code>NotNull=true</code>
+
| The user that created the Entity or the Relation. It is initialized at creation time.
 
|-
 
|-
| middleName
+
| creationTime
| String
+
| Date
| Middle Name
+
| <code>Mandatory=true</code> <br/><code>NotNull=true</code> <br/><code>ReadOnly=true</code>
| <code>Mandatory=false</code>  
+
| Creation time.
 
|-
 
|-
| surname
+
| lastUpdateBy
 
| String
 
| String
| Surname
+
| <code>Mandatory=true</code> <br/><code>NotNull=true</code>
| <code>Mandatory=true</code> <code>NotNull=true</code>
+
| The user that made the last update to the Entity or the Relation. At creation time, it assumes the same value of creator.
 
|-
 
|-
| eMail
+
| lastUpdateTime
| String
+
| Date
| A restricted range of RFC‑822 compliant email address. Please note that just domain based email address are accepted (not IP based). Please also note that new TLD are also accepted (e.g luca@google without .com which is a valid email address). You can test here the provided regular expression with your input email address https://regex101.com/ before open a ticket.
+
| <code>Mandatory=true</code> <br/><code>NotNull=true</code>
| <code>Mandatory=true</code> <code>NotNull=true</code> <code>Regex=<nowiki>^[a-z0-9._%+-]{1,128}@[a-z0-9.-]{1,128}</nowiki></code>
+
| Last Update time. At creation time it assumes the same value of creationTime.
|-
+
! colspan=4 | Known Usage
+
|-
+
| colspan=4 | '''[[#Actor|Actor]]''' [[#isIdentifiedBy|isIdentifiedBy]] '''1..n''' [[#Contact_Facet|Contact Facet]]: An Actor must have at least a primary point of contact which will be used for identification purposes.
+
|-
+
| colspan=4 | '''[[#Actor|Actor]]''' [[#hasContact|hasContact]] '''0..n''' [[#Contact_Facet|Contact Facet]]: An Actor can have an arbitrary number of points of contact which provide secondary contact information.
+
|-
+
| colspan=4 | '''[[#Legal_Body|Legal Body]]''' [[#isIdentifiedBy|isIdentifiedBy]] '''1..n''' [[#Contact_Facet|Contact Facet]]: A Legal Body must have at least a point of contact which permit to identify the Legal Body per se.
+
|-
+
| colspan=4 | '''[[#Person|Person]]''' [[#isIdentifiedBy|isIdentifiedBy]] '''1..n''' [[#Contact_Facet|Contact Facet]]: A Person must have at least a point of contact which permit to identify the Person per se.
+
|-
+
| colspan=4 | '''[[#Dataset|Dataset]]''' [[#hasContact|hasContact]] '''1..n''' [[#Contact_Facet|Contact Facet]]: A Dataset must have at least a point of contact to be used to acquire information on it.
+
|-
+
| colspan=4 | '''[[#Dataset|Dataset]]''' [[#hasContributor|hasContributor]] '''0..n''' [[#Contact_Facet|Contact Facet]]: One of the dataset contributors;
+
|-
+
| colspan=4 | '''[[#Dataset|Dataset]]''' [[#hasCreator|hasCreator]] '''0..n''' [[#Contact_Facet|Contact Facet]]: One of the dataset creators;
+
|-
+
| colspan=4 | '''[[#Dataset|Dataset]]''' [[#hasCurator|hasCurator]] '''0..n''' [[#Contact_Facet|Contact Facet]]: One of the dataset curators;
+
|-
+
| colspan=4 | '''[[#Dataset|Dataset]]''' [[#hasMaintainer|hasMaintainer]] '''0..n''' [[#Contact_Facet|Contact Facet]]: One of the dataset maintainers;
+
|-
+
| colspan=4 | '''[[#Dataset|Dataset]]''' [[#hasOwner|hasOwner]] '''0..n''' [[#Contact_Facet|Contact Facet]]: One of the dataset owners;
+
|-
+
| colspan=4 | '''[[#Concrete_Dataset|Concrete Dataset]]''' [[#hasMaintainer|hasMaintainer]] '''1..n''' [[#Contact_Facet|Contact Facet]]:
+
|-
+
| colspan=4 | '''[[#Schema|Schema]]''' [[#hasContact|hasContact]] '''1..n''' [[#Contact_Facet|Contact Facet]]: ...
+
|-
+
| colspan=4 | '''[[#Site|Site]]''' [[#hasContact|hasContact]] '''1..n''' [[#Contact_Facet|Contact Facet]]: ...
+
|-
+
| colspan=4 | '''[[#Site|Site]]''' [[#hasMaintainer|hasMaintainer]] '''1..n'''[[#Contact_Facet|Contact Facet]]: ...
+
|-
+
| colspan=4 | '''[[#Site|Site]]''' [[#hasManager|hasManager]] '''1..n''' [[#Contact_Facet|Contact Facet]]: ...
+
 
|}
 
|}
  
==== Contact Reference Facet ====
 
  
{|class="wikitable"
+
The Java Interface declaration for such a type is available at:
|+ Contact Reference Facet <code>extends</code> [[#Facet|Facet]]
+
|-
+
| colspan=4 | This facet captures information on ???
+
|-
+
! colspan=4 | Properties
+
|-
+
! Name
+
! Type
+
! Description
+
! Attributes
+
|-
+
| website
+
| URL
+
| The main website
+
|
+
|-
+
| address
+
| String
+
| A physical address
+
|
+
|-
+
| phone
+
| String
+
| A phone number
+
|
+
|-
+
! colspan=4 | Known Usage
+
|-
+
| colspan=4 | '''[[#Actor|Actor]]''' [[#consistsOf|consistsOf]] '''0..n''' [[#Contact_Reference_Facet|Contact Reference Facet]]:  
+
|-
+
| colspan=4 | '''[[#Legal_Body|Legal Body]]''' [[#consistsOf|consistsOf]] '''0..n''' [[#Contact_Reference_Facet|Contact Reference Facet]]:
+
|-
+
| colspan=4 | '''[[#Person|Person]]'''  [[#consistsOf|consistsOf]] '''0..n''' [[#Contact_Reference_Facet|Contact Reference Facet]]:
+
|}
+
  
==== Coverage Facet ====
+
https://code-repo.d4science.org/gCubeSystem/information-system-model/src/branch/master/src/main/java/org/gcube/informationsystem/model/reference/properties/Header.java
  
{|class="wikitable"
+
===== PropagationConstraint =====
|+ Coverage Facet <code>extends</code> [[#Facet|Facet]]
+
|-
+
| colspan=4| This facet captures information on the ''extent'' of the Resource, i.e. any aspect aiming at capturing an indicator of the amount/area the resource covers be it a geospatial area, a temporal area, or any other "area".     
+
|-
+
! colspan=4 | Properties
+
|-
+
! Name
+
! Type
+
! Description
+
! Attributes
+
|-
+
| value
+
| String
+
| The amount indicating the "area" covered by the dataset according to the reference schema;
+
| <code>Mandatory=true</code> <code>NotNull=true</code>
+
|-
+
| schema
+
| URI
+
| The reference schema to be used to interpret the value;
+
| <code>Mandatory=true</code> <code>NotNull=true</code>
+
|-
+
! colspan=4 | Known Usage
+
|-
+
| colspan=4 | '''[[#Dataset|Dataset]]''' [[#hasCoverage|hasCoverage]] '''1..n''' [[#Coverage_Facet|Coverage Facet]]:
+
|-
+
| colspan=4 | '''[[#Dataset|Dataset]]''' [[#hasTemporalCoverage|hasTemporalCoverage]] '''0..n''' [[#Coverage_Facet|Coverage Facet]]: any temporal coverage characterising the dataset content;
+
|-
+
| colspan=4 | '''[[#Dataset|Dataset]]''' [[#hasSpatialCoverage|hasSpatialCoverage]] '''0..n''' [[#Coverage_Facet|Coverage Facet]]: any spatial coverage characterising the dataset content;
+
|}
+
  
==== CPU Facet ====
+
At any time entities and relations can be added or removed to/from a context or deleted.
 +
The PropagationConstraint property contained in each relation is a predefined Property type which indicates the behaviour to be held on a target entity when an event related to a context occurs in the source resource or directly to the relation.
  
 
{|class="wikitable"
 
{|class="wikitable"
|+ CPU Facet <code>extends</code> [[#Facet|Facet]]
+
|+ PropagationConstraint <code>''extends''</code> Property
|-
+
| colspan=4 | This facet captures information on the Central Processing Unit of the resource it is associated. 
+
|-
+
! colspan=4 | Properties
+
|-
+
 
! Name
 
! Name
 
! Type
 
! Type
! Description
 
 
! Attributes
 
! Attributes
|-
 
| model
 
| String
 
| CPU Model
 
| <code>Mandatory=true</code> <code>NotNull=true</code>
 
|-
 
| vendor
 
| String
 
| CPU Vendor
 
| <code>Mandatory=true</code> <code>NotNull=true</code>
 
|-
 
| clockSpeed
 
| String
 
| Clock Speed with the unit
 
| <code>Mandatory=true</code> <code>NotNull=true</code>
 
|-
 
! colspan=4 | Known Usage
 
|-
 
| colspan=4 | '''[[#Hosting_Node|Hosting Node]]''' [[#consistsOf|consistsOf]] '''1..n''' [[#CPU_Facet|CPU Facet]]:
 
|}
 
 
==== Descriptive Metadata Facet ====
 
 
{|class="wikitable"
 
|+ Descriptive Metadata Facet <code>extends</code> [[#Facet|Facet]]
 
|-
 
| colspan=4 | This facet captures information on descriptive metadata to be associated with teh resource
 
|-
 
! colspan=4 | Properties
 
|-
 
! Name
 
! Type
 
 
! Description
 
! Description
! Attributes
 
 
|-
 
|-
| value
+
| remove
| String
+
| Enum
| A metadata record representing the descriptive metadata and encoded according to the reference schema;   
+
| <code>Regex=(cascadeWhenOrphan<nowiki>|</nowiki>cascade<nowiki>|</nowiki>keep)</code>
| <code>Mandatory=true</code> <code>NotNull=true</code>
+
| It indicates the behaviour to implement for the target Entity when a 'remove' action is performed on the source Resource. Remove actions are: (i) the operation of removing an instance from a context; (ii) the operation of deleting an instance (it has an impact on all contexts).
 
|-
 
|-
| schema
+
| add
| URI
+
| Enum
| The reference schema to be used to interpret the value attribute;
+
| <code>Regex=(propagate<nowiki>|</nowiki>unpropagate)</code>
| <code>Mandatory=true</code> <code>NotNull=true</code>
+
| It indicates the behaviour to implement for the target Entity when an 'add' action is performed on the source Resource. Add action is the operation of adding an instance to a context.
|-
+
! colspan=4 | Known Usage
+
|-
+
| colspan=4 | '''[[#Dataset|Dataset]]''' [[#consistsOf|consistsOf]] '''0..n''' [[#Descriptive_Metadata_Facet|Descriptive Metadata Facet]]:
+
|-
+
| colspan=4 | '''[[#Schema|Schema]]''' [[#consistsOf|consistsOf]] '''0..n''' [[#Descriptive_Metadata_Facet|Descriptive Metadata Facet]]:
+
 
|}
 
|}
  
==== Event Facet ====
 
  
{|class="wikitable"
+
Remove values;
|+ Event Facet <code>extends</code> [[#Facet|Facet]]
+
* cascadeWhenOrphan: When a remove action is performed on the source Entity of the relation, or directly on the relation, then the same remove action apart on the relation is performed to the target entity if it has no other incoming relations.
|-
+
* cascade: When a remove action is performed on the source Entity of the relation, or directly on the relation, then the same remove action is performed on the relation and its target entity.
| colspan=4 | This facet captures information on a certain event / happening characterising the life cycle of the resource.  
+
* keep: When a remove action is performed on the source Entity of the relation, or directly on the relation, then the same remove action is performed on relation but never to the target entity.
|-
+
! colspan=4 | Properties
+
|-
+
! Name
+
! Type
+
! Description
+
! Attributes
+
|-
+
| date
+
| Calendar
+
| The time the event took place / occurred;
+
| <code>Mandatory=true</code> <code>NotNull=true</code>
+
|-
+
| value
+
| String
+
| The typology of event according to the reference schema;
+
| <code>Mandatory=true</code> <code>NotNull=true</code>
+
|-
+
| schema
+
| URI
+
| The reference schema to be used to interpret the value describing the event;
+
|
+
|-
+
! colspan=4 | Known Usage
+
|-
+
| colspan=4 | '''[[#Dataset|Dataset]]''' [[#consistsOf|consistsOf]] '''0..n''' [[#Event_Facet|Event Facet]]:
+
|-
+
| colspan=4 | '''[[#E-Service|E-Service]]''' [[#consistsOf|consistsOf]] '''1..n''' [[#Event_Facet|Event Facet]]: E.g. ActivationTime, DeploymentTime
+
|-
+
| colspan=4 | '''[[#Hosting_Node|Hosting Node]]''' [[#consistsOf|consistsOf]] '''1..n''' [[#Event_Facet|Event Facet]]:
+
|}
+
  
==== Identifier Facet ====
 
  
{|class="wikitable"
+
Add values;
|+ Identifier Facet <code>extends</code> [[#Facet|Facet]]
+
|-
+
| colspan=4 | '''Goal''': This facet captures information on Identifiers (other than the ones automatically generated by the system) that can be attached to a resource.
+
|-
+
! colspan=4 | Properties
+
|-
+
! Name
+
! Type
+
! Description
+
! Attributes
+
|-
+
| value
+
| String
+
| The identifier. E.g. http://fr.dbpedia.org/resource/Thunnus de305d54-75b4-431b-adb2-eb6b9e546014
+
| <code>Mandatory=true</code> <code>NotNull=true</code>
+
|-
+
| type
+
| Enumeration
+
| The typology of identifier. I.e. URI, DOI, IRI, URL, URN, UUID;
+
| <code>Mandatory=true</code> <code>NotNull=true</code>
+
|-
+
| isPersistent
+
| boolean
+
| To indicate whether the Identifier is persistent or not.
+
| <code>Mandatory=true</code> <code>NotNull=true</code>
+
|-
+
! colspan=4 | Known Usage
+
|-
+
| colspan=4 | '''[[#Configuration_Template|Configuration Template]]''' [[#isIdentifiedBy|isIdentifiedBy]] '''1..n''' [[#Identifier_Facet|Identifier Facet]]
+
|-
+
| colspan=4 | '''[[#Configuration|Configuration]]''' [[#isIdentifiedBy|isIdentifiedBy]] '''1..n''' [[#Identifier_Facet|Identifier Facet]]
+
|-
+
| colspan=4 | '''[[#Dataset|Dataset]]''' [[#isIdentifiedBy|isIdentifiedBy]] '''1..n''' [[#Identifier_Facet|Identifier Facet]]
+
|-
+
| colspan=4 | '''[[#Concrete_Dataset|Concrete Dataset]]''' [[#isIdentifiedBy|isIdentifiedBy]] '''1..n''' [[#Identifier_Facet|Identifier Facet]]
+
|-
+
| colspan=4 | '''[[#Site|Site]]''' [[#isIdentifiedBy|isIdentifiedBy]] '''1..n''' [[#Identifier_Facet|Identifier Facet]]
+
|}
+
  
==== License Facet ====
+
* propagate: When an 'add' action is performed on the source Entity of the relation, or directly on the relation, then the same add action is performed on the relation and its target Entity.
 +
* unpropagate: When an 'add' action is performed on the source Entity of the relation, is performed on source relation only. Trying to perform an 'add' action on the relation has no effects.
  
{|class="wikitable"
 
|+ License Facet <code>extends</code> [[#Facet|Facet]]
 
|-
 
| colspan=4 | '''Goal:''' This facet captures information on any license associated with the resource to capture the policies governing its exploitation and use. 
 
|-
 
! colspan=4 | Properties
 
|-
 
! Name
 
! Type
 
! Description
 
! Attributes
 
|-
 
| name
 
| String
 
| The common name of the license. E.g. EUPL 1.1, GPLv2, BSD, ...
 
| <code>Mandatory=true</code> <code>NotNull=true</code>
 
|-
 
| textURL
 
| URL
 
| The URL to the actual text of the license. 
 
| <code>Mandatory=true</code> <code>NotNull=true</code>
 
|-
 
! colspan=4 | Known Usage
 
|-
 
| colspan=4 | '''[[#Dataset|Dataset]]''' [[#consistsOf|consistsOf]] '''0..n''' [[#License_Facet|License Facet]]: The duration of license - if any - can be captured by the expiry date defined in the consistsOf relation.
 
|-
 
| colspan=4 | '''[[#E-Service|E-Service]]''' [[#consistsOf|consistsOf]] '''0..n''' [[#License_Facet|License Facet]]
 
|-
 
| colspan=4 | '''[[#Software|Software]]''' [[#consistsOf|consistsOf]] '''1..n''' [[#License_Facet|License Facet]]
 
|}
 
  
==== Location Facet ====
+
Any [[#Relation|Relation]] contains such a property. If the values are not specified at creation time the system initialize it with the following rules:
  
The goal of this facet is to collect information about Location
+
* [[#ConsistsOf | ConsistsOf Relation]] : <code>remove=cascade</code>, <code>add=propagate</code>
 +
* [[#isRelatedTo | IsRelatedTo Relation]] : <code>remove=keep</code>, <code>add=unpropagate</code>
  
{|class="wikitable"
 
|+ Location Facet <code>extends</code> [[#Facet|Facet]]
 
|-
 
| colspan=4 | '''Goal:''' This facet captures information on a physical area characterising the resource it is associated with. This should not be confused with [[#Coverage_Facet|Coverage Facet]].
 
|-
 
! colspan=4 | Properties
 
|-
 
! Name
 
! Type
 
! Description
 
! Attributes
 
|-
 
| country
 
| String
 
| The English name of the country. See http://data.okfn.org/data/core/country-list
 
|
 
|-
 
| location
 
| String
 
| The City name.
 
|
 
|-
 
| latitude
 
| String
 
| Latitude
 
|
 
|-
 
| longitude
 
| String
 
| Longitude
 
|
 
|-
 
! colspan=4 | Known Usage
 
|-
 
| colspan=4 | '''[[#Site|Site]]''' [[#consistsOf|consistsOf]] '''1..n''' [[#Location_Facet|Location Facet]]: the base where the site is operated;
 
|}
 
  
==== Memory Facet ====
+
The Java Interface declaration for such a type is available at:
  
{|class="wikitable"
+
https://code-repo.d4science.org/gCubeSystem/information-system-model/src/branch/master/src/main/java/org/gcube/informationsystem/model/reference/properties/PropagationConstraint.java
|+ Memory Facet <code>extends</code> [[#Facet|Facet]]
+
|-
+
| colspan=4 | '''Goal:''' This facet captures information on computer memory equipping the resource and its usage.
+
|-
+
! colspan=4 | Properties
+
|-
+
! Name
+
! Type
+
! Description
+
! Attributes
+
|-
+
| size
+
| Long
+
| Total amount of memory.
+
| <code>Mandatory=true</code> <code>NotNull=true</code>
+
|-
+
| used
+
| Long
+
| used amount of memory.
+
| <code>Mandatory=true</code> <code>NotNull=true</code>
+
|-
+
| unit
+
| Enum
+
| The unit of measure used to report size and used attributes. Allowed values are Byte, kB (kilobyte 10^3), MB (megabyte 10^6), GB (gigabyte 10^9), TB (terabyte 10^12), PB (petabyte 10^15), EB (exabyte 10^18), ZB (zettabyte 10^21), YB (yottabyte 10^24)
+
| <code>Mandatory=true</code> <code>NotNull=true</code>
+
|-
+
! colspan=4 | Known Usage
+
|-
+
| colspan=4 | '''[[#Hosting_Node|Hosting Node]]''' [[#hasPersistentMemory|hasPersistentMemory]] '''1..n''' [[#Memory_Facet|Memory Facet]]: The Disk Space allocated to the hosting node;
+
|-
+
| colspan=4 | '''[[#Hosting_Node|Hosting Node]]''' [[#hasVolatileMemory|hasVolatileMemory]] '''1..n''' [[#Memory_Facet|Memory Facet]]: The RAM allocated to the hosting node;
+
|}
+
  
==== Networking Facet ====
+
===== Encrypted =====
  
 
{|class="wikitable"
 
{|class="wikitable"
|+ Networking Facet <code>extends</code> [[#Facet|Facet]]
+
|+ Encrypted <code>''extends''</code> Property
|-
+
| colspan=4 | This facet captures information on any (computer) network interface/access point associated with the resource.
+
|-
+
! colspan=4 | Properties
+
|-
+
 
! Name
 
! Name
 
! Type
 
! Type
! Description
 
 
! Attributes
 
! Attributes
|-
 
| hostName
 
| String
 
| Host Name
 
|
 
|-
 
| domainName
 
| String
 
| Domain Name
 
|
 
|-
 
| IPAddress
 
| String
 
| IP Address. Validation regular expression ca be foun at http://stackoverflow.com/questions/53497/regular-expression-that-matches-valid-ipv6-addresses#answer-1934546 (Michael Rushton solution)
 
| <code>Mandatory=true</code> <br/>
 
<code>NotNull=true</code> <br/>
 
<code>Regex=<nowiki>'/^(?>(?>([a-f0-9]{1,4})(?>:(?1)){7}|(?!(?:.*[a-f0-9](?>:|$)){8,})((?1)(?>:(?1)){0,6})?::(?2)?)|(?>(?>(?1)(?>:(?1)){5}:|(?!(?:.*[a-f0-9]:){6,})(?3)?::(?>((?1)(?>:(?1)){0,4}):)?)?(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])(?>\.(?4)){3}))$/iD'</nowiki></code>
 
|-
 
| mask
 
| String
 
| Network Mask
 
|
 
|-
 
| broadcastAddress
 
| String
 
| Broadcast Address
 
|
 
|-
 
! colspan=4 | Known Usage
 
|-
 
| colspan=4 | '''[[#Hosting_Node|Hosting Node]]''' [[#isIdentifiedBy|isIdentifiedBy]] '''1..n''' [[#Networking_Facet|Networking Facet]]
 
|-
 
| colspan=4 | '''[[#Site|Site]]''' [[#consistsOf|consistsOf]] '''1..n''' [[#Networking_Facet|Networking Facet]]
 
|}
 
 
==== Provenance Facet ====
 
 
{| class="wikitable"
 
|+ Provenance Facet <code>extends</code> [[#Facet|Facet]]
 
|-
 
| colspan=4 | '''Goal:''' This facet captures information on provenance/lineage of the entire resource.
 
|-
 
! colspan=4 | Properties
 
|-
 
! Name
 
! Type
 
 
! Description
 
! Description
! Attributes
 
 
|-
 
|-
| relationship
+
| value
| Enum
+
| I.e. wasDerivedFrom, wasGeneratedBy
+
|
+
|-
+
| reference
+
 
| String
 
| String
| resourceID (a reference to the "originator" Resource associated to the resource the facet is attached to by the relationship)
 
|
 
|-
 
| document
 
| String
 
| Provenance Document E.g. the xml format
 
|
 
|-
 
| documentSchema
 
| URI
 
| Document Schema E.g. a reference to the format
 
|
 
|-
 
! colspan=4 | Known Usage
 
|-
 
| colspan=4 | '''[[#Dataset|Dataset]]''' [[#consistsOf|consistsOf]] '''0..n''' [[#Provenance_Facet|Provenance Facet]]
 
|}
 
 
==== Schema Facet ====
 
 
{|class="wikitable"
 
|+ <code>Abstract</code> Schema Facet <code>extends</code> [[#Facet|Facet]]
 
|-
 
| colspan=4 | This facet captures information on any schema associated with a reosurce.
 
|-
 
! colspan=4 | Properties
 
|-
 
! Name
 
! Type
 
! Description
 
! Attributes
 
|-
 
| name*
 
| String
 
| Schema Name
 
| <code>Mandatory=true</code> <br/> <code>NotNull=true</code>
 
|-
 
| description
 
| String
 
| Schema Description
 
| <code>Mandatory=true</code> <br/> <code>NotNull=true</code>
 
|-
 
| schemaURL
 
| URL
 
| Schema definition URL (recommended)
 
 
|  
 
|  
|-
+
| The encrypted value. The resource registry store safely the value. When received the value is decrypted using the key of current context and store the value safely. When the value is read, the resource-registry retrieve the value and  encrypt it with the key of current context.
! colspan=4 | Known Usage
+
|-
+
| colspan=4 | '''[[#Schema|Schema]]''' [[#isIdentifiedBy|isIdentifiedBy]] '''1..n''' [[#Schema_Facet|Schema Facet]]
+
 
|}
 
|}
  
===== JSON Schema Facet =====
+
The Java Interface declaration for such a type is available at:
  
Even is still under standardization (seems stalled) IETF is promoting a de-facto standard for JSON http://json-schema.org/.
+
https://code-repo.d4science.org/gCubeSystem/information-system-model/src/branch/master/src/main/java/org/gcube/informationsystem/model/reference/properties/Encrypted.java
https://tools.ietf.org/html/draft-zyp-json-schema-04
+
https://tools.ietf.org/html/draft-fge-json-schema-validation-00
+
https://tools.ietf.org/html/draft-luff-json-hyper-schema-00
+
  
{|class="wikitable"
+
=== Entity ===
|+ JSON Schema Facet <code>extends</code> [[#Schema_Facet|Schema Facet]]
+
|-
+
| colspan=4 | This facet captures information on a JSON schema associated with a resource.
+
|-
+
! colspan=4 | Properties
+
|-
+
! Name
+
! Type
+
! Description
+
! Attributes
+
|-
+
| content
+
| Embedded
+
| JSON schema definition
+
| <code>Mandatory=true</code> <br/> <code>NotNull=true</code>
+
|-
+
! colspan=4 | Known Usage
+
|-
+
| '''[[#Schema|Schema]]''' [[#isIdentifiedBy|isIdentifiedBy]] '''0..n''' [[#JSON_Schema_Facet|JSON Schema Facet]]
+
|}
+
  
===== XSD Schema Facet =====
 
  
 
{|class="wikitable"
 
{|class="wikitable"
|+ XSD Schema Facet <code>extends</code> [[#Schema_Facet|Schema Facet]]
+
|+ <code>Abstract</code> Entity
 
|-
 
|-
| colspan=4 | This facet captures information on any XML Schema Definition (XSD) associated with the resource.  
+
| colspan=5 | '''Goal:''' This is the base type for any entity.
 
|-
 
|-
! colspan=4 | Properties
+
! colspan=5 | Properties
 
|-
 
|-
 
! Name
 
! Name
 
! Type
 
! Type
! Description
 
 
! Attributes
 
! Attributes
 +
! colspan=2 | Description
 
|-
 
|-
| content
+
| header
| String
+
| [[#Header | Header]]
| XSD Schema Definition
+
| <code>Mandatory=true</code> <br/><code>NotNull=true</code> <br/><code>ReadOnly=true</code>
| <code>Mandatory=true</code> <br/> <code>NotNull=true</code>
+
| colspan=2 | A distinguishing string to be used by clients to identify the access point of interest.  
|-
+
! colspan=4 | Known Usage
+
|-
+
| '''[[#Schema|Schema]]''' [[#isIdentifiedBy|isIdentifiedBy]] '''0..n''' [[#XSD_Schema_Facet|XSD Schema Facet]]
+
 
|}
 
|}
  
==== Simple Property Facet ====
+
The Java Interface declaration for such a type is available at:
  
The goal of this facet is to collect name-value property.
+
https://code-repo.d4science.org/gCubeSystem/information-system-model/src/branch/master/src/main/java/org/gcube/informationsystem/model/reference/entities/Entity.java
  
{|class="wikitable"
+
==== Resource ====
|+ Simple Property Facet <code>extends</code> [[#Facet|Facet]]
+
|-
+
| colspan=5| This facet captures information on ...
+
|-
+
! colspan=5 | Properties
+
|-
+
! Name
+
! Type
+
! Description
+
! Attributes
+
!
+
|-
+
| name
+
| String
+
| Name
+
| <code>Mandatory=true</code> <code>NotNull=true</code>
+
|
+
|-
+
| value
+
| String
+
| Value
+
| <code>Mandatory=true</code> <code>NotNull=true</code>
+
|-
+
! colspan=5 | Known Usage
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
| [[#Configuration_Template|Configuration Template]]
+
| [[#consistsOf|consistsOf]]
+
| align=center | 1..n
+
| [[#Simple_Property_Facet|Simple Property Facet]]
+
| ...
+
|-
+
| [[#Hosting_Node|Hosting Node]]
+
| [[#consistsOf|consistsOf]]
+
| align=center|0..n
+
| [[#Simple_Property_Facet|Simple Property Facet]]
+
| E.g. Environment Variables
+
|}
+
  
==== Software Facet ====
+
{| class="wikitable"
 
+
|+ <code>Abstract</code> Resource '''<code>extends</code>''' [[#Entity|Entity]]
The goal of this facet is to capture SW related features.
+
 
+
{|class="wikitable"
+
|+ Software Facet <code>extends</code> [[#Facet|Facet]]
+
 
|-
 
|-
| colspan=5| This facet captures information on ...
+
| colspan=5 | '''Scope:''' This entity is conceived to describe every "main thing" to be registered and discovered by the Information System.  
|-
+
! colspan=5 | Properties
+
|-
+
! Name
+
! Type
+
! Description
+
! Attributes
+
!
+
|-
+
| name*
+
| String
+
| The name of the software artefact being described. E.g. artifactId in maven, Service Name in gCube software, the software name for retail software Microsoft '''Office''' 2013-SP2.
+
| <code>Mandatory=true</code> <code>NotNull=true</code>
+
|
+
|-
+
| group*
+
| String
+
| The name of "group" the software artefact belongs to. E.g. groupId in Maven, ServiceClass in gCube software, company name for retail software '''Microsoft''' Office 2013-SP2.
+
| <code>Mandatory=true</code> <code>NotNull=true</code>
+
|
+
|-
+
| version*
+
| String
+
| The particular release of the software artefact. E.g. maven version, Service Version in gCube software, artifactId in maven, the software version for retail software Microsoft Office '''2013-SP2'''.
+
| <code>Mandatory=true</code> <code>NotNull=true</code>
+
|
+
|-
+
| description
+
| String
+
| A human oriented description of the software artefact being described.
+
|
+
|
+
|-
+
| qualifier
+
| String
+
| E.g. packaging or scope in maven, scope level or sharable level in gCube software, target architecture for retail software x86 or amd64.
+
|
+
|
+
|-
+
| optional
+
| Boolean
+
| E.g. used to indicate an optional dependency both in maven as far as in gCube.
+
|
+
|-
+
! colspan=5 | Known Usage
+
 
|-
 
|-
 
! Source
 
! Source
 
! Relation
 
! Relation
! Multiplicity
+
! Multiplicity  
 
! Target
 
! Target
 
! Description
 
! Description
 
|-
 
|-
| [[#E-Service|E-Service]]
+
! colspan=5 | Facets
| [[#isIdentifiedBy|isIdentifiedBy]]
+
| align=center|1..n
+
| [[#Software_Facet|Software Facet]]
+
| The software enabling the E-Service capabilities
+
 
|-
 
|-
| [[#E-Service|E-Service]]
+
| [[#Resource|Resource]]
| [[#consistsOf|consistsOf]]
+
| [[#ConsistsOf|ConsistsOf]]
| align=center|0..n
+
| [[#Software_Facet|Software Facet]]
+
| Software available in the E-Service environment that characterizes the specific E-Service instance
+
|-
+
| [[#Running_Plugin|Running Plugin]]
+
| [[#isIdentifiedBy|isIdentifiedBy]]
+
| align=center|1..1
+
| [[#Software_Facet|Software Facet]]
+
| The software enabling the Running Plugin
+
|-
+
| [[#Hosting_Node|Hosting Node]]
+
| [[#consistsOf|consistsOf]]
+
| align=center|0..n
+
| [[#Software_Facet|Software Facet]]
+
| Useful to report the hosted software that are not registered in the Resource Registry as Software Resource, e.g. Operating System
+
|-
+
| [[#Virtual_Service|Virtual Service]]
+
| [[#isIdentifiedBy|isIdentifiedBy]]
+
 
| align=center | 1..n
 
| align=center | 1..n
| [[#Software_Facet|Software Facet]]
+
| [[#Facet|Facet]]
| ...
+
| Any Resource consists of one or more Facets that describes the different aspects of the resource.
 
|-
 
|-
| [[#Software|Software]]
+
! colspan=5 | Relations
| [[#isIdentifiedBy|isIdentifiedBy]]
+
| align=center|1..n
+
| [[#Software_Facet|Software Facet]]
+
| Software coordinates which identify the Software per se.
+
 
|-
 
|-
| [[#Software|Software]]
+
| [[#Resource|Resource]]
| [[#consistsOf|consistsOf]]
+
| [[#isRelatedTo|isRelatedTo]]  
| align=center|1..n
+
| align=center | 0..n  
| [[#Software_Facet|Software Facet]]
+
| [[#Resource|Resource]]
| Apart the one connected with [[#isIdentifiedBy|isIdentifiedBy]] relation (gCube coordinates) the others identify the sw in other way e.g. (Maven coordinates)
+
| Any Resource can be related to any other resource.
|-
+
| [[#Plugin|Plugin]]
+
| [[#isIdentifiedBy|isIdentifiedBy]]
+
| align=center|1..n
+
| [[#Software_Facet|Software Facet]]
+
| Software coordinates which identify the Plugin per se.
+
 
|}
 
|}
  
==== State Facet ====
+
The Java Interface declaration for such a type is available at:
  
The goal of this facet is to ...
+
https://code-repo.d4science.org/gCubeSystem/information-system-model/src/branch/master/src/main/java/org/gcube/informationsystem/model/reference/entities/Resource.java
  
{|class="wikitable"
+
==== Facet ====
|+ <code>Abstract</code> State Facet <code>extends</code> [[#Facet|Facet]]
+
|-
+
| colspan=5| This facet captures information on ...
+
|-
+
! colspan=5 | Properties
+
|-
+
! Name
+
! Type
+
! Description
+
! Attributes
+
!
+
|-
+
| value
+
| String
+
| The value of the state.
+
| <code>Mandatory=true</code> <code>NotNull=true</code>
+
|-
+
! colspan=5 | Known Usage
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
| [[#Software|Software]]
+
| [[#consistsOf|consistsOf]]
+
| align=center|1..n
+
| [[#State_Facet|State Facet]]
+
| E.g. Deprecated, Active, Obsolete
+
|}
+
  
===== Container State Facet =====
+
Early ideas and thinking on facets were documented at [[Resource_Model_(2nd_generation)#Facets | 2nd Generation Resource Model: Facets]]
  
{|class="wikitable"
+
Facets are collections of attributes conceived to capture a certain feature/aspect of the [[#Resource | Resource]] they are associated with.  
|+ Container State Facet <code>extends</code> [[#Facet|Facet]]
+
Every facet can define zero or more [[#Property|properties]]. Besides the per-facet envisaged properties, clients can add new ones.
|-
+
| colspan=5| This facet captures information on ...
+
|-
+
! colspan=5 | Properties
+
|-
+
! Name
+
! Type
+
! Description
+
! Attributes
+
!
+
|-
+
| value
+
| String
+
| The value of the state
+
| <code>Mandatory=true</code> <code>NotNull=true</code> <code>Regex=(started<nowiki>|</nowiki>ready<nowiki>|</nowiki>certified<nowiki>|</nowiki>down<nowiki>|</nowiki>failed)</code>
+
|-
+
! colspan=5 | Known Usage
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
| [[#Hosting_Node|Hosting Node]]
+
| [[#consistsOf|consistsOf]]
+
| align=center|1..1
+
| [[#Container_State_Facet|Container State Facet]]
+
| I.e. started, ready, certified, down, failed
+
|}
+
 
+
===== Service State Facet =====
+
  
 
{|class="wikitable"
 
{|class="wikitable"
|+ Service State Facet <code>extends</code> [[#Facet|Facet]]
+
|+ <code>Abstract</code> Facet '''<code>extends</code>''' [[#Entity|Entity]]
 
|-
 
|-
| colspan=5| This facet captures information on ...
+
| colspan=5 | '''Goal:''' This is the base type for any Facet.
|-
+
! colspan=5 | Properties
+
|-
+
! Name
+
! Type
+
! Description
+
! Attributes
+
!
+
|-
+
| value
+
| String
+
| The value of the state
+
| <code>Mandatory=true</code> <code>NotNull=true</code> <code>Regex=(STARTED<nowiki>|</nowiki>ready<nowiki>|</nowiki>down<nowiki>|</nowiki>failed)</code>
+
 
|-
 
|-
 
! colspan=5 | Known Usage
 
! colspan=5 | Known Usage
Line 1,082: Line 397:
 
! Description
 
! Description
 
|-
 
|-
| [[#E-Service|E-Service]]
+
| [[#Resource|Resource]]
| [[#consistsOf|consistsOf]]
+
| [[#ConsistsOf|ConsistsOf]]
| align=center|1..1
+
| align=center | 1..n
| [[#Service_State_Facet|Service State Facet]]
+
| [[#Facet|Facet]]
| I.e. STARTED, ready, down, failed
+
| Any Resource consist of one or more Facets which describes the different aspects of the resource.
 
|}
 
|}
  
==== Subject Facet ====
 
  
The goal of this facet is to ...
+
The Java Interface declaration for such a type is available at:
  
{|class="wikitable"
+
https://code-repo.d4science.org/gCubeSystem/information-system-model/src/branch/master/src/main/java/org/gcube/informationsystem/model/reference/entities/Facet.java
|+ Subject Facet <code>extends</code> [[#Facet|Facet]]
+
|-
+
| colspan=5| This facet captures information on ...
+
|-
+
! colspan=5 | Properties
+
|-
+
! Name
+
! Type
+
! Description
+
! Attributes
+
!
+
|-
+
| value
+
| String
+
| The value of the state. Must be compliant with schema.
+
| <code>Mandatory=true</code> <code>NotNull=true</code>
+
|
+
|-
+
| schema
+
| URI
+
| The URI of the schema. It is only an informative field. It is not used for validation from IS part.
+
| <code>Mandatory=true</code> <code>NotNull=true</code>
+
|-
+
! colspan=5 | Known Usage
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
| [[#Dataset|Dataset]]
+
| [[#consistsOf|consistsOf]]
+
| align=center | 0..n
+
| [[#Subject_Facet|Subject Facet]]
+
| ...
+
|-
+
| [[#Schema|Schema]]
+
| [[#consistsOf|consistsOf]]
+
| align=center | 0..n
+
| [[#Subject_Facet|Subject Facet]]
+
| ...
+
|}
+
  
== Relations ==
+
=== Relation ===
  
 
Every relation has:
 
Every relation has:
 
* An [[#Header | Header]]
 
* An [[#Header | Header]]
* A [[#Relation_Property|Relation Property]]
+
* A [[#PropagationConstraint|PropagationConstraint]]
 
* Zero or More [[#Property|properties]] (not necessarily predefined, similarly to [[#Facets|Facets]]).
 
* Zero or More [[#Property|properties]] (not necessarily predefined, similarly to [[#Facets|Facets]]).
  
=== Relation Property ===
+
The Java Interface declaration for such a type is available at:
  
{|class="wikitable"
+
https://code-repo.d4science.org/gCubeSystem/information-system-model/src/branch/master/src/main/java/org/gcube/informationsystem/model/reference/relations/Relation.java
! Name
+
! Type
+
! Description
+
|-
+
| referentialIntegrity
+
| Enum
+
| I.e. onDeleteCascadeWhenOrphan, onDeleteCascade, onDeleteKeep. The meaning is related to the relation direction.
+
|-
+
| accessPolicy
+
| Embedded (i.e. AccessPolicy)
+
| A policy is characterized by a name, a description, and the period ([start], [end]) when the policies apply
+
|-
+
| expiryTime
+
| Long
+
| The expiry date can be used to model the time until the relationship is valid, Expiry time in milliseconds. Represent the difference, measured in milliseconds, between the creation time and midnight, January 1, 1970 UTC
+
|}
+
  
=== isRelatedTo ===
+
==== IsRelatedTo ====
  
 
{|class="wikitable"
 
{|class="wikitable"
|+ isRelatedTo
+
|+ IsRelatedTo <code>''extends''</code> Relation
 
|-
 
|-
 
! Source
 
! Source
Line 1,177: Line 432:
 
|-
 
|-
 
| [[#Resources|Resource]]
 
| [[#Resources|Resource]]
| [[#isRelatedTo|isRelatedTo]]
+
| [[#IsRelatedTo|IsRelatedTo]]
 
| align=center | 0..n
 
| align=center | 0..n
 
| [[#Resources|Resource]]
 
| [[#Resources|Resource]]
|  
+
| A relation linking any two [[#Resources|Resources]].
 
|}
 
|}
  
==== belongsTo ====
+
The Java Interface declaration for such a type is available at:
  
{|class="wikitable"
+
https://code-repo.d4science.org/gCubeSystem/information-system-model/src/branch/master/src/main/java/org/gcube/informationsystem/model/reference/relations/IsRelatedTo.java
|+ belongsTo <code>extends</code> [[#isRelatedTo|isRelatedTo]]
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
| [[#Person|Person]]
+
| [[#belongsTo|belongsTo]]
+
| align=center | 0..n
+
| [[#Legal_Body|Legal Body]]
+
| ...
+
|}
+
  
==== callsFor ====
+
==== ConsistsOf ====
  
 
{|class="wikitable"
 
{|class="wikitable"
|+ callsFor <code>extends</code> [[#isRelatedTo|isRelatedTo]]
+
|+ ConsistsOf  <code>''extends''</code> Relation
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
| [[#Service|Service]]
+
| [[#callsFor|callsFor]]
+
| align=center | 0..n
+
| [[#Service|Service]]
+
|
+
|}
+
 
+
==== demands ====
+
 
+
{|class="wikitable"
+
|+ demands <code>extends</code> [[#isRelatedTo|isRelatedTo]]
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
| [[#Virtual_Service|Virtual Service]]
+
| [[#demands|demands]]
+
| align=center | 0..n
+
| [[#Software|Software]]
+
|
+
|}
+
 
+
==== dependsOn ====
+
 
+
{|class="wikitable"
+
|+ dependsOn <code>extends</code> [[#isRelatedTo|isRelatedTo]]
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
| [[#Software|Software]]
+
| [[#dependsOn|dependsOn]]
+
| align=center | 0..n
+
| [[#Software|Software]]
+
|
+
|}
+
 
+
==== discovers ====
+
 
+
{|class="wikitable"
+
|+ discovers <code>extends</code> [[#isRelatedTo|isRelatedTo]]
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
| [[#E-Service|E-Service]]
+
| [[#discovers|discovers]]
+
| align=center | 0..n
+
| [[#E-Service|E-Service]]
+
|
+
|}
+
 
+
==== hosts ====
+
 
+
{|class="wikitable"
+
|+ hosts <code>extends</code> [[#isRelatedTo|isRelatedTo]]
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
| [[#Hosting Node|Hosting Node]]
+
| [[#hosts|hosts]]
+
| align=center | 0..n
+
| [[#E-Service|E-Service]]
+
|
+
|}
+
 
+
==== involves ====
+
 
+
{|class="wikitable"
+
|+ involves <code>extends</code> [[#isRelatedTo|isRelatedTo]]
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
| [[#Dataset|Dataset]]
+
| [[#involves|involves]]
+
| align=center | 0..n
+
| [[#Actor|Actor]]
+
|
+
|}
+
 
+
==== isActivatedBy ====
+
 
+
{|class="wikitable"
+
|+ isActivatedBy <code>extends</code> [[#isRelatedTo|isRelatedTo]]
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
| [[#Running_Plugin|Running Plugin]]
+
| [[#isActivatedBy|isActivatedBy]]
+
| align=center | 1..1
+
| [[#E-Service|E-Service]]
+
|
+
|}
+
 
+
==== isCompliantWith ====
+
 
+
{|class="wikitable"
+
|+ isCompliantWith <code>extends</code> [[#isRelatedTo|isRelatedTo]]
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
| [[#Dataset|Dataset]]
+
| [[#isCompliantWith|isCompliantWith]]
+
| align=center | 0..n
+
| [[#Schema|Schema]]
+
|
+
|}
+
 
+
==== isConfiguredBy ====
+
 
+
{|class="wikitable"
+
|+ isConfiguredBy <code>extends</code> [[#isRelatedTo|isRelatedTo]]
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
| [[#Software|Software]]
+
| [[#isConfiguredBy|isConfiguredBy]]
+
| align=center | 0..n
+
| [[#Configuration_Template|Configuration Template]]
+
|
+
|}
+
 
+
==== isCorrelatedTo ====
+
 
+
{|class="wikitable"
+
|+ isCorrelatedTo <code>extends</code> [[#isRelatedTo|isRelatedTo]]
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
| [[#Dataset|Dataset]]
+
| [[#isCorrelatedTo|isCorrelatedTo]]
+
| align=center | 0..n
+
| [[#Dataset|Dataset]]
+
|
+
|}
+
 
+
===== isPartOf =====
+
 
+
{|class="wikitable"
+
|+ isPartOf <code>extends</code> [[#isCorrelatedTo|isCorrelatedTo]]
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
| [[#Concrete_Dataset|Concrete Dataset]]
+
| [[#isPartOf|isPartOf]]
+
| align=center | 0..n
+
| [[#Dataset|Dataset]]
+
|
+
|}
+
 
+
==== isCustomizedBy ====
+
 
+
{|class="wikitable"
+
|+ isCustomizedBy <code>extends</code> [[#isRelatedTo|isRelatedTo]]
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
| [[#Service|Service]]
+
| [[#isCustomizedBy|isCustomizedBy]]
+
| align=center | 0..n
+
| [[#Configuration|Configuration]]
+
|
+
|}
+
 
+
==== isDerivationOf ====
+
 
+
{|class="wikitable"
+
|+ isDerivationOf <code>extends</code> [[#isRelatedTo|isRelatedTo]]
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
| [[#Configuration|Configuration]]
+
| [[#isDerivationOf|isDerivationOf]]
+
| align=center | 1..1
+
| [[#Configuration_Template|Configuration Template]]
+
|
+
|}
+
 
+
==== isManagedBy ====
+
 
+
{|class="wikitable"
+
|+ isManagedBy <code>extends</code> [[#isRelatedTo|isRelatedTo]]
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
| [[#Hosting_Node|Hosting Node]]
+
| [[#isManagedBy|isManagedBy]]
+
| align=center | 0..n
+
| [[#Site|Site]]
+
|
+
|}
+
 
+
==== isOwnedBy ====
+
 
+
{|class="wikitable"
+
|+ isOwnedBy <code>extends</code> [[#isRelatedTo|isRelatedTo]]
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
| [[#Site|Site]]
+
| [[#isOwnedBy|isOwnedBy]]
+
| align=center | 0..n
+
| [[#Actor|Actor]]
+
|
+
|}
+
 
+
==== isPluginOf ====
+
 
+
{|class="wikitable"
+
|+ isPluginOf <code>extends</code> [[#isRelatedTo|isRelatedTo]]
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
| [[#Plugin|Plugin]]
+
| [[#isPluginOf|isPluginOf]]
+
| align=center | 1..n
+
| [[#Software|Software]]
+
|
+
|}
+
 
+
==== isPoweredBy ====
+
 
+
{|class="wikitable"
+
|+ isPoweredBy <code>extends</code> [[#isRelatedTo|isRelatedTo]]
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
| [[#Hosting Node|Hosting Node]]
+
| [[#isPoweredBy|isPoweredBy]]
+
| align=center | 0..n
+
| [[#Software|Software]]
+
|
+
|}
+
 
+
==== manages ====
+
 
+
{|class="wikitable"
+
|+ manages <code>extends</code> [[#isRelatedTo|isRelatedTo]]
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
| [[#Service|Service]]
+
| [[#manages|manages]]
+
| align=center | 0..n
+
| [[#Dataset|Dataset]]
+
|
+
|}
+
 
+
==== requires ====
+
 
+
{|class="wikitable"
+
|+ requires <code>extends</code> [[#isRelatedTo|isRelatedTo]]
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
| [[#Software|Software]]
+
| [[#requires|requires]]
+
| align=center | 0..n
+
| [[#Service|Service]]
+
|
+
|}
+
 
+
==== runs ====
+
 
+
{|class="wikitable"
+
|+ runs <code>extends</code> [[#isRelatedTo|isRelatedTo]]
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
| [[#E-Service|E-Service]]
+
| [[#runs|runs]]
+
| align=center | 0..n
+
| [[#Software|Software]]
+
|
+
|}
+
 
+
==== runsPlugin ====
+
 
+
{|class="wikitable"
+
|+ runsPlugin <code>extends</code> [[#runs|runs]]
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
| [[#Running_Plugin|Running Plugin]]
+
| [[#runsPlugin|runsPlugin]]
+
| align=center | 1..1
+
| [[#Plugin|Plugin]]
+
|
+
|}
+
 
+
==== uses ====
+
 
+
{|class="wikitable"
+
|+ uses <code>extends</code> [[#isRelatedTo|isRelatedTo]]
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
| [[#E-Service|E-Service]]
+
| [[#uses|uses]]
+
| align=center | 0..n
+
| [[#E-Service|E-Service]]
+
|
+
|}
+
 
+
=== consistsOf ===
+
 
+
{|class="wikitable"
+
|+ isIdentifiedBy
+
 
|-
 
|-
 
! Source
 
! Source
Line 1,609: Line 454:
 
|-
 
|-
 
| [[#Resources|Resource]]
 
| [[#Resources|Resource]]
| [[#consistsOf|consistsOf]]
+
| [[#ConsistsOf|ConsistsOf]]
 
| align=center | 1..n
 
| align=center | 1..n
 
| [[#Facet|Facet]]
 
| [[#Facet|Facet]]
|  
+
| A relation connecting each [[#Resource|Resource]] with one of the [[#Facet|Facet]] characterizing it.
 
|}
 
|}
  
==== isIdentifiedBy ====
 
  
{|class="wikitable"
+
The Java Interface declaration for such a type is available at:
|+ isIdentifiedBy <code>extends</code> [[#consistsOf|consistsOf]]
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
! colspan=5 | Definition
+
|-
+
| [[#Resources|Resource]]
+
| [[#isIdentifiedBy|isIdentifiedBy]]
+
| align=center | 1..n
+
| [[#Facet|Facet]]
+
|
+
|-
+
! colspan=5 | Known Usage
+
|-
+
| [[#Actor|Actor]]
+
| [[#isIdentifiedBy|isIdentifiedBy]]
+
| align=center | 1..n
+
| [[#Contact_Facet|Contact Facet]]
+
|
+
|-
+
| [[#Legal_Body|Legal Body]]
+
| [[#isIdentifiedBy|isIdentifiedBy]]
+
| align=center | 1..n
+
| [[#Contact_Facet|Contact Facet]]
+
|
+
|-
+
| [[#Person|Person]]
+
| [[#isIdentifiedBy|isIdentifiedBy]]
+
| align=center | 1..n
+
| [[#Contact_Facet|Contact Facet]]
+
|
+
|-
+
| [[#Configuration_Template|Configuration Template]]
+
| [[#isIdentifiedBy|isIdentifiedBy]]
+
| align=center | 1..n
+
| [[#Identifier_Facet|Identifier Facet]]
+
|
+
|-
+
| [[#Configuration|Configuration]]
+
| [[#isIdentifiedBy|isIdentifiedBy]]
+
| align=center | 1..n
+
| [[#Identifier_Facet|Identifier Facet]]
+
|
+
|-
+
| [[#Dataset|Dataset]]
+
| [[#isIdentifiedBy|isIdentifiedBy]]
+
| align=center | 1..n
+
| [[#Identifier_Facet|Identifier Facet]]
+
|
+
|-
+
| [[#Concrete_Dataset|Concrete Dataset]]
+
| [[#isIdentifiedBy|isIdentifiedBy]]
+
| align=center | 1..n
+
| [[#Identifier_Facet|Identifier Facet]]
+
|
+
|-
+
| [[#Service|Service]]
+
| [[#isIdentifiedBy|isIdentifiedBy]]
+
| align=center | 1..n
+
| [[#Facet|Facet]]
+
|
+
|-
+
| [[#Virtual_Service|Virtual Service]]
+
| [[#isIdentifiedBy|isIdentifiedBy]]
+
| align=center | 1..n
+
| [[#Software_Facet|Software Facet]]
+
| ...
+
|-
+
| [[#E-Service|E-Service]]
+
| [[#isIdentifiedBy|isIdentifiedBy]]
+
| align=center|1..1
+
| [[#Software_Facet|Software Facet]]
+
| ...
+
|-
+
| [[#Schema|Schema]]
+
| [[#isIdentifiedBy|isIdentifiedBy]]
+
| align=center | 1..n
+
| [[#Identifier_Facet|Identifier Facet]]
+
| ...
+
|-
+
| [[#Site|Site]]
+
| [[#isIdentifiedBy|isIdentifiedBy]]
+
| align=center | 1..n
+
| [[#Identifier_Facet|Identifier Facet]]
+
| ...
+
|-
+
| [[#Software|Software]]
+
| [[#isIdentifiedBy|isIdentifiedBy]]
+
| align=center|1..n
+
| [[#Software_Facet|Software Facet]]
+
| Software coordinates which identify the Software per se.
+
|-
+
| [[#Plugin|Plugin]]
+
| [[#isIdentifiedBy|isIdentifiedBy]]
+
| align=center|1..n
+
| [[#Software_Facet|Software Facet]]
+
| Software coordinates which identify the Plugin per se.
+
|}
+
  
==== hasContact ====
+
https://code-repo.d4science.org/gCubeSystem/information-system-model/src/branch/master/src/main/java/org/gcube/informationsystem/model/reference/relations/ConsistsOf.java
  
{| class="wikitable"
+
=== Internal Entity and Relation ===
|+ <code>Abstract</code> hasContact <code>extends</code> [[#consistsOf|consistsOf]]
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
! colspan=5 | Definition
+
|-
+
| [[#Resources|Resource]]
+
| [[#hasContact|hasContact]]
+
| align=center|0..n
+
| [[#Contact_Facet|Contact Facet]]
+
|
+
|-
+
! colspan=5 | Known Usage
+
|-
+
| [[#Dataset|Dataset]]
+
| [[#hasContact|hasContact]]
+
| align=center|1..n
+
| [[#Contact_Facet|Contact Facet]]
+
| ...
+
|}
+
  
 +
For internal use only are defined the following entity and relation:
  
===== hasContributor =====
+
* [[#Context|Context]]
 +
* [[#IsParentOf|IsParentOf]]
  
{| class="wikitable"
+
==== Context ====
|+ hasContributor <code>extends</code> [[#hasContact|hasContact]]
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
! colspan=5 | Definition
+
|-
+
| [[#Resources|Resource]]
+
| [[#hasContributor|hasContributor]]
+
| align=center|0..n
+
| [[#Contact_Facet|Contact Facet]]
+
|
+
|-
+
! colspan=5 | Known Usage
+
|-
+
| [[#Dataset|Dataset]]
+
| [[#hasContributor|hasContributor]]
+
| align=center|0..n
+
| [[#Contact_Facet|Contact Facet]]
+
| Is he the contributor
+
|}
+
  
===== hasCreator =====
+
Model a Context (aka scope) in the same Application Domain.
 
+
{| class="wikitable"
+
|+ hasCreator <code>extends</code> [[#hasContact|hasContact]]
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
! colspan=5 | Definition
+
|-
+
| [[#Resources|Resource]]
+
| [[#hasCreator|hasCreator]]
+
| align=center|0..n
+
| [[#Contact_Facet|Contact Facet]]
+
|
+
|-
+
! colspan=5 | Known Usage
+
|-
+
| [[#Dataset|Dataset]]
+
| [[#hasCreator|hasCreator]]
+
| align=center|0..n
+
| [[#Contact_Facet|Contact Facet]]
+
| Is he the creator
+
|}
+
 
+
===== hasCurator =====
+
 
+
{| class="wikitable"
+
|+ hasCurator <code>extends</code> [[#hasContact|hasContact]]
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
! colspan=5 | Definition
+
|-
+
| [[#Resources|Resource]]
+
| [[#hasCurator|hasCurator]]
+
| align=center|0..n
+
| [[#Contact_Facet|Contact Facet]]
+
|
+
|-
+
! colspan=5 | Known Usage
+
|-
+
| [[#Dataset|Dataset]]
+
| [[#hasCurator|hasCurator]]
+
| align=center|0..n
+
| [[#Contact_Facet|Contact Facet]]
+
| Is he the curator
+
|}
+
 
+
===== hasDeveloper =====
+
 
+
{| class="wikitable"
+
|+ hasDeveloper <code>extends</code> [[#hasContact|hasContact]]
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
! colspan=5 | Definition
+
|-
+
| [[#Resources|Resource]]
+
| [[#hasDeveloper|hasDeveloper]]
+
| align=center|0..n
+
| [[#Contact_Facet|Contact Facet]]
+
|
+
|-
+
! colspan=5 | Known Usage
+
|-
+
|}
+
 
+
===== hasMaintainer =====
+
 
+
{| class="wikitable"
+
|+ hasMaintainer <code>extends</code> [[#hasContact|hasContact]]
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
! colspan=5 | Definition
+
|-
+
| [[#Resources|Resource]]
+
| [[#hasMaintainer|hasMaintainer]]
+
| align=center|0..n
+
| [[#Contact_Facet|Contact Facet]]
+
|
+
|-
+
! colspan=5 | Known Usage
+
|-
+
| [[#Dataset|Dataset]]
+
| [[#hasMaintainer|hasMaintainer]]
+
| align=center|0..n
+
| [[#Contact_Facet|Contact Facet]]
+
| Is he the maintainer
+
|}
+
 
+
===== hasManager =====
+
 
+
{| class="wikitable"
+
|+ hasManager <code>extends</code> [[#hasContact|hasContact]]
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
! colspan=5 | Definition
+
|-
+
| [[#Resources|Resource]]
+
| [[#hasManager|hasManager]]
+
| align=center|0..n
+
| [[#Contact_Facet|Contact Facet]]
+
|
+
|-
+
! colspan=5 | Known Usage
+
|-
+
|}
+
 
+
===== hasOwner =====
+
 
+
{| class="wikitable"
+
|+ hasOwner <code>extends</code> [[#hasContact|hasContact]]
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
! colspan=5 | Definition
+
|-
+
| [[#Resources|Resource]]
+
| [[#hasOwner|hasOwner]]
+
| align=center|0..n
+
| [[#Contact_Facet|Contact Facet]]
+
|
+
|-
+
! colspan=5 | Known Usage
+
|-
+
| [[#Dataset|Dataset]]
+
| [[#hasOwner|hasOwner]]
+
| align=center|0..n
+
| [[#Contact_Facet|Contact Facet]]
+
| Is he the owner
+
|}
+
 
+
==== hasCoverage ====
+
  
 
{|class="wikitable"
 
{|class="wikitable"
|+ <code>Abstract</code> hasCoverage <code>extends</code> [[#consistsOf|consistsOf]]
+
|+ Context
 
|-
 
|-
! Source
+
| colspan=5 | '''Goal:''' Models a Context (aka scope).
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
 
|-
 
|-
! colspan=5 | Definition
+
! colspan=5 | Properties
 
|-
 
|-
| [[#Resources|Resources]]
+
! Name
| [[#hasCoverage|hasCoverage]]
+
! Type
| align=center | 0..n
+
! Attributes
| [[#Coverage_Facet|Coverage Facet]]
+
! colspan=2 | Description
| ...
+
 
|-
 
|-
! colspan=5 | Known Usage
+
| name
|-
+
| String
| [[#Dataset|Dataset]]
+
| <code>Mandatory=true</code> <br/> <code>NotNull=true</code>
| [[#hasCoverage|hasCoverage]]
+
| colspan=2 | The name of the context. Two [[#Context|Context]] with the same name can exist but they cannot have the same parent. In other words, a [[#Context|Context]] cannot have two children with the same name.
| align=center | 1..n
+
| [[#Coverage_Facet|Coverage Facet]]
+
| ...
+
|}
+
 
+
===== hasSpatialCoverage =====
+
 
+
{|class="wikitable"
+
|+ hasSpatialCoverage  <code>extends</code> [[#hasCoverage|hasCoverage]]
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
! colspan=5 | Definition
+
|-
+
| [[#Resources|Resources]]
+
| [[#hasSpatialCoverage|hasSpatialCoverage]]
+
| align=center | 0..n
+
| [[#Coverage_Facet|Coverage Facet]]
+
| ...
+
 
|-
 
|-
 
! colspan=5 | Known Usage
 
! colspan=5 | Known Usage
|-
 
| [[#Dataset|Dataset]]
 
| [[#hasSpatialCoverage|hasSpatialCoverage]]
 
| align=center | 0..n
 
| [[#Coverage_Facet|Coverage Facet]]
 
| ...
 
|}
 
 
===== hasTemporalCoverage =====
 
 
{|class="wikitable"
 
|+ hasTemporalCoverage  <code>extends</code> [[#hasCoverage|hasCoverage]]
 
 
|-
 
|-
 
! Source
 
! Source
Line 2,003: Line 501:
 
! Description
 
! Description
 
|-
 
|-
! colspan=5 | Definition
+
| [[#Context|Context]]
|-
+
| [[#IsParentOf|IsParentOf]]
| [[#Resources|Resources]]
+
| [[#hasTemporalCoverage|hasTemporalCoverage]]
+
 
| align=center | 0..n
 
| align=center | 0..n
| [[#Coverage_Facet|Coverage Facet]]
+
| [[#Context|Context]]
| ...
+
|-
+
! colspan=5 | Known Usage
+
|-
+
| [[#Dataset|Dataset]]
+
| [[#hasTemporalCoverage|hasTemporalCoverage]]
+
| align=center | 0..n
+
| [[#Coverage_Facet|Coverage Facet]]
+
 
| ...
 
| ...
 
|}
 
|}
  
==== hasMemory ====
+
==== IsParentOf ====
  
{|class="wikitable"
+
This relation has no propagation constraint.
|+ <code>Abstract</code> hasMemory <code>extends</code> [[#consistsOf|consistsOf]]
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
! colspan=5 | Definition
+
|-
+
| [[#Resources|Resources]]
+
| [[#hasMemory|hasMemory]]
+
| align=center | 0..n
+
| [[#Memory_Facet|Memory Facet]]
+
| ...
+
|}
+
 
+
===== hasPersistentMemory =====
+
  
 
{|class="wikitable"
 
{|class="wikitable"
|+ hasPersistentMemory <code>extends</code> [[#hasMemory|hasMemory]]
 
 
|-
 
|-
 
! Source
 
! Source
Line 2,051: Line 520:
 
! Description
 
! Description
 
|-
 
|-
! colspan=5 | Definition
+
| [[#Context|Context]]
|-
+
| [[#IsParentOf|IsParentOf]]
| [[#Resources|Resources]]
+
| [[#hasPersistentMemory|hasPersistentMemory]]
+
 
| align=center | 0..n
 
| align=center | 0..n
| [[#Memory_Facet|Memory Facet]]
+
| [[#Context|Context]]
 
| ...
 
| ...
|-
 
! colspan=5 | Known Usage
 
|-
 
| [[#Hosting_Node|Hosting Node]]
 
| [[#hasPersistentMemory|hasPersistentMemory]]
 
| align=center|1..n
 
| [[#Memory_Facet|Memory Facet]]
 
| Disk Space
 
 
|}
 
|}
  
===== hasVolatileMemory =====
+
=== Best practices and guidelines ===
 
+
{|class="wikitable"
+
|+ hasVolatileMemory <code>extends</code> [[#hasMemory|hasMemory]]
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
! colspan=5 | Definition
+
|-
+
| [[#Resources|Resources]]
+
| [[#hasVolatileMemory|hasVolatileMemory]]
+
| align=center | 0..n
+
| [[#Memory_Facet|Memory Facet]]
+
| ...
+
|-
+
! colspan=5 | Known Usage
+
|-
+
| [[#Hosting_Node|Hosting Node]]
+
| [[#hasVolatileMemory|hasVolatileMemory]]
+
| align=center|1..n
+
| [[#Memory_Facet|Memory Facet]]
+
| RAM
+
|}
+
 
+
== Resources ==
+
 
+
Every Resource has:
+
* An [[#Header|Header]]
+
* One or More relation with [[#Facets|Facets]]
+
* Zero or More relation with other [[#Resources|Resources]]
+
 
+
A class can be identified as <code>Abstract</code>. This means that cannot be instantiated. uses specialization instead.
+
It is not required that an Abstract class establish an [[#isIdentifiedBy|isIdentifiedBy]] relation with a [[#Facets|Facet]].
+
 
+
=== Resource ===
+
{| class="wikitable"
+
|+ <code>Abstract</code> Resource Profile
+
|-
+
| colspan=5 | This entity is conceived to describe every "main thing" to be registered and discovered by the Information System.
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
! colspan=5 | Facets
+
|-
+
| [[#Resource|Resource]]
+
| [[#isIdentifiedBy|isIdentifiedBy]]
+
| align=center | 1..n
+
| [[#Facet|Facet]]
+
| Any Resource has at least one Facet which in some way allow to identify the Resource per se.
+
|-
+
| [[#Resource|Resource]]
+
| [[#consistsOf|consistsOf]]
+
| align=center | 0..n
+
| [[#Facet|Facet]]
+
| Any Resource consist of zero or more Facets which describes the different aspects of the facet.
+
|-
+
! colspan=5 | Resources
+
|-
+
| [[#Resource|Resource]]
+
| [[#isRelatedTo|isRelatedTo]]
+
| align=center | 0..n
+
| [[#Resource|Resource]]
+
| Any Resource can be related to any other resource.
+
|}
+
 
+
The following Resources have been identified:
+
 
+
==== Actor ====
+
 
+
{| class="wikitable"
+
|+ <code>Abstract</code> Actor
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
! colspan=5 | Facets
+
|-
+
| [[#Actor|Actor]]
+
| [[#isIdentifiedBy|isIdentifiedBy]]
+
| align=center | 1..n
+
| [[#Contact_Facet|Contact Facet]]
+
| An Actor has at least a Contact Facet which permit to identify the Actor per se.
+
|-
+
| [[#Actor|Actor]]
+
| [[#hasContact|hasContact]]
+
| align=center | 0..n
+
| [[#Contact_Facet|Contact Facet]]
+
| An Actor can have other Contact Facets which provide secondary contact information.
+
|-
+
| [[#Actor|Actor]]
+
| [[#consistsOf|consistsOf]]
+
| align=center | 0..n
+
| [[#Contact_Reference_Facet|Contact Reference Facet]]
+
|
+
|-
+
! colspan=5 | Resources
+
|-
+
| [[#Dataset|Dataset]]
+
| [[#involves|involves]]
+
| align=center | 0..n
+
| [[#Actor|Actor]]
+
|
+
|-
+
| [[#Site|Site]]
+
| [[#isOwnedBy|isOwnedBy]]
+
| align=center | 0..n
+
| [[#Actor|Actor]]
+
|
+
|}
+
 
+
===== Legal Body =====
+
 
+
{| class="wikitable"
+
|+ Legal Body <code>extends</code> [[#Actor|Actor]]
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
! colspan=5 | Facets
+
|-
+
| [[#Legal_Body|Legal Body]]
+
| [[#isIdentifiedBy|isIdentifiedBy]]
+
| align=center | 1..n
+
| [[#Contact_Facet|Contact Facet]]
+
| A Legal Body has at least a Contact Facet which permit to identify the Legal Body per se.
+
|-
+
| [[#Legal_Body|Legal Body]]
+
| [[#consistsOf|consistsOf]]
+
| align=center | 0..n
+
| [[#Contact_Reference_Facet|Contact Reference Facet]]
+
|
+
|-
+
! colspan=5 | Resources
+
|-
+
| [[#Person|Person]]
+
| [[#belongsTo|belongsTo]]
+
| align=center | 0..n
+
| [[#Legal_Body|Legal Body]]
+
| ...
+
|}
+
 
+
===== Person =====
+
 
+
{| class="wikitable"
+
|+ Person <code>extends</code> [[#Actor|Actor]]
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
! colspan=5 | Facets
+
|-
+
| [[#Person|Person]]
+
| [[#isIdentifiedBy|isIdentifiedBy]]
+
| align=center | 1..n
+
| [[#Contact_Facet|Contact Facet]]
+
| A Person has at least a Contact Facet which permit to identify the Person per se.
+
|-
+
| [[#Person|Person]]
+
| [[#consistsOf|consistsOf]]
+
| align=center | 0..n
+
| [[#Contact_Reference_Facet|Contact Reference Facet]]
+
|
+
|-
+
! colspan=5 | Resources
+
|-
+
| [[#Person|Person]]
+
| [[#belongsTo|belongsTo]]
+
| align=center | 0..n
+
| [[#Legal_Body|Legal Body]]
+
| ...
+
|}
+
 
+
==== Configuration Template ====
+
 
+
It represents a template for a configuration. It describe how a configuration has to be realized. E.g. Used to define the accounting configuration parameters template.
+
 
+
{| class="wikitable"
+
|+ Configuration Profile
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
! colspan=5 | Facets
+
|-
+
| [[#Configuration_Template|Configuration Template]]
+
| [[#isIdentifiedBy|isIdentifiedBy]]
+
| align=center | 1..n
+
| [[#Identifier_Facet|Identifier Facet]]
+
| ...
+
|-
+
| [[#Configuration_Template|Configuration Template]]
+
| [[#consistsOf|consistsOf]]
+
| align=center | 1..n
+
| [[#Simple_Property_Facet|Simple Property Facet]]
+
| ...
+
|-
+
! colspan=5 | Resources
+
|-
+
| [[#Configuration|Configuration]]
+
| [[#isDerivationOf|isDerivationOf]]
+
| align=center | 1..1
+
| [[#Configuration_Template|Configuration Template]]
+
| ...
+
|-
+
| [[#Software|Software]]
+
| [[#isConfiguredBy|isConfiguredBy]]
+
| align=center | 0..n
+
| [[#Configuration_Template|Configuration Template]]
+
| ...
+
|}
+
 
+
 
+
===== Configuration =====
+
 
+
{| class="wikitable"
+
|+ Configuration Profile <code>extends</code>
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
! colspan=5 | Facets
+
|-
+
| [[#Configuration|Configuration]]
+
| [[#isIdentifiedBy|isIdentifiedBy]]
+
| align=center | 1..n
+
| [[#Identifier_Facet|Identifier Facet]]
+
| ...
+
|-
+
! colspan=5 | Resources
+
|-
+
| [[#Configuration|Configuration]]
+
| [[#isDerivationOf|isDerivationOf]]
+
| align=center | 1..1
+
| [[#Configuration_Template|Configuration Template]]
+
| ...
+
|-
+
| [[#Service|Service]]
+
| [[#isCustomizedBy|isCustomizedBy]]
+
| align=center | 0..n
+
| [[#Configuration|Configuration]]
+
| ...
+
|}
+
 
+
==== Dataset ====
+
 
+
{| class="wikitable"
+
|+ Dataset Profile
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
! colspan=5 | Facets
+
|-
+
| [[#Dataset|Dataset]]
+
| [[#isIdentifiedBy|isIdentifiedBy]]
+
| align=center | 1..n
+
| [[#Identifier_Facet|Identifier Facet]]
+
| ...
+
|-
+
| [[#Dataset|Dataset]]
+
| [[#hasContact|hasContact]]
+
| align=center|1..n
+
| [[#Contact_Facet|Contact Facet]]
+
| ...
+
|-
+
| [[#Dataset|Dataset]]
+
| [[#hasContributor|hasContributor]]
+
| align=center|0..n
+
| [[#Contact_Facet|Contact Facet]]
+
| Is he the contributor
+
|-
+
| [[#Dataset|Dataset]]
+
| [[#hasCreator|hasCreator]]
+
| align=center|0..n
+
| [[#Contact_Facet|Contact Facet]]
+
| Is he the creator
+
|-
+
| [[#Dataset|Dataset]]
+
| [[#hasCurator|hasCurator]]
+
| align=center|0..n
+
| [[#Contact_Facet|Contact Facet]]
+
| Is he the curator
+
|-
+
| [[#Dataset|Dataset]]
+
| [[#hasMaintainer|hasMaintainer]]
+
| align=center|0..n
+
| [[#Contact_Facet|Contact Facet]]
+
| Is he the maintainer
+
|-
+
| [[#Dataset|Dataset]]
+
| [[#hasOwner|hasOwner]]
+
| align=center|0..n
+
| [[#Contact_Facet|Contact Facet]]
+
| Is he the owner
+
|-
+
| [[#Dataset|Dataset]]
+
| [[#consistsOf|consistsOf]]
+
| align=center | 0..n
+
| [[#Access_Point_Facet|Access Point Facet]]
+
| The embargoState can be modeled through the access policy defined in the consistsOf relation
+
|-
+
| [[#Dataset|Dataset]]
+
| [[#consistsOf|consistsOf]]
+
| align=center | 0..n
+
| [[#License_Facet|License Facet]]
+
| The duration of license if any can can be modeled through the expiry date defined in the consistsOf relation
+
|-
+
| [[#Dataset|Dataset]]
+
| [[#consistsOf|consistsOf]]
+
| align=center | 0..n
+
| [[#Event_Facet|Event Facet]]
+
| ...
+
|-
+
| [[#Dataset|Dataset]]
+
| [[#consistsOf|consistsOf]]
+
| align=center | 0..n
+
| [[#Provenance_Facet|Provenance Facet]]
+
| ...
+
|-
+
| [[#Dataset|Dataset]]
+
| [[#hasCoverage|hasCoverage]]
+
| align=center | 1..n
+
| [[#Coverage_Facet|Coverage Facet]]
+
| ...
+
|-
+
| [[#Dataset|Dataset]]
+
| [[#hasTemporalCoverage|hasTemporalCoverage]]
+
| align=center | 0..n
+
| [[#Coverage_Facet|Coverage Facet]]
+
| ...
+
|-
+
| [[#Dataset|Dataset]]
+
| [[#hasSpatialCoverage|hasSpatialCoverage]]
+
| align=center | 0..n
+
| [[#Coverage_Facet|Coverage Facet]]
+
| ...
+
|-
+
| [[#Dataset|Dataset]]
+
| [[#consistsOf|consistsOf]]
+
| align=center | 0..n
+
| [[#Descriptive_Metadata_Facet|Descriptive Metadata Facet]]
+
| ...
+
|-
+
| [[#Dataset|Dataset]]
+
| [[#consistsOf|consistsOf]]
+
| align=center | 0..n
+
| [[#Subject_Facet|Subject Facet]]
+
| ...
+
|-
+
! colspan=5 | Resources
+
|-
+
| [[#Dataset|Dataset]]
+
| [[#involves|involves]]
+
| align=center | 0..n
+
| [[#Actor|Actor]]
+
|
+
|-
+
| [[#Dataset|Dataset]]
+
| [[#isCorrelatedTo|isCorrelatedTo]]
+
| align=center | 0..n
+
| [[#Dataset|Dataset]]
+
| ...
+
|-
+
| [[#Dataset|Dataset]]
+
| [[#isCompliantWith|isCompliantWith]]
+
| align=center | 0..n
+
| [[#Schema|Schema]]
+
|
+
|-
+
| [[#Concrete_Dataset|Concrete Dataset]]
+
| [[#isPartOf|isPartOf]]
+
| align=center | 0..n
+
| [[#Dataset|Dataset]]
+
| ...
+
|-
+
| [[#Service|Service]]
+
| [[#manages|manages]]
+
| align=center | 0..n
+
| [[#Dataset|Dataset]]
+
| ...
+
|}
+
 
+
===== Concrete Dataset =====
+
 
+
{| class="wikitable"
+
|+ Concrete Dataset Profile <code>''extends''</code> [[#Dataset | Dataset]] Profile
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
! colspan=5 | Facets
+
|-
+
| [[#Concrete_Dataset|Concrete Dataset]]
+
| [[#isIdentifiedBy|isIdentifiedBy]]
+
| align=center | 1..n
+
| [[#Identifier_Facet|Identifier Facet]]
+
|
+
|-
+
| [[#Concrete_Dataset|Concrete Dataset]]
+
| [[#hasMaintainer|hasMaintainer]]
+
| align=center|1..n
+
| [[#Contact_Facet|Contact Facet]]
+
| Is he the maintainer
+
|-
+
| [[#Concrete_Dataset|Concrete Dataset]]
+
| [[#consistsOf|consistsOf]]
+
| align=center | 1..n
+
| [[#Access_Point_Facet|Access Point Facet]]
+
| The embargoState can be modeled through the access policy defined in the consistsOf relation
+
|-
+
! colspan=5 | Resources
+
|-
+
| [[#Concrete_Dataset|Concrete Dataset]]
+
| [[#isPartOf|isPartOf]]
+
| align=center | 0..n
+
| [[#Dataset|Dataset]]
+
| ...
+
|-
+
|}
+
 
+
==== Schema ====
+
 
+
{| class="wikitable"
+
|+ Schema Profile
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
! colspan=5 | Facets
+
|-
+
| [[#Schema|Schema]]
+
| [[#isIdentifiedBy|isIdentifiedBy]]
+
| align=center | 1..n
+
| [[#Schema_Facet|Schema Facet]]
+
|
+
|-
+
| [[#Schema|Schema]]
+
| [[#isIdentifiedBy|isIdentifiedBy]]
+
| align=center | 0..n
+
| [[#JSON_Schema_Facet|JSON Schema Facet]]
+
|
+
|-
+
| [[#Schema|Schema]]
+
| [[#isIdentifiedBy|isIdentifiedBy]]
+
| align=center | 0..n
+
| [[#XSD_Schema_Facet|XSD Schema Facet]]
+
|
+
|-
+
| [[#Schema|Schema]]
+
| [[#hasContact|hasContact]]
+
| align=center | 1..n
+
| [[#Contact_Facet|Contact Facet]]
+
|
+
|-
+
| [[#Schema|Schema]]
+
| [[#consistsOf|consistsOf]]
+
| align=center | 0..n
+
| [[#Descriptive_Metadata_Facet|Descriptive Metadata Facet]]
+
|
+
|-
+
| [[#Schema|Schema]]
+
| [[#consistsOf|consistsOf]]
+
| align=center | 0..n
+
| [[#Subject_Facet|Subject Facet]]
+
|
+
|-
+
! colspan=5 | Resources
+
|-
+
|-
+
| [[#Dataset|Dataset]]
+
| [[#isCompliantWith|isCompliantWith]]
+
| align=center | 0..n
+
| [[#Schema|Schema]]
+
|
+
|}
+
 
+
==== Service ====
+
 
+
{| class="wikitable"
+
|+ <code>Abstract</code> Service Profile
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
! colspan=5 | Facets
+
|-
+
| [[#Service|Service]]
+
| [[#isIdentifiedBy|isIdentifiedBy]]
+
| align=center | 1..n
+
| [[#Facet|Facet]]
+
|
+
|-
+
! colspan=5 | Resources
+
|-
+
| [[#Service|Service]]
+
| [[#callsFor|callsFor]]
+
| align=center | 0..n
+
| [[#Service|Service]]
+
| ...
+
|-
+
| [[#Service|Service]]
+
| [[#isCustomizedBy|isCustomizedBy]]
+
| align=center | 0..n
+
| [[#Configuration|Configuration]]
+
| ...
+
|-
+
| [[#Service|Service]]
+
| [[#manages|manages]]
+
| align=center | 0..n
+
| [[#Dataset|Dataset]]
+
| ...
+
|-
+
| [[#Software|Software]]
+
| [[#requires|requires]]
+
| align=center | 0..n
+
| [[#Service|Service]]
+
| ...
+
|}
+
 
+
===== E-Service =====
+
 
+
{| class="wikitable"
+
|+ E-Service Profile <code>''extends''</code> [[#Service|Service]] Profile
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
! colspan=5 | Facets
+
|-
+
| [[#E-Service|E-Service]]
+
| [[#isIdentifiedBy|isIdentifiedBy]]
+
| align=center|1..n
+
| [[#Software_Facet|Software Facet]]
+
| The software enabling the E-Service capabilities
+
|-
+
| [[#E-Service|E-Service]]
+
| [[#consistsOf|consistsOf]]
+
| align=center|0..n
+
| [[#Software_Facet|Software Facet]]
+
| Software available in the E-Service environment that characterizes the specific E-Service instance
+
|-
+
| [[#E-Service|E-Service]]
+
| [[#consistsOf|consistsOf]]
+
| align=center|1..n
+
| [[#Access_Point_Facet|Access Point Facet]]
+
| Identify the endpoints of the E-Service
+
|-
+
| [[#E-Service|E-Service]]
+
| [[#consistsOf|consistsOf]]
+
| align=center|1..n
+
| [[#Event_Facet|Event Facet]]
+
| E.g. ActivationTime, DeploymentTime
+
|-
+
| [[#E-Service|E-Service]]
+
| [[#consistsOf|consistsOf]]
+
| align=center|1..1
+
| [[#Service_State_Facet|Service State Facet]]
+
| I.e. STARTED, ready, down, failed
+
|-
+
| [[#E-Service|E-Service]]
+
| [[#consistsOf|consistsOf]]
+
| align=center|0..n
+
| [[#License_Facet|License Facet]]
+
| The specific terms of use for programmatic access to the service
+
|-
+
! colspan=5 | Resources
+
|-
+
| [[#E-Service|E-Service]]
+
| [[#discovers|discovers]]
+
| align=center | 0..n
+
| [[#E-Service|E-Service]]
+
| A reference to any other E-Service, the E-Service instance is discovering through query on IS.
+
|-
+
| [[#E-Service|E-Service]]
+
| [[#runs|runs]]
+
| align=center | 0..n
+
| [[#Software|Software]]
+
| ...
+
|-
+
| [[#E-Service|E-Service]]
+
| [[#uses|uses]]
+
| align=center | 0..n
+
| [[#E-Service|E-Service]]
+
| A reference to any other E-Service, the E-Service instance is invoking.
+
|-
+
| [[#Hosting_Node|Hosting Node]]
+
| [[#hosts|hosts]]
+
| align=center | 0..n
+
| [[#E-Service|E-Service]]
+
| ...
+
|-
+
| [[#Running_Plugin|Running Plugin]]
+
| [[#isActivatedBy|isActivatedBy]]
+
| align=center | 1..1
+
| [[#E-Service|E-Service]]
+
| A reference to the E-Service is running the plugin.
+
|}
+
 
+
 
+
====== Running Plugin ======
+
 
+
{| class="wikitable"
+
|+ Running Plugin Profile <code>''extends''</code> [[#E-Service|E-Service]] Profile
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
! colspan=5 | Facets
+
|-
+
| [[#Running_Plugin|Running Plugin]]
+
| [[#isIdentifiedBy|isIdentifiedBy]]
+
| align=center|1..1
+
| [[#Software_Facet|Software Facet]]
+
| The software enabling the Running Plugin
+
|-
+
! colspan=5 | Resources
+
|-
+
| [[#Running_Plugin|Running Plugin]]
+
| [[#isActivatedBy|isActivatedBy]]
+
| align=center | 1..1
+
| [[#E-Service|E-Service]]
+
| A reference to the E-Service is running the plugin.
+
|-
+
| [[#Running_Plugin|Running Plugin]]
+
| [[#runsPlugin|runsPlugin]]
+
| align=center | 0..n
+
| [[#Plugin|Plugin]]
+
| ...
+
|}
+
 
+
===== Hosting Node =====
+
 
+
{| class="wikitable"
+
|+ Hosting Node Profile <code>''extends''</code> [[#Service | Service]] Profile
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
! colspan=5 | Facets
+
|-
+
| [[#Hosting_Node|Hosting Node]]
+
| [[#isIdentifiedBy|isIdentifiedBy]]
+
| align=center | 1..n
+
| [[#Networking_Facet|Networking Facet]]
+
| ...
+
|-
+
| [[#Hosting_Node|Hosting Node]]
+
| [[#consistsOf|consistsOf]]
+
| align=center|1..n
+
| [[#CPU_Facet|CPU Facet]]
+
| CPU Information
+
|-
+
| [[#Hosting_Node|Hosting Node]]
+
| [[#hasPersistentMemory|hasPersistentMemory]]
+
| align=center|1..n
+
| [[#Memory_Facet|Memory Facet]]
+
| Disk Space
+
|-
+
| [[#Hosting_Node|Hosting Node]]
+
| [[#hasVolatileMemory|hasVolatileMemory]]
+
| align=center|1..n
+
| [[#Memory_Facet|Memory Facet]]
+
| RAM
+
|-
+
| [[#Hosting_Node|Hosting Node]]
+
| [[#consistsOf|consistsOf]]
+
| align=center|1..n
+
| [[#Event_Facet|Event Facet]]
+
| ...
+
|-
+
| [[#Hosting_Node|Hosting Node]]
+
| [[#consistsOf|consistsOf]]
+
| align=center|1..1
+
| [[#Container_State_Facet|Container State Facet]]
+
| I.e. started, ready, certified, down, failed
+
|-
+
| [[#Hosting_Node|Hosting Node]]
+
| [[#consistsOf|consistsOf]]
+
| align=center|0..n
+
| [[#Simple_Property_Facet|Simple Property Facet]]
+
| E.g. Environment Variables
+
|-
+
| [[#Hosting_Node|Hosting Node]]
+
| [[#consistsOf|consistsOf]]
+
| align=center|0..n
+
| [[#Software_Facet|Software Facet]]
+
| Useful to report the hosted software that are not registered in the Resource Registry as Software Resource, e.g. Operating System
+
|-
+
! colspan=5 | Resources
+
|-
+
| [[#Hosting_Node|Hosting Node]]
+
| [[#hosts|hosts]]
+
| align=center | 0..n
+
| [[#E-Service|E-Service]]
+
| A reference to any E-Service instance, the Hosting Node instance is hosting.
+
|-
+
| [[#Hosting_Node|Hosting Node]]
+
| [[#isManagedBy|isManagedBy]]
+
| align=center | 0..n
+
| [[#Site|Site]]
+
| ...
+
|-
+
| [[#Hosting_Node|Hosting Node]]
+
| [[#isPoweredBy|isPoweredBy]]
+
| align=center | 0..n
+
| [[#Software|Software]]
+
| ...
+
|}
+
 
+
===== Virtual Service =====
+
 
+
{| class="wikitable"
+
|+ Virtual Service Profile <code>''extends''</code> [[#Service | Service]] Profile
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
! colspan=5 | Facets
+
|-
+
| [[#Virtual_Service|Virtual Service]]
+
| [[#isIdentifiedBy|isIdentifiedBy]]
+
| align=center | 1..n
+
| [[#Software_Facet|Software Facet]]
+
| ...
+
|-
+
! colspan=5 | Resources
+
|-
+
| [[#Virtual_Service|Virtual Service]]
+
| [[#demands|demands]]
+
| align=center | 0..n
+
| [[#Software|Software Facet]]
+
| ...
+
|}
+
 
+
==== Site ====
+
 
+
{| class="wikitable"
+
|+ Site Profile
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
! colspan=5 | Facets
+
|-
+
| [[#Site|Site]]
+
| [[#isIdentifiedBy|isIdentifiedBy]]
+
| align=center | 1..n
+
| [[#Identifier_Facet|Identifier Facet]]
+
| ...
+
|-
+
| [[#Site|Site]]
+
| [[#hasContact|hasContact]]
+
| align=center | 1..n
+
| [[#Contact_Facet|Contact Facet]]
+
| ...
+
|-
+
| [[#Site|Site]]
+
| [[#hasMaintainer|hasMaintainer]]
+
| align=center | 1..n
+
| [[#Contact_Facet|Contact Facet]]
+
| ...
+
|-
+
| [[#Site|Site]]
+
| [[#hasManager|hasManager]]
+
| align=center | 1..n
+
| [[#Contact_Facet|Contact Facet]]
+
| ...
+
|-
+
| [[#Site|Site]]
+
| [[#consistsOf|consistsOf]]
+
| align=center | 1..n
+
| [[#Location_Facet|Location Facet]]
+
| ...
+
|-
+
| [[#Site|Site]]
+
| [[#consistsOf|consistsOf]]
+
| align=center|1..n
+
| [[#Networking_Facet|Networking Facet]]
+
|
+
|-
+
! colspan=5 | Resources
+
|-
+
| [[#Site|Site]]
+
| [[#isOwnedBy|isOwnedBy]]
+
| align=center | 0..n
+
| [[#Actor|Actor]]
+
|
+
|-
+
| [[#Hosting_Node|Hosting Node]]
+
| [[#isManagedBy|isManagedBy]]
+
| align=center | 0..n
+
| [[#Site|Site]]
+
| ...
+
|}
+
 
+
==== Software ====
+
 
+
{| class="wikitable"
+
|+ Software Profile
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
! colspan=5 | Facets
+
|-
+
| [[#Software|Software]]
+
| [[#isIdentifiedBy|isIdentifiedBy]]
+
| align=center|1..n
+
| [[#Software_Facet|Software Facet]]
+
| Software coordinates which identify the Software per se.
+
|-
+
| [[#Software|Software]]
+
| [[#consistsOf|consistsOf]]
+
| align=center|1..n
+
| [[#Software_Facet|Software Facet]]
+
| Apart the one connected with [[#isIdentifiedBy|isIdentifiedBy]] relation (gCube coordinates) the others identify the sw in other way e.g. (Maven coordinates)
+
|-
+
| [[#Software|Software]]
+
| [[#consistsOf|consistsOf]]
+
| align=center|1..n
+
| [[#Access_Point_Facet|Access Point Facet]]
+
| Links to maven artifact on nexus, javadoc, wiki, svn ...
+
|-
+
| [[#Software|Software]]
+
| [[#consistsOf|consistsOf]]
+
| align=center|1..n
+
| [[#License_Facet|License Facet]]
+
| ...
+
|-
+
| [[#Software|Software]]
+
| [[#consistsOf|consistsOf]]
+
| align=center|1..n
+
| [[#State_Facet|State Facet]]
+
| E.g. Deprecated, Active, Obsolete
+
|-
+
! colspan=5 | Resources
+
|-
+
| [[#Software|Software]]
+
| [[#dependsOn|dependsOn]]
+
| align=center|0..n
+
| [[#Software|Software]]
+
| ...
+
|-
+
| [[#Software|Software]]
+
| [[#isConfiguredBy|isConfiguredBy]]
+
| align=center|0..n
+
| [[#Configuration_Template|Configuration Template]]
+
| E.g. Accounting Sw uses it to discover the configuration
+
|-
+
| [[#Software|Software]]
+
| [[#requires|requires]]
+
| align=center|0..n
+
| [[#Service|Service]]
+
| E.g. A software requiring a specific database
+
|-
+
| [[#Virtual_Service|Virtual Service]]
+
| [[#demands|demands]]
+
| align=center|0..n
+
| [[#Software|Software]]
+
| ...
+
|-
+
| [[#E-Service|E-Service]]
+
| [[#runs|runs]]
+
| align=center|0..n
+
| [[#Software|Software]]
+
| ...
+
|-
+
| [[#Hosting_Node|Hosting Node]]
+
| [[#isPoweredBy|isPoweredBy]]
+
| align=center|0..n
+
| [[#Software|Software]]
+
| ...
+
|-
+
| [[#Plugin|Plugin]]
+
| [[#isPluginOf|isPluginOf]]
+
| align=center|0..n
+
| [[#Software|Software]]
+
| ...
+
|}
+
 
+
==== Plugin ====
+
 
+
{| class="wikitable"
+
|+ Plugin Profile <code>''extends''</code> [[#Software|Software]] Profile
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
! colspan=5 | Facets
+
|-
+
|-
+
| [[#Plugin|Plugin]]
+
| [[#isIdentifiedBy|isIdentifiedBy]]
+
| align=center|1..n
+
| [[#Software_Facet|Software Facet]]
+
| Software coordinates which identify the Plugin per se.
+
|-
+
! colspan=5 | Resources
+
|-
+
| [[#Plugin|Plugin]]
+
| [[#isPluginOf|isPluginOf]]
+
| align=center|1..n
+
| [[#Software|Software]]
+
| A reference to the [[#Software|Software]] this [[#Plugin|Plugin]] extends capabilities.
+
|-
+
| [[#Running_Plugin|Running Plugin]]
+
| [[#runsPlugin|runsPlugin]]
+
| align=center | 0..n
+
| [[#Plugin|Plugin]]
+
| ...
+
|}
+
 
+
== Best practices and guidelines ==
+
  
 
* On Facet instances "reuse" across Resource Profiles:
 
* On Facet instances "reuse" across Resource Profiles:
** This can be guaranteed automatically by the system, if and just in the case the system want to avoid duplication of information. It is based on a configuration policy;  
+
** This can be guaranteed automatically by the system, if and just in the case the system wants to avoid duplication of information. It is based on a configuration policy;  
 
** This MUST be done only when a change in a facet instance MUST affect a change in all Resources connected to such a Facet.
 
** This MUST be done only when a change in a facet instance MUST affect a change in all Resources connected to such a Facet.
  
== Suggested Extensions ==
 
The gCube Resource Model supports extensions at runtime meaning that new facets, relations, and resources can be defined and registered at any time by authorized clients. Those extensions must necessarily specialize an existing gCube Entity.
 
An example of those specializations is the following:
 
  
=== Functionality Related Facet ===
+
=== Maven coordinates ===
  
The goal of this facet is to capture what are the facilities supported by the Service Entity and it aims to model the service interface.
+
To use the Java library containing the classes modelling the IS Model you can declare the following dependency:
  
{|class="wikitable"
+
<source lang="xml">
|+ Functionality Related Facet <code>extends</code> [[#Facet|Facet]]
+
<dependency>
|-
+
<groupId>org.gcube.information-system</groupId>
! Name
+
<artifactId>information-system-model</artifactId>
! Type
+
<version>[5.0.0,6.0.0-SNAPSHOT)</version>
! Description
+
<dependency>
! Attributes
+
</source>
!
+
|-
+
| name
+
| String
+
| ...
+
|
+
|
+
|-
+
| description
+
| String
+
| ...
+
|
+
|
+
|-
+
| input
+
| String
+
| ...
+
|
+
|
+
|-
+
| output
+
| String
+
| ...
+
|
+
|-
+
! colspan=5 | Known Usage
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
| [[#Service|Service]]
+
| [[#consistsOf|consistsOf]]
+
| 0..n
+
| [[#Functionality_Related_Facet|Functionality Related Facet]]
+
| ...
+
|}
+
  
== Internal Entity and Relation ==
+
== gCube Model ==
  
For internal use only are defined the following entity and relation:
+
An example of instantiation of the IS model is the [[gCube Model]].
 
+
* [[#Context|Context]]
+
* [[#isParentOf|isParentOf]]
+
 
+
=== Context ===
+
 
+
Model a Context (aka scope)
+
 
+
=== isParentOf ===
+
 
+
{|class="wikitable"
+
!Source
+
!Target
+
!Description
+
|-
+
| [[#Context|Context]]
+
| [[#Context|Context]]
+
|
+
|}
+

Latest revision as of 18:15, 26 January 2023

The Information System Model (henceforth IS Model) is used by Information System Resource Registry

Disclaimer

This Model is part of research conducted in the context of a PhD. This wiki page represents just a partial view of the full rationale of the research. To have a complete overview of the rationale of the model, please refer to the PhD thesis which is publicly available at:

https://etd.adm.unipi.it/t/etd-05102019-114151/

https://openportal.isti.cnr.it/doc?id=people______::470484e51fcb9e307a418c800efc44c8


If you need to refer to such work you can cite the PhD Thesis.

BibText:

@phdthesis{frosini2019transactional,
  title={Transactional REST Information System for Federated Research Infrastructures enabling Virtual Research Environments},
  author={Frosini, Luca},
  year={2019},
  school={UNIVERSIT{\`A} DI PISA}
}

An previous paper about this work is:

BibText:

@article{frosini2018facet,
  title={A Facet-based Open and Extensible Resource Model for Research Data Infrastructures.},
  author={Frosini, Luca and Pagano, Pasquale},
  journal={Grey Journal (TGJ)},
  volume={14},
  number={2},
  year={2018}
}

IS Model

The Information System Model (henceforth IS Model) is a graph model with Entities as nodes and Relations as edges.

Is-model.png

Is-model-er.png

  • Two typologies of entities are envisaged:
    • Resources, i.e. entities representing a description of "thing" to be managed;
      • Every Resource is described by a number of Facets.
    • Facets, i.e. entities contributing to "build" a description of a Resource. Every facet, once attached to a Resource profile captures a certain aspect / characterization of the resource;
      • Every facet is characterised by a number of properties;
  • Each entity and relation
    • has an header automatically generated for the sake of identification and provenance of the specific information;
    • can be specialized
      • A number of specializations are identified below. Such specializations are managed by the gCube Core services, i.e. Core services builds upon these specializations to realize its management tasks;
      • Other specializations can be defined by clients, the system make it possible to store these additional typologies of relations and facets and to discover them.
  • Facet and Relation instances can have additional properties which are not defined in the schema (henceforth schema-mixed mode).
  • On relations:
    • Any relation has a direction, i.e. a "source" (out bound of the relation) and a "target" (in bound of the relation). Anyway, the relation can be also navigated in the opposite direction;
    • It is not permitted to define a Relation having a Facet as "source". In other words:
      • It is not permitted to define a Relation connecting a Facet with another one;
      • It is not permitted to define a Relation connecting a Facet with a Resource (as target);
    • A Facet instance can be linked (by ConsistsOf or any specialization of it) from different Resources.

We derived the term Facet directly from the dictionary definition. Merriam Webster Dictionary defines facet as “any of the definable aspects that make up a subject (as of contemplation) or an object (as of consideration)”[1]. The Free Dictionary defines a facet as “One of numerous aspects, as of a subject” [2].


Type Attributes

Any attribute defined in the type schema is characterised by:

  • Name : Property Name
  • Type : The Type of the Property (e.g. String, Integer, ...). It can be a Basic Type or a Derived Type or a Complex Type
  • Description : The description of the Property. default=null.
  • Mandatory (M): Indicate if the Property is mandatory. default=false.
  • ReadOnly (RO): The Property cannot change its value. default=false.
  • NotNull (NN): Whether the property must assume a value diverse from 'null' or not. default=false
  • Max (Max): default=null
  • Min (Min): default=null
  • Regex (Reg)): A Regular Expression to validate the property value, default=null. A good online tool for regex is avalable at https://regex101.com/

Basic Types

Type Java type Description
Boolean java.lang.Boolean or boolean Handles only the values True or False.
Integer java.lang.Integer or int or java.math.BigInteger 32-bit signed Integers.
Short java.lang.Short or short Small 16-bit signed integers.
Long java.lang.Long or long Big 64-bit signed integers.
Float java.lang.Float or float Decimal numbers.
Double java.lang.Double or double Decimal numbers with high precision.
Date java.util.Date Any date with the precision up to milliseconds.
String java.lang.String Any string as alphanumeric sequence of chars.
Byte java.lang.Byte or byte Single byte. useful to store small 8-bit signed integers.
Binary java.lang.Byte[] or byte[] Can contain any value as byte array.

Derived Types

The following are obtained using a String as real type and adding a validation regex.

Type Java type Description
Enum java.lang.Enum or enum by default it is represented using the String representation of the Enum. So that the primitive type used will be String. The enumeration is checked by setting Regexpr property. The Regular Expression is auto-generated and it will be something like ^(FIRST-ENUM-STRING_REPRESENTATION|SECOND-ENUM-STRING_REPRESENTATION|...|LAST_ENUM_STRING_REPRESENTATION)$.

Otherwise (if indicated using an annotation), it can be represented using the Integer value of the Enum. So that the primitive type used will be Integer. The enumeration is checked using Max and Min properties.

UUID java.util.UUID String representation of the UUID. The check is obtained using the regular expression ^([a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}){1}$
URL java.net.URL String representation of the URL. No check actually.
URI java.net.URI String representation of the URI. No check actually.
TypeVersion org.gcube.informationsystem.utils.TypeVersion A type representing and validating a version in the following format X.X.X Major(Integer).Minor(Integer).Revision(Integer) (e.g 1.0.0, 2.3.0, 2.0.1). The check is obtained using the regular expression ^[1-9][0-9]{0,}\.(0|([1-9][0-9]{0,}))\.(0|([1-9][0-9]{0,}))$.

Complex Types

Any property defined by composing basic types, complex types and other complex types. Any complex type can be defined by extending Property type.

Type Java type Description
Property ? extends org.gcube.informationsystem.model.reference.properties.Property This is an Object contained inside the owner Entity and has no Header. It is reachable only by navigating the owner Entity/Relation.
Property list List<? extends org.gcube.informationsystem.model.reference.properties.Property> List of Objects contained inside the owner Entity and have no Header. They are reachable only by navigating the owner Entity/Relation.
Property set Set<? org.gcube.informationsystem.model.reference.properties.Property> Set (no duplicates) of Objects contained inside the owner Entity and have no Header. They are reachable only by navigating the owner Entity/Relation.
Property map Map<String, ? extends org.gcube.informationsystem.model.reference.properties.Propertyd> Map of Objects contained inside the owner Entity and have no Header. They are reachable only by navigating the owner Entity/Relation.

Property

It does not define any field. It is just used as a base class.

The Java Interface declaration for such a type is available at:

https://code-repo.d4science.org/gCubeSystem/information-system-model/src/branch/master/src/main/java/org/gcube/informationsystem/model/reference/properties/Property.java

Header

Every Entity and Relation has an Header automatically created/updated by the System.

Header extends Property
Name Type Attributes Description
uuid UUID Mandatory=true
NotNull=true
ReadOnly=true
This UUID is be used to identify the Entity or the Relation univocally.
createdBy String Mandatory=true
NotNull=true
ReadOnly=true
The user that created the Entity or the Relation. It is initialized at creation time.
creationTime Date Mandatory=true
NotNull=true
ReadOnly=true
Creation time.
lastUpdateBy String Mandatory=true
NotNull=true
The user that made the last update to the Entity or the Relation. At creation time, it assumes the same value of creator.
lastUpdateTime Date Mandatory=true
NotNull=true
Last Update time. At creation time it assumes the same value of creationTime.


The Java Interface declaration for such a type is available at:

https://code-repo.d4science.org/gCubeSystem/information-system-model/src/branch/master/src/main/java/org/gcube/informationsystem/model/reference/properties/Header.java

PropagationConstraint

At any time entities and relations can be added or removed to/from a context or deleted. The PropagationConstraint property contained in each relation is a predefined Property type which indicates the behaviour to be held on a target entity when an event related to a context occurs in the source resource or directly to the relation.

PropagationConstraint extends Property
Name Type Attributes Description
remove Enum Regex=(cascadeWhenOrphan|cascade|keep) It indicates the behaviour to implement for the target Entity when a 'remove' action is performed on the source Resource. Remove actions are: (i) the operation of removing an instance from a context; (ii) the operation of deleting an instance (it has an impact on all contexts).
add Enum Regex=(propagate|unpropagate) It indicates the behaviour to implement for the target Entity when an 'add' action is performed on the source Resource. Add action is the operation of adding an instance to a context.


Remove values;

  • cascadeWhenOrphan: When a remove action is performed on the source Entity of the relation, or directly on the relation, then the same remove action apart on the relation is performed to the target entity if it has no other incoming relations.
  • cascade: When a remove action is performed on the source Entity of the relation, or directly on the relation, then the same remove action is performed on the relation and its target entity.
  • keep: When a remove action is performed on the source Entity of the relation, or directly on the relation, then the same remove action is performed on relation but never to the target entity.


Add values;

  • propagate: When an 'add' action is performed on the source Entity of the relation, or directly on the relation, then the same add action is performed on the relation and its target Entity.
  • unpropagate: When an 'add' action is performed on the source Entity of the relation, is performed on source relation only. Trying to perform an 'add' action on the relation has no effects.


Any Relation contains such a property. If the values are not specified at creation time the system initialize it with the following rules:


The Java Interface declaration for such a type is available at:

https://code-repo.d4science.org/gCubeSystem/information-system-model/src/branch/master/src/main/java/org/gcube/informationsystem/model/reference/properties/PropagationConstraint.java

Encrypted
Encrypted extends Property
Name Type Attributes Description
value String The encrypted value. The resource registry store safely the value. When received the value is decrypted using the key of current context and store the value safely. When the value is read, the resource-registry retrieve the value and encrypt it with the key of current context.

The Java Interface declaration for such a type is available at:

https://code-repo.d4science.org/gCubeSystem/information-system-model/src/branch/master/src/main/java/org/gcube/informationsystem/model/reference/properties/Encrypted.java

Entity

Abstract Entity
Goal: This is the base type for any entity.
Properties
Name Type Attributes Description
header Header Mandatory=true
NotNull=true
ReadOnly=true
A distinguishing string to be used by clients to identify the access point of interest.

The Java Interface declaration for such a type is available at:

https://code-repo.d4science.org/gCubeSystem/information-system-model/src/branch/master/src/main/java/org/gcube/informationsystem/model/reference/entities/Entity.java

Resource

Abstract Resource extends Entity
Scope: This entity is conceived to describe every "main thing" to be registered and discovered by the Information System.
Source Relation Multiplicity Target Description
Facets
Resource ConsistsOf 1..n Facet Any Resource consists of one or more Facets that describes the different aspects of the resource.
Relations
Resource isRelatedTo 0..n Resource Any Resource can be related to any other resource.

The Java Interface declaration for such a type is available at:

https://code-repo.d4science.org/gCubeSystem/information-system-model/src/branch/master/src/main/java/org/gcube/informationsystem/model/reference/entities/Resource.java

Facet

Early ideas and thinking on facets were documented at 2nd Generation Resource Model: Facets

Facets are collections of attributes conceived to capture a certain feature/aspect of the Resource they are associated with. Every facet can define zero or more properties. Besides the per-facet envisaged properties, clients can add new ones.

Abstract Facet extends Entity
Goal: This is the base type for any Facet.
Known Usage
Source Relation Multiplicity Target Description
Resource ConsistsOf 1..n Facet Any Resource consist of one or more Facets which describes the different aspects of the resource.


The Java Interface declaration for such a type is available at:

https://code-repo.d4science.org/gCubeSystem/information-system-model/src/branch/master/src/main/java/org/gcube/informationsystem/model/reference/entities/Facet.java

Relation

Every relation has:

The Java Interface declaration for such a type is available at:

https://code-repo.d4science.org/gCubeSystem/information-system-model/src/branch/master/src/main/java/org/gcube/informationsystem/model/reference/relations/Relation.java

IsRelatedTo

IsRelatedTo extends Relation
Source Relation Multiplicity Target Description
Resource IsRelatedTo 0..n Resource A relation linking any two Resources.

The Java Interface declaration for such a type is available at:

https://code-repo.d4science.org/gCubeSystem/information-system-model/src/branch/master/src/main/java/org/gcube/informationsystem/model/reference/relations/IsRelatedTo.java

ConsistsOf

ConsistsOf extends Relation
Source Relation Multiplicity Target Description
Resource ConsistsOf 1..n Facet A relation connecting each Resource with one of the Facet characterizing it.


The Java Interface declaration for such a type is available at:

https://code-repo.d4science.org/gCubeSystem/information-system-model/src/branch/master/src/main/java/org/gcube/informationsystem/model/reference/relations/ConsistsOf.java

Internal Entity and Relation

For internal use only are defined the following entity and relation:

Context

Model a Context (aka scope) in the same Application Domain.

Context
Goal: Models a Context (aka scope).
Properties
Name Type Attributes Description
name String Mandatory=true
NotNull=true
The name of the context. Two Context with the same name can exist but they cannot have the same parent. In other words, a Context cannot have two children with the same name.
Known Usage
Source Relation Multiplicity Target Description
Context IsParentOf 0..n Context ...

IsParentOf

This relation has no propagation constraint.

Source Relation Multiplicity Target Description
Context IsParentOf 0..n Context ...

Best practices and guidelines

  • On Facet instances "reuse" across Resource Profiles:
    • This can be guaranteed automatically by the system, if and just in the case the system wants to avoid duplication of information. It is based on a configuration policy;
    • This MUST be done only when a change in a facet instance MUST affect a change in all Resources connected to such a Facet.


Maven coordinates

To use the Java library containing the classes modelling the IS Model you can declare the following dependency:

<dependency>
	<groupId>org.gcube.information-system</groupId>
	<artifactId>information-system-model</artifactId>
	<version>[5.0.0,6.0.0-SNAPSHOT)</version>
<dependency>

gCube Model

An example of instantiation of the IS model is the gCube Model.
  1. https://www.merriam-webster.com/dictionary/facet
  2. https://www.thefreedictionary.com/facet