【发布时间】:2013-08-07 16:26:12
【问题描述】:
考虑以下 RDF:
semapi:BaseClass a rdfs:Class;
rdfs:subClassOf rdfs:Class .
semapi:hasChainTo a rdf:Property;
rdfs:domain semapi:BaseClass;
rdfs:range semapi:BaseClass .
semapi:DerivedClass a rdfs:Class; rdfs:subClassOf semapi:BaseClass .
instances:Instance1 a semapi:DerivedClass;
semapi:hasChainTo (
[
a semapi:DerivedClass;
semapi:hasChainTo (
[C1]
[C2]
)
]
)
如果semapi:hasChainTo rdfs:range semapi:BaseClass 则意味着列表 是rdf:type semapi:BaseClass。
我真正想说的是列表中的每个item都是rdf:type(ei.[C1] rdf:type semapi:BaseClass,[C2] rdf:type semapi:BaseClass,...)
我该怎么做?我需要 Owl(最好不需要)吗?
【问题讨论】:
-
我很高兴看到此贴为一个问题,但您能否澄清您所说的“如果 smapi:hasChainTo rdfs:range semapi:BaseClass 那么它意味着 ([C1][C2]) rdf:type smapi:BaseClass."?我真的不跟。你想从
x hasChainTo (A B C)到x a A、x a B、x a C,对吧? -
您提到您不想使用 OWL(我认为这意味着您不想使用 OWL 推理器)。从the other question,听起来您正计划使用 RDFS 推理器。这个问题的选择可能取决于你可以使用什么样的推理器。您在另一个问题中提到的 Allegro RDFS++ 具有 Prolog 接口,因此可以提供帮助。您也可以使用 SPARQL 执行此操作。除了 RDF 列表,OWL 属性链也可以提供帮助。
-
抱歉,为了更清楚,我重写了 OP,这与您在另一个答案中给出的示例相同,我想说列表中的每个项目都是某种类型,而不是列表本身就是那种类型.我已经在每个项目中都有
[ a semapi:DerivedClass; ]类型声明,但是您指出semapi:BaseClass rdfs:range semapi:BaseClass我是说列表本身是semapi:BaseClass类型。rdfs:range是正确的谓词吗?我可以说“rdfs:range List”吗? (伪代码) -
其实这个列表的目的是什么?毕竟你可以在 Turtle/N3 中写
x a C1, C2, C3, C4.。有没有什么特别的东西使清单变得必要。在 RDFS 中,你可以说sem:hasClass rdfs:subPropertyOf rdF:type,然后写x sem:hasClass C1, C2, C3, C4.,然后 RDFS 推理器会处理其余的事情。你为什么首先想要这个列表? -
我基本上是在为自然语言自动完成建模,让用户“逐步”构建句子(或命令)。这意味着保留多个级别的上下文至关重要,因为“下一个”自动完成选项不仅基于最后一个,还基于最后一个 -1、最后一个 -2、最后一个 -3,......所以
a hasChain b不能如果它仅存在于层次结构中的某个级别,则概括为始终为真。这样的链可能只存在于层次结构的那个级别,而没有其他地方。这就是我使用列表和空白节点的原因。这有任何意义吗?我可以尝试进一步澄清。
标签: rdf semantic-web rdfs turtle-rdf