Java 是否可以读取类的datatype属性的允许值?
我正在使用一个本体,我在其中创建了一个名为“USER”的类。此类包含名为“性别”的数据类型属性。然后,我为这个数据类型插入了两个允许的值,即“男性”和“女性”。我想提取这些数据类型属性值,以便将它们插入到网页中。但是我没有找到正确的方法。我甚至不知道是否可以读取这些值。Java 是否可以读取类的datatype属性的允许值?,java,rdf,jena,ontology,rdfs,Java,Rdf,Jena,Ontology,Rdfs,我正在使用一个本体,我在其中创建了一个名为“USER”的类。此类包含名为“性别”的数据类型属性。然后,我为这个数据类型插入了两个允许的值,即“男性”和“女性”。我想提取这些数据类型属性值,以便将它们插入到网页中。但是我没有找到正确的方法。我甚至不知道是否可以读取这些值。 这是我的本体论的一部分。我真的非常感谢任何帮助或建议 <owl:DatatypeProperty rdf:ID="Gender"> <rdfs:domain rdf:resource="#USER"/&
这是我的本体论的一部分。我真的非常感谢任何帮助或建议
<owl:DatatypeProperty rdf:ID="Gender">
<rdfs:domain rdf:resource="#USER"/>
<rdfs:range>
<owl:DataRange>
<owl:oneOf rdf:parseType="Resource">
<rdf:first rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
>male</rdf:first>
<rdf:rest rdf:parseType="Resource">
<rdf:first rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
>female</rdf:first>
<rdf:rest rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#nil"/>
</rdf:rest>
</owl:oneOf>
</owl:DataRange>
</rdfs:range>
</owl:DatatypeProperty>
我在最近的代码中发现了2个强制转换错误,所以我尝试修复它。这是我的密码:
package test1;
import java.io.StringReader;
import com.hp.hpl.jena.ontology.*;
import com.hp.hpl.jena.rdf.model.Literal;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.util.iterator.ExtendedIterator;
public class SafwenExample
{
public static String NS = "http://www.owl-ontologies.com/Ontology_profile.owl#";
public static String SOURCE = "@prefix : <http://www.owl-ontologies.com/Ontologyprofile.owl#> .\n" +
"@prefix owl: <http://www.w3.org/2002/07/owl#>.\n" +
"@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.\n" +
"@prefix xsd: <http://www.w3.org/2001/XMLSchema#>.\n" +
":User a owl:Class.\n" +
":gender a owl:DatatypeProperty ;\n" +
" rdfs:domain :User ;\n" +
" rdfs:range [\n" +
" a owl:DataRange ;\n" +
" owl:oneOf ( \"male\"^^xsd:string \"female\"^^xsd:string )\n" +
"].";
public static void main( String[] args ) {
new SafwenExample().run();
}
public void run() {
OntModel m = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM );
m.read( new StringReader( SOURCE ), null, "Turtle" );
OntProperty gender = m.getOntProperty( NS + "gender" );
DataRange genderRange = (DataRange) gender.getRange().as( DataRange.class );
for (ExtendedIterator i = genderRange.listOneOf(); i.hasNext(); ) {
Literal l = (Literal) i.next();
System.out.println( "DataRange has value " + l.getLexicalForm() +
" with datatype: " + l.getDatatype() );
}
}
}
包测试1;
导入java.io.StringReader;
导入com.hp.hpl.jena.ontology.*;
导入com.hp.hpl.jena.rdf.model.Literal;
导入com.hp.hpl.jena.rdf.model.ModelFactory;
导入com.hp.hpl.jena.util.iterator.ExtendedIterator;
公共类示例
{
公共静态字符串NS=”http://www.owl-ontologies.com/Ontology_profile.owl#";
公共静态字符串源=“@前缀:。\n”+
“@前缀owl:。\n”+
“@前缀rdfs:。\n”+
“@前缀xsd:。\n”+
“:用户a owl:类。\n”+
“:性别owl:DatatypeProperty;\n”+
“rdfs:域:用户;\n”+
“rdfs:范围[\n”+
“owl:DataRange;\n”+
“owl:oneOf(\'male\'^^xsd:string\'female\'^^xsd:string)\n”+
"].";
公共静态void main(字符串[]args){
新建SafwenExample().run();
}
公开募捐{
OntModel m=ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
m、 read(新StringReader(源代码),空,“海龟”);
OntProperty性别=m.getOntProperty(NS+“性别”);
DataRange genderRange=(DataRange)gender.getRange().as(DataRange.class);
for(ExtendedIterator i=genderRange.listOneOf();i.hasNext();){
文字l=(文字)i.next();
System.out.println(“DataRange有值”+l.getLexicalForm()+
数据类型为“+l.getDatatype()”;
}
}
}
Ps:非常感谢您的回答:)是的,您可以使用Jena的:
包示例;
导入java.io.StringReader;
导入com.hp.hpl.jena.ontology.*;
导入com.hp.hpl.jena.rdf.model.Literal;
导入com.hp.hpl.jena.rdf.model.ModelFactory;
导入com.hp.hpl.jena.util.iterator.ExtendedIterator;
公共类示例
{
公共静态字符串NS=”http://example.com/example#";
公共静态字符串源=“@前缀:。\n”+
“@前缀owl:。\n”+
“@前缀rdfs:。\n”+
“@前缀xsd:。\n”+
“:用户a owl:类。\n”+
“:性别owl:DatatypeProperty;\n”+
“rdfs:域:用户;\n”+
“rdfs:范围[\n”+
“owl:DataRange;\n”+
“owl:oneOf(\'male\'^^xsd:string\'female\'^^xsd:string)\n”+
"].";
公共静态void main(字符串[]args){
新建SafwenExample().run();
}
公开募捐{
OntModel m=ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
m、 read(新StringReader(源代码),空,“海龟”);
OntProperty性别=m.getOntProperty(NS+“性别”);
DataRange genderRange=gender.getRange().as(DataRange.class);
for(ExtendedIterator i=genderRange.listOneOf();i.hasNext();){
文字l=i.next();
System.out.println(“DataRange有值”+l.getLexicalForm()+
数据类型为“+l.getDatatype()”;
}
}
}
顺便说一句,我确定了你的名字:class
User
(大写,然后是驼色),propertygender
(小写)。我一直在等待你的建议:)上面的评论。这段代码使用JDK1.7.0和Jena的2.10.0版运行,没有任何更改。请问我还需要使用其他库吗?我已经安装了JDK1.7.0和jena 2.4.6,因为我有旧的版本,但仍然有一个错误。thnaksVersion 2.4.6太旧了。使用当前版本2.10.0。我仍在获取以下错误:线程“main”java.lang.NoClassDefFoundError中的异常:org/slf4j/LoggerFactory位于com.hp.hpl.jena.util.Metadata。(Metadata.java:39)位于com.hp.hpl.jena.JenaRuntime。(JenaRuntime.java:34)我是否应该将slf4j库添加到项目的libs中?您正在运行哪个版本的Java和Jena?我注意到您将泛型迭代器扩展迭代器I
更改为扩展迭代器I
,这表明Java的版本非常旧。如果您的Jena安装没有将Turtle
识别为输入语法,那么它肯定非常古老!
package test1;
import java.io.StringReader;
import com.hp.hpl.jena.ontology.*;
import com.hp.hpl.jena.rdf.model.Literal;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.util.iterator.ExtendedIterator;
public class SafwenExample
{
public static String NS = "http://www.owl-ontologies.com/Ontology_profile.owl#";
public static String SOURCE = "@prefix : <http://www.owl-ontologies.com/Ontologyprofile.owl#> .\n" +
"@prefix owl: <http://www.w3.org/2002/07/owl#>.\n" +
"@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.\n" +
"@prefix xsd: <http://www.w3.org/2001/XMLSchema#>.\n" +
":User a owl:Class.\n" +
":gender a owl:DatatypeProperty ;\n" +
" rdfs:domain :User ;\n" +
" rdfs:range [\n" +
" a owl:DataRange ;\n" +
" owl:oneOf ( \"male\"^^xsd:string \"female\"^^xsd:string )\n" +
"].";
public static void main( String[] args ) {
new SafwenExample().run();
}
public void run() {
OntModel m = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM );
m.read( new StringReader( SOURCE ), null, "Turtle" );
OntProperty gender = m.getOntProperty( NS + "gender" );
DataRange genderRange = (DataRange) gender.getRange().as( DataRange.class );
for (ExtendedIterator i = genderRange.listOneOf(); i.hasNext(); ) {
Literal l = (Literal) i.next();
System.out.println( "DataRange has value " + l.getLexicalForm() +
" with datatype: " + l.getDatatype() );
}
}
}
package example;
import java.io.StringReader;
import com.hp.hpl.jena.ontology.*;
import com.hp.hpl.jena.rdf.model.Literal;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.util.iterator.ExtendedIterator;
public class SafwenExample
{
public static String NS = "http://example.com/example#";
public static String SOURCE = "@prefix : <http://example.com/example#> .\n" +
"@prefix owl: <http://www.w3.org/2002/07/owl#>.\n" +
"@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.\n" +
"@prefix xsd: <http://www.w3.org/2001/XMLSchema#>.\n" +
":User a owl:Class.\n" +
":gender a owl:DatatypeProperty ;\n" +
" rdfs:domain :User ;\n" +
" rdfs:range [\n" +
" a owl:DataRange ;\n" +
" owl:oneOf ( \"male\"^^xsd:string \"female\"^^xsd:string )\n" +
"].";
public static void main( String[] args ) {
new SafwenExample().run();
}
public void run() {
OntModel m = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM );
m.read( new StringReader( SOURCE ), null, "Turtle" );
OntProperty gender = m.getOntProperty( NS + "gender" );
DataRange genderRange = gender.getRange().as( DataRange.class );
for (ExtendedIterator<Literal> i = genderRange.listOneOf(); i.hasNext(); ) {
Literal l = i.next();
System.out.println( "DataRange has value " + l.getLexicalForm() +
" with datatype: " + l.getDatatype() );
}
}
}