【发布时间】:2014-01-21 10:24:19
【问题描述】:
我试图在 RDF 中描述一种动态生成的有向图,其中每个节点的值取决于它前面节点的“总和状态”。例如,第一个节点可以有 n 个值。根据具体情况,可能有 m 个子节点,每个子节点都有一个 k 值。每个子节点都可能有 l 子节点,以此类推。
因此,RDF 语句可以轻松地任意 2 个节点和它们之间的边。但是,当您浏览图表时,主题或父节点有效地描述了其所有祖先节点的值。
有没有一种方法来表示这样的图,而无需为节点值的每个有效排列提供一个实体来表示 RDF 三元组的主题?
例如,假设我想在具有以下属性的本体中捕获域中的一些关系:
can_input_to rdfs:domain material ; rdfs:range first_process .
can_feed_into rdfs:domain first_process ; rdfs:range second_process .
has_output rdfs:domain second_process ; rdfs:range widget .
还有一些关于这样的实例的陈述:
<material_a> <can_input_to> <first_process_a>
<material_b> <can_input_to> <first_process_a>
<material_c> <can_input_to> <first_process_b>
<material_d> <can_input_to> <first_process_b>
<first_process_a> <can_feed_into> <second_process_a> //If input is <material_a> OR <material_b>
<first_process_b> <can_feed_into> <second_process_a> //If input is <material_d>
<second_process_a> <has_output> <widget_a> //If input is <material_a> AND first_process is <first_process_a>
<second_process_a> <has_output> <widget_b> //If input is <material_a> AND first_process is <first_process_b>
如何在本体中定义或捕获这些语句的条件(//如果输入是 ..)?
【问题讨论】:
-
您能详细说明您要表示的图形类型吗?您只是想对已经动态生成的图形进行编码,还是尝试指定图形的一部分,然后使用推理来确定更多?你能提供一个具体的例子吗?这可能是可以实现的,也可能不是,但是如果没有看到更具体的例子就很难说。我知道排列是什么,但我不清楚它们在这里的相关性。
-
嗨 Joshua,也许我使用“排列”有点松散。问题已编辑。
-
好的,我仍然不太确定你在问什么,但我认为它越来越清楚了。在第一个代码块中,是
<material>和<first_process>个人吗?或者它们是类,你是说它们是<can_input_to>属性的域和范围?如果后者是您的意思,那么我认为您将能够将“if/then”规则作为 SWRL 规则(或者,取决于它们的复杂程度,甚至可能是 OWL 公理)。 -
你是想在第一种情况下说类似
Process(?p1) & Process(?p2) & Material(?m) & canInputTo(?m,?p1) -> canFeedInto(?p1,?p2)的东西吗?这就是你可以用 SWRL 规则做的事情。 (我认为那里仍然缺少一个条件,因为我不太了解您的规则,但我认为目前已经足够接近了。) -
是的,第一个块是具有域和范围的类。其余的都是关于这些阶级的个人。我想要了解的是如何在最后一个语句中表达对其他语句中个人价值的依赖。
标签: dynamic graph rdf permutation