From: <jen...@us...> - 2013-10-15 14:46:40
|
Revision: 4123 http://sourceforge.net/p/dl-learner/code/4123 Author: jenslehmann Date: 2013-10-15 14:46:35 +0000 (Tue, 15 Oct 2013) Log Message: ----------- added new unit test for the ISLE case without external corpus Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/algorithms/celoe/OENode.java Added Paths: ----------- trunk/components-core/src/test/java/org/dllearner/algorithms/isle/ISLETestCorpus.java trunk/test/isle/swore/ontology_with_comments.owl Removed Paths: ------------- trunk/components-core/src/test/java/org/dllearner/algorithms/isle/ISLETest.java Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/celoe/OENode.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/celoe/OENode.java 2013-10-15 12:06:45 UTC (rev 4122) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/celoe/OENode.java 2013-10-15 14:46:35 UTC (rev 4123) @@ -24,6 +24,7 @@ import java.util.List; import org.dllearner.algorithms.SearchTreeNode; +import org.dllearner.algorithms.isle.NLPHeuristic; import org.dllearner.core.owl.Description; /** @@ -119,6 +120,7 @@ public String getShortDescription(String baseURI) { String ret = description.toString(baseURI,null) + " ["; +// ret += "score" + NLPHeuristic.getNodeScore(this) + ","; ret += "acc:" + dfPercent.format(accuracy) + ", "; ret += "he:" + horizontalExpansion + ", "; ret += "c:" + children.size() + ", "; Deleted: trunk/components-core/src/test/java/org/dllearner/algorithms/isle/ISLETest.java =================================================================== --- trunk/components-core/src/test/java/org/dllearner/algorithms/isle/ISLETest.java 2013-10-15 12:06:45 UTC (rev 4122) +++ trunk/components-core/src/test/java/org/dllearner/algorithms/isle/ISLETest.java 2013-10-15 14:46:35 UTC (rev 4123) @@ -1,264 +0,0 @@ -/** - * - */ -package org.dllearner.algorithms.isle; - -import com.google.common.base.Charsets; -import com.google.common.base.Joiner; -import com.google.common.io.Files; - -import org.dllearner.algorithms.celoe.CELOE; -import org.dllearner.algorithms.isle.index.*; -import org.dllearner.algorithms.isle.index.semantic.SemanticIndex; -import org.dllearner.algorithms.isle.index.semantic.simple.SimpleSemanticIndex; -import org.dllearner.algorithms.isle.index.syntactic.OWLOntologyLuceneSyntacticIndexCreator; -import org.dllearner.algorithms.isle.index.syntactic.SyntacticIndex; -import org.dllearner.algorithms.isle.metrics.PMIRelevanceMetric; -import org.dllearner.algorithms.isle.metrics.RelevanceMetric; -import org.dllearner.algorithms.isle.metrics.RelevanceUtils; -import org.dllearner.algorithms.isle.textretrieval.EntityTextRetriever; -import org.dllearner.algorithms.isle.textretrieval.RDFSLabelEntityTextRetriever; -import org.dllearner.algorithms.isle.wsd.SimpleWordSenseDisambiguation; -import org.dllearner.algorithms.isle.wsd.WordSenseDisambiguation; -import org.dllearner.core.AbstractReasonerComponent; -import org.dllearner.core.KnowledgeSource; -import org.dllearner.core.owl.Entity; -import org.dllearner.core.owl.NamedClass; -import org.dllearner.kb.OWLAPIOntology; -import org.dllearner.learningproblems.ClassLearningProblem; -import org.dllearner.reasoning.FastInstanceChecker; -import org.dllearner.utilities.Helper; -import org.junit.Before; -import org.junit.Test; -import org.semanticweb.owlapi.apibinding.OWLManager; -import org.semanticweb.owlapi.model.IRI; -import org.semanticweb.owlapi.model.OWLDataFactory; -import org.semanticweb.owlapi.model.OWLEntity; -import org.semanticweb.owlapi.model.OWLOntology; -import org.semanticweb.owlapi.model.OWLOntologyManager; - -import uk.ac.manchester.cs.owl.owlapi.OWLDataFactoryImpl; - -import java.io.File; -import java.io.IOException; -import java.text.DecimalFormat; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -/** - * Some tests for the ISLE algorithm. - * - * @author Lorenz Buehmann - * @author Jens Lehmann - */ -public class ISLETest { - - private OWLOntologyManager manager; - private OWLOntology ontology; - private OWLDataFactory df = new OWLDataFactoryImpl(); - private EntityTextRetriever textRetriever; - private RelevanceMetric relevance; - private String searchField = "label"; - private SemanticIndex semanticIndex; - private SyntacticIndex syntacticIndex; - - // we assume that the ontology is named "ontology.owl" and that all text files - // are in a subdirectory called "corpus" - private String testFolder = "../test/isle/swore/"; -// NamedClass cls = new NamedClass("http://example.com/father#father"); - NamedClass cls = new NamedClass("http://ns.softwiki.de/req/CustomerRequirement"); - - /** - * - */ - public ISLETest() throws Exception{ - manager = OWLManager.createOWLOntologyManager(); - ontology = manager.loadOntologyFromOntologyDocument(new File(testFolder + "ontology.owl")); - textRetriever = new RDFSLabelEntityTextRetriever(ontology); - syntacticIndex = new OWLOntologyLuceneSyntacticIndexCreator(ontology, df.getRDFSLabel(), searchField).buildIndex(); - - - } - - private Set<TextDocument> createDocuments(){ - Set<TextDocument> documents = new HashSet<TextDocument>(); - File folder = new File(testFolder+"corpus/"); - for (File file : folder.listFiles()) { - if(!file.isDirectory() && !file.isHidden()){ - try { - String text = Files.toString(file, Charsets.UTF_8); - documents.add(new TextDocument(text)); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - return documents; - } - - - - /** - * @throws java.lang.Exception - */ - @Before - public void setUp() throws Exception{ - - } - -// @Test - public void testTextRetrieval() { - System.out.println("Text for entity " + cls + ":"); - Map<String, Double> relevantText = textRetriever.getRelevantText(cls); - System.out.println(Joiner.on("\n").join(relevantText.entrySet())); - } - -// @Test - public void testEntityRelevance() throws Exception { - System.out.println("Relevant entities for entity " + cls + ":"); - Map<Entity, Double> entityRelevance = RelevanceUtils.getRelevantEntities(cls, ontology, relevance); - System.out.println(Joiner.on("\n").join(entityRelevance.entrySet())); - } - - @Test - public void testSemanticIndexAnnotationProperty(){ - semanticIndex = new SimpleSemanticIndex(ontology, syntacticIndex); - semanticIndex.buildIndex(df.getRDFSLabel(), null); -// NamedClass nc = new NamedClass("http://example.com/father#father"); - Set<AnnotatedDocument> documents = semanticIndex.getDocuments(cls); - System.out.println("Documents for " + cls + ":\n" + documents); - } - - @Test - public void testSemanticIndexCorpus(){ - semanticIndex = new SimpleSemanticIndex(ontology, syntacticIndex); - semanticIndex.buildIndex(createDocuments()); - Set<AnnotatedDocument> documents = semanticIndex.getDocuments(cls); - System.out.println(documents); - } - - @Test - public void testISLE() throws Exception { - KnowledgeSource ks = new OWLAPIOntology(ontology); - AbstractReasonerComponent reasoner = new FastInstanceChecker(ks); - reasoner.init(); - - ClassLearningProblem lp = new ClassLearningProblem(reasoner); - lp.setClassToDescribe(cls); - lp.init(); - - semanticIndex = new SimpleSemanticIndex(ontology, syntacticIndex); - semanticIndex.buildIndex(createDocuments()); - - relevance = new PMIRelevanceMetric(semanticIndex); - - Map<Entity, Double> entityRelevance = RelevanceUtils.getRelevantEntities(cls, ontology, relevance); - NLPHeuristic heuristic = new NLPHeuristic(entityRelevance); - - ISLE isle = new ISLE(lp, reasoner); - isle.setHeuristic(heuristic); - isle.init(); - - isle.start(); - } - - @Test - public void testEntityLinkingWithLemmatizing() throws Exception { - EntityCandidatesTrie ect = new SimpleEntityCandidatesTrie(new RDFSLabelEntityTextRetriever(ontology), ontology, - new SimpleEntityCandidatesTrie.LemmatizingWordNetNameGenerator(5)); - LinguisticAnnotator linguisticAnnotator = new TrieLinguisticAnnotator(ect); - WordSenseDisambiguation wsd = new SimpleWordSenseDisambiguation(ontology); - EntityCandidateGenerator ecg = new TrieEntityCandidateGenerator(ontology, ect); - SemanticAnnotator semanticAnnotator = new SemanticAnnotator(wsd, ecg, linguisticAnnotator); - - Set<TextDocument> docs = createDocuments(); - for (TextDocument doc : docs) { - AnnotatedDocument annotated = semanticAnnotator.processDocument(doc); - System.out.println(annotated); - } - } - - @Test - public void testEntityLinkingWithSimpleStringMatching() throws Exception { - EntityCandidatesTrie ect = new SimpleEntityCandidatesTrie(new RDFSLabelEntityTextRetriever(ontology), ontology, - new SimpleEntityCandidatesTrie.DummyNameGenerator()); - TrieLinguisticAnnotator linguisticAnnotator = new TrieLinguisticAnnotator(ect); - linguisticAnnotator.setNormalizeWords(false); - WordSenseDisambiguation wsd = new SimpleWordSenseDisambiguation(ontology); - EntityCandidateGenerator ecg = new TrieEntityCandidateGenerator(ontology, ect); - SemanticAnnotator semanticAnnotator = new SemanticAnnotator(wsd, ecg, linguisticAnnotator); - - Set<TextDocument> docs = createDocuments(); - for (TextDocument doc : docs) { - AnnotatedDocument annotated = semanticAnnotator.processDocument(doc); - System.out.println(annotated); - } - } - - @Test - public void compareISLE() throws Exception { - KnowledgeSource ks = new OWLAPIOntology(ontology); - AbstractReasonerComponent reasoner = new FastInstanceChecker(ks); - reasoner.init(); - - ClassLearningProblem lp = new ClassLearningProblem(reasoner); - lp.setClassToDescribe(cls); - lp.init(); - - semanticIndex = new SimpleSemanticIndex(ontology, syntacticIndex, false); - semanticIndex.buildIndex(createDocuments()); - - relevance = new PMIRelevanceMetric(semanticIndex); - - Map<Entity, Double> entityRelevance = RelevanceUtils.getRelevantEntities(cls, ontology, relevance); - NLPHeuristic heuristic = new NLPHeuristic(entityRelevance); - - // run ISLE - ISLE isle = new ISLE(lp, reasoner); - isle.setHeuristic(heuristic); - isle.setSearchTreeFile(testFolder + "searchTreeISLE.txt"); - isle.setWriteSearchTree(true); - isle.setReplaceSearchTree(true); - isle.setTerminateOnNoiseReached(true); - isle.init(); - isle.start(); - - // run standard CELOE as reference - CELOE celoe = new CELOE(lp, reasoner); -// celoe.setHeuristic(heuristic); - celoe.setSearchTreeFile(testFolder + "searchTreeCELOE.txt"); - celoe.setWriteSearchTree(true); - celoe.setTerminateOnNoiseReached(true); - celoe.setReplaceSearchTree(true); - celoe.init(); - celoe.start(); - System.out.println(); - - DecimalFormat df = new DecimalFormat("#00.00"); - System.out.println("Summary ISLE vs. CELOE"); - System.out.println("======================"); - System.out.println("accuracy: " + df.format(100*isle.getCurrentlyBestAccuracy())+"% vs. " + df.format(100*celoe.getCurrentlyBestAccuracy())+"%"); - System.out.println("expressions tested: " + isle.getClassExpressionTests() + " vs. " + celoe.getClassExpressionTests()); - System.out.println("search tree nodes: " + isle.getNodes().size() + " vs. " + celoe.getNodes().size()); - System.out.println("runtime: " + Helper.prettyPrintNanoSeconds(isle.getTotalRuntimeNs()) + " vs. " + Helper.prettyPrintNanoSeconds(celoe.getTotalRuntimeNs())); - - // only ISLE -// System.out.println("accuracy: " + df.format(100*isle.getCurrentlyBestAccuracy())+"%"); -// System.out.println("expressions tested: " + isle.getClassExpressionTests()); -// System.out.println("search tree nodes: " + isle.getNodes().size()); -// System.out.println("runtime: " + Helper.prettyPrintNanoSeconds(isle.getTotalRuntimeNs())); - - } - - @Test - public void testWordSenseDisambiguation() throws Exception { - Set<OWLEntity> context = StructuralEntityContext.getContext(ontology, df.getOWLClass(IRI.create(cls.getName()))); - System.out.println(context); - - Set<String> contextNL = StructuralEntityContext.getContextInNaturalLanguage(ontology, df.getOWLClass(IRI.create(cls.getName()))); - System.out.println(contextNL); - } - - -} Copied: trunk/components-core/src/test/java/org/dllearner/algorithms/isle/ISLETestCorpus.java (from rev 4122, trunk/components-core/src/test/java/org/dllearner/algorithms/isle/ISLETest.java) =================================================================== --- trunk/components-core/src/test/java/org/dllearner/algorithms/isle/ISLETestCorpus.java (rev 0) +++ trunk/components-core/src/test/java/org/dllearner/algorithms/isle/ISLETestCorpus.java 2013-10-15 14:46:35 UTC (rev 4123) @@ -0,0 +1,266 @@ +/** + * + */ +package org.dllearner.algorithms.isle; + +import com.google.common.base.Charsets; +import com.google.common.base.Joiner; +import com.google.common.io.Files; +import com.hp.hpl.jena.vocabulary.RDFS; + +import org.dllearner.algorithms.celoe.CELOE; +import org.dllearner.algorithms.isle.index.*; +import org.dllearner.algorithms.isle.index.semantic.SemanticIndex; +import org.dllearner.algorithms.isle.index.semantic.simple.SimpleSemanticIndex; +import org.dllearner.algorithms.isle.index.syntactic.OWLOntologyLuceneSyntacticIndexCreator; +import org.dllearner.algorithms.isle.index.syntactic.SyntacticIndex; +import org.dllearner.algorithms.isle.metrics.PMIRelevanceMetric; +import org.dllearner.algorithms.isle.metrics.RelevanceMetric; +import org.dllearner.algorithms.isle.metrics.RelevanceUtils; +import org.dllearner.algorithms.isle.textretrieval.EntityTextRetriever; +import org.dllearner.algorithms.isle.textretrieval.RDFSLabelEntityTextRetriever; +import org.dllearner.algorithms.isle.wsd.SimpleWordSenseDisambiguation; +import org.dllearner.algorithms.isle.wsd.WordSenseDisambiguation; +import org.dllearner.core.AbstractReasonerComponent; +import org.dllearner.core.KnowledgeSource; +import org.dllearner.core.owl.Entity; +import org.dllearner.core.owl.NamedClass; +import org.dllearner.kb.OWLAPIOntology; +import org.dllearner.learningproblems.ClassLearningProblem; +import org.dllearner.reasoning.FastInstanceChecker; +import org.dllearner.utilities.Helper; +import org.junit.Before; +import org.junit.Test; +import org.semanticweb.owlapi.apibinding.OWLManager; +import org.semanticweb.owlapi.model.IRI; +import org.semanticweb.owlapi.model.OWLDataFactory; +import org.semanticweb.owlapi.model.OWLEntity; +import org.semanticweb.owlapi.model.OWLOntology; +import org.semanticweb.owlapi.model.OWLOntologyManager; +import org.semanticweb.owlapi.vocab.OWLRDFVocabulary; + +import uk.ac.manchester.cs.owl.owlapi.OWLDataFactoryImpl; + +import java.io.File; +import java.io.IOException; +import java.text.DecimalFormat; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +/** + * Some tests for the ISLE algorithm. + * + * @author Lorenz Buehmann + * @author Jens Lehmann + */ +public class ISLETestCorpus { + + private OWLOntologyManager manager; + private OWLOntology ontology; + private OWLDataFactory df = new OWLDataFactoryImpl(); + private EntityTextRetriever textRetriever; + private RelevanceMetric relevance; + private String searchField = "label"; + private SemanticIndex semanticIndex; + private SyntacticIndex syntacticIndex; + + // we assume that the ontology is named "ontology.owl" and that all text files + // are in a subdirectory called "corpus" + private String testFolder = "../test/isle/swore/"; +// NamedClass cls = new NamedClass("http://example.com/father#father"); + NamedClass cls = new NamedClass("http://ns.softwiki.de/req/CustomerRequirement"); + + /** + * + */ + public ISLETestCorpus() throws Exception{ + manager = OWLManager.createOWLOntologyManager(); + ontology = manager.loadOntologyFromOntologyDocument(new File(testFolder + "ontology.owl")); + textRetriever = new RDFSLabelEntityTextRetriever(ontology); + syntacticIndex = new OWLOntologyLuceneSyntacticIndexCreator(ontology, df.getRDFSLabel(), searchField).buildIndex(); + + + } + + private Set<TextDocument> createDocuments(){ + Set<TextDocument> documents = new HashSet<TextDocument>(); + File folder = new File(testFolder+"corpus/"); + for (File file : folder.listFiles()) { + if(!file.isDirectory() && !file.isHidden()){ + try { + String text = Files.toString(file, Charsets.UTF_8); + documents.add(new TextDocument(text)); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return documents; + } + + + + /** + * @throws java.lang.Exception + */ + @Before + public void setUp() throws Exception{ + + } + +// @Test + public void testTextRetrieval() { + System.out.println("Text for entity " + cls + ":"); + Map<String, Double> relevantText = textRetriever.getRelevantText(cls); + System.out.println(Joiner.on("\n").join(relevantText.entrySet())); + } + +// @Test + public void testEntityRelevance() throws Exception { + System.out.println("Relevant entities for entity " + cls + ":"); + Map<Entity, Double> entityRelevance = RelevanceUtils.getRelevantEntities(cls, ontology, relevance); + System.out.println(Joiner.on("\n").join(entityRelevance.entrySet())); + } + + @Test + public void testSemanticIndexAnnotationProperty(){ + semanticIndex = new SimpleSemanticIndex(ontology, syntacticIndex); + semanticIndex.buildIndex(df.getRDFSLabel(), null); +// NamedClass nc = new NamedClass("http://example.com/father#father"); + Set<AnnotatedDocument> documents = semanticIndex.getDocuments(cls); + System.out.println("Documents for " + cls + ":\n" + documents); + } + + @Test + public void testSemanticIndexCorpus(){ + semanticIndex = new SimpleSemanticIndex(ontology, syntacticIndex); + semanticIndex.buildIndex(createDocuments()); + Set<AnnotatedDocument> documents = semanticIndex.getDocuments(cls); + System.out.println(documents); + } + + @Test + public void testISLE() throws Exception { + KnowledgeSource ks = new OWLAPIOntology(ontology); + AbstractReasonerComponent reasoner = new FastInstanceChecker(ks); + reasoner.init(); + + ClassLearningProblem lp = new ClassLearningProblem(reasoner); + lp.setClassToDescribe(cls); + lp.init(); + + semanticIndex = new SimpleSemanticIndex(ontology, syntacticIndex); + semanticIndex.buildIndex(createDocuments()); + + relevance = new PMIRelevanceMetric(semanticIndex); + + Map<Entity, Double> entityRelevance = RelevanceUtils.getRelevantEntities(cls, ontology, relevance); + NLPHeuristic heuristic = new NLPHeuristic(entityRelevance); + + ISLE isle = new ISLE(lp, reasoner); + isle.setHeuristic(heuristic); + isle.init(); + + isle.start(); + } + + @Test + public void testEntityLinkingWithLemmatizing() throws Exception { + EntityCandidatesTrie ect = new SimpleEntityCandidatesTrie(new RDFSLabelEntityTextRetriever(ontology), ontology, + new SimpleEntityCandidatesTrie.LemmatizingWordNetNameGenerator(5)); + LinguisticAnnotator linguisticAnnotator = new TrieLinguisticAnnotator(ect); + WordSenseDisambiguation wsd = new SimpleWordSenseDisambiguation(ontology); + EntityCandidateGenerator ecg = new TrieEntityCandidateGenerator(ontology, ect); + SemanticAnnotator semanticAnnotator = new SemanticAnnotator(wsd, ecg, linguisticAnnotator); + + Set<TextDocument> docs = createDocuments(); + for (TextDocument doc : docs) { + AnnotatedDocument annotated = semanticAnnotator.processDocument(doc); + System.out.println(annotated); + } + } + + @Test + public void testEntityLinkingWithSimpleStringMatching() throws Exception { + EntityCandidatesTrie ect = new SimpleEntityCandidatesTrie(new RDFSLabelEntityTextRetriever(ontology), ontology, + new SimpleEntityCandidatesTrie.DummyNameGenerator()); + TrieLinguisticAnnotator linguisticAnnotator = new TrieLinguisticAnnotator(ect); + linguisticAnnotator.setNormalizeWords(false); + WordSenseDisambiguation wsd = new SimpleWordSenseDisambiguation(ontology); + EntityCandidateGenerator ecg = new TrieEntityCandidateGenerator(ontology, ect); + SemanticAnnotator semanticAnnotator = new SemanticAnnotator(wsd, ecg, linguisticAnnotator); + + Set<TextDocument> docs = createDocuments(); + for (TextDocument doc : docs) { + AnnotatedDocument annotated = semanticAnnotator.processDocument(doc); + System.out.println(annotated); + } + } + + @Test + public void compareISLE() throws Exception { + KnowledgeSource ks = new OWLAPIOntology(ontology); + AbstractReasonerComponent reasoner = new FastInstanceChecker(ks); + reasoner.init(); + + ClassLearningProblem lp = new ClassLearningProblem(reasoner); + lp.setClassToDescribe(cls); + lp.init(); + + semanticIndex = new SimpleSemanticIndex(ontology, syntacticIndex, false); + semanticIndex.buildIndex(createDocuments()); + + relevance = new PMIRelevanceMetric(semanticIndex); + + Map<Entity, Double> entityRelevance = RelevanceUtils.getRelevantEntities(cls, ontology, relevance); + NLPHeuristic heuristic = new NLPHeuristic(entityRelevance); + + // run ISLE + ISLE isle = new ISLE(lp, reasoner); + isle.setHeuristic(heuristic); + isle.setSearchTreeFile(testFolder + "searchTreeISLE.txt"); + isle.setWriteSearchTree(true); +// isle.setReplaceSearchTree(true); + isle.setTerminateOnNoiseReached(true); + isle.init(); + isle.start(); + + // run standard CELOE as reference + CELOE celoe = new CELOE(lp, reasoner); +// celoe.setHeuristic(heuristic); + celoe.setSearchTreeFile(testFolder + "searchTreeCELOE.txt"); + celoe.setWriteSearchTree(true); + celoe.setTerminateOnNoiseReached(true); + celoe.setReplaceSearchTree(true); + celoe.init(); + celoe.start(); + System.out.println(); + + DecimalFormat df = new DecimalFormat("#00.00"); + System.out.println("Summary ISLE vs. CELOE"); + System.out.println("======================"); + System.out.println("accuracy: " + df.format(100*isle.getCurrentlyBestAccuracy())+"% vs. " + df.format(100*celoe.getCurrentlyBestAccuracy())+"%"); + System.out.println("expressions tested: " + isle.getClassExpressionTests() + " vs. " + celoe.getClassExpressionTests()); + System.out.println("search tree nodes: " + isle.getNodes().size() + " vs. " + celoe.getNodes().size()); + System.out.println("runtime: " + Helper.prettyPrintNanoSeconds(isle.getTotalRuntimeNs()) + " vs. " + Helper.prettyPrintNanoSeconds(celoe.getTotalRuntimeNs())); + + // only ISLE +// System.out.println("accuracy: " + df.format(100*isle.getCurrentlyBestAccuracy())+"%"); +// System.out.println("expressions tested: " + isle.getClassExpressionTests()); +// System.out.println("search tree nodes: " + isle.getNodes().size()); +// System.out.println("runtime: " + Helper.prettyPrintNanoSeconds(isle.getTotalRuntimeNs())); + + } + + @Test + public void testWordSenseDisambiguation() throws Exception { + Set<OWLEntity> context = StructuralEntityContext.getContext(ontology, df.getOWLClass(IRI.create(cls.getName()))); + System.out.println(context); + + Set<String> contextNL = StructuralEntityContext.getContextInNaturalLanguage(ontology, df.getOWLClass(IRI.create(cls.getName()))); + System.out.println(contextNL); + } + + +} Added: trunk/test/isle/swore/ontology_with_comments.owl =================================================================== --- trunk/test/isle/swore/ontology_with_comments.owl (rev 0) +++ trunk/test/isle/swore/ontology_with_comments.owl 2013-10-15 14:46:35 UTC (rev 4123) @@ -0,0 +1,2344 @@ +<?xml version="1.0"?> + + +<!DOCTYPE rdf:RDF [ + <!ENTITY req "http://ns.softwiki.de/req/" > + <!ENTITY foaf2 "http://xmlns.com/foaf/0.1/" > + <!ENTITY dcmitype "http://purl.org/dc/dcmitype/" > + <!ENTITY owl "http://www.w3.org/2002/07/owl#" > + <!ENTITY dc "http://purl.org/dc/elements/1.1/" > + <!ENTITY xsd "http://www.w3.org/2001/XMLSchema#" > + <!ENTITY owl2xml "http://www.w3.org/2006/12/owl2-xml#" > + <!ENTITY foaf "http://www.holygoat.co.uk/foaf.rdf#" > + <!ENTITY skos "http://www.w3.org/2004/02/skos/core#" > + <!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#" > + <!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#" > + <!ENTITY tags "http://www.holygoat.co.uk/owl/redwood/0.1/tags/" > +]> + + +<rdf:RDF xmlns="http://ns.softwiki.de/req/" + xml:base="http://ns.softwiki.de/req/" + xmlns:tags="http://www.holygoat.co.uk/owl/redwood/0.1/tags/" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:foaf2="http://xmlns.com/foaf/0.1/" + xmlns:foaf="http://www.holygoat.co.uk/foaf.rdf#" + xmlns:dcmitype="http://purl.org/dc/dcmitype/" + xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" + xmlns:owl2xml="http://www.w3.org/2006/12/owl2-xml#" + xmlns:owl="http://www.w3.org/2002/07/owl#" + xmlns:xsd="http://www.w3.org/2001/XMLSchema#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:req="http://ns.softwiki.de/req/" + xmlns:skos="http://www.w3.org/2004/02/skos/core#"> + <owl:Ontology rdf:about="http://ns.softwiki.de/req/"> + <rdfs:label rdf:datatype="&xsd;string">SoftWiki Ontology for Requirements Engineering</rdfs:label> + <rdfs:comment rdf:datatype="&xsd;string">A requirements engineering ontology for the SoftWiki project.</rdfs:comment> + <dc:contributor rdf:datatype="&xsd;string">Jens Lehmann</dc:contributor> + <dc:contributor rdf:datatype="&xsd;string">Sebastian Dietzold</dc:contributor> + <owl:versionInfo rdf:datatype="&xsd;string">version 1.00 - Thomas Riechert, Steffen Lohmann, Kim Lauenroth, Philipp Heim - starting the next generation of SWORE on 8th of July 2008 in Duisburg +version 0.8 - Sebastian Dietzold - skos, tags and dc alignment (title now functional) +version 0.7 - Sebastian Dietzold - labels completed and namespace correction +version 0.6 - name space changed to ns.softwiki.de/req +version 0.5 - refined by Thomas according to ESWC Poster submission +version 0.4 - refined by Jens on the way home from Essen +version 0.3 - refined by Jens during discussion with Kim and Steffen on 13 March 2007 in Essen +version 0.2 - refined by Thomas and Jens in the evening of 12 March 2007 in Essen +version 0.1 - simple initial version by Thomas and Jens before meeting in Essen</owl:versionInfo> + </owl:Ontology> + + + + <!-- + /////////////////////////////////////////////////////////////////////////////////////// + // + // Annotation properties + // + /////////////////////////////////////////////////////////////////////////////////////// + --> + + <owl:AnnotationProperty rdf:about="&owl;versionInfo"/> + <owl:AnnotationProperty rdf:about="&dc;contributor"/> + <owl:AnnotationProperty rdf:about="&rdfs;label"/> + <owl:AnnotationProperty rdf:about="&rdfs;comment"/> + + + + <!-- + /////////////////////////////////////////////////////////////////////////////////////// + // + // Datatypes + // + /////////////////////////////////////////////////////////////////////////////////////// + --> + + + + + <!-- http://www.w3.org/2001/XMLSchema#dateTime --> + + <rdf:Description rdf:about="&xsd;dateTime"> + <rdfs:label rdf:datatype="&xsd;string">dateTime</rdfs:label> + </rdf:Description> + + + + <!-- http://www.w3.org/2001/XMLSchema#string --> + + <rdf:Description rdf:about="&xsd;string"> + <rdfs:label rdf:datatype="&xsd;string">string</rdfs:label> + </rdf:Description> + + + + <!-- + /////////////////////////////////////////////////////////////////////////////////////// + // + // Object Properties + // + /////////////////////////////////////////////////////////////////////////////////////// + --> + + + + + <!-- http://ns.softwiki.de/req/broader --> + + <owl:ObjectProperty rdf:about="&req;broader"/> + + + + <!-- http://ns.softwiki.de/req/comments --> + + <owl:ObjectProperty rdf:about="&req;comments"> + <rdf:type rdf:resource="&owl;InverseFunctionalProperty"/> + <rdfs:domain rdf:resource="&req;AbstractComment"/> + <rdfs:range rdf:resource="&req;AbstractRequirement"/> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/conflicts --> + + <owl:ObjectProperty rdf:about="&req;conflicts"> + <rdf:type rdf:resource="&owl;SymmetricProperty"/> + <owl:inverseOf rdf:resource="&req;conflicts"/> + <rdfs:subPropertyOf rdf:resource="&req;undirectedrelation"/> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/cui --> + + <owl:ObjectProperty rdf:about="&req;cui"/> + + + + <!-- http://ns.softwiki.de/req/defines --> + + <owl:ObjectProperty rdf:about="&req;defines"> + <rdfs:label rdf:datatype="&xsd;string">defines</rdfs:label> + <rdfs:domain rdf:resource="&req;Author"/> + <rdfs:range> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <rdf:Description rdf:about="&req;AbstractComment"/> + <rdf:Description rdf:about="&req;AbstractRequirement"/> + <rdf:Description rdf:about="&req;Keyword"/> + </owl:unionOf> + </owl:Class> + </rdfs:range> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/definition --> + + <owl:ObjectProperty rdf:about="&req;definition"> + <rdfs:range rdf:resource="&xsd;string"/> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/depentsOn --> + + <owl:ObjectProperty rdf:about="&req;depentsOn"> + <rdfs:range rdf:resource="&req;AbstractRequirement"/> + <rdfs:domain rdf:resource="&req;AbstractRequirement"/> + <owl:inverseOf rdf:resource="&req;entails"/> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/details --> + + <owl:ObjectProperty rdf:about="&req;details"> + <rdfs:label rdf:datatype="&xsd;string">details</rdfs:label> + <rdfs:range rdf:resource="&req;AbstractRequirement"/> + <rdfs:domain rdf:resource="&req;AbstractRequirement"/> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/documentation --> + + <owl:ObjectProperty rdf:about="&req;documentation"/> + + + + <!-- http://ns.softwiki.de/req/entails --> + + <owl:ObjectProperty rdf:about="&req;entails"> + <rdfs:domain rdf:resource="&req;AbstractRequirement"/> + <rdfs:range rdf:resource="&req;AbstractRequirement"/> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/invalidates --> + + <owl:ObjectProperty rdf:about="&req;invalidates"> + <rdfs:domain rdf:resource="&req;AbstractRequirement"/> + <rdfs:range rdf:resource="&req;AbstractRequirement"/> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/isCommentedBy --> + + <owl:ObjectProperty rdf:about="&req;isCommentedBy"> + <rdfs:range rdf:resource="&req;AbstractComment"/> + <rdfs:domain rdf:resource="&req;AbstractRequirement"/> + <owl:inverseOf rdf:resource="&req;comments"/> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/isCreatedBy --> + + <owl:ObjectProperty rdf:about="&req;isCreatedBy"> + <rdf:type rdf:resource="&owl;FunctionalProperty"/> + <rdfs:label>is created by</rdfs:label> + <rdfs:comment>specifies the persons who created the requirement</rdfs:comment> + <rdfs:domain rdf:resource="&req;AbstractRequirement"/> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/isDefinedBy --> + + <owl:ObjectProperty rdf:about="&req;isDefinedBy"> + <rdfs:label rdf:datatype="&xsd;string">defined by</rdfs:label> + <rdfs:range rdf:resource="&req;Author"/> + <owl:inverseOf rdf:resource="&req;defines"/> + <rdfs:domain> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <rdf:Description rdf:about="&req;AbstractComment"/> + <rdf:Description rdf:about="&req;AbstractRequirement"/> + <rdf:Description rdf:about="&req;Keyword"/> + </owl:unionOf> + </owl:Class> + </rdfs:domain> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/isDetailedBy --> + + <owl:ObjectProperty rdf:about="&req;isDetailedBy"> + <rdfs:label rdf:datatype="&xsd;string">detailed by</rdfs:label> + <rdfs:domain rdf:resource="&req;AbstractRequirement"/> + <rdfs:range rdf:resource="&req;AbstractRequirement"/> + <owl:inverseOf rdf:resource="&req;details"/> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/isInvalidFor --> + + <owl:ObjectProperty rdf:about="&req;isInvalidFor"> + <rdf:type rdf:resource="&owl;InverseFunctionalProperty"/> + <rdfs:range rdf:resource="&req;AbstractRequirement"/> + <rdfs:domain rdf:resource="&req;AbstractRequirement"/> + <owl:inverseOf rdf:resource="&req;invalidates"/> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/isLeadingTo --> + + <owl:ObjectProperty rdf:about="&req;isLeadingTo"> + <rdfs:label rdf:datatype="&xsd;string">lead to</rdfs:label> + <rdfs:domain rdf:resource="&req;AbstractRequirement"/> + <rdfs:range rdf:resource="&req;AbstractSource"/> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/isRedundant --> + + <owl:ObjectProperty rdf:about="&req;isRedundant"> + <rdf:type rdf:resource="&owl;SymmetricProperty"/> + <owl:inverseOf rdf:resource="&req;isRedundant"/> + <rdfs:subPropertyOf rdf:resource="&req;undirectedrelation"/> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/isRelated --> + + <owl:ObjectProperty rdf:about="&req;isRelated"> + <rdf:type rdf:resource="&owl;SymmetricProperty"/> + <owl:inverseOf rdf:resource="&req;isRelated"/> + <rdfs:subPropertyOf rdf:resource="&req;undirectedrelation"/> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/isReleatedTo --> + + <owl:ObjectProperty rdf:about="&req;isReleatedTo"> + <rdfs:range rdf:resource="&req;Customer"/> + <rdfs:domain rdf:resource="&req;CustomerRequirement"/> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/isSimilarTo --> + + <owl:ObjectProperty rdf:about="&req;isSimilarTo"> + <rdf:type rdf:resource="&owl;SymmetricProperty"/> + <rdfs:domain rdf:resource="&req;AbstractRequirement"/> + <rdfs:range rdf:resource="&req;AbstractRequirement"/> + <owl:inverseOf rdf:resource="&req;isSimilarTo"/> + <rdfs:subPropertyOf rdf:resource="&req;undirectedrelation"/> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/leadsTo --> + + <owl:ObjectProperty rdf:about="&req;leadsTo"> + <rdfs:label rdf:datatype="&xsd;string">leads to</rdfs:label> + <rdfs:range rdf:resource="&req;AbstractRequirement"/> + <rdfs:domain rdf:resource="&req;AbstractSource"/> + <owl:inverseOf rdf:resource="&req;isLeadingTo"/> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/rates --> + + <owl:ObjectProperty rdf:about="&req;rates"> + <rdfs:range rdf:resource="&req;AbstractRequirement"/> + <rdfs:domain rdf:resource="&req;Rating"/> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/rational --> + + <owl:ObjectProperty rdf:about="&req;rational"> + <rdfs:label rdf:datatype="&xsd;string">rational</rdfs:label> + <rdfs:range rdf:resource="&xsd;string"/> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/refersTo --> + + <owl:ObjectProperty rdf:about="&req;refersTo"> + <rdfs:label rdf:datatype="&xsd;string">refers to</rdfs:label> + <rdfs:comment xml:lang="de">Relevanter Aspekt eines geplantes Systems (ähnlich zu Tagging).</rdfs:comment> + <rdfs:range rdf:resource="&req;AbstractReferencePoint"/> + <rdfs:domain rdf:resource="&req;AbstractRequirement"/> + <owl:inverseOf rdf:resource="&req;relevantRequirements"/> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/relevantRequirements --> + + <owl:ObjectProperty rdf:about="&req;relevantRequirements"> + <rdfs:label rdf:datatype="&xsd;string">relevant requirements</rdfs:label> + <rdfs:domain rdf:resource="&req;AbstractReferencePoint"/> + <rdfs:range rdf:resource="&req;AbstractRequirement"/> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/result --> + + <owl:ObjectProperty rdf:about="&req;result"> + <rdfs:label rdf:datatype="&xsd;string">result</rdfs:label> + <rdfs:comment xml:lang="de">z.B. Veränderung von priority und agreement</rdfs:comment> + <rdfs:range rdf:resource="&xsd;string"/> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/scenarioStep --> + + <owl:ObjectProperty rdf:about="&req;scenarioStep"> + <rdfs:label rdf:datatype="&xsd;string">scenario step</rdfs:label> + <rdfs:comment rdf:datatype="&xsd;string"></rdfs:comment> + <owl:versionInfo rdf:datatype="&xsd;string">TODO: es muss eine konkrete Reihenfolge der Steps gegeben sein (Listenstruktur)</owl:versionInfo> + <rdfs:range rdf:resource="&xsd;string"/> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/specifies --> + + <owl:ObjectProperty rdf:about="&req;specifies"> + <rdfs:range rdf:resource="&req;AbstractRequirement"/> + <rdfs:domain rdf:resource="&req;Topic"/> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/undirectedrelation --> + + <owl:ObjectProperty rdf:about="&req;undirectedrelation"> + <rdf:type rdf:resource="&owl;FunctionalProperty"/> + <rdf:type rdf:resource="&owl;InverseFunctionalProperty"/> + <rdf:type rdf:resource="&owl;SymmetricProperty"/> + <rdfs:comment rdf:datatype="&xsd;string">Rule: only one ration between the same pair of two requirements allowed.</rdfs:comment> + <owl:inverseOf rdf:resource="&req;undirectedrelation"/> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/votes --> + + <owl:ObjectProperty rdf:about="&req;votes"> + <rdfs:range rdf:resource="&req;AbstractRequirement"/> + <rdfs:domain rdf:resource="&req;Stakeholder"/> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/willLeadTo --> + + <owl:ObjectProperty rdf:about="&req;willLeadTo"> + <rdfs:domain rdf:resource="&req;Requirement"/> + <rdfs:range rdf:resource="&req;SystemRequirement"/> + </owl:ObjectProperty> + + + + <!-- http://purl.org/dc/elements/1.1/description --> + + <owl:ObjectProperty rdf:about="&dc;description"> + <rdfs:label rdf:datatype="&xsd;string">description</rdfs:label> + <rdfs:label xml:lang="de">Beschreibung</rdfs:label> + <rdfs:range rdf:resource="&xsd;string"/> + </owl:ObjectProperty> + + + + <!-- http://www.holygoat.co.uk/owl/redwood/0.1/tags/taggedWithTag --> + + <owl:ObjectProperty rdf:about="&tags;taggedWithTag"> + <rdfs:label xml:lang="de">Tags</rdfs:label> + </owl:ObjectProperty> + + + + <!-- + /////////////////////////////////////////////////////////////////////////////////////// + // + // Data properties + // + /////////////////////////////////////////////////////////////////////////////////////// + --> + + + + + <!-- http://ns.softwiki.de/req/averagePriorityRate --> + + <owl:DatatypeProperty rdf:about="&req;averagePriorityRate"> + <rdfs:subPropertyOf rdf:resource="&req;averageRate"/> + </owl:DatatypeProperty> + + + + <!-- http://ns.softwiki.de/req/averageQualityRate --> + + <owl:DatatypeProperty rdf:about="&req;averageQualityRate"> + <rdfs:subPropertyOf rdf:resource="&req;averageRate"/> + </owl:DatatypeProperty> + + + + <!-- http://ns.softwiki.de/req/averageRate --> + + <owl:DatatypeProperty rdf:about="&req;averageRate"> + <rdfs:comment rdf:datatype="&xsd;string">Is calculated by given rates.</rdfs:comment> + <rdfs:domain rdf:resource="&req;AbstractRequirement"/> + <rdfs:range rdf:resource="&xsd;float"/> + </owl:DatatypeProperty> + + + + <!-- http://ns.softwiki.de/req/changeDate --> + + <owl:DatatypeProperty rdf:about="&req;changeDate"> + <rdfs:domain rdf:resource="&req;AbstractRequirement"/> + <rdfs:range rdf:resource="&xsd;dateTime"/> + </owl:DatatypeProperty> + + + + <!-- http://ns.softwiki.de/req/creationDate --> + + <owl:DatatypeProperty rdf:about="&req;creationDate"> + <rdfs:domain rdf:resource="&req;AbstractRequirement"/> + <rdfs:range rdf:resource="&xsd;dateTime"/> + </owl:DatatypeProperty> + + + + <!-- http://ns.softwiki.de/req/definition --> + + <owl:DatatypeProperty rdf:about="&req;definition"> + <rdfs:domain rdf:resource="&req;DefinedKeyword"/> + </owl:DatatypeProperty> + + + + <!-- http://ns.softwiki.de/req/rate --> + + <owl:DatatypeProperty rdf:about="&req;rate"> + <rdfs:domain rdf:resource="&req;Rating"/> + <rdfs:range rdf:resource="&xsd;float"/> + </owl:DatatypeProperty> + + + + <!-- http://ns.softwiki.de/req/rational --> + + <owl:DatatypeProperty rdf:about="&req;rational"> + <rdf:type rdf:resource="&owl;FunctionalProperty"/> + <rdfs:label rdf:datatype="&xsd;string">rational</rdfs:label> + </owl:DatatypeProperty> + + + + <!-- http://ns.softwiki.de/req/result --> + + <owl:DatatypeProperty rdf:about="&req;result"> + <rdf:type rdf:resource="&owl;FunctionalProperty"/> + <rdfs:label rdf:datatype="&xsd;string">result</rdfs:label> + <rdfs:comment xml:lang="de">z.B. Veränderung von priority und agreement</rdfs:comment> + </owl:DatatypeProperty> + + + + <!-- http://ns.softwiki.de/req/role --> + + <owl:DatatypeProperty rdf:about="&req;role"> + <rdfs:domain rdf:resource="&req;Author"/> + </owl:DatatypeProperty> + + + + <!-- http://ns.softwiki.de/req/scenarioStep --> + + <owl:DatatypeProperty rdf:about="&req;scenarioStep"> + <rdfs:label rdf:datatype="&xsd;string">scenario step</rdfs:label> + <rdfs:comment rdf:datatype="&xsd;string"></rdfs:comment> + <owl:versionInfo rdf:datatype="&xsd;string">TODO: es muss eine konkrete Reihenfolge der Steps gegeben sein (Listenstruktur)</owl:versionInfo> + <rdfs:domain rdf:resource="&req;TextualScenario"/> + </owl:DatatypeProperty> + + + + <!-- http://ns.softwiki.de/req/state --> + + <owl:DatatypeProperty rdf:about="&req;state"> + <rdfs:domain rdf:resource="&req;AbstractRequirement"/> + <rdfs:range> + <rdfs:Datatype> + <owl:oneOf> + <rdf:Description> + <rdf:type rdf:resource="&rdf;List"/> + <rdf:first rdf:datatype="&xsd;string">isNegativDecided</rdf:first> + <rdf:rest> + <rdf:Description> + <rdf:type rdf:resource="&rdf;List"/> + <rdf:first rdf:datatype="&xsd;string">isPositvDecided</rdf:first> + <rdf:rest rdf:resource="&rdf;nil"/> + </rdf:Description> + </rdf:rest> + </rdf:Description> + </owl:oneOf> + </rdfs:Datatype> + </rdfs:range> + </owl:DatatypeProperty> + + + + <!-- http://ns.softwiki.de/req/voteTime --> + + <owl:DatatypeProperty rdf:about="&req;voteTime"> + <rdfs:label rdf:datatype="&xsd;string">vote time</rdfs:label> + <rdfs:domain rdf:resource="&req;Vote"/> + <rdfs:range rdf:resource="&xsd;dateTime"/> + </owl:DatatypeProperty> + + + + <!-- http://purl.org/dc/elements/1.1/description --> + + <owl:DatatypeProperty rdf:about="&dc;description"> + <rdf:type rdf:resource="&owl;FunctionalProperty"/> + <rdfs:label rdf:datatype="&xsd;string">description</rdfs:label> + <rdfs:label xml:lang="de">Beschreibung</rdfs:label> + <rdfs:domain> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <rdf:Description rdf:about="&req;Goal"/> + <rdf:Description rdf:about="&req;Requirement"/> + </owl:unionOf> + </owl:Class> + </rdfs:domain> + </owl:DatatypeProperty> + + + + <!-- http://purl.org/dc/elements/1.1/title --> + + <owl:DatatypeProperty rdf:about="&dc;title"/> + + + + <!-- + /////////////////////////////////////////////////////////////////////////////////////// + // + // Classes + // + /////////////////////////////////////////////////////////////////////////////////////// + --> + + + + + <!-- http://ns.softwiki.de/req/AbstractComment --> + + <owl:Class rdf:about="&req;AbstractComment"> + <rdfs:label>abstract comment</rdfs:label> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/AbstractReferencePoint --> + + <owl:Class rdf:about="&req;AbstractReferencePoint"> + <rdfs:label rdf:datatype="&xsd;string">reference point</rdfs:label> + <owl:disjointWith rdf:resource="&req;AbstractRequirement"/> + <owl:disjointWith rdf:resource="&req;AbstractSource"/> + <owl:disjointWith rdf:resource="&req;Author"/> + <owl:disjointWith rdf:resource="&req;Vote"/> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/AbstractRequirement --> + + <owl:Class rdf:about="&req;AbstractRequirement"> + <rdfs:label rdf:datatype="&xsd;string">abstract requirement</rdfs:label> + <rdfs:label xml:lang="de">abstraktes Requirement</rdfs:label> + <owl:disjointWith rdf:resource="&req;AbstractSource"/> + <owl:disjointWith rdf:resource="&req;Author"/> + <owl:disjointWith rdf:resource="&req;Vote"/> + <rdfs:comment rdf:datatype="&xsd;string">Es ist ungünstig, dass Requirement Subklasse von AbstractRequirement ist.</rdfs:comment> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/AbstractSource --> + + <owl:Class rdf:about="&req;AbstractSource"> + <rdfs:label rdf:datatype="&xsd;string">abstract source</rdfs:label> + <rdfs:subClassOf rdf:resource="&owl;Thing"/> + <owl:disjointWith rdf:resource="&req;Vote"/> + <rdfs:comment rdf:datatype="&xsd;string"></rdfs:comment> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/AllocatedRequirement --> + + <owl:Class rdf:about="&req;AllocatedRequirement"> + <rdfs:label>allocated requirement</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;Requirement"/> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/ApplicationPointer --> + + <owl:Class rdf:about="&req;ApplicationPointer"> + <rdfs:label>application pointer</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;AbstractReferencePoint"/> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/ApplicationState --> + + <owl:Class rdf:about="&req;ApplicationState"> + <rdfs:label>application state</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;AbstractReferencePoint"/> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/Author --> + + <owl:Class rdf:about="&req;Author"> + <rdfs:label xml:lang="de">Autor</rdfs:label> + <rdfs:label xml:lang="en">author</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;Stakeholder"/> + <owl:disjointWith rdf:resource="&req;Vote"/> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/Comment --> + + <owl:Class rdf:about="&req;Comment"> + <rdfs:label>comment</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;AbstractComment"/> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/Creditor --> + + <owl:Class rdf:about="&req;Creditor"> + <rdfs:label>creditor</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;Stakeholder"/> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/Customer --> + + <owl:Class rdf:about="&req;Customer"> + <rdfs:label>customer</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;Stakeholder"/> + <owl:disjointWith rdf:resource="&req;Programmer"/> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/CustomerRequirement --> + + <owl:Class rdf:about="&req;CustomerRequirement"> + <rdfs:label>customer requirement</rdfs:label> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <rdf:Description rdf:about="&req;Requirement"/> + <owl:Restriction> + <owl:onProperty rdf:resource="&req;isCreatedBy"/> + <owl:someValuesFrom rdf:resource="&req;Customer"/> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + <rdfs:subClassOf rdf:resource="&req;Requirement"/> + <rdfs:comment>A customer requirement is a requirement, which was created by a customer.</rdfs:comment> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/DefinedKeyword --> + + <owl:Class rdf:about="&req;DefinedKeyword"> + <rdfs:label>defined keyword</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;Keyword"/> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/DerivedRequirement --> + + <owl:Class rdf:about="&req;DerivedRequirement"> + <rdfs:label>derived requirement</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;Requirement"/> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/DesignRequirement --> + + <owl:Class rdf:about="&req;DesignRequirement"> + <rdfs:label>design requirement</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;Requirement"/> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/Document --> + + <owl:Class rdf:about="&req;Document"> + <rdfs:label>document</rdfs:label> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <rdf:Description rdf:about="&req;AbstractSource"/> + <owl:Restriction> + <owl:onProperty rdf:resource="&req;leadsTo"/> + <owl:someValuesFrom rdf:resource="&req;AbstractRequirement"/> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + <rdfs:subClassOf rdf:resource="&req;AbstractSource"/> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/FunctionalRequirement --> + + <owl:Class rdf:about="&req;FunctionalRequirement"> + <rdfs:label rdf:datatype="&xsd;string">functional requirement</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;Requirement"/> + <owl:disjointWith rdf:resource="&req;QualityRequirement"/> + <rdfs:comment rdf:datatype="&xsd;string">refers to functional reference point, for instance components of the system</rdfs:comment> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/Goal --> + + <owl:Class rdf:about="&req;Goal"> + <rdfs:label rdf:datatype="&xsd;string">goal</rdfs:label> + <rdfs:label xml:lang="de">Ziel</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;AbstractRequirement"/> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&dc;description"/> + <owl:cardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </rdfs:subClassOf> + <owl:disjointWith rdf:resource="&req;Requirement"/> + <owl:disjointWith rdf:resource="&req;Scenario"/> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/Government --> + + <owl:Class rdf:about="&req;Government"> + <rdfs:label>government</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;Stakeholder"/> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/Keyword --> + + <owl:Class rdf:about="&req;Keyword"> + <rdfs:label>keyword</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;AbstractReferencePoint"/> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/PerformanceRequirement --> + + <owl:Class rdf:about="&req;PerformanceRequirement"> + <rdfs:label>performance requirement</rdfs:label> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <rdf:Description rdf:about="&req;Requirement"/> + <owl:Restriction> + <owl:onProperty rdf:resource="&req;willLeadTo"/> + <owl:someValuesFrom rdf:resource="&req;SystemRequirement"/> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + <rdfs:subClassOf rdf:resource="&req;Requirement"/> + <owl:disjointWith rdf:resource="&req;SystemRequirement"/> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/PriorityRating --> + + <owl:Class rdf:about="&req;PriorityRating"> + <rdfs:label>priority rating</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;Rating"/> + <rdfs:comment rdf:datatype="&xsd;string">Rule: Every Author only defines at most one rating about the priority for each requirement.</rdfs:comment> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/Programmer --> + + <owl:Class rdf:about="&req;Programmer"> + <rdfs:label>programmer</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;Stakeholder"/> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/QualityRating --> + + <owl:Class rdf:about="&req;QualityRating"> + <rdfs:label>quality rating</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;Rating"/> + <rdfs:comment rdf:datatype="&xsd;string">Rule: Every Author only defines at most one rating about the quality for each requirement.</rdfs:comment> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/QualityRequirement --> + + <owl:Class rdf:about="&req;QualityRequirement"> + <rdfs:label rdf:datatype="&xsd;string">quality requirement</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;Requirement"/> + <rdfs:comment rdf:datatype="&xsd;string">refers to quality reference point, e.g. reliability, performance, usability</rdfs:comment> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/Rating --> + + <owl:Class rdf:about="&req;Rating"> + <rdfs:label>rating</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;AbstractComment"/> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/Requirement --> + + <owl:Class rdf:about="&req;Requirement"> + <rdfs:label rdf:datatype="&xsd;string">requirement</rdfs:label> + <rdfs:label xml:lang="de">Anforderung(en)</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;AbstractRequirement"/> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&dc;description"/> + <owl:cardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </rdfs:subClassOf> + <owl:disjointWith rdf:resource="&req;Scenario"/> + <rdfs:comment rdf:datatype="&xsd;string"></rdfs:comment> + <owl:versionInfo rdf:datatype="&xsd;string">TODO: semantische Verfeinerung geplant, d.h. Anforderungen nicht nur als Textstring, sondern z.B. als RDF-Triple formulieren</owl:versionInfo> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/Scenario --> + + <owl:Class rdf:about="&req;Scenario"> + <rdfs:label rdf:datatype="&xsd;string">scenario</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;AbstractRequirement"/> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/SeniorManagementStaff --> + + <owl:Class rdf:about="&req;SeniorManagementStaff"> + <rdfs:label>senior management staff</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;Stakeholder"/> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/Stakeholder --> + + <owl:Class rdf:about="&req;Stakeholder"> + <rdfs:label>stakeholder</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;AbstractSource"/> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/SystemRequirement --> + + <owl:Class rdf:about="&req;SystemRequirement"> + <rdfs:label>system requirement</rdfs:label> + <rdfs:subClassOf rdf:resource="&owl;Thing"/> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/TextualScenario --> + + <owl:Class rdf:about="&req;TextualScenario"> + <rdfs:label rdf:datatype="&xsd;string">textual scenario</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;Scenario"/> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&req;scenarioStep"/> + <owl:minCardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:minCardinality> + </owl:Restriction> + </rdfs:subClassOf> + <rdfs:comment xml:lang="de">Szenario, welches aus mehreren textuell beschriebenen Szenarioschritten besteht.</rdfs:comment> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/Topic --> + + <owl:Class rdf:about="&req;Topic"> + <rdfs:label>topic</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;DefinedKeyword"/> + <rdfs:comment rdf:datatype="&xsd;string">Rule: Every Requirement refers to exact one topic.</rdfs:comment> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/TradeUnion --> + + <owl:Class rdf:about="&req;TradeUnion"> + <rdfs:label>trade union</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;Stakeholder"/> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/Vote --> + + <owl:Class rdf:about="&req;Vote"> + <rdfs:label rdf:datatype="&xsd;string">vote</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;AbstractComment"/> + <rdfs:comment rdf:datatype="&xsd;string">Rule: Every Author only votes at most one requirement.</rdfs:comment> + </owl:Class> + + + + <!-- http://purl.org/dc/dcmitype/Image --> + + <owl:Class rdf:about="&dcmitype;Image"> + <rdfs:label>image</rdfs:label> + </owl:Class> + + + + <!-- http://www.w3.org/2000/01/rdf-schema#Resource --> + + <owl:Class rdf:about="&rdfs;Resource"> + <rdfs:label>resource</rdfs:label> + </owl:Class> + + + + <!-- http://www.w3.org/2001/XMLSchema#string --> + + <owl:Class rdf:about="&xsd;string"> + <rdfs:label rdf:datatype="&xsd;string">string</rdfs:label> + </owl:Class> + + + + <!-- http://www.w3.org/2002/07/owl#Datatype --> + + <owl:Class rdf:about="&owl;Datatype"/> + + + + <!-- http://www.w3.org/2002/07/owl#Thing --> + + <owl:Class rdf:about="&owl;Thing"/> + + + + <!-- http://www.w3.org/2004/02/skos/core#Concept --> + + <owl:Class rdf:about="&skos;Concept"> + <rdfs:label>concept</rdfs:label> + <rdfs:label xml:lang="de">Thema</rdfs:label> + </owl:Class> + + + + <!-- http://xmlns.com/foaf/0.1/Document --> + + <owl:Class rdf:about="&foaf2;Document"> + <rdfs:label>document</rdfs:label> + </owl:Class> + + + + <!-- + /////////////////////////////////////////////////////////////////////////////////////// + // + // Individuals + // + /////////////////////////////////////////////////////////////////////////////////////// + --> + + + + + <!-- http://ns.softwiki.de/req/1 --> + + <owl:Thing rdf:about="&req;1"> + <rdf:type rdf:resource="&req;QualityRating"/> + <rdf:type rdf:resource="&owl;NamedIndividual"/> ... [truncated message content] |