4

我有一个期望特定类型的 ShEx 模式:

epri:VariableShape {
  a st:studyVariable ;
  st:subject [tax:~] ;
  st:signal xsd:decimal
}

拒绝该类型的数据

st:envFactorEMF a st:studyVariable ; # << this isn't recognized
  st:subject tax:1758 ;
  st:signal -.00043 .

演示)为什么会这样?

4

2 回答 2

5

您链接到的演示中的错误消息实际上描述了确切的问题。

将http://www.epri.com/studies/3002011786studyVariable验证为 {"type":"NodeConstraint","datatype":" http://www.epri.com/studies/3002011786studyVariable "} 时出错:数据类型不匹配:http ://www.epri.com/studies/3002011786studyVariable不是数据类型为http://www.epri.com/studies/3002011786studyVariable的文字

您正在使用数据类型约束,这不是您想要的。

相反,您需要使用a [ st:studyVariable ],因为您想指定一个值集

epri:VariableShape {
  a [ st:studyVariable ];
  st:subject [tax:~] ;
  st:signal xsd:decimal
}
于 2017-10-22T21:44:47.593 回答
4

Joshua Taylor 的回答是正确的,但由于这是 ShEx 中最常见的错误,我想我会用一点 ascii 艺术来详细说明。

ShEx 数据类型表示为裸 IRI,而值集表示为[]s. 你有rdf:type一个st:studyVariable

epri:VariableShape {
  a st:studyVariable ;   # <-- datatype
  st:subject [tax:~] ;   # <-- value set
  st:signal xsd:decimal  # <-- datatype
}

当您想要一个(小)值集时st:studyVariable

epri:VariableShape {
  a [st:studyVariable] ; # <-- value set
  st:subject [tax:~] ;   # <-- value set
  st:signal xsd:decimal  # <-- datatype
}

演示

于 2017-10-22T22:19:15.220 回答