2

300 から 500 MPa の降伏強度を持つ金属材料が db にあるとしましょう。それをリテラル値として入力するにはどうすればよいですか。

YieldStrengthMinとのような 2 つのプロパティを配置する必要がありYieldStrengthMaxます。または、単一のエントリで実行して、300 から 500 のようにフォーマットすることもできます。文字列型としてそのように配置できることはわかっていますが、必要なのは、DB を SPARQL するときに、 let's say を持つすべての資料を検索するクエリを作成する必要がありますYieldStrength > 350。部分的であってもその間隔内にある場合、有効な結果になるはずです。

OK、明確にする別の例

マテリアルのデータベースがあり、各タイプのマテリアルには多くのプロパティがあります。としましょうprop:hasMeltingTemperature

material:ZA-12 prop:hasMeltingTemperature    "380 - 430".

material:Zn    prop:hasMeltingTemperature    "420".

それらの一部 (クリーンな材料) には 1 つの融解温度があり、合金の温度は一部の成分の割合によって異なります。

私のアプリケーションは、たとえば融解温度が 400 を超えるすべての材料をデータベースから取得する必要があります。したがって、この場合は両方を取得する必要があります。

また、融解温度が 425 未満のすべての材料が必要であると問い合わせると、両方とも取得する必要があります。クエリが 400 未満の場合、最初のマテリアルのみ。

とにかく、私の質問は:

次のようなプロパティを作成する必要があります。

material:ZA-12 prop:hasMeltingTemperature_MIN "380".

material:ZA-12 prop:hasMeltingTemperature_MAX "430".

material:Zn    prop:hasMeltingTemperature     "420".

次に、クエリを実行するときに ">" を検出し、それを "MIN" temp および "solo" temp と比較し、"<" の場合は "MAX" temp および "solo" temp と比較する必要があります。

この場合、材料に「1」または「最小-最大」温度または「なし」温度プロパティしかないことを最初に検出する必要があります。

また

最初の例のようにして、次のようなプロパティを 1 つだけ持つことができます。

material:ZA-12 prop:hasMeltingTemperature "380 - 430".

material:Zn    prop:hasMeltingTemperature "420" .

「間隔」を理解して比較できるある種のsparqlクエリを作成しますか?

マテリアルには多くのプロパティがあり、多くのマテリアルがあり、それらの一部には「最小最大」値、「ソロ」値があり、一部にはそのプロパティがまったくありませんが、別のものには同じ問題...

私のアプリケーションはphpで作成されるため、phpでsparqlクエリを生成する必要があるため、「ユニバーサル」タイプのクエリを探していました(1つのプロパティのみをチェックします)。

したがって、私の問題は、効率的に sparql クエリを実行する方法、データを格納するための 2 つのより良い選択、およびそれをクエリする方法です。

4

1 に答える 1

7

ここで意味することがいくつかあります。あなたは出来る

  1. プロパティの範囲が何らかの範囲内の値であることを宣言します。
  2. ある特定の個体について、特定の特性の値が一定の範囲内にあると主張する。

あなたが言ったことを考えると:

私が必要とするのは、データベースを SPARQL するときに、YieldStrength > 350 のすべての材料を検索するクエリを作成する必要があることです。部分的であってもその間隔内にある場合は、有効な結果になるはずです。

2 つのプロパティの使用

minStrength2 つのプロパティ (例: / )を使用するのが最善だと思います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é では、次のようになります。

Protegeの制限

これが実際に意味することは、金属にある程度の強度範囲があるということではなく、フォーム のトリプルについてmetal72 hasStrength x、 の値がの範囲内にxなければならないということです。これは、金属に強度の範囲があるということとは明らかに異なります。int[200,400]

OWL オントロジーはRDF でシリアル化でき、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 でクエリを実行できます。?metaltype を持つany を返します。 hasStrength only int[>=min,<=max]where 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 ) 
}
于 2013-11-11T23:51:46.470 に答える