2012-06-22 47 views
3

假设我有一个XSD文件,其中有下面几行代码;如何将XSD简单类型转换为使用Jena的rdfs:数据类型

<xsd:simpleType name="test"> 
    <xsd:restriction base="xsd:string"> 
     <xsd:maxLength value="50" /> 
    </xsd:restriction> 
</xsd:simpleType> 

我所试图做的是此XSD简单类型为RDFS的实例转换:数据类型的本体。以下是我想要的。

<rdfs:Datatype rdf:about="http://www.example.org/example1/#testDatatype"> 
    <rdfs:subClassOf rdf:resource="http://www.w3.org/2001/XMLSchema#string"/> 
    <owl:equivalentClass> 
    <rdfs:Datatype> 
     <owl:onDatatype rdf:resource="http://www.w3.org/2001/XMLSchema#string"/> 
     <owl:withRestrictions rdf:parseType="Collection"> 
     <rdf:Description> 
      <xsd:maxLength rdf:datatype="http://www.w3.org/2001/XMLSchema#string" 
      >50</xsd:maxLength> 
     </rdf:Description> 
     </owl:withRestrictions> 
    </rdfs:Datatype> 
    </owl:equivalentClass> 
</rdfs:Datatype> 

如何使用Jena做到这一点?

+0

让我看看我是否正确理解它:您需要一段解析XSD类型定义的代码并自动创建相应的'rdfs:Datatype',对吧?我不确定耶拿是否可以自己做到这一点。 –

+0

这正是我想要的。 – atakan

回答

0

原来我可以用下面的代码来做到这一点。我用XSOM解析XSD。假设我将“test”simpletype存储在一个名为“simple”(XSSimpleType)的变量中。

String URI = simple.getTargetNamespace() + "#" + simple.getName() + "Datatype"; 
OntModel ontology = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM); 
OntClass datatype = ontology.createOntResource(OntClass.class, RDFS.Datatype, URI);     

Resource onDatatype = XSD.xstring; 

OntClass equivClass = ontology.createOntResource(OntClass.class, RDFS.Datatype, null); 
equivClass.addProperty(OWL2.onDatatype, onDatatype); 
datatype.addEquivalentClass(equivClass); 

它不是一个完整的代码,它不包含与解析XSD相关的代码段,但我希望它能给出这个想法。

+0

如果这为你工作,一定要接受你的答案! –

相关问题