【问题标题】:ontology research EquivalentTo class from multiple single classes本体研究 EquivalentTo class from multiple single classes
【发布时间】:2017-11-15 09:17:15
【问题描述】:

我正在玩 Pizza 本体,我试图获得我理解的推断知识。 对于一些单一的类,我想获取使用它们的其他类的名称。

确切地说,在 Pizza 本体中我们可以找到:

  • 食物
  • 食物/披萨
  • Food/Pizza/CheeseyPizza(相当于 Pizza and (hasTopping some CheeseTopping)hasBase some PizzaBase 的子类)
  • 食品/披萨基地
  • 食物/PizzaBase/DeepPanBase
  • 食物/披萨配料
  • 食物/PizzaTopping/MozzarellaTopping

我正在尝试使用MozzarellaToppingDeepPanBase 编写一个SPARQL 请求,这可能会给我CheeseyPizza 的结果...但我不知道该怎么做,我也不知道如果可以的话。 (我在某处读到可以对个人进行推断,而不是对类 (https://stackoverflow.com/questions/28396707/sparql-query-on-restriction-list-equivalent-to-in-protégé)...但 Protégé 似乎对CheeseyPizza 进行推断。

目前,我刚刚获得了共同祖先列表(使用 Jena 示例):

showQuery(model, prefix
        + "SELECT ?o "
        + "WHERE { "
        + " pizza:MozzarellaTopping rdfs:subClassOf* ?o . "
        + " pizza:DeepPanBase rdfs:subClassOf* ?o . "
        + " FILTER ( ! isBlank(?o) ) " + "} "
        );

是否有 SPARQL 请求从单个类中获取推断类,而不知道本体结构? (不知道本体结构:在祖先的要求中,我只是输入了两个类的名称,但我从未给出 Food/Pizza 结构......我真的很想对整个本体进行真正的研究,包括所有需要 Mozzarella 和深盘)

谢谢!

编辑:

我忘了说我也在考虑使用推理器(我正在研究 Jena)。 但我不知道这是否是正确的制作方法。

【问题讨论】:

  • 对于您的情况,您需要 OWL RL 作为必须由 SPARQL 引擎实现的蕴涵机制。在耶拿你可以使用OntModel,关于如何使用推理的文档在这里:jena.apache.org/documentation/inference

标签: sparql rdf jena owl ontology


【解决方案1】:

我使用了很多文档,我想我终于找到了解决方案。 这并不完全符合我的预期,但现在已经足够了。 主要思想:创建个体(概念/类的实例),将它们连接在一起,并要求推理者发现事物(推论)。

有用的文档(感谢 StakOverflow 提供的链接):

https://jena.apache.org/documentation/inference/#owl

http://jena.apache.org/documentation/ontology/#instances-or-individuals

http://jena.apache.org/documentation/ontology/index.html

首先,我的解决方案是什么:

  • 实例化基础模型(并加载披萨本体)
  • 实例化推理模型(并选择推理器)
  • 在基础模型中创建:多个个体及其之间的属性/关系
  • 检查模型的有效性,请求断言(在基本模型中)和

它正在工作。我可以创建一个单独的“MozzarellaTopping”、一个单独的“DeepPanBase”和一个单独的“Food”。我为“Food”添加了两个属性:hasBase 到单个 DeepPanBase,hasTopping 到单个 MozzarellaTopping。

这里是一步一步解释的代码(完整代码在最后):

从 Pizza.owl.rdf 实例化和加载基础模型

    public static final String  SOURCE      = "./resources/";
    public static final String  PIZZA_NS    = "http://www.co-ode.org/ontologies/pizza/pizza.owl#";

    public void run()
    {
        // Prefix/Header for SPARQL requests
        final String prefix = "prefix pizza: <" + PIZZA_NS + ">\n"
                + "prefix rdfs: <" + RDFS.getURI() + ">\n" + "prefix owl: <"
                + OWL.getURI() + ">\n";
        // Prefix for classes, individuals, ... for every object
        final String NS = PIZZA_NS;

        System.out.println("CREATE THE BASE MODEL\n");
        // CREATE THE BASE MODEL
        OntModel base = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
        base.read(SOURCE + "pizza.owl.rdf", "RDF/XML");

创建推断模型:

    System.out.println("CREATE THE REASONING MODEL USING THE BASE\n");
        // CREATE THE REASONING MODEL USING THE BASE
        OntModel inf = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM_MICRO_RULE_INF, base);
        // OWL_MEM_MICRO_RULE_INF // It works + Very quick
        // OWL_MEM_MINI_RULE_INF // It works + Slow (40Mins) + 1,1Go RAM (Validity is slow)
        // OWL_MEM_RULE_INF // It works (mights loop if error) + VERY SLOW + 2,1 GO RAM (unfinished)
        // OWL_MEM_TRANS_INF // It works (SPARQL mights not work) + Ultra Speed / No inference

在 java 中为未来的个体实例化获取有用的类和属性:

        System.out.println("CREATE INDIVIDUALS FOR TESTING PURPOSE\n");
        // CREATE INDIVIDUALS FOR TESTING PURPOSE

        // Instantiate each useful Class
        OntClass ThingClass = base.getOntClass(NS + "owl:Thing");
        OntClass FoodClass = base.getOntClass(NS + "Food");
        OntClass IceCreamClass = base.getOntClass(NS + "IceCream");
        OntClass PizzaClass = base.getOntClass(NS + "Pizza");
        OntClass MozzaToppingClass = base.getOntClass(NS + "MozzarellaTopping");
        OntClass DeepPanBaseClass = base.getOntClass(NS + "DeepPanBase");

        // Instantiate each useful Property (relation)
        OntProperty hasIngredientProperty = base.createObjectProperty(NS + "hasIngredient");
        OntProperty hasBaseProperty = base.createObjectProperty(NS + "hasBase");
        OntProperty hasToppingProperty = base.createObjectProperty(NS + "hasTopping");

        // Instantiate each useful individual
        Individual MozzaTopping = base.createIndividual(NS + "MyMozzaTopping", MozzaToppingClass);
        Individual DeepPanBase = base.createIndividual(NS + "MyDeepPanBase", DeepPanBaseClass);

然后,我首先检查一个同时参加两个课程(MozzarellaTopping 和 DeepPanBase)的人...推理者看到 CheeseyPizza,但有效性报告不起作用:

        /*
         * BEGINNING OF THE TESTS HERE
         */
        System.out.println("\nTEST VALIDITY BEFORE ADDING INDIVIDUALS\n");
        checkValidity(inf);

        // Instantiate testing individuals
        // MyPizza1 : individual with 2 classes simultaneously (Mozza & DeepPan)
        Individual MyPizza1 = base.createIndividual(NS + "MyPizza1", ThingClass);
        MyPizza1.setOntClass(MozzaToppingClass);
        MyPizza1.addOntClass(DeepPanBaseClass);

        System.out.println("\nTest MyPizza1\n");
        showAsserted(base, NS + "MyPizza1");
        showInferred(inf, NS + "MyPizza1");
        System.out.println("\nTest Validity of MyPizza1 : ");
        checkValidity(inf); // ERROR

        MyPizza1.remove();
        System.out.println("\nRemove MyPizza1, Validity should be OK now : ");
        checkValidity(inf); // OK

然后,我尝试了一个“食物”(或“披萨”)个体,我与之有关系 hasBase DeepPanBase,另一个关系 hasTopping MozzarellaTopping。它正在工作,有效性检查存在问题:

        // MyPizza2 : individual of class "Food", linked with Mozza & DeepPan
        Individual MyPizza2 = base.createIndividual(NS + "MyPizza2", FoodClass);
        MyPizza2.addProperty(hasBaseProperty, DeepPanBase);
        MyPizza2.addProperty(hasToppingProperty, MozzaTopping);

        System.out.println("\nTest MyPizza2\n");
        showAsserted(base, NS + "MyPizza2");
        showInferred(inf, NS + "MyPizza2");
        System.out.println("\nTest Validity of MyPizza2 : ");
        checkValidity(inf); // OK

        MyPizza2.remove();
        System.out.println("\nRemove MyPizza2, Validity should be OK now : ");
        checkValidity(inf); // OK

然后,我尝试了一个 DeepPanBase 个体,我给它一个属性/关系 hasTopping MozzarellaTopping。推理器的行为也如您所想:他说这是 CheeseyPizza,但有效性检查表明这是错误的。

        // MyPizza3 : individual of class "DeepPanBase", linked with Mozza
        Individual MyPizza3 = base.createIndividual(NS + "MyPizza3", DeepPanBaseClass);
        MyPizza3.addProperty(hasToppingProperty, MozzaTopping);

        System.out.println("\nTest MyPizza3\n");
        showAsserted(base, NS + "MyPizza3");
        showInferred(inf, NS + "MyPizza3");
        System.out.println("\nTest Validity of MyPizza3 : ");
        checkValidity(inf); // ERROR

        MyPizza3.remove();
        System.out.println("\nRemove MyPizza3, Validity should be OK now : ");
        checkValidity(inf); // OK

最后,对冰淇淋个体(食物)进行了测试。我给它一个关系 hasBase DeepPanBase 和另一个关系 hasTopping MozzarellaTopping。推理者说这是 CheeseyPizza,而有效性检查则认为这是错误的。

        // IceCream : individual of class "IceCream", linked with Moza & DeePan
        Individual MyIceCream = base.createIndividual(NS + "MyIceCream", IceCreamClass);
        MyIceCream.addProperty(hasBaseProperty, DeepPanBase);
        MyIceCream.addProperty(hasToppingProperty, MozzaTopping);

        System.out.println("\nTest IceCream\n");
        showAsserted(base, NS + "MyIceCream");
        showInferred(inf, NS + "MyIceCream");
        System.out.println("\nTest Validity of IceCream : ");
        checkValidity(inf);

有效性检查器是正确的。如果您检查什么是比萨饼,您会看到它是一种单独的“食物”,其中包含“配料”/配料,以及至少一个 PizzaBase……但它也不是 PizzaTopping,不是 PizzaBase,也不是冰淇淋。 (这就是为什么有效性检查会哭的原因......如果我尝试将 PizzaTopping 放在冰淇淋上,这是不可能的......)


无论如何,正如我所承诺的,我在这里给出完整的代码:

    /*
     * Example of usage of reasoner with Java. Everything is coming from Apache JENA
     * examples. I modified a lot of things for making my personal requests.
     * Fabrice Boissier
     */

    package Jena_Reasoner_Simple;

    import java.util.Date;
    import java.util.Iterator;

    import org.apache.jena.ontology.Individual;
    import org.apache.jena.ontology.OntClass;
    import org.apache.jena.ontology.OntModel;
    import org.apache.jena.ontology.OntModelSpec;
    import org.apache.jena.ontology.OntProperty;
    import org.apache.jena.rdf.model.ModelFactory;
    import org.apache.jena.rdf.model.Resource;
    import org.apache.jena.reasoner.ValidityReport;
    import org.apache.jena.vocabulary.OWL;
    import org.apache.jena.vocabulary.RDFS;

    public class Simple_Reasoner_StepByStep
    {
    public static void main(String[] args)
    {
        System.out.println("BEGIN : " + new Date());
        new Simple_Reasoner_StepByStep().run();
        System.out.println("END : " + new Date());
    }

    public static final String  SOURCE      = "./resources/";
    public static final String  PIZZA_NS    = "http://www.co-ode.org/ontologies/pizza/pizza.owl#";

    public void run()
    {
        // Prefix/Header for SPARQL requests
        final String prefix = "prefix pizza: <" + PIZZA_NS + ">\n"
                + "prefix rdfs: <" + RDFS.getURI() + ">\n" + "prefix owl: <"
                + OWL.getURI() + ">\n";
        // Prefix for classes, individuals, ... for every object
        final String NS = PIZZA_NS;

        System.out.println("CREATE THE BASE MODEL\n");
        // CREATE THE BASE MODEL
        OntModel base = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
        base.read(SOURCE + "pizza.owl.rdf", "RDF/XML");

        System.out.println("CREATE THE REASONING MODEL USING THE BASE\n");
        // CREATE THE REASONING MODEL USING THE BASE
        OntModel inf = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM_MICRO_RULE_INF, base);
        // OWL_MEM_MICRO_RULE_INF // It works + Very quick
        // OWL_MEM_MINI_RULE_INF // It works + Slow (40Mins) + 1,1Go RAM (Validity is slow)
        // OWL_MEM_RULE_INF // It works (mights loop if error) + VERY SLOW + 2,1 GO RAM (unfinished)
        // OWL_MEM_TRANS_INF // It works (SPARQL mights not work) + Ultra Speed / No inference

        System.out.println("CREATE INDIVIDUALS FOR TESTING PURPOSE\n");
        // CREATE INDIVIDUALS FOR TESTING PURPOSE

        // Instantiate each useful Class
        OntClass ThingClass = base.getOntClass(NS + "owl:Thing");
        OntClass FoodClass = base.getOntClass(NS + "Food");
        OntClass IceCreamClass = base.getOntClass(NS + "IceCream");
        OntClass PizzaClass = base.getOntClass(NS + "Pizza");
        OntClass MozzaToppingClass = base.getOntClass(NS + "MozzarellaTopping");
        OntClass DeepPanBaseClass = base.getOntClass(NS + "DeepPanBase");

        // Instantiate each useful Property (relation)
        OntProperty hasIngredientProperty = base.createObjectProperty(NS + "hasIngredient");
        OntProperty hasBaseProperty = base.createObjectProperty(NS + "hasBase");
        OntProperty hasToppingProperty = base.createObjectProperty(NS + "hasTopping");

        // Instantiate each useful individual
        Individual MozzaTopping = base.createIndividual(NS + "MyMozzaTopping", MozzaToppingClass);
        Individual DeepPanBase = base.createIndividual(NS + "MyDeepPanBase", DeepPanBaseClass);

        /*
         * BEGINNING OF THE TESTS HERE
         */
        System.out.println("\nTEST VALIDITY BEFORE ADDING INDIVIDUALS\n");
        checkValidity(inf);

        // Instantiate testing individuals
        // MyPizza1 : individual with 2 classes simultaneously (Mozza & DeepPan)
        Individual MyPizza1 = base.createIndividual(NS + "MyPizza1", ThingClass);
        MyPizza1.setOntClass(MozzaToppingClass);
        MyPizza1.addOntClass(DeepPanBaseClass);

        System.out.println("\nTest MyPizza1\n");
        showAsserted(base, NS + "MyPizza1");
        showInferred(inf, NS + "MyPizza1");
        System.out.println("\nTest Validity of MyPizza1 : ");
        checkValidity(inf); // ERROR

        MyPizza1.remove();
        System.out.println("\nRemove MyPizza1, Validity should be OK now : ");
        checkValidity(inf); // OK

        // MyPizza2 : individual of class "Food", linked with Mozza & DeepPan
        Individual MyPizza2 = base.createIndividual(NS + "MyPizza2", FoodClass);
        MyPizza2.addProperty(hasBaseProperty, DeepPanBase);
        MyPizza2.addProperty(hasToppingProperty, MozzaTopping);

        System.out.println("\nTest MyPizza2\n");
        showAsserted(base, NS + "MyPizza2");
        showInferred(inf, NS + "MyPizza2");
        System.out.println("\nTest Validity of MyPizza2 : ");
        checkValidity(inf); // OK

        MyPizza2.remove();
        System.out.println("\nRemove MyPizza2, Validity should be OK now : ");
        checkValidity(inf); // OK

        // MyPizza3 : individual of class "DeepPanBase", linked with Mozza
        Individual MyPizza3 = base.createIndividual(NS + "MyPizza3", DeepPanBaseClass);
        MyPizza3.addProperty(hasToppingProperty, MozzaTopping);

        System.out.println("\nTest MyPizza3\n");
        showAsserted(base, NS + "MyPizza3");
        showInferred(inf, NS + "MyPizza3");
        System.out.println("\nTest Validity of MyPizza3 : ");
        checkValidity(inf); // ERROR

        MyPizza3.remove();
        System.out.println("\nRemove MyPizza3, Validity should be OK now : ");
        checkValidity(inf); // OK

        // IceCream : individual of class "IceCream", linked with Moza & DeePan
        Individual MyIceCream = base.createIndividual(NS + "MyIceCream", IceCreamClass);
        MyIceCream.addProperty(hasBaseProperty, DeepPanBase);
        MyIceCream.addProperty(hasToppingProperty, MozzaTopping);

        System.out.println("\nTest IceCream\n");
        showAsserted(base, NS + "MyIceCream");
        showInferred(inf, NS + "MyIceCream");
        System.out.println("\nTest Validity of IceCream : ");
        checkValidity(inf);

        /*
         * END OF THE TESTS HERE
         */

        System.out.println("End Tests\n");
    }

    protected void showAsserted(OntModel m, String individualURI)
    {
        // list the asserted types
        Individual instance = m.getIndividual(individualURI); // BASE
        for (Iterator<Resource> i = instance.listRDFTypes(false); i.hasNext();)
        {
            System.out
                    .println(instance.getURI() + " is asserted in class " + i.next());
        }
    }

    protected void showInferred(OntModel m, String individualURI)
    {
        // list the inferred types
        Individual instance = m.getIndividual(individualURI); // INFERED
        for (Iterator<Resource> i = instance.listRDFTypes(false); i.hasNext();)
        {
            System.out.println(
                    instance.getURI() + " is inferred to be in class " + i.next());
        }
    }

    protected void checkValidity(OntModel inf)
    {
        ValidityReport validity = inf.validate();
        if (validity.isValid())
        {
            System.out.println("OK");
        }
        else
        {
            System.out.println("Conflicts");
            for (Iterator i = validity.getReports(); i.hasNext();)
            {
                System.out.println(" - " + i.next());
            }
        }
    }

}

要让代码在 Eclipse 或其他平台上运行,您首先需要将披萨本体文件 (pizza.owl.rdf) 放在名为“resources”的文件夹中,然后添加这些 JAR(在 Eclipse 中:构建路径 - > 配置构建路径 -> 添加 JAR):

  • commons-cli-1.3.jar
  • commons-lang3-3.4.jar
  • httpclient-4.5.2.jar
  • httpclient-cache-4.5.2.jar
  • httpcore-4.4.4.jar
  • jackson-annotations-2.7.0.jar
  • jackson-core-2.7.4.jar
  • jackson-databind-2.7.4.jar
  • jena-arq-3.3.0.jar
  • jena-base-3.3.0.jar
  • jena-core-3.3.0.jar
  • jena-iri-3.3.0.jar
  • jena-rdfconnection-3.3.0.jar
  • jena-shaded-guava-3.3.0.jar
  • jsonld-java-0.9.0.jar
  • libthrift-0.9.3.jar
  • log4j-1.2.17.jar
  • slf4j-api-1.7.21.jar
  • slf4j-log4j12-1.7.21.jar
  • xercesImpl-2.11.0.jar
  • xml-apis-1.4.01.jar

【讨论】:

    【解决方案2】:

    为了升级答案,这里有一个小代码,用于使用 Jena 加载模型,在其上启动推理器,添加个体(创建推理),并对基础模型和推理模型发出多个 SPARQL 请求以让个人跟随那里的课程:

    package Jena_Reasoner_SPARQL;
    
    import java.util.Date;
    import java.util.Iterator;
    
    import org.apache.jena.ontology.Individual;
    import org.apache.jena.ontology.OntClass;
    import org.apache.jena.ontology.OntModel;
    import org.apache.jena.ontology.OntModelSpec;
    import org.apache.jena.ontology.OntProperty;
    import org.apache.jena.query.Query;
    import org.apache.jena.query.QueryExecution;
    import org.apache.jena.query.QueryExecutionFactory;
    import org.apache.jena.query.QueryFactory;
    import org.apache.jena.query.ResultSet;
    import org.apache.jena.query.ResultSetFormatter;
    import org.apache.jena.rdf.model.Model;
    import org.apache.jena.rdf.model.ModelFactory;
    import org.apache.jena.rdf.model.Resource;
    import org.apache.jena.reasoner.ValidityReport;
    import org.apache.jena.vocabulary.OWL;
    import org.apache.jena.vocabulary.RDFS;
    
    public class Simple_Reasoner_and_SPARQL_Request
    {
        public static final String  SOURCE      = "./resources/";
        public static final String  PIZZA_NS    = "http://www.co-ode.org/ontologies/pizza/pizza.owl#";
        public static final String  prefix      = "prefix pizza: <" + PIZZA_NS + ">\n"
                                                + "prefix rdfs: <" + RDFS.getURI() + ">\n"
                                                + "prefix owl: <" + OWL.getURI() + ">\n";
    
        public static void main(String[] args)
        {
            System.out.println("BEGIN " + new Date());
    
            new Simple_Reasoner_and_SPARQL_Request().run();
    
            System.out.println("END " + new Date());
        }
    
        public void run()
        {
            String NS = PIZZA_NS;
    
            System.out.println("CREATE AND LOAD THE BASE MODEL");
            // CREATE AND LOAD THE BASE MODEL
            OntModel base = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
            base.read(SOURCE + "pizza.owl.rdf", "RDF/XML");
    
            System.out.println("CREATE THE REASONING MODEL USING THE BASE\n");
            // CREATE THE REASONING MODEL USING THE BASE
            OntModel inf = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM_MICRO_RULE_INF, base);
            // OWL_MEM_MICRO_RULE_INF // It works + Very quick
            // OWL_MEM_MINI_RULE_INF // It works + Slow (40Mins) + 1,1Go RAM (Validity is slow)
            // OWL_MEM_RULE_INF // It works (mights loop if error) + VERY SLOW + 2,1Go RAM (unfinished)
            // OWL_MEM_TRANS_INF // It works (SPARQL mights not work) + Ultra Speed / No inference
    
            System.out.println("CREATE INDIVIDUALS FOR TESTING PURPOSE\n");
            // CREATE INDIVIDUALS FOR TESTING PURPOSE
    
            // Instantiate each useful Class
            OntClass ThingClass = base.getOntClass(NS + "owl:Thing");
            OntClass FoodClass = base.getOntClass(NS + "Food");
            OntClass IceCreamClass = base.getOntClass(NS + "IceCream");
            OntClass PizzaClass = base.getOntClass(NS + "Pizza");
            OntClass MozzaToppingClass = base.getOntClass(NS + "MozzarellaTopping");
            OntClass DeepPanBaseClass = base.getOntClass(NS + "DeepPanBase");
    
            // Instantiate each useful Property (relation)
            OntProperty hasIngredientProperty = base.createObjectProperty(NS + "hasIngredient");
            OntProperty hasBaseProperty = base.createObjectProperty(NS + "hasBase");
            OntProperty hasToppingProperty = base.createObjectProperty(NS + "hasTopping");
    
            // Instantiate each useful individual
            Individual MozzaTopping = base.createIndividual(NS + "MyMozzaTopping", MozzaToppingClass);
            Individual DeepPanBase = base.createIndividual(NS + "MyDeepPanBase", DeepPanBaseClass);
    
            /*
             * BEGINNING OF THE TESTS HERE
             */
            System.out.println("\nTEST VALIDITY BEFORE ADDING INDIVIDUALS " + new Date() + "\n");
            checkValidity(inf);
    
            // Instantiate testing individuals
            // MyPizza1 : individual of class "Food", linked with Mozza & DeepPan
            Individual MyPizza1 = base.createIndividual(NS + "MyPizza1", FoodClass);
            MyPizza1.addProperty(hasBaseProperty, DeepPanBase);
            MyPizza1.addProperty(hasToppingProperty, MozzaTopping);
    
            System.out.println("\nTest MyPizza1 " + new Date() + "\n");
            showAsserted(base, NS + "MyPizza1");
            showInferred(inf, NS + "MyPizza1");
            System.out.println("\nTest Validity of MyPizza1 : " + new Date());
            checkValidity(inf); // OK
    
            // SPARQL Tests now
            System.out.println("\nSPARQL TESTS\n");
            printPrefix();
    
            // Research every Food
            System.out.println("\nResearch Food in Base model");
            showQuery(base,
                    prefix + "SELECT ?individual " + "WHERE { "
                            + " ?individual a pizza:Food . "
                            + " FILTER ( ! isBlank(?individual) ) " + "} ");
    
            System.out.println("\nResearch Food in Inference model");
            showQuery(inf,
                    prefix + "SELECT ?individual " + "WHERE { "
                            + " ?individual a pizza:Food . "
                            + " FILTER ( ! isBlank(?individual) ) " + "} ");
    
            // Research every CheeseyPizza
            System.out.println("\nResearch CheeseyPizza in Base model");
            showQuery(base,
                    prefix + "SELECT ?individual " + "WHERE { "
                            + " ?individual a pizza:CheeseyPizza . "
                            + " FILTER ( ! isBlank(?individual) ) " + "} ");
    
            System.out.println("\nResearch CheeseyPizza in Inference model");
            showQuery(inf,
                    prefix + "SELECT ?individual " + "WHERE { "
                            + " ?individual a pizza:CheeseyPizza . "
                            + " FILTER ( ! isBlank(?individual) ) " + "} ");
    
            /*
             * END OF THE TESTS HERE
             */
    
            System.out.println("End Tests\n");
        }
    
        protected void showAsserted(OntModel m, String individualURI)
        {
            // list the asserted types
            Individual instance = m.getIndividual(individualURI); // BASE
            for (Iterator<Resource> i = instance.listRDFTypes(false); i.hasNext();)
            {
                System.out
                        .println(instance.getURI() + " is asserted in class " + i.next());
            }
        }
    
        protected void showInferred(OntModel m, String individualURI)
        {
            // list the inferred types
            Individual instance = m.getIndividual(individualURI); // INFERED
            for (Iterator<Resource> i = instance.listRDFTypes(false); i.hasNext();)
            {
                System.out.println(
                        instance.getURI() + " is inferred to be in class " + i.next());
            }
        }
    
        protected void checkValidity(OntModel inf)
        {
            ValidityReport validity = inf.validate();
            if (validity.isValid())
            {
                System.out.println("OK");
            }
            else
            {
                System.out.println("Conflicts");
                for (Iterator i = validity.getReports(); i.hasNext();)
                {
                    System.out.println(" - " + i.next());
                }
            }
        }
    
        protected void printPrefix()
        {
            System.out.println(prefix);
        }
    
        protected void showQuery(Model m, String q)
        {
            Query query = QueryFactory.create(q);
            QueryExecution qexec = QueryExecutionFactory.create(query, m);
            try
            {
                ResultSet results = qexec.execSelect();
                ResultSetFormatter.out(results, m);
            }
            finally
            {
                qexec.close();
            }
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-04
      • 1970-01-01
      • 1970-01-01
      • 2015-06-09
      • 1970-01-01
      • 2014-04-27
      相关资源
      最近更新 更多