[英]how to put integer “range” in OWL literal value?
假設我在db中有金屬材料,其材料的屈服強度可以從300到500 MPa。 我如何輸入該字面值。
我應該放置2個屬性,例如YieldStrengthMin
和YieldStrengthMax
,還是可以在單個條目中完成並設置格式,例如300-500。我知道我可以將其作為字符串類型放置,但是我需要的是當我使用SPARQL db,我應該進行查詢,以找到所有讓我們說YieldStrength > 350
。 如果在該間隔內,即使是部分間隔,也應該是有效的結果。
好,再舉一個例子來說明
我將擁有db的材料,每種類型的材料都有許多屬性。 假設prop:hasMeltingTemperature
。
material:ZA-12 prop:hasMeltingTemperature "380 - 430".
material:Zn prop:hasMeltingTemperature "420".
其中一些(清潔材料)將具有一個熔化溫度,合金的溫度將根據某些成分的百分比而變化。
我的應用程序必須從db中獲取所有材料,這些材料的熔點溫度>400。因此,在這種情況下,應該同時獲取它們。
如果我查詢到我需要所有熔點<425以下的材料,則也應同時使用這兩種材料。 如果查詢<400,則僅第一個材料。
無論如何,我的問題是:
我應該做這樣的屬性:
material:ZA-12 prop:hasMeltingTemperature_MIN "380".
material:ZA-12 prop:hasMeltingTemperature_MAX "430".
material:Zn prop:hasMeltingTemperature "420".
那么當我查詢時,我必須檢測“>”,然后將其與“ MIN”溫度和“ solo”溫度進行比較,如果它是“ <”,則將其與“ MAX”溫度和“ solo”溫度進行比較。
在這種情況下,我必須首先檢測材料是否僅具有“一個”或“最小-最大”溫度或“無”溫度屬性。
要么
我可以像第一個示例中那樣做,並且只有一個屬性,如:
material:ZA-12 prop:hasMeltingTemperature "380 - 430".
material:Zn prop:hasMeltingTemperature "420" .
並進行某種sparql查詢,可以理解“間隔”並進行比較?
那就是我想知道的,因為材料有很多特性,很多材料,其中一些具有“最小最大”值,一些“單獨”值,有些根本不具有該特性,但又有一個具有同樣的問題...
我的應用程序將在php中,因此我將不得不在php中生成sparql查詢,因此這就是為什么我在尋找某種“通用”類型的查詢(僅檢查一個屬性)的原因。
因此,我的問題更多是如何有效地對sparql進行查詢,該2用於存儲數據的更好選擇以及如何查詢它。
在這里您可能要說幾件事。 你可以
鑒於您說的是:
我需要的是,當我SPARQL我的數據庫時,我應該進行查詢,以找到所有讓我們說YieldStrength> 350的材料。如果在該間隔中,即使是部分間隔,也應該是有效的結果。
我認為最好的辦法是使用兩個屬性(例如minStrength
/ maxStrength
)。 這意味着您可以擁有以下數據:
metal72 minStrength 200 ;
maxStrength 400 .
然后,您可以使用以下模式編寫查詢
?metal minStrength ?min ;
maxStrength ?max .
filter( ?min <= 350 && 350 <= ?max )
我認為這與您嘗試捕獲的想法最接近,因為聽起來每種金屬實際上都與某個值范圍相關聯。 在某些金屬可以具有精確值(而不是范圍)的情況下,您仍然可以通過輸入數據來使用這種方法:
Zn minStrength 420 ;
maxStrength 420 .
然后, 所有的金屬都是一致的(他們都有一個最小值和最大值),和您的查詢不會擔心不同的情況。
現在,雖然我認為以前的方法更有意義,但是您可以用OWL表示數據范圍。 例如,如果具有hasStrength
屬性,則可以使用限制來說某些金屬的強度僅在一定范圍內
metal72 a (hasStrength only int[>=200,<=400])
在Protégé中,它看起來像:
什么這實際上意味着雖然不是金屬具有一定的強度范圍內,但是,對於任何三重形式的metal72 hasStrength x
,值x
必須是int
在范圍[200,400]
否則數據不一致。 這顯然不同於說金屬具有強度范圍。
可以在RDF中對OWL本體進行序列化 ,然后可以使用SPARQL查詢RDF。 您將需要知道RDF的外觀。 在這種情況下,它是:
:metal72 a owl:NamedIndividual , :Metal ;
a [ a owl:Restriction ;
owl:allValuesFrom [ a rdfs:Datatype ;
owl:onDatatype xsd:int ;
owl:withRestrictions ( [ xsd:minInclusive
200 ] [ xsd:maxInclusive
400 ] )
] ;
owl:onProperty :hasStrength
] .
有點多,但是您可以使用SPARQL對其進行查詢,如下所示。 它會返回任何?metal
,其具有類型hasStrength only int[>=min,<=max]
其中min ≤ 350 ≤ max
。
prefix metal: <http://www.example.org/metal#>
prefix owl: <http://www.w3.org/2002/07/owl#>
prefix xsd: <http://www.w3.org/2001/XMLSchema#>
prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
select ?metal where {
?metal a metal:Metal ;
a [ owl:allValuesFrom [ owl:withRestrictions [ rdf:rest* [ xsd:minInclusive ?min ] ] ;
[ rdf:rest* [ xsd:maxInclusive ?max ] ] ] ;
owl:onProperty metal:hasStrength ] .
filter( ?min <= 350 && 350 <= ?max )
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.