2

在我的数据库中,我有字符串属性的东西。某些属性值与数字字符串匹配(仅包含数字)。我想给这些东西一个特殊的类型(它们的子类型)。在OWL中这样的事情可能吗?

4

2 回答 2

1

我认为你需要Datatype Restrictions结合xsd:pattern.

以下公理来自OWL 2 Primer ...

:Teenager  rdfs:subClassOf
       [ rdf:type             owl:Restriction ;
         owl:onProperty       :hasAge ;
         owl:someValuesFrom   
          [ rdf:type             rdfs:Datatype ;
            owl:onDatatype       xsd:integer ;
            owl:withRestrictions (  [ xsd:minExclusive     "12"^^xsd:integer ]
                                    [ xsd:maxInclusive     "19"^^xsd:integer ]
            )
          ]
       ] .

...如果你稍微改变一下,xsd:pattern我们可以有类似...

:YourClass  rdfs:subClassOf
       [ rdf:type             owl:Restriction ;
         owl:onProperty       :yourHasNumericProperty ;
         owl:someValuesFrom   
          [ rdf:type             rdfs:Datatype ;
            owl:onDatatype       xsd:integer ;
            owl:withRestrictions  ([xsd:pattern "E[1-9][0-9]*"])
          ]
       ] .

有了xsd:pattern你可以做基于正则表达式的数据类型限制。

我希望这能给你一些方向。

于 2010-10-31T09:40:08.543 回答
0

实际上是你可以在 RDF 中做的事情。对于 RDF 中的任何文字,您可以使用类似这样的内容指定类型(在 turtle/RDF 中)...

@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
:x :myDataTypeProperty "123"^^xsd:integer .
:y :myDataTypeProperty "some string"^^xsd:string .
:z :myDataTypeProperty "2004-12-06"^^xsd:date .

RDF/XML 中的相同示例

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xsd="http://www.w3.org/2001/XMLSchema#" xmlns="http://www.foo.bar.com#">
  <rdf:Description rdf:about="http://www.foo.bar.com#x">
    <myDataTypeProperty rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">123</myDataTypeProperty>
  </rdf:Description>
  <rdf:Description rdf:about="http://www.foo.bar.com#y">
    <myDataTypeProperty rdf:datatype="http://www.w3.org/2001/XMLSchema#string">some string</myDataTypeProperty>
  </rdf:Description>
  <rdf:Description rdf:about="http://www.foo.bar.com#z">
    <myDataTypeProperty rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2004-12-06</myDataTypeProperty>
  </rdf:Description>
</rdf:RDF>

XMLSchema (XSD) 规范中,您可以找到所有支持的数据类型。但请确保您只使用SPARQL 规范中提到的那些

如果需要,您可以创建自己的数据类型,并且具有以下内容:

:x :myDataTypeProperty "123"^^ns:MyClassificationScheme .

你可以更进一步说...

ns:MyClassificationScheme rdfs:subClassOf xsd:integer .

当您针对数据发出 SPARQL 查询时,您可以在发出应用过滤器时指定类型,如下所示:

SELECT * WHERE { 
   ?person :born ?birthDate .
   FILTER ( ?birthDate > "2005-02-28"^^xsd:date ) .
}

我希望这回答了你的问题。

已编辑

正如 panzi 提到的那样,我的回答方向错误。反正我留下。

于 2010-10-30T22:32:22.907 回答