2013-11-25 4 views
1

Может кто-то дать мне рабочий пример (в Java коде) о том, как создать ИСС соответствующее заявление, как на следующий с помощью Jena?JENA RDF/XML формат RDFS Пример

<rdf:Property rdf:about="http://www.help.me/confused/PropertyName"> 
    <rdfs:domain rdf:resource="http://www.help.me/confused/ClassName"/> 
    <rdfs:range rdf:resource="http://www.w3.org/2000/01/rdf-schema#Literal"/> 
</rdf:Property> 

Я создал/XML-схему RDF вручную, и это подтверждает право, но как-то субъекты не будут работать вместе в SPARQL (даже с логическим выводом на). Итак, я решил создать все это с самого начала, используя API Jena, чтобы убедиться, что это правильно.

+0

Если он проверяет, но ваш запрос SPARQL Безразлично 't run, скорее всего, ваш запрос SPARQL будет иметь проблемы (и вы можете спросить об этом также и в StackOverflow, но в другом вопросе). –

+0

Кроме того, если вы пишете RDF вручную, я бы сказал, что вы пишете его с помощью Turtle или N3, которые намного проще писать вручную. –

+0

@JoshuaTaylor Использование rdf validator не rdfs (w3 validator) ... поэтому я думаю, что это первый источник проблемы. Во-вторых, я хочу объявить диапазон целыми числами, и я набираю , а мои данные с базой пространства имен: < base: has_value> 50, но во время выполнения я получаю предупреждение: Ошибка (dtRange): Свойство http://www.help.me/confused/has_value имеет типизированный диапазон Тип данных [http: // www.w3.org/2001/XMLSchema#integer -> класс java.math.BigInteger], который несовместим с «50» – user2692669

ответ

3

Я изменил пространство имен немного, просто так, что этот код заканчивается указывая на этот пост, но во всяком случае, я получаю этот выход:

<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"); 
} 
+0

Это так полезно, можете ли вы предоставить любую ссылку, которая использует эти RDFS.Literal, RDFS.domain, RDFS.range нотации (или действительный список слов)? Кстати, я использую InfModel infmodel = ModelFactory.createRDFSModel (model); потому что мне нужно сделать вывод. (Я оставил вам комментарий к OP, если вы можете взглянуть на него) – user2692669

+1

@ user2692669 Класс RDFS просто определяет стандартный словарь RDFS. Вы можете посмотреть [javadoc] (http://jena.apache.org/documentation/javadoc/jena/com/hp/hpl/jena/vocabulary/RDFS.html) для полного списка, но это будет просто то же, что и в [сводке RDFS] (http://www.w3.org/TR/rdf-schema/#ch_summary) из стандарта. –

+0

@ user2692669 Является ли модель моделью вывода или нет, на самом деле не влияет на то, как вы могли бы _add_ эти тройки к модели, поэтому не имеет большого значения, что мой код не использует модель вывода. –