Я изменил пространство имен немного, просто так, что этот код заканчивается указывая на этот пост, но во всяком случае, я получаю этот выход:
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
<rdf:Property rdf:about="http://stackoverflow.com/q/20194409/1281433/PropertyName">
<rdfs:range rdf:resource="http://www.w3.org/2000/01/rdf-schema#Literal"/>
<rdfs:domain rdf:resource="http://stackoverflow.com/q/20194409/1281433/ClassName"/>
</rdf:Property>
</rdf:RDF>
из этого кода:
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.rdf.model.Property;
import com.hp.hpl.jena.vocabulary.RDFS;
public class JenaPropertyExample {
public static void main(String[] args) {
final String NS = "http://stackoverflow.com/q/20194409/1281433/";
final Model model = ModelFactory.createDefaultModel();
final Property p = model.createResource(NS+"PropertyName", RDF.Property).as(Property.class);
p.addProperty(RDFS.domain, model.createResource(NS+"ClassName"));
p.addProperty(RDFS.range, RDFS.Literal);
model.write(System.out, "RDF/XML-ABBREV");
}
}
В общем, только потому, что выход является законным, RDF не означает, что вы используете свойства и классы так, как ожидается. Явный интерфейс Jena Model
не может помочь вам в этом, так как вы все равно можете использовать свойства неправильно, но, по крайней мере, если вы используете предварительно определенные словарные классы Йены, вы получите права IRI. Если вы можете использовать OntModel, вы можете получить немного более приятный слой абстракции. Например, следующий метод дает тот же RDF выходу/XML, но позволяет использовать такие методы, как createOntProperty
и получить p rdf:type rdf:Property
тройные бесплатно, и методы, такие как addRange
и addDomain
:
public static void main2(String[] args) {
final String NS = "http://stackoverflow.com/q/20194409/1281433/";
final OntModel model = ModelFactory.createOntologyModel(OntModelSpec.RDFS_MEM);
OntProperty p = model.createOntProperty(NS+"PropertyName");
p.addDomain(model.getOntClass(NS+"ClassName"));
p.addRange(RDFS.Literal);
model.write(System.out, "RDF/XML-ABBREV");
}
Если он проверяет, но ваш запрос SPARQL Безразлично 't run, скорее всего, ваш запрос SPARQL будет иметь проблемы (и вы можете спросить об этом также и в StackOverflow, но в другом вопросе). –
Кроме того, если вы пишете RDF вручную, я бы сказал, что вы пишете его с помощью Turtle или N3, которые намного проще писать вручную. –
@JoshuaTaylor Использование rdf validator не rdfs (w3 validator) ... поэтому я думаю, что это первый источник проблемы. Во-вторых, я хочу объявить диапазон целыми числами, и я набираю , а мои данные с базой пространства имен: < base: has_value> 50 base: has_value>, но во время выполнения я получаю предупреждение: Ошибка (dtRange): Свойство http://www.help.me/confused/has_value имеет типизированный диапазон Тип данных [http: // www.w3.org/2001/XMLSchema#integer -> класс java.math.BigInteger], который несовместим с «50» –
user2692669