-
Notifications
You must be signed in to change notification settings - Fork 2
Open
Description
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, definetnt: <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
orrdfs: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 intnt-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 usesubPropertyOf
?
## 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
Labels
No labels