Dear All,

I am trying to load an Ontology (attached) where there are classes with the
same datatype property. For example:

foaf:Document  a       owl:Class , rdfs:Class ;
      rdfs:label "foaf:Document" ;
      rdfs:subClassOf [ a owl:Restriction ;
            owl:onProperty dc:creator ;
            owl:maxCardinality "2"^^<http://www.w3.org/2001/XMLSchema#int>
      ] .

dc:title
      a       rdf:Property , owl:DatatypeProperty ;
      rdfs:domain foaf:Document;
      rdfs:label "dc:title" ;
      rdfs:range xsd:string .

*dc:date*
*      a       rdf:Property , owl:DatatypeProperty ;*
*      rdfs:domain foaf:Document;*
*      rdfs:label "dc:date" ;*
*      rdfs:range xsd:string .*

and

conf:Conference  a       owl:Class , rdfs:Class ;
      rdfs:label "conf:Conference" .

rdfs:label
      a       rdf:Property , owl:DatatypeProperty ;
      rdfs:domain conf:Conference;
      rdfs:label "rdfs:label" ;
      rdfs:range xsd:string .

*dc:date*
*      a       rdf:Property , owl:DatatypeProperty ;*
*      rdfs:domain conf:Conference;*
*      rdfs:label "dc:date" ;*
*      rdfs:range xsd:string .*
*
*
So datatype property dc:date is reused into classes foaf:Document and
conf:Conference.

The problem is: when I load the ontology the datatype porperty dc:date only
appears one time with conf:Conference as domain class.

I need that it appears for the two classes. Below follows the code I wrote
for loading it:

        OntModel ontModel = ModelFactory
                .createOntologyModel(OntModelSpec.OWL_MEM);
        String filePath = mc.getOntologyFilePath();
        if (filePath != null && !"".equals(filePath)) {
            ontModel.read(new FileInputStream(new File(filePath)),
                    "http://ufc.br/rdb2rdfmb/";, mc.getOntologyLang());
        } else {
            ontModel.read(mc.getOntologyURL(), mc.getOntologyLang());
        }

        ExtendedIterator<OntClass> i = ontModel.listClasses();
        while (i.hasNext()) {
            OntClass ontClass = (OntClass) i.next();
            String prefix =
ontModel.getNsURIPrefix(ontClass.getNameSpace());
            String name = ontClass.getLocalName();

            if (classes.get(name + prefix) == null) {
                Class_ c = new Class_(prefix, name);
                classes.put(prefix + name, c);
                mapPrefixes.put(prefix, ontClass.getNameSpace());

                OntClass superClass = ontClass.getSuperClass();
                if (superClass != null) {
                    String superName = superClass.getLocalName();
                    String superPrefix =
ontModel.getNsURIPrefix(superClass.getNameSpace());
                    Class_ superC = classes.get(superPrefix + superName);

                    if (superC == null) {
                        superC = new Class_(superPrefix, superName);
                        classes.put(superPrefix + superName, superC);
                        mapPrefixes.put(superPrefix,
superClass.getNameSpace());
                    }

                    c.setSuperClass(superC);
                }
            }
        }

        ExtendedIterator<DatatypeProperty> i2 = ontModel
                .listDatatypeProperties();
        while (i2.hasNext()) {
            DatatypeProperty datatypeProperty = (DatatypeProperty)
i2.next();

            if (datatypeProperty.getDomain() != null &&
datatypeProperty.getRange() != null) {
                String dClassPrefix =
ontModel.getNsURIPrefix(datatypeProperty.getDomain().getNameSpace());
                String dClassName =
datatypeProperty.getDomain().getLocalName();
                Class_ dClass = classes.get(dClassPrefix + dClassName);
                String dpName = datatypeProperty.getLocalName();
                String dpPrefix =
ontModel.getNsURIPrefix(datatypeProperty.getNameSpace());
                String rangeName =
datatypeProperty.getRange().getLocalName();

                DataProperty dp = new DataProperty(dpPrefix, dpName,
dClass, rangeName);
                if (dClass != null) {
                    dClass.getdProperties().add(dp);
                    mapPrefixes.put(dpPrefix,
datatypeProperty.getNameSpace());
                }
            }
        }

-- 
Kind Regards,
Luís Eufrasio T. Neto
MSN: [email protected]

"Ser LIVRE é ser capaz de AMAR sem exigir nada em troca."

Reply via email to