Skip to content

improvement suggestions for TenneT ontology #2

@VladimirAlexiev

Description

@VladimirAlexiev

I've converted ProTAR TenneT Asset Data SHACL Ontology 2022-12-20 RDFXML0 103038 R2.41.rdf to ttl (will add shortly).
Suggestions for improvement:

  • Use consistent URLs. You define a prefix tnt: with hash but then use another URL (with slash) to describe the ontology.
    Instead, define tnt: <http://otl.tennet.eu/tnt/>:
@prefix tnt:    <http://otl.tennet.eu/tnt#> .
<http://otl.tennet.eu/tnt/> rdf:type         owl:Ontology ;
  • avoid trailing dots in URLs. These URLs cannot be shortened using the tnt-po: prefix because of the dot:
<http://otl.tennet.eu/tnt/def/po/B.K.B.>
<http://otl.tennet.eu/tnt/def/po/EWF_Energie_Waldeck-Frankenbg.>
<http://otl.tennet.eu/tnt/def/po/Level_stand_1_st.>
<http://otl.tennet.eu/tnt/def/po/Level_stand_2_st.>
<http://otl.tennet.eu/tnt/def/po/Level_stand_3_st.>
...
<http://otl.tennet.eu/tnt/def/po/T.S.I.170.630-11.0.11.>
  • each term should have a link to the ontology. You use multiple namespaces, but all terms can link to the same ontology, eg:
tnt-dc:AssetComponentET rdfs:isDefinedBy tnt: .
tnt-et:abbreviation rdfs:isDefinedBy tnt: .
  • if possible, avoid GUID URLs for classes and props (use them only for individuals)
  • if not possible, use a more appropriate prop (eg dct:relation or rdfs:seeAlso) and a URL not string:
tnt-et:abbreviation  rdf:type  rdf:Property ;
  ## instead of:
  ##     skos:notation       "http://otl.tennet.eu/tnt/def/et/8507342c-c5e3-4f3e-9840-2be205398233" ;
  ## use this:
  rdfs:seeAlso <http://otl.tennet.eu/tnt/def/et/8507342c-c5e3-4f3e-9840-2be205398233>.
  • Do not use subPropertyOf just to group properties. Eg you'll get a mix of company codes and budget values in tnt-et:CAT_FinancialAttribute, and how will you tell them apart? Use this criterion: will I ever want to query by the super-property? You already use skos:Collection for grouping, why also use subPropertyOf?
## NOT OK
tnt-et:colour  rdf:type     rdf:Property ;
        rdfs:subPropertyOf  tnt-et:CAT_MechanicalAndDimension .
tnt-et:manufacturedDate
        rdfs:subPropertyOf  tnt-et:CAT_LifeCycleData ;
tnt-et:companyCode  rdf:type  rdf:Property ;
        rdfs:subPropertyOf  tnt-et:CAT_FinancialAttribute.
tnt-et:budget  rdf:type  rdf:Property ;
        rdfs:subPropertyOf  tnt-et:CAT_FinancialAttribute.

## This is OK
tnt-dc:AssetComponentET
        rdf:type         skos:Collection ;
        skos:member      tnt-et:manufacturedDate .  # this would infer that tnt-et:manufacturedDate is a skos:Concept, but that's not a problem
- Use `rdfs:seeAlso` only with URLs, and use `xsd:anyURI` only for literals that are valid URLs or URIs. Use `skos:notation` for tags
```ttl
# NOT OK
tnt-et:maintenancePlant
        rdfs:seeAlso        "TAG0026"^^xsd:anyURI ;
tnt-et:manufacturedDate
        rdfs:seeAlso        "CIM::LifecycleDate / TAG0025"^^xsd:anyURI ;

tnt-et:maintenancePlant
        skos:notation        "TAG0026";
tnt-et:manufacturedDate
        skos:notation        "CIM::LifecycleDate / TAG0025";
  • you can even introduce your own datatypes to indicate the tag system, eg
tnt-dt:tag a rdfs:Datatype; rdfs:label "TenneT tags".
tnt-dt:cimTag a rdfs:Datatype; rdfs:label "CIM tags".
tnt-dt:cimDateTag a rdfs:Datatype; rdfs:label "CIM Lifecycle Date tags".
# and then
tnt-et:maintenancePlant
        skos:notation        "TAG0026"^^tnt-dt:tag;
tnt-et:manufacturedDate
        skos:notation        "TAG0025"^^tnt-dt:cimDateTag;
  • use only QUDT for unit-related info, not "proxy" classes and props, eg
tnt-pl:QUDTKind_InductanceQuantity ## why not the respective QUDT class?
tnt-et:unit  ## why not qudt:unit?
bs:unit  ## why not qudt:unit?
bs:quantityKind  ## why not qudt:quantityKind ?

Cheers!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions