What is this about
RDFS is a simple system for modelling in RDF: https://www.w3.org/TR/rdf-schema/
It allows for subclasses, subproperties, domains, ranges – that's pretty much it. RDFS is used often when you don't need to preserve the fine-grained semantics but need only a rough view or a narrow slice of the model (e.g., just the subclassing relations). It's also used in many RDF vocabularies as a lighter alternative to OWL.
SHACL is a language for defining shapes of RDF data (you can think of it as JSON Schema for RDF): https://www.w3.org/TR/shacl/
SHACL is not an ontology language in the traditional sense, as it follows the closed-world assumption. It is however a very useful domain modelling tool and is used for that purpose by many practitioners. This blog nicely explains the "why" of this way of using SHACL: https://www.topquadrant.com/blog/why-i-use-shacl-for-defining-ontology-models
SHACL and RDFS are actually sometimes used together – SHACL validators recognize RDFS subclassing relations, so for the validation to work properly you need both to be available.
For clarity: I'm not an evangelist of either SHACL or RDFS. I just know that they are used by a lot of people for domain modelling, and it would make sense to have interoperability between these formats and Ossie. We also use them both in our customer deployments.
Scope
Implement Ossie -> RDFS and Ossie -> SHACL converters.
Going the opposite way is out of scope here. This is a separate and more complex issue, especially given RDFS being much less expressive than Ossie, and SHACL being a CWA language.
Implementation
LinkML-Scala already implements LinkML->RDFS and LinkML->SHACL converters. You can try them here: https://linkml.neverblink.eu/playground/
After #389 is merged (Ossie<->LinkML converters), we could simply chain the conversions: Ossie->LinkML->RDFS. Because LinkML is already fairly close to being able to express everything in SHACL and can express everything in RDFS, this should be a relatively lossless conversion. Adding these new converters would not require any new dependencies – the neverblink-linkml package has all that we need. We only need a wrapper, which is very easy to do.
I think this approach is an easy way to get RDFS and SHACL support quickly. LinkML-Scala has to maintain them anyway, so we can piggyback on this here. If it ever gets decided that a direct Ossie->RDFS or Ossie->SHACL converter is needed, we can always do that, OR just work on improving the coverage of the LinkML converter and get better RDFS and SHACL coverage for free.
What is this about
RDFS is a simple system for modelling in RDF: https://www.w3.org/TR/rdf-schema/
It allows for subclasses, subproperties, domains, ranges – that's pretty much it. RDFS is used often when you don't need to preserve the fine-grained semantics but need only a rough view or a narrow slice of the model (e.g., just the subclassing relations). It's also used in many RDF vocabularies as a lighter alternative to OWL.
SHACL is a language for defining shapes of RDF data (you can think of it as JSON Schema for RDF): https://www.w3.org/TR/shacl/
SHACL is not an ontology language in the traditional sense, as it follows the closed-world assumption. It is however a very useful domain modelling tool and is used for that purpose by many practitioners. This blog nicely explains the "why" of this way of using SHACL: https://www.topquadrant.com/blog/why-i-use-shacl-for-defining-ontology-models
SHACL and RDFS are actually sometimes used together – SHACL validators recognize RDFS subclassing relations, so for the validation to work properly you need both to be available.
For clarity: I'm not an evangelist of either SHACL or RDFS. I just know that they are used by a lot of people for domain modelling, and it would make sense to have interoperability between these formats and Ossie. We also use them both in our customer deployments.
Scope
Implement Ossie -> RDFS and Ossie -> SHACL converters.
Going the opposite way is out of scope here. This is a separate and more complex issue, especially given RDFS being much less expressive than Ossie, and SHACL being a CWA language.
Implementation
LinkML-Scala already implements LinkML->RDFS and LinkML->SHACL converters. You can try them here: https://linkml.neverblink.eu/playground/
After #389 is merged (Ossie<->LinkML converters), we could simply chain the conversions: Ossie->LinkML->RDFS. Because LinkML is already fairly close to being able to express everything in SHACL and can express everything in RDFS, this should be a relatively lossless conversion. Adding these new converters would not require any new dependencies – the neverblink-linkml package has all that we need. We only need a wrapper, which is very easy to do.
I think this approach is an easy way to get RDFS and SHACL support quickly. LinkML-Scala has to maintain them anyway, so we can piggyback on this here. If it ever gets decided that a direct Ossie->RDFS or Ossie->SHACL converter is needed, we can always do that, OR just work on improving the coverage of the LinkML converter and get better RDFS and SHACL coverage for free.