2010-10-30 84 views
3

在我的數據庫中,我有一些字符串屬性。一些屬性值與數字字符串匹配(僅包含數字)。我想給這些東西一個特殊的類型(他們是什麼的子類型)。 OWL中有這樣的可能嗎?OWL:將屬性值限制爲數字字符串

回答

0

實際上你可以在RDF中做些什麼。對於RDF任何文字,你可以在RDF/XML像這樣的東西(在烏龜/ 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: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 spec

提到的那些,你可以薄荷自己的數據類型,如果你想和有類似:

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

而且你可以更進一步說...

ns:MyClassificationScheme rdfs:subClassOf xsd:integer . 

當你發出SPARQL查詢對數據,當您發出申請的過濾器,這樣你可以指定類型:

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

我希望這能回答你的問題。

編輯

正如胖子提到我的答案是走錯direcction。無論如何我都離開了。

+0

我知道,但它不是我想要的。我有一個'xsd:string'數據類型屬性,它已經在數據庫中填充了值。其中一些值恰好匹配整數。我想資源巫婆這樣的屬性是自動的一些特殊的子類。它比查詢中的FILTER REGEX更方便(但這樣的查詢也可以,只是不太方便)。基本上我想要一個正則表達式(或「轉換爲'xsd:integer'支持字符串」)的值限制。 – panzi 2010-10-31 00:27:03

+0

好的,我明白了。我想我完全誤解了你的問題。我已經添加了一個不同的答案.. – 2010-10-31 09:20:11

2

我認爲你需要的是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你可以根據正則表達式進行數據類型限制。

我希望這給你一些方向。

+0

嗯,這對我來說不起作用。但是我從其他文件導入子類作爲超類,並且即使沒有添加任何限制,也會遇到問題。奇怪。 – panzi 2010-11-01 16:16:19