Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# dotNetRDF推理机是这样使用的吗?_C#_.net_Rdf_Dotnetrdf_N3 - Fatal编程技术网

C# dotNetRDF推理机是这样使用的吗?

C# dotNetRDF推理机是这样使用的吗?,c#,.net,rdf,dotnetrdf,n3,C#,.net,Rdf,Dotnetrdf,N3,我正在调查是否有可能定义游戏的基本本体,然后在此基础上定义任意魔法项,而不需要更新代码或使用它的sparql查询 例如,我有以下测试本体: @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>. @prefix : <http://rpg#>. :underdarkElf rdfs:subClassOf :darkElf. :darkElf rdfs:subClassOf :elf. :scimitar :dama

我正在调查是否有可能定义游戏的基本本体,然后在此基础上定义任意魔法项,而不需要更新代码或使用它的sparql查询

例如,我有以下测试本体:

@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
@prefix : <http://rpg#>.

:underdarkElf rdfs:subClassOf :darkElf.
:darkElf rdfs:subClassOf :elf.

:scimitar :damageModifier 3.

:Unhan a :underdarkElf;
    :name "Unhan";
    :isWielding :scimitar;
    :isWearing :jetAmulet.
这个想法是,当安汉佩戴护身符时,他的弯刀伤害修正值从3提高到4

为了让推理机沿着
rdfs:subassof
的链条从暗黑精灵到暗黑精灵再到精灵,我必须按如下顺序使用两个推理机:

var data = new Graph();
data.LoadFromFile(ontologyFilePath);

var rdfReasoner = new RdfsReasoner();
rdfReasoner.Initialise(data);
rdfReasoner.Apply(data);

var simpleReasoner = new SimpleN3RulesReasoner();
simpleReasoner.Initialise(data);
simpleReasoner.Apply(data);

var queryStr = @"
    PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
    PREFIX : <http://rpg#>

    SELECT ?name (SUM(?dm) as ?damageModifier)
    WHERE
    {
        ?entity :name ?name.
        ?entity :isWielding [:damageModifier ?dm].
    }
    GROUP BY ?name
";

var resultSet = data.ExecuteQuery(queryStr) as SparqlResultSet;

foreach (var u in resultSet)
{
    Console.WriteLine(u.ToString());
}
似乎很奇怪,我必须按照所示的特定顺序使用两个推理器

我做得对吗?

简言之,是的,你做得对

推理者通过将推断出的三元组具体化到图形中来工作;由于N3规则依赖于单个rdfs:subassof属性,因此需要首先应用rdfs推理器,以便将rdfs:subassof层次结构展平

您可以稍微简化N3规则,因为RDFS推理器应该从数据推断出
:Unhan a:elf.
。因此,您的N3规则可以改为:

{
    ?entity a :elf;
        :isWielding ?weapon;
        :isWearing :jetAmulet.
}
    => {?weapon :damageModifier 1.}.
?name = Unhan , ?damageModifier = 4^^http://www.w3.org/2001/XMLSchema#integer
{
    ?entity a :elf;
        :isWielding ?weapon;
        :isWearing :jetAmulet.
}
    => {?weapon :damageModifier 1.}.