簡體   English   中英

如何在OWL文字值中放入整數“范圍”?

[英]how to put integer “range” in OWL literal value?

假設我在db中有金屬材料,其材料的屈服強度可以從300到500 MPa。 我如何輸入該字面值。

我應該放置2個屬性,例如YieldStrengthMinYieldStrengthMax ,還是可以在單個條目中完成並設置格式,例如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用於存儲數據的更好選擇以及如何查詢它。

在這里您可能要說幾件事。 你可以

  1. 聲明屬性的范圍是某個范圍內的值;
  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的RDF序列化

現在,雖然我認為以前的方法更有意義,但是您可以用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM