Rdf 为什么不是';ShEx常数是否与数据中的相同项匹配?

Rdf 为什么不是';ShEx常数是否与数据中的相同项匹配?,rdf,semantic-web,shex,Rdf,Semantic Web,Shex,我有一个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 . st:envFa

我有一个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 .

st:envFactorEMF a st:studyVariable;# 您链接到的演示中的错误消息实际上描述了确切的问题

验证为{“类型”:“NodeConstraint”,“datatype”:“}”时出错:不匹配的datatype:不是具有datatype的文本

你用的是一个,这不是你想要的

您需要使用
a[st:studyVariable]
,因为您要指定:

但是,由于这是ShEx中最常见的错误,我想我应该用一点ascii艺术来详细说明

ShEx数据类型表示为裸虹膜,而值集表示为
[]s
。您的
rdf:type
st:studyVariable

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

()

我不是ShExpert(对不起),但是验证器提供的特定错误消息很有帮助。就像
st:signal xsd:decimal
意味着st:signal属性的值应该是一个数据类型为xsd:decimal的文本一样,rdf:type的值应该是一个数据类型为st:studyVariable的文本。当然,在数据中,该值实际上是IRI st:studyVariable,而不是一个文字。我想您应该使用
a[st:studyVariable]
来表示您需要实际值。
epri:VariableShape {
  a [st:studyVariable] ; # <-- value set
  st:subject [tax:~] ;   # <-- value set
  st:signal xsd:decimal  # <-- datatype
}