我有一个像下面这样的本体,带有类和文字:
thing
artist
album
playlist
literal
literal_coordinate
literal_integer
literal_json
literal_string
在引入新属性时,我想确保属性使用特定的“数据类型”(类似于:https ://www.wikidata.org/wiki/Help:Data_type ),以便用户界面可以显示正确的类型条目或显示格式:对象的 AutoComplete、literal_integer 的 Number、literal_coordinate 的 Map 等等。
我的理解是 rdfs:range (或不那么严格的“schema:rangeIncludes”)可用于对三元语句的对象位置中的预期值进行广义的理解。
此外,sh:datatype、sh:nodeKind 和 sh:class 类型的 SHACL 形状约束可以约束预期值(https://www.w3.org/TR/shacl/#core-components-value-type)。
问题
哪种方法可以战略性地以全局方式指定每个属性的预期 DataType?对于此用例,“范围”似乎过于开放,无法依赖,我不确定 SHACL 是否适用于此类“全局信息”,或者它是否主要处理图形子集的验证?与更复杂的对象/文字层次结构相比,似乎 Wikibase/Wikidata 使用“平面数据类型设置”:
```json
datatypes
Item (object relation)
Media
Mathematical expression
etc.
```
理想情况下,该解决方案还应考虑围绕数据类型的特定元数据的概念,例如“外部标识符”(有关更多信息,请参见 Wikidata 链接)。此数据类型告诉系统使用属性中的附加信息来格式化值:
Data type
{libraryOfCongressId} {dataType} {externalID}
Formatting options
{libraryOfCongressId} {formatterURL} "https://id.loc.gov/authorities/$1"
Property constraints
{libraryOfCongressId} {formatConstraint} "(|((n|nb|nr|no|ns|sh|gf)([4-9])"
那么,开始一个具有类似用例的新本体,这是识别和格式化外部标识符的好蓝图,还是有更充分的解决方案?