使用SPARQL和OWL解决3x3数独

使用SPARQL和OWL解决3x3数独,sparql,owl,Sparql,Owl,我正在尝试使用SPARQL和OWL在query.wikidata.org内部解决简单的3x3数独游戏 前缀owl: 选择?a12?a13?a21?a23?a31?a32,其中{ :zahla猫头鹰:类; 猫头鹰:其中之一(:1:2:3)。 ?a12 a:Zahl。 ?a13 a:Zahl。 ?a21 a:Zahl。 ?a23 a:Zahl。 ?A31A:Zahl。 ?a32 a:Zahl。 ?11只猫头鹰:同样的:1只。 ?a22猫头鹰:同卵:2。 ?a33猫头鹰:同卵:3。 a12猫头鹰:与

我正在尝试使用SPARQL和OWL在query.wikidata.org内部解决简单的3x3数独游戏

前缀owl:
选择?a12?a13?a21?a23?a31?a32,其中{
:zahla猫头鹰:类;
猫头鹰:其中之一(:1:2:3)。
?a12 a:Zahl。
?a13 a:Zahl。
?a21 a:Zahl。
?a23 a:Zahl。
?A31A:Zahl。
?a32 a:Zahl。
?11只猫头鹰:同样的:1只。
?a22猫头鹰:同卵:2。
?a33猫头鹰:同卵:3。
a12猫头鹰:与a11、a13、a22、a32不同。
a13猫头鹰:与a11、a12、a23、a33不同。
?a21猫头鹰:与?a22?a23?a11?a31不同。
a23猫头鹰:与a22、a21、a13、a33不同。
a31猫头鹰:与a11?a21?a32?a33不同。
a32猫头鹰:与a12?a22?a31?a33不同。
}
但我得到了这个错误:

Query is malformed: Encountered " <PNAME_LN> "owl:oneOf "" at line 5, column 19.
查询格式不正确:在第5行第19列遇到“owl:oneOf”。

有人能指出我的错误吗?

你好,我来自卡尔斯鲁厄的朋友

您的基本错误是试图在查询中定义对象- :zahla猫头鹰:类; 猫头鹰:其中之一(:1:2:3)

该查询不是用于此的位置。这只能在rdf文档中完成—在练习中不应更改。 另一个错误是对对象和文字的错误理解: …猫头鹰:其中之一(:1:2:3)。 ... ?11只猫头鹰:同样的:1只。 ?a22猫头鹰:同卵:2。 ?a33猫头鹰:同卵:3

owl:sameAs不处理文本,因此这些是名为1、2和3的对象。您可以使用名为1,2,3的对象,但使用数字(文字)和过滤器(过滤器(?a11=1))要容易得多

基于我们的源rdf,我认为这是应该做的事情,因为这些是定义的文本: ex:字段ex:允许的“1”^^xsd:int, “2”^^xsd:int, “3”^^xsd:int。
干杯

正如HarrySack_overflow已经提到的那样:Zahl(在练习中是:字段)的定义已经在图中了(毕竟您是在查询,而不是定义)。:字段可以定义并上传到图形,如下所示:

@prefix ex: <http://example.org/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

ex:field ex:allowed "1"^^xsd:int,
"2"^^xsd:int,
"3"^^xsd:int.
@前缀ex:。
@前缀xsd:。
ex:字段ex:允许的“1”^^xsd:int,
“2”^^xsd:int,
“3”^^xsd:int。
我们可以通过查询其他字段的所有允许值来找到解决方案,方法是
:field:allowed.

最后,我们检查所有解决方案的有效性。在3x3数独游戏中,每一行/每一列都有一个值,这可以通过检查每一行/每一列的总和来实现。解决方案可能如下所示(预定义字段分配给变量以提高可读性):

前缀:
前缀xsd:
选择?a1?a2?a3?b1?b2?b3?c1?c2?c3
在哪里{
绑定(“1”^^xsd:整数为?a1)
绑定(“2”^^xsd:integer AS?b2)
绑定(“3”^^xsd:integer AS?c3)
:字段:允许a2、a3、b1、b3、c1、c2。
#检查行
过滤器(?a1+?a2+?a3=6)
过滤器(?b1+?b2+?b3=6)
过滤器(?c1+?c2+?c3=6)
#检查列
过滤器(?a1+?b1+?c1=6)
过滤器(?a2+?b2+?c2=6)
过滤器(?a3+?b3+?c3=6)
}

您想用哪个SPARQL API运行它?那么
owl:differentFrom
行呢?每个
之间都缺少逗号,即
?a12 owl:与a11、a13、a22、a32不同。
如果你知道海龟符号是语法的话,我希望你能理解为什么。它现在起作用了吗?顺便问一下,前两个三重模式
:Zahl a owl:Class;owl:oneOf(:1:2:3)。
没有任何意义,它们不会影响查询结果。它们都不包含变量,因此,不与其他变量联接是描述如何使用SPARQL解决数独问题的一种可行方法。
@prefix ex: <http://example.org/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

ex:field ex:allowed "1"^^xsd:int,
"2"^^xsd:int,
"3"^^xsd:int.
PREFIX : <http://example.org/> 
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT ?a1 ?a2 ?a3 ?b1 ?b2 ?b3 ?c1 ?c2 ?c3
WHERE {
  BIND("1"^^xsd:integer AS ?a1)
  BIND("2"^^xsd:integer AS ?b2)
  BIND("3"^^xsd:integer AS ?c3)

  :field :allowed ?a2, ?a3, ?b1, ?b3, ?c1, ?c2 .

  #CHECK ROWS
  FILTER(?a1 + ?a2 + ?a3 = 6)
  FILTER(?b1 + ?b2 + ?b3 = 6)
  FILTER(?c1 + ?c2 + ?c3 = 6)

  #CHECK COLUMNS
  FILTER(?a1 + ?b1 + ?c1 = 6)
  FILTER(?a2 + ?b2 + ?c2 = 6)
  FILTER(?a3 + ?b3 + ?c3 = 6)
}