In thinking about best to define our vocabularies in a reusable way across other domains within OSLC and beyond, I think it would be good to be able to define each vocabulary term as: Predicate QName -- Value Type QName -- Meaningful description string -- Some indication of its maturity [stable | learning | proposed] It would also be desirable to use a normative way to express these vocabularies with RDF Schema/OWL or OSLC Resource Shapes. Then derive our human-readable versions from them (like we do today) and provide scenario-specific constraints such as read-only and occurs.
Take for example what we have in Core Common Properties [1] and Linked Data Basic Profile [2], it follows this pattern mostly. With [1] we have some extra details and with [2] we possibly lump value types within the Range heading, implying rdfs:range perhaps wrongly. It appears that RDFS doesn't provide a great way to indicate "Value Type QName" and need to determine if OWL plays a role here. The usage of rdfs:range is limited to rdfs:Classes, so things like xsd:String are not a rdfs:Class. So to better "explain" the common or expected value type, I'm suggesting we just reuse oslc:valueType within our RDFSs. The valid choices for oslc:valueType will be same as defined in current Core V2 spec + rdf:Resource. Additionally, we would create a predicate to indicate the term's maturity or use a recommended one. Any feedback on this approach? Suggestions on a better mechanism? I looked around [3] for some best practices on this and appears to be a bit spotty on the usage, other than just simply a local defined rdfs:range object or using rdfs:Literal. [1] - http://open-services.net/bin/view/Main/OSLCCoreSpecAppendixA [2] - http://www.w3.org/Submission/ldbp/#bpr-prop [3] - http://dublincore.org/schemas/rdfs/ Thanks, Steve Speicher | IBM Rational Software | (919) 254-0645
