假设我在db中有金属材料,其性能屈服强度可以从300到500 MPa.我怎样才能将其作为字面值输入.
我应该把2个属性像YieldStrengthMin
和YieldStrengthMax
,或者它可以在单个条目中完成并格式化为300 - 500.我知道我可以把它作为字符串类型,但我需要的是当我SPARQL我的数据库时,我应该进行查询,找到所有可以说的材料YieldStrength > 350
.如果它在该间隔中甚至是部分它应该是有效的结果.
好的,另一个澄清的例子
我将拥有db材料,每种材料都有许多属性.让我们说吧prop:hasMeltingTemperature
.
material:ZA-12 prop:hasMeltingTemperature "380 - 430".
material:Zn prop:hasMeltingTemperature "420".
Run Code Online (Sandbox Code Playgroud)
其中一些(清洁材料)将具有一个熔化温度,合金的温度将根据一些组分的百分比而变化.
我的应用程序将不得不从db获取所有材料,让我们说熔化温度> 400.所以在这种情况下它应该得到它们两个.
如果我查询我需要所有熔化温度<425的材料,它也应该同时使用它们.如果查询<400,则只有第一个材料.
无论如何,我的问题是:
我应该制作这样的房产:
material:ZA-12 prop:hasMeltingTemperature_MIN "380".
material:ZA-12 prop:hasMeltingTemperature_MAX "430".
material:Zn prop:hasMeltingTemperature "420".
Run Code Online (Sandbox Code Playgroud)
然后当我查询时我必须检测">"然后将它与"MIN"temp和"solo"temp进行比较,如果是"<"则将其与"MAX"temp和"solo"temp进行比较.
在这种情况下,我必须首先检测材料是否只有"one"或"min-max"temp或"none"temp属性.
要么
我可以像第一个例子中那样做,只有一个属性,如:
material:ZA-12 prop:hasMeltingTemperature "380 - 430".
material:Zn prop:hasMeltingTemperature "420" .
Run Code Online (Sandbox Code Playgroud)
并制作某种可以理解"间隔"并进行比较的sparql查询?
这就是我想知道的原因,因为材料有许多属性,而且有许多材料,其中一些具有"最大值"值,一些"独奏"值,有些根本没有该属性,但有另一个属性一样的问题...
我的应用程序将在PHP中,所以我将不得不在PHP中生成sparql查询,这就是为什么我正在寻找一些"通用"类型的查询(只检查一个属性)..
所以我的问题是如何有效地sparql查询它,更好的选择2用于存储数据,以及如何查询它'
我想把所有对象owl:sameAs
与我的对象关系起来Berlin
.
我正在尝试读取存储在本体中的信息。XML 绑定(我正在处理的部分)是:
<!-- hasPrevious and hasNext are defined at the imported ontology -->
<owl:NamedIndividual rdf:about="http://www.myexampledomain.com/myExample.owl#one_relationship">
<rdf:type rdf:resource="http://www.myexampledomain.com/myExample.owl#typeA"/>
<intui_PO:hasPrevious rdf:resource="http://www.myexampledomain.com/myExample.owl#element01"/>
<intui_PO:hasNext rdf:resource="http://www.myexampledomain.com/myExample.owl#element02"/>
</owl:NamedIndividual>
Run Code Online (Sandbox Code Playgroud)
我使用以下 Java 代码:
//Create factories that will produce the objects
OWLReasonerFactory reasonerFactory = new StructuralReasonerFactory();
OWLDataFactory fac = man.getOWLDataFactory();
//Get a reasoner, to query the ontology
OWLReasonerConfiguration config = new SimpleConfiguration();
OWLReasoner reasoner = reasonerFactory.createReasoner(owlOnt, config);
//Get relations. Their properties are the related individuals
OWLClass myclass = fac.getOWLClass(IRI.create("http://www.myexampledomain.com/myExample.owl#RelationClass"));
NodeSet<OWLNamedIndividual> individualsRelationNodeSet = reasoner.getInstances(myclass,false);
Set<OWLNamedIndividual> relations = individualsRelationNodeSet.getFlattened();
Run Code Online (Sandbox Code Playgroud)
有了这个,我就找到了命名的关系。我想通过以下方式读取它们的属性:
Map<OWLObjectPropertyExpression,Set<OWLIndividual>> …
Run Code Online (Sandbox Code Playgroud) 我有这些数据
@prefix : <http://test.example/> .
:alice :likes :beethoven.
:alice :likes :verdi.
:sofia :likes :beethoven.
:sofia :likes :verdi.
:sofia :likes :rossini.
:ania :likes :verdi.
:ania :likes :beethoven.
:ania :likes :david.
:david :likes :ania.
:david :likes :beethoven.
:david :likes :verdi.
:antonino :likes :verdi.
:antonino :likes :mozart.
:weirdo :likes :katyperry.
:beethoven a :recommendable.
:verdi a :recommendable.
:rossini a :recommendable.
:katyperry a :recommendable.
:mozart a :recommendable.
Run Code Online (Sandbox Code Playgroud)
然后我进行查询以获得喜欢与特定用户相同的项目的用户
select ?anotherUser (COUNT(?anotherItem) as ?countOfItems) WHERE {
values ?user {:ania}
?anotherUser :likes ?anotherItem.
filter (?anotherUser != ?user) …
Run Code Online (Sandbox Code Playgroud) 这是我的第一堂课Ratings2016
,它是一个等同的类:评级和createdOn的值大于2016.
<!-- http://semanticrecommender.com/rs#Ratings2016 -->
<owl:Class rdf:about="http://semanticrecommender.com/rs#Ratings2016">
<owl:equivalentClass>
<owl:Class>
<owl:intersectionOf rdf:parseType="Collection">
<rdf:Description rdf:about="http://semanticrecommender.com/rs#Rates"/>
<owl:Restriction>
<owl:onProperty rdf:resource="http://semanticrecommender.com/rs#createdOn"/>
<owl:someValuesFrom>
<rdfs:Datatype>
<owl:onDatatype rdf:resource="http://www.w3.org/2001/XMLSchema#dateTime"/>
<owl:withRestrictions rdf:parseType="Collection">
<rdf:Description>
<xsd:minInclusive rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2016-01-01T00:00:00</xsd:minInclusive>
</rdf:Description>
</owl:withRestrictions>
</rdfs:Datatype>
</owl:someValuesFrom>
</owl:Restriction>
</owl:intersectionOf>
</owl:Class>
</owl:equivalentClass>
</owl:Class>
Run Code Online (Sandbox Code Playgroud)
这是另一个类,Ratings2015
它相当于评级,并且比2015年更大
<!-- http://semanticrecommender.com/rs#Ratings2015 -->
<owl:Class rdf:about="http://semanticrecommender.com/rs#Ratings2015">
<owl:equivalentClass>
<owl:Class>
<owl:intersectionOf rdf:parseType="Collection">
<rdf:Description rdf:about="http://semanticrecommender.com/rs#Rates"/>
<owl:Restriction>
<owl:onProperty rdf:resource="http://semanticrecommender.com/rs#createdOn"/>
<owl:someValuesFrom>
<rdfs:Datatype>
<owl:onDatatype rdf:resource="http://www.w3.org/2001/XMLSchema#dateTime"/>
<owl:withRestrictions rdf:parseType="Collection">
<rdf:Description>
<xsd:minInclusive rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2015-01-01T00:00:00</xsd:minInclusive>
</rdf:Description>
</owl:withRestrictions>
</rdfs:Datatype>
</owl:someValuesFrom>
</owl:Restriction>
</owl:intersectionOf>
</owl:Class>
</owl:equivalentClass>
</owl:Class>
Run Code Online (Sandbox Code Playgroud)
当我运行推理器时,推理者称Ratings2016是2015年评级的子类
这是不正确的,为什么会这样,如何解决?
我正在使用 Protege 开发本体,我还使用 OntoGraf 选项卡查看本体及其类及其实例及其实例的层次结构。
如果我明确说一个实例 (i) 来自类型 (t),OntoGraf 会告诉我这一点,但是如果我对实例 (i) 满足的类型 (t) 施加限制,因此, (i) 变得推断出它来自类型 (t),OntoGraf 根本没有告诉我
换句话说,我可以在 protege 中看到实例 (i) 来自类型 (t) 但 OntoGraf 没有显示。
同样,它只是处理我明确说它们来自特定类的实例,但推断的实例不起作用。
明确地说一个实例来自一个类没有任何意义,否则本体没有任何好处。
我使用SPARQL查询我的本体,但是我观察到性能下降,我请求的查询越多,它就越糟糕.一开始PC需要大约150ms来处理查询,30查询需要670ms,而查询需要超过7秒!它取决于查询和/或本体,但直到现在,我可以在每个本体中找到它.
行"ResultSetRewindable r = ResultSetFactory.copyResults(results);" 负责时间泄漏,但也通过避免线路导致类似的行为.
我使用了披萨本体(https://ontohub.org/pizza/pizza.owl)和以下代码.另外,我使用了Jena 2.13版.
有谁知道如何解决它?
public static void main(String[] args) throws UnsupportedEncodingException, InterruptedException{
OntModel model = ModelFactory.createOntologyModel();
String OWLPath = "pizza.owl";
String queryString = "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX owl: <http://www.w3.org/2002/07/owl#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> PREFIX pz: <http://www.co-ode.org/ontologies/pizza/pizza.owl#> SELECT DISTINCT ?x WHERE { ?b owl:someValuesFrom pz:MozzarellaTopping. ?x rdfs:subClassOf ?b. ?x rdfs:subClassOf* pz:Pizza.}";
for(int j=0; j<100;j++){
double starttime = System.currentTimeMillis();
InputStream in = FileManager.get().open(OWLPath);
if (in == null) {
throw new IllegalArgumentException("File: " + …
Run Code Online (Sandbox Code Playgroud) 可以smb帮助我使用SPARQL,因为我无法理解它的语法.
如何查看此本体的信息
https://www.dropbox.com/s/m25d6x3ej7ppjw4/MyProject.owl
我应该查看有关创建多个方法的作者的信息.
有关方法的信息,早于1900年创建
最后,"球体使用"的名称和球体中使用的方法.
如果有人可以通过简单的示例给出SPARQL语法的一些链接,或者可以解释我它是如何工作的,我会很高兴.