Difference between revisions of "Facet Based Resource Model"

From Gcube Wiki
Jump to: navigation, search
(Basic Concepts)
(Complex Types)
 
(905 intermediate revisions by 4 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]]
  
* Two typologies of '''entities''' are envisaged:
+
== Disclaimer ==
** '''[[#Resources | Resources]]''', i.e. entities representing a description of "thing" to be managed; 
+
** '''[[#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 fields / attributed;
+
* Two typologies of '''relations''' are envisaged:
+
** '''[[#RelatedTo | RelatedTo]]''', i.e. a relation linking any two [[#Resources | Resources]].
+
** '''[[#ConsistOf | ConsistOf]]''', i.e. a relation connecting each [[#Resources | Resource]] with one of the [[#Facets | Facets]] characterizing it;
+
* Entities and relations 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;   
+
** 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.
+
* On relations:
+
** Any relation has a direction, i.e. a "source" and a "target". Anyway the relation can be also navigated in the opposite direction;
+
** It is not permitted to define a Relation having a Facet as "source".
+
*** 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;
+
** A Facet instance can be linked (by [[#ConsistOf | ConsistOf]] or any specialization of it) from different Resources.
+
  
=== Header ===
+
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:
  
Every Entity and Relation has an Header automatically filled by the System. The Header has the following properties:
+
https://etd.adm.unipi.it/t/etd-05102019-114151/
  
* uuid (UUID): This uuid can be used to univocally identify the Entity or the Relation
+
https://openportal.isti.cnr.it/doc?id=people______::470484e51fcb9e307a418c800efc44c8
* creator (String): Filled at creation time. The creator is retrieved using the information related to the authorization token.
+
* creationTime (Long) : Creation time in milliseconds.
+
* lastUpdateTime (Long) : Last Update time in milliseconds.
+
  
== Facets ==
 
  
Early ideas and thinking on facets were documented at [[Resource_Model_(2nd_generation)#Facets | 2nd Generation Resource Model : Facets]]
+
If you need to refer to such work you can cite the PhD Thesis.
  
=== Facets Specification ===
+
BibText:
  
Every Facet has:
+
<pre>
* An [[#Header | Header]]
+
@phdthesis{frosini2019transactional,
* Zero or More properties
+
  title={Transactional REST Information System for Federated Research Infrastructures enabling Virtual Research Environments},
 +
  author={Frosini, Luca},
 +
  year={2019},
 +
  school={UNIVERSIT{\`A} DI PISA}
 +
}
 +
</pre>
  
Any property can be enriched with the following attributes:
+
An previous paper about this work is:
* '''Name''' : Property Name
+
* '''Type''' : The Type of the Property (e.g. String, Integer, ...).
+
* '''Description''' : The description of the property. <code>default=null</code>.
+
* '''Mandatory''' ('''M'''): Indicate if the Property is Mandatory. <code>default=false</code>.
+
* '''ReadOnly''' ('''RO'''): The property cannot change its value. <code>default=false</code>.
+
* '''NotNull''' ('''NN'''): <code>default=false</code>
+
* '''Max''' ('''Max'''): <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>
+
  
 +
BibText:
  
==== Access Point Facet ====
+
<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>
  
The goal of this facet is expected to capture information on “access points” for a resource, i.e. any endpoint to interact with the resource via a known protocol.
+
== IS Model ==
  
{|class="wikitable"
+
The [[#IS_Model|Information System Model]] (henceforth IS Model) is a graph model with Entities as nodes and Relations as edges.
! Name
+
! Type
+
! Description
+
! Attributes
+
|-
+
| entryName
+
| String
+
| An unique identifier
+
|
+
|-
+
| endpoint
+
| URI
+
| The URI which identify the endpoint of a resource
+
| <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
+
| .....
+
|
+
|-
+
| 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
+
| ....
+
|
+
|-
+
| properties
+
| String
+
| This can be an arbitrarily complex element whose "structure" is defined by the associated schema
+
|
+
|-
+
| propertiesSchema
+
| URI
+
| ....
+
|
+
|}
+
  
==== Contact Facet ====
+
[[File:Is-model.png|800px]]
 +
<br /> <br />
 +
[[File:Is-model-er.png|500px]]
  
The goal of this facet is expected to capture contact information.
+
* Two typologies of '''entities''' are envisaged:
 +
** '''[[#Resources | Resources]]''', i.e. entities representing a description of "thing" to be managed; 
 +
*** 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; 
 +
*** Every facet is characterised by a number of [[#Properties| properties]];
  
{|class="wikitable"
+
* Two typologies of '''[[#Relations|relations]]''' are envisaged:
! Name
+
** '''[[#isRelatedTo | isRelatedTo]]''', i.e. a relation linking any two [[#Resources | Resources]].  
! Type
+
** '''[[#ConsistsOf | ConsistsOf]]''', i.e. a relation connecting each [[#Resources | Resource]] with one of the [[#Facets | Facets]] characterizing it;
! Description
+
! Attributes
+
|-
+
| name
+
| String
+
| '''TBD Contains Name and Surname maybe also middle name and title (Dr. Mr.) or we add a new fields'''
+
| <code>Mandatory=true</code> <code>NotNull=true</code>
+
|-
+
| eMail
+
| String
+
| An RFC‑822 compliant email address.
+
| <code>Mandatory=true</code> <code>NotNull=true</code> <code>Regex see http://www.ex-parrot.com/~pdw/Mail-RFC822-Address.html</code>
+
|-
+
| website
+
| URL
+
| ...
+
|
+
|-
+
| address
+
| String
+
| ...
+
|
+
|-
+
| phone
+
| String
+
| ...
+
|
+
|}
+
  
==== Coverage Facet ====
+
* Each entity and relation
 +
** has an '''[[#Header|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| 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 | ConsistsOf]] or any specialization of it) from different Resources.
  
The goal of this facet is to collect any ''extent''-related information.
+
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>.
  
{|class="wikitable"
 
! Name
 
! Type
 
! Description
 
! Attributes
 
|-
 
| spatialSchema
 
| URI
 
| ...
 
|
 
|-
 
| temporal
 
| String
 
| ...
 
|
 
|-
 
| temporalSchema
 
| URI
 
| .....
 
|
 
|}
 
  
==== CPU Facet ====
+
=== Type Attributes ===
  
The goal of this facet is to describe CPU information.
+
Any attribute defined in the type schema is characterised by:
  
'''TODO to be reviewed'''
+
* '''Name''' : Property Name
{|class="wikitable"
+
* '''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]]
! Name
+
* '''Description''' : The description of the Property. <code>default=null</code>.
! Type
+
* '''Mandatory''' ('''M'''): Indicate if the Property is mandatory. <code>default=false</code>.
! Description
+
* '''ReadOnly''' ('''RO'''): The Property cannot change its value. <code>default=false</code>.
! Attributes
+
* '''NotNull''' ('''NN'''): Whether the property must assume a value diverse from 'null' or not. <code>default=false</code>
|-
+
* '''Max''' ('''Max'''): <code>default=null</code>
| model
+
* '''Min''' ('''Min'''): <code>default=null</code>
| String
+
* '''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/]
| ...
+
|
+
|-
+
| vendor
+
| String
+
| ...
+
|
+
|-
+
| clockSpeed
+
| String
+
| ...
+
|
+
|}
+
  
==== Descriptive Metadata Facet ====
+
==== Basic Types ====
 
+
The goal of this facet is to collect any descriptive metadata about the resource.
+
  
 
{|class="wikitable"
 
{|class="wikitable"
! Name
+
! Type
! Type
+
! Java type
! Description
+
! Description  
! Attributes
+
 
|-
 
|-
| value
+
| Boolean
| String
+
| <code>java.lang.Boolean</code> or <code>boolean</code>
| Inherited. E.g. XML Blob
+
| Handles only the values <em>True</em> or <em>False</em>.
|  
+
 
|-
 
|-
| schema
+
| Integer
| URI
+
| <code>java.lang.Integer</code> or <code>int</code> or  <code>java.math.BigInteger</code>
| ...
+
| 32-bit signed Integers.
|
+
|}
+
 
+
==== Event Facet ====
+
 
+
The goal of this facet is to collect any descriptive metadata about the resource.
+
 
+
{|class="wikitable"
+
! Name
+
! Type
+
! Description
+
! Attributes
+
 
|-
 
|-
| type
+
| Short
| String
+
| <code>java.lang.Short</code> or <code>short</code>
| ...
+
| Small 16-bit signed integers.
|
+
 
|-
 
|-
| typeSchema
+
| Long
| URI
+
| <code>java.lang.Long</code> or <code>long</code>
| ...
+
| Big 64-bit signed integers.
|
+
 
|-
 
|-
| date
+
| Float
| String
+
| <code>java.lang.Float</code> or <code>float</code>
| ...
+
| Decimal numbers.
|
+
 
|-
 
|-
| dateSchema
+
| Double
| URI
+
| <code>java.lang.Double</code> or <code>double</code>
| ...
+
| Decimal numbers with high precision.
|
+
|}
+
 
+
==== Functionality Related Facet ====
+
 
+
The goal of this facet is to capture what are the facilities supported ('''Challenging because of the different audiences''')
+
Something very "poor" ... we can have a look at WPS spec
+
 
+
{|class="wikitable"
+
! Name
+
! Type
+
! Description
+
! Attributes
+
 
|-
 
|-
| name
+
| Date
| String
+
| <code>java.util.Date</code>
| ...
+
| Any date with the precision up to milliseconds.
|
+
 
|-
 
|-
| description
 
 
| String
 
| String
| ...
+
| <code>java.lang.String</code>
|
+
| Any string as alphanumeric sequence of chars.
 
|-
 
|-
| input
+
| Byte
| String
+
| <code>java.lang.Byte</code> or <code>byte</code>
| ...
+
| Single byte. useful to store small 8-bit signed integers.
|
+
 
|-
 
|-
| output
+
| Binary
| String
+
| <code>java.lang.Byte[]</code> or <code>byte[]</code>
| ...
+
| Can contain any value as byte array.
|
+
 
|}
 
|}
  
==== Identification Facet ====
+
==== Derived Types ====
  
The goal of this facet is to collect information on Identifiers that can be attached to a resource.
+
The following are obtained using a String as real type and adding a validation regex.
  
 
{|class="wikitable"
 
{|class="wikitable"
! Name
+
! Type
! Type
+
! Java type
! Description
+
! Description  
! Attributes
+
 
|-
 
|-
| value
+
| Enum
| String
+
| <code>java.lang.Enum</code> or <code>enum</code>
| The identifier. E.g. http://fr.dbpedia.org/resource/Thunnus de305d54-75b4-431b-adb2-eb6b9e546014
+
| 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.
 
|-
 
|-
| type
+
| UUID
| Enumeration
+
| <code>java.util.UUID</code>
| The typology of identifier. E.g. URI, DOI, IRI, URL, URN, UUID;
+
| 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>'''
|  
+
 
|-
 
|-
| isPersistent
+
| URL
| boolean
+
| <code>java.net.URL</code>
| To indicate if the Identifier is persistent or not.  
+
| String representation of the URL. No check actually.
|
+
|}
+
 
+
==== Location Facet ====
+
 
+
The goal of this facet is to collect information about Location
+
 
+
{|class="wikitable"
+
! Name
+
! Type
+
! Description
+
! Attributes
+
 
|-
 
|-
| Country
+
| URI
| String
+
| <code>java.net.URI</code>
| ...
+
| String representation of the URI. No check actually.
| ...
+
 
|-
 
|-
| Location
+
| TypeVersion
| String
+
| <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>'''.
| ...
+
|-
+
| Latitude
+
| String
+
| ...
+
| ...
+
|-
+
| Longitude
+
| String
+
| ...
+
| ...
+
 
|}
 
|}
  
==== Network Address Facet ====
+
==== Complex Types ====
  
The goal of this facet is to capture IP information
+
Any property defined by composing basic types, complex types and other complex types. Any complex type can be defined by extending [[#Property|Property]] type.
  
 
{|class="wikitable"
 
{|class="wikitable"
! Name
+
! Type
! Type
+
! Java type
! Description
+
! Description  
! Attributes
+
 
|-
 
|-
| hostName
+
| Property
| String
+
| <code>?  extends org.gcube.informationsystem.model.reference.properties.Property</code>
| ...
+
| This is an Object contained inside the owner Entity and has no [[#Header|Header]]. It is reachable only by navigating the owner Entity/Relation.
|
+
 
|-
 
|-
| domainName
+
| <del>Property list</del>
| String
+
| <del><code>List&lt;?  extends org.gcube.informationsystem.model.reference.properties.Property&gt;</code></del>
| ...
+
| <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>
|
+
 
|-
 
|-
| IPAddress
+
| <del>Property set</del>
| String
+
| <del><code>Set&lt;? org.gcube.informationsystem.model.reference.properties.Property&gt;</code></del>
| ...
+
| <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>
|
+
 
|-
 
|-
| mask
+
| Property map
| String
+
| <code>Map&lt;String, ? extends org.gcube.informationsystem.model.reference.properties.Propertyd&gt;</code>
| ...
+
| Map of Objects contained inside the owner Entity and have no [[#Header|Header]]. They are reachable only by navigating the owner Entity/Relation.
|
+
|-
+
| broadcastAddress
+
| String
+
| ...
+
|
+
 
|}
 
|}
  
Regular expression to validate different IPv4 addresses are available at:
+
=== Property ===
  
http://www.regextester.com/22
+
It does not define any field. It is just used as a base class.
  
https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9780596802837/ch07s16.html
+
The Java Interface declaration for such a type is available at:
  
Both IPv4 and IPv6:
+
https://code-repo.d4science.org/gCubeSystem/information-system-model/src/branch/master/src/main/java/org/gcube/informationsystem/model/reference/properties/Property.java
http://stackoverflow.com/questions/53497/regular-expression-that-matches-valid-ipv6-addresses
+
  
==== License Facet ====
+
===== Header =====
  
The goal of this facet is to .....
+
Every Entity and Relation has an Header automatically created/updated by the System.
  
 
{|class="wikitable"
 
{|class="wikitable"
 +
|+ Header <code>''extends''</code> Property
 
! Name
 
! Name
 
! Type
 
! Type
! Description
 
 
! Attributes
 
! Attributes
 +
! Description
 +
|-
 +
| uuid
 +
| UUID
 +
| <code>Mandatory=true</code> <br/><code>NotNull=true</code> <br/><code>ReadOnly=true</code>
 +
| This UUID is be used to identify the Entity or the Relation univocally.
 
|-
 
|-
| value
+
| createdBy
 
| String
 
| String
| ...
+
| <code>Mandatory=true</code> <br/><code>NotNull=true</code> <br/><code>ReadOnly=true</code>
|
+
| The user that created the Entity or the Relation. It is initialized at creation time.
 
|-
 
|-
| schema
+
| creationTime
| URI
+
| Date
| Licence URI
+
| <code>Mandatory=true</code> <br/><code>NotNull=true</code> <br/><code>ReadOnly=true</code>
|
+
| Creation time.
|}
+
 
+
==== Memory Facet ====
+
 
+
The goal of this facet is to .....
+
 
+
{|class="wikitable"
+
! Name
+
! Type
+
! Description
+
! Attributes
+
 
|-
 
|-
| size
+
| lastUpdateBy
| Long
+
| String
| ...
+
| <code>Mandatory=true</code> <br/><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.
 
|-
 
|-
| used
+
| lastUpdateTime
| Long
+
| Date
| ...
+
| <code>Mandatory=true</code> <br/><code>NotNull=true</code>
|
+
| Last Update time. At creation time it assumes the same value of creationTime.
|-
+
| unit
+
| String
+
| ...
+
|
+
 
|}
 
|}
  
===== Persistent Memory Facet =====
 
  
Specialization of [[#Memory_Facet|Memory Facet]]
+
The Java Interface declaration for such a type is available at:
  
'''TBD if instead of subclassing is better subclassing ConsistOf relation of reintroduce purpose in relation or header'''
+
https://code-repo.d4science.org/gCubeSystem/information-system-model/src/branch/master/src/main/java/org/gcube/informationsystem/model/reference/properties/Header.java
  
===== Volatile Memory Facet =====
+
===== PropagationConstraint =====
  
Specialization of [[#Memory_Facet|Memory 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.
'''TBD if instead of subclassing is better subclassing ConsistOf relation of reintroduce purpose in relation or header'''
+
 
+
==== Peripheral Facet ====
+
 
+
The goal of this facet is to .....
+
  
 
{|class="wikitable"
 
{|class="wikitable"
 +
|+ PropagationConstraint <code>''extends''</code> Property
 
! Name
 
! Name
 
! Type
 
! Type
! Description
 
 
! Attributes
 
! Attributes
|-
 
| model
 
| String
 
| ...
 
|
 
|-
 
| vendor
 
| String
 
| ...
 
|
 
|}
 
 
==== Provenance Facet ====
 
 
The goal of this facet is to collect information related with resource lineage/provenance
 
 
{|class="wikitable"
 
! Name
 
! Type
 
 
! Description
 
! Description
! Attributes
 
 
|-
 
|-
| relationship
+
| remove
 
| Enum
 
| Enum
| .... E.g. wasDerivedFrom | wasGeneratedBy | ...
+
| <code>Regex=(cascadeWhenOrphan<nowiki>|</nowiki>cascade<nowiki>|</nowiki>keep)</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).
 
|-
 
|-
| reference
+
| add
| String
+
| Enum
| resourceID (a reference to the "originator" Resource associated to the resource the facet is attached to by the relationship)
+
| <code>Regex=(propagate<nowiki>|</nowiki>unpropagate)</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.
|-
+
| provenanceDocument
+
| String
+
| ... E.g. the xml format
+
|
+
|-
+
| provenanceDocumentSchema
+
| String
+
| ... E.g. a reference to the format
+
|
+
 
|}
 
|}
  
==== Simple Property Facet ====
 
  
The goal of this facet is the base class for all facets described by a value and the schema of the value
+
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.
  
{|class="wikitable"
 
! Name
 
! Type
 
! Description
 
! Attributes
 
|-
 
| value
 
| String
 
| ...
 
|
 
|-
 
| schema
 
| URI
 
| ...
 
|
 
|}
 
  
==== Software Facet ====
+
Add values;
  
The goal of this facet is to capture SW related features"
+
* 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"
 
! 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.
 
|
 
|-
 
| 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.
 
|
 
|-
 
| 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'''.
 
|
 
|-
 
| 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.
 
|
 
|-
 
| role '''TO BE REMOVED'''
 
| String
 
| Identify the role of this facet. E.g. dependency.
 
|
 
|-
 
| optional
 
| boolean
 
| .... Used in maven and in gcube
 
|
 
|}
 
  
==== State 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 ...
+
* [[#ConsistsOf | ConsistsOf Relation]] : <code>remove=cascade</code>, <code>add=propagate</code>
 +
* [[#isRelatedTo | IsRelatedTo Relation]] : <code>remove=keep</code>, <code>add=unpropagate</code>
  
{|class="wikitable"
 
! 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>
 
|}
 
  
===== Service State 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
! 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>
+
|-
+
| schema
+
| URI
+
| Always has the value https://data.d4science.org/schema/ServiceStateFacet
+
| <code>Mandatory=true</code> <code>ReadOnly=true</code> <code>NotNull=true</code> <code>Regex=(https://data.d4science.org/schema/ServiceStateFacet)</code>
+
|}
+
  
===== Container State Facet =====
+
===== Encrypted =====
  
 
{|class="wikitable"
 
{|class="wikitable"
 +
|+ Encrypted <code>''extends''</code> Property
 
! Name
 
! Name
 
! Type
 
! Type
 +
! Attributes
 
! Description
 
! Description
! Attributes
 
 
|-
 
|-
 
| value
 
| value
 
| String
 
| 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>
+
| 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.
|-
+
| schema
+
| URI
+
| Always has the value https://data.d4science.org/schema/ContainerStateFacet
+
| <code>Mandatory=true</code> <code>ReadOnly=true</code> <code>NotNull=true</code> <code>Regex=(https://data.d4science.org/schema/ContainerStateFacet)</code>
+
 
|}
 
|}
  
==== Subject Facet ====
+
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 ===
  
The goal of this facet is to ...
 
  
 
{|class="wikitable"
 
{|class="wikitable"
! Name
+
|+ <code>Abstract</code> Entity
! Type
+
! Description
+
! Attributes
+
 
|-
 
|-
| value
+
| colspan=5 | '''Goal:''' This is the base type for any entity.
| String
+
|-
| The value of the state. Must be compliant with schema.
+
! colspan=5 | Properties
| <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>
 
|}
 
 
==== Type Facet ====
 
 
'''TBD Remove this facet was thought to identify the type of resource.'''
 
 
The goal of this facet is to ...
 
 
{|class="wikitable"
 
 
! Name
 
! Name
 
! Type
 
! Type
! Description
 
 
! Attributes
 
! Attributes
 +
! colspan=2 | Description
 
|-
 
|-
| value
+
| header
| String
+
| [[#Header | Header]]
| The value of the state. Must be compliant with schema.
+
| <code>Mandatory=true</code> <br/><code>NotNull=true</code> <br/><code>ReadOnly=true</code>
| <code>Mandatory=true</code> <code>NotNull=true</code>
+
| colspan=2 | A distinguishing string to be used by clients to identify the access point of interest.
|-
+
| 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>
+
 
|}
 
|}
  
== Relation ==
+
The Java Interface declaration for such a type is available at:
  
=== RelatedTo ===
+
https://code-repo.d4science.org/gCubeSystem/information-system-model/src/branch/master/src/main/java/org/gcube/informationsystem/model/reference/entities/Entity.java
The following relations (extending the '''RelatedTo''') have been identified and defined:
+
  
* <div id="CallFor">'''CallFor''': [[#Service|Service]] to [[#Service|Service]]</div>
+
==== Resource ====
  
* <div id="ConfiguredBy">'''ConfiguredBy''': [[#Software|Software]] to [[#Configuration|Configuration]]</div>
 
 
* <div id="CustomizedBy">'''CustomizedBy''': [[#Service|Service]] to [[#Configuration|Configuration]]</div>
 
 
* <div id="Demand">'''Demand''': [[#Abstract_Service| Abstract Service]] to [[#Software|Software]]</div>
 
 
* <div id="DependOn">'''DependOn''': [[#Software|Software]] to [[#Software|Software]]</div>
 
** <div id="PluginOf">'''PluginOf''': [[#Plugin|Plugin]] to [[#Software|Software]]</div>
 
 
* <div id="Discover">'''Discover''': [[#E-Service|E-Service]] to [[#E-Service|E-Service]]</div>
 
 
* <div id="Host">'''Host''': [[#Hosting Node|Hosting Node]] to [[#E-Service|E-Service]]</div>
 
 
* <div id="Manage">'''Manage''': [[#Service|Service]] to [[#Dataset|Dataset]]</div>
 
 
* <div id="ManagedBy">'''ManagedBy''': [[#Hosting_Node|Hosting Node]] to [[#Site|Site]]</div>
 
 
* <div id="PartOf">'''PartOf''': [[#Concrete_Dataset|Concrete Dataset]] to [[#Dataset|Dataset]]</div>
 
 
* <div id="PoweredBy">'''PoweredBy''': [[#Hosting Node|Hosting Node]] to [[#Software|Software]]</div>
 
 
* <div id="Require">'''Require''': [[#Software|Software]] to [[#Service|Service]]</div>
 
 
* <div id="Run">'''Run''': [[#E-Service|E-Service]] to [[#Software|Software]]</div>
 
 
* <div id="Use">'''Use''': [[#E-Service|E-Service]] to [[#E-Service|E-Service]]</div>
 
 
=== ConsistOf ===
 
 
The following relations (extending the '''ConsistOf''') have been identified and defined:
 
 
* <div id="Identify">'''Identify''': [[#Resource_Profile|Resource]] to [[#Facets|Facet]]</div>
 
 
== Resources ==
 
 
......
 
 
=== Resource ===
 
 
{| class="wikitable"
 
{| class="wikitable"
|+ Resource Profile
+
|+ <code>Abstract</code> Resource '''<code>extends</code>''' [[#Entity|Entity]]
 
|-
 
|-
| colspan=5 | This entity is conceived to describe every "main thing" to be registered and discovered by the Information System.  
+
| colspan=5 | '''Scope:''' This entity is conceived to describe every "main thing" to be registered and discovered by the Information System.  
 
|-
 
|-
 
! Source
 
! Source
Line 722: Line 358:
 
! colspan=5 | Facets
 
! colspan=5 | Facets
 
|-
 
|-
| [[#Resource | Resource]]
+
| [[#Resource|Resource]]
| [[#Identify|Identify]]
+
| [[#ConsistsOf|ConsistsOf]]
 
| align=center | 1..n
 
| align=center | 1..n
| [[#Facets|Facet]]
+
| [[#Facet|Facet]]
| Any Resource has at least one Facet which in some way allow to identify the Resource per se.
+
| Any Resource consists of one or more Facets that describes the different aspects of the resource.
 
|-
 
|-
| [[#Resource | Resource]]
+
! colspan=5 | Relations
| [[#ConsistOf|ConsistOf]]
+
| align=center | 0..n
+
| [[#Facets|Facet]]
+
| Any Resource consist of one or more facets which describes the different aspects of the facet.
+
 
|-
 
|-
! colspan=5 | Resources
+
| [[#Resource|Resource]]
|-
+
| [[#isRelatedTo|isRelatedTo]]  
| [[#Resource | Resource]]
+
| align=center | 0..n  
| [[#RelatedTo | RelatedTo]]
+
| [[#Resource|Resource]]
| align=center | 0..n
+
| Any Resource can be related to any other resource.
| [[#Resource | Resource]]
+
| Any Resource can be related to any other resource. The Resource can be the source or the target of the relation. Please remind that the relation has a direction which provides the semantic of the relation. Anyway the relation can be also navigated in the opposite direction.
+
 
|}
 
|}
  
 +
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
  
The following Resources have been identified:
+
==== Facet ====
  
* [[#Actor|Actor]]
+
Early ideas and thinking on facets were documented at [[Resource_Model_(2nd_generation)#Facets | 2nd Generation Resource Model: Facets]]
* [[#Configuration|Configuration]]
+
* [[#Dataset|Dataset]]
+
** [[#Concrete_Dataset|Concrete Dataset]]
+
* [[#Service|Service]]
+
** [[#Abstract_Service|Abstract Service]]
+
** [[#E-Service|E-Service]]
+
** [[#Hosting_Node|Hosting Node]]
+
* [[#Software|Software]]
+
  
==== Actor ====
+
Facets are collections of attributes conceived to capture a certain feature/aspect of the [[#Resource | Resource]] they are associated with.
 +
Every facet can define zero or more [[#Property|properties]]. Besides the per-facet envisaged properties, clients can add new ones.
  
{| class="wikitable"
+
{|class="wikitable"
|+ Actor Profile
+
|+ <code>Abstract</code> Facet '''<code>extends</code>''' [[#Entity|Entity]]
 +
|-
 +
| colspan=5 | '''Goal:''' This is the base type for any Facet.
 +
|-
 +
! colspan=5 | Known Usage
 
|-
 
|-
 
! Source
 
! Source
 
! Relation
 
! Relation
! Multiplicity  
+
! Multiplicity
 
! Target
 
! Target
 
! Description
 
! Description
 
|-
 
|-
! colspan=5 | Facets
+
| [[#Resource|Resource]]
|-
+
| [[#ConsistsOf|ConsistsOf]]
| [[#Actor|Actor]]
+
| [[#Identify|Identify]]
+
 
| align=center | 1..n
 
| align=center | 1..n
| [[#Contact_Facet|Contact]]
+
| [[#Facet|Facet]]
| ...
+
| Any Resource consist of one or more Facets which describes the different aspects of the resource.
|-
+
| [[#Actor|Actor]]
+
| [[#ConsistOf|ConsistOf]]
+
| align=center | 0..n
+
| [[#Contact_Facet|Contact]]
+
| ...
+
|-
+
! colspan=5 | Resources
+
|-
+
| [[#Actor|Actor]]
+
| ...
+
| align=center | 1..n
+
| ...
+
| ...
+
 
|}
 
|}
  
==== Configuration ====
 
  
{| class="wikitable"
+
The Java Interface declaration for such a type is available at:
|+ Configuration Profile
+
 
 +
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:
 +
* An [[#Header | Header]]
 +
* A [[#PropagationConstraint|PropagationConstraint]]
 +
* Zero or More [[#Property|properties]] (not necessarily predefined, similarly to [[#Facets|Facets]]).
 +
 
 +
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 ====
 +
 
 +
{|class="wikitable"
 +
|+ IsRelatedTo <code>''extends''</code> Relation
 
|-
 
|-
 
! Source
 
! Source
 
! Relation
 
! Relation
! Multiplicity  
+
! Multiplicity
 
! Target
 
! Target
 
! Description
 
! Description
 
|-
 
|-
! colspan=5 | Facets
+
| [[#Resources|Resource]]
|-
+
| [[#IsRelatedTo|IsRelatedTo]]
| [[#Configuration|Configuration]]
+
| [[#Identify|Identify]]
+
| align=center | 1..n
+
| [[#Identification_Facet|Identification]]
+
| ...
+
|-
+
| [[#Configuration|Configuration]]
+
| [[#ConsistOf|ConsistOf]]
+
 
| align=center | 0..n
 
| align=center | 0..n
| ...
+
| [[#Resources|Resource]]
| ...
+
| A relation linking any two [[#Resources|Resources]].
|-
+
! colspan=5 | Resources
+
|-
+
| [[#Software|Software]]
+
| [[#ConfiguredBy|ConfiguredBy]]
+
| align=center | 0..n
+
| [[#Configuration|Configuration]]
+
| ...
+
|-
+
| [[#Service|Service]]
+
| [[#CustomizedBy|CustomizedBy]]
+
| align=center | 0..n
+
| [[#Configuration|Configuration]]
+
| ...
+
 
|}
 
|}
  
==== Dataset ====
+
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
|+ Dataset Profile
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
! colspan=5 | Facets
+
|-
+
| [[#Dataset|Dataset]]
+
| [[#Identify|Identify]]
+
| align=center | 1..n
+
| [[#Identification_Facet|Identification]]
+
| '''TBD'''
+
|-
+
| [[#Dataset|Dataset]]
+
| .....
+
| align=center|1..n
+
| [[#Contact_Facet|Contact Facet]]
+
| '''Missing is role: Is he the curator, owner, creator, contributor? This is an attribute of the relation'''
+
|-
+
| [[#Dataset|Dataset]]
+
| [[#ConsistOf|ConsistOf]]
+
| align=center | 1..n
+
| [[#Access_Point_Facet|Access Point Facet]]
+
| '''Missing embargoState to the attached access policy'''
+
|-
+
| [[#Dataset|Dataset]]
+
| [[#ConsistOf|ConsistOf]]
+
| align=center | 1..n
+
| [[#License_Facet|License Facet]]
+
| '''Missing duration of the license applied e.g. 15 years'''
+
|-
+
| [[#Dataset|Dataset]]
+
| [[#ConsistOf|ConsistOf]]
+
| align=center | 1..n
+
| [[#Event_Facet|Event Facet]]
+
| ...
+
|-
+
| [[#Dataset|Dataset]]
+
| [[#ConsistOf|ConsistOf]]
+
| align=center | 1..n
+
| [[#Provenance_Facet|Provenance Facet]]
+
| ...
+
|-
+
! colspan=5 | Resources
+
|-
+
| [[#Service|Service]]
+
| [[#Manage|Manage]]
+
| align=center | 0..n
+
| [[#Dataset|Dataset]]
+
| ...
+
|-
+
| [[#Dataset|Dataset]]
+
| [[#...|...]]
+
| align=center | 0..n
+
| [[#Dataset|Dataset]]
+
| ...
+
|-
+
| [[#Concrete_Dataset|Concrete Dataset]]
+
| [[#PartOf|PartOf]]
+
| align=center | 0..n
+
| [[#Dataset|Dataset]]
+
| ...
+
  
|}
+
==== ConsistsOf ====
  
===== Concrete Dataset =====
+
{|class="wikitable"
 
+
|+ ConsistsOf  <code>''extends''</code> Relation
{| class="wikitable"
+
|+ Concrete Dataset Profile <code>''extends''</code> [[#Dataset | Dataset]] Profile
+
 
|-
 
|-
 
! Source
 
! Source
 
! Relation
 
! Relation
! Multiplicity  
+
! Multiplicity
 
! Target
 
! Target
 
! Description
 
! Description
 
|-
 
|-
! colspan=5 | Facets
+
| [[#Resources|Resource]]
|-
+
| [[#ConsistsOf|ConsistsOf]]
| [[#Dataset|Dataset]]
+
| [[#ConsistOf|ConsistOf]]
+
 
| align=center | 1..n
 
| align=center | 1..n
| ...
+
| [[#Facet|Facet]]
| ...
+
| A relation connecting each [[#Resource|Resource]] with one of the [[#Facet|Facet]] characterizing it.
|-
+
! colspan=5 | Resources
+
|-
+
| [[#Concrete_Dataset|Concrete Dataset]]
+
| [[#PartOf|PartOf]]
+
| align=center | 1..n
+
| [[#Dataset|Dataset]]
+
| ...
+
|-
+
 
|}
 
|}
  
==== Service ====
 
  
{| class="wikitable"
+
The Java Interface declaration for such a type is available at:
|+ Service Profile
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
! colspan=5 | Facets
+
|-
+
| [[#Service|Service]]
+
| [[#ConsistOf|ConsistOf]]
+
| align=center | 0..n
+
| [[#Contact_Facet|Contact Facet]]
+
| ...
+
|-
+
! colspan=5 | Resources
+
|-
+
| [[#Software|Software]]
+
| [[#Require|Require]]
+
| align=center | 0..n
+
| [[#Service|Service]]
+
| ...
+
|-
+
| [[#Service|Service]]
+
| [[#CallFor|CallFor]]
+
| align=center | 0..n
+
| [[#Service|Service]]
+
| ...
+
|-
+
| [[#Service|Service]]
+
| [[#CustomizedBy|CustomizedBy]]
+
| align=center | 0..n
+
| [[#Configuration|Configuration]]
+
| ...
+
  
|-
+
https://code-repo.d4science.org/gCubeSystem/information-system-model/src/branch/master/src/main/java/org/gcube/informationsystem/model/reference/relations/ConsistsOf.java
| [[#Service|Service]]
+
| [[#Manage|Manage]]
+
| align=center | 0..n
+
| [[#Dataset|Dataset]]
+
| ...
+
|}
+
  
===== Abstract Service =====
+
=== Internal Entity and Relation ===
  
{| class="wikitable"
+
For internal use only are defined the following entity and relation:
|+ Abstract Service Profile <code>''extends''</code> [[#Service | Service]] Profile
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
! colspan=5 | Facets
+
|-
+
| [[#Abstract_Service|Abstract Service]]
+
| [[#ConsistOf|ConsistOf]]
+
| align=center | 0..n
+
| ...
+
| ...
+
|-
+
! colspan=5 | Resources
+
|-
+
| [[#Abstract_Service|Abstract Service]]
+
| [[#Demand|Demand]]
+
| align=center | 0..n
+
| [[#Software|Software]]
+
| ...
+
|}
+
  
 +
* [[#Context|Context]]
 +
* [[#IsParentOf|IsParentOf]]
  
===== E-Service =====
+
==== Context ====
  
{| class="wikitable"
+
Model a Context (aka scope) in the same Application Domain.
|+ E-Service Profile <code>''extends''</code> [[#Service | Service]] Profile
+
 
 +
{|class="wikitable"
 +
|+ Context
 
|-
 
|-
! Source
+
| colspan=5 | '''Goal:''' Models a Context (aka scope).
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
 
|-
 
|-
! colspan=5 | Facets
+
! colspan=5 | Properties
 
|-
 
|-
| [[#E-Service|E-Service]]
+
! Name
| [[#Identify|Identify]]
+
! Type
| align=center|1..1
+
! Attributes
| [[#Software_Facet|Software]]
+
! colspan=2 | Description
| ...
+
 
|-
 
|-
| [[#E-Service|E-Service]]
+
| name
| [[#ConsistOf|ConsistOf]]
+
| String
| align=center|1..n
+
| <code>Mandatory=true</code> <br/> <code>NotNull=true</code>
| [[#Access_Point_Facet|Access Point]]
+
| 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.
| Identify the endpoints of the E-Service
+
 
|-
 
|-
| [[#E-Service|E-Service]]
+
! colspan=5 | Known Usage
| [[#ConsistOf|ConsistOf]]
+
| align=center|1..n
+
| [[#Event_Facet|Event]]
+
| E.g. ActivationTime,DeploymenTime)
+
|-
+
| [[#E-Service|E-Service]]
+
| [[#ConsistOf|ConsistOf]]
+
| align=center|1..1
+
| [[#Service_State_Facet|Service State]]
+
| I.e. STARTED, ready, down, failed
+
|-
+
! colspan=5 | Resources
+
|-
+
| [[#E-Service|E-Service]]
+
| [[#Run|Run]]
+
| align=center | 0..n
+
| [[#Software|Software]]
+
| ...
+
|-
+
| [[#E-Service|E-Service]]
+
| [[#Use|Use]]
+
| align=center | 0..n
+
| [[#E-Service|E-Service]]
+
| A reference to any other E-Service, the E-Service instance is invoking.
+
|-
+
| [[#E-Service|E-Service]]
+
| [[#Discover|Discover]]
+
| 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.
+
|-
+
| [[#Hosting_Node|Hosting Node]]
+
| [[#Host|Host]]
+
| align=center | 0..n
+
| [[#E-Service|E-Service]]
+
| ...
+
|}
+
 
+
===== Hosting Node =====
+
 
+
{| class="wikitable"
+
|+ Hosting Node Profile <code>''extends''</code> [[#Service | Service]] Profile
+
 
|-
 
|-
 
! Source
 
! Source
 
! Relation
 
! Relation
! Multiplicity  
+
! Multiplicity
 
! Target
 
! Target
 
! Description
 
! Description
 
|-
 
|-
! colspan=5 | Facets
+
| [[#Context|Context]]
|-
+
| [[#IsParentOf|IsParentOf]]
| [[#Hosting_Node|Hosting Node]]
+
| [[#ConsistOf|ConsistOf]]
+
| align=center|1..n
+
| [[#CPU_Facet|CPU Facet]]
+
| CPU Information
+
|-
+
| [[#Hosting_Node|Hosting Node]]
+
| [[#ConsistOf|ConsistOf]]
+
| align=center|1..n
+
| [[#Persistent_Memory_Facet|Persistent Memory Facet]]
+
| Disk Space '''TBD Specialize ConsistOf'''
+
|-
+
| [[#Hosting_Node|Hosting Node]]
+
| [[#ConsistOf|ConsistOf]]
+
| align=center|1..n
+
| [[#Volatile_Memory_Facet|Volatile Memory Facet]]
+
| RAM '''TBD Specialize ConsistOf'''
+
|-
+
| [[#Hosting_Node|Hosting Node]]
+
| [[#ConsistOf|ConsistOf]]
+
| align=center|1..n
+
| [[#Network_Address_Facet|Network Address]]
+
| Network address
+
|-
+
| [[#Hosting_Node|Hosting Node]]
+
| [[#ConsistOf|ConsistOf]]
+
| align=center|1..n
+
| [[#Event_Facet|Event]]
+
| ...
+
|-
+
| [[#Hosting_Node|Hosting Node]]
+
| [[#ConsistOf|ConsistOf]]
+
| align=center|1..n
+
| [[#Container_State_Facet|Container State]]
+
| I.e. started, ready, certified, down, failed
+
|-
+
| [[#Hosting_Node|Hosting Node]]
+
| [[#ConsistOf|ConsistOf]]
+
| align=center|1..n
+
| [[#Simple_Property_Facet|Simple Property]]
+
| E.g. Environment Variables
+
|-
+
! colspan=5 | Resources
+
|-
+
| [[#Hosting_Node|Hosting Node]]
+
| [[#Host|Host]]
+
| 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]]
+
| [[#ManagedBy|ManagedBy]]
+
| align=center | 0..n
+
| [[#Site|Site]]
+
| ...
+
|-
+
| [[#Hosting_Node|Hosting Node]]
+
| [[#PoweredBy|PoweredBy]]
+
 
| align=center | 0..n
 
| align=center | 0..n
| [[#Software|Software]]
+
| [[#Context|Context]]
 
| ...
 
| ...
 
|}
 
|}
  
==== Schema ====
+
==== IsParentOf ====
  
{| class="wikitable"
+
This relation has no propagation constraint.
|+ Schema Profile
+
 
 +
{|class="wikitable"
 
|-
 
|-
 
! Source
 
! Source
 
! Relation
 
! Relation
! Multiplicity  
+
! Multiplicity
 
! Target
 
! Target
 
! Description
 
! Description
 
|-
 
|-
! colspan=5 | Facets
+
| [[#Context|Context]]
|-
+
| [[#IsParentOf|IsParentOf]]
| [[#Schema|Schema]]
+
| [[#Identify|Identify]]
+
| align=center | 1..n
+
| [[#Identification_Facet|Identification]]
+
| ...
+
|-
+
| [[#Schema|Schema]]
+
| [[#ConsistOf|ConsistOf]]
+
| align=center | 1..n
+
| ...
+
| ...
+
|-
+
! colspan=5 | Resources
+
|-
+
| [[#Schema|Schema]]
+
| ...
+
 
| align=center | 0..n
 
| align=center | 0..n
| ...
+
| [[#Context|Context]]
 
| ...
 
| ...
 
|}
 
|}
  
==== Site ====
+
=== Best practices and guidelines ===
  
{| class="wikitable"
+
* On Facet instances "reuse" across Resource Profiles:
|+ Site Profile
+
** 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.
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
! colspan=5 | Facets
+
|-
+
| [[#Site|Site]]
+
| [[#Identify|Identify]]
+
| align=center | 1..n
+
| [[#Identification_Facet|Identification]]
+
| ...
+
|-
+
| [[#Site|Site]]
+
| [[#ConsistOf|ConsistOf]]
+
| align=center | 1..n
+
| [[#Contact_Facet|Contact Facet]]
+
| ...
+
|-
+
| [[#Site|Site]]
+
| [[#ConsistOf|ConsistOf]]
+
| align=center | 1..n
+
| [[#Location_Facet|Location Facet]]
+
| ...
+
|-
+
| [[#Hosting_Node|Hosting Node]]
+
| [[#ConsistOf|ConsistOf]]
+
| align=center|1..n
+
| [[#Network_Address_Facet|Network Address]]
+
| Network address '''TBD'''
+
|-
+
! colspan=5 | Resources
+
|-
+
| [[#Hosting_Node|Hosting Node]]
+
| [[#ManagedBy|ManagedBy]]
+
| align=center | 0..n
+
| [[#Site|Site]]
+
| ...
+
|}
+
  
==== Software ====
 
  
{| class="wikitable"
+
=== Maven coordinates ===
|+ Software Profile
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
! colspan=5 | Facets
+
|-
+
| [[#Software|Software]]
+
| [[#Identify|Identify]]
+
| align=center|1..n
+
| [[#Software_Facet|Software]]
+
| Software coordinates which identify the Software per se.
+
|-
+
| [[#Software|Software]]
+
| [[#ConsistOf|ConsistOf]]
+
| align=center|1..n
+
| [[#Software_Facet|Software]]
+
| Apart the one connected with [[#Identify|Identify]] relation (gCube coordinates) the others identify the sw in other way e.g. (Maven coordinates)
+
|-
+
| [[#Software|Software]]
+
| [[#ConsistOf|ConsistOf]]
+
| align=center|0..n '''TBD'''
+
| [[#Access_Point_Facet|Access Point]]
+
| Links to maven artifact on nexus, javadoc, wiki, svn ...
+
|-
+
| [[#Software|Software]]
+
| [[#ConsistOf|ConsistOf]]
+
| align=center|0..n '''TBD'''
+
| [[#License_Facet|License]]
+
| ...
+
|-
+
| [[#Software|Software]]
+
| [[#ConsistOf|ConsistOf]]
+
| align=center|1..n
+
| [[#State_Facet|State]]
+
| '''TBD'''
+
|-
+
! colspan=5 | Resources
+
|-
+
| [[#Software|Software]]
+
| [[#ConfiguredBy|ConfiguredBy]]
+
| align=center|0..n
+
| [[#Configuration|Configuration]]
+
| ....
+
|-
+
| [[#Software|Software]]
+
| [[#DependOn|DependOn]]
+
| align=center|0..n
+
| [[#Software|Software]]
+
| ....
+
|-
+
| [[#Software|Software]]
+
| [[#Require|Require]]
+
| align=center|0..n
+
| [[#Service|Service]]
+
| ...
+
|-
+
| [[#Plugin|Plugin]]
+
| [[#PluginOf|PluginOf]]
+
| align=center|0..n
+
| [[#Software|Software]]
+
| ...
+
|-
+
| [[#Abstract_Service|Abstract Service]]
+
| [[#Demand|Demand]]
+
| align=center|0..n
+
| [[#Software|Software]]
+
| An inverse reference stemming from the [[#Abstract_Service | Abstract Service]] that is ...
+
|-
+
| [[#E-Service|E-Service]]
+
| [[#Run|Run]]
+
| align=center|0..n
+
| [[#Software|Software]]
+
| An inverse reference stemming from the [[#E-Service | E-Service]] that is running this Software
+
|-
+
| [[#Hosting_Node|Hosting Node]]
+
| [[#PoweredBy|PoweredBy]]
+
| align=center|0..n
+
| [[#Software|Software]]
+
| An inverse reference stemming from the [[#Hosting Node|Hosting Node]] that is ...
+
|}
+
  
 +
To use the Java library containing the classes modelling the IS Model you can declare the following dependency:
  
==== Plugin ====
+
<source lang="xml">
 +
<dependency>
 +
<groupId>org.gcube.information-system</groupId>
 +
<artifactId>information-system-model</artifactId>
 +
<version>[5.0.0,6.0.0-SNAPSHOT)</version>
 +
<dependency>
 +
</source>
  
{| class="wikitable"
+
== gCube Model ==
|+ Plugin Profile
+
|-
+
! Source
+
! Relation
+
! Multiplicity
+
! Target
+
! Description
+
|-
+
! colspan=5 | Facets
+
|-
+
| ...
+
| ...
+
| ...
+
| ...
+
| ...
+
|-
+
! colspan=5 | Resources
+
|-
+
| [[#Plugin|Plugin]]
+
| [[#PluginOf|PluginOf]]
+
| align=center|0..n
+
| [[#Software|Software]]
+
| ...
+
|}
+
  
== Best practices and guidelines ==
+
An example of instantiation of the IS model is the [[gCube Model]].
 
+
* 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 MUST be done only when a change in a facet instance MUST affect a change in all Resources connected to such a Facet.
+

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