import "/std/ns.rql"; import "/demo/fed/common.rql"; import "/demo/fed/cim.rql"; getSchema(); function getSchema() { drop table cimschema; create table cimschema context none (NOTRANS); session.transactionTimeout = 100; var ds = new datasource("cimschema"); for (var Iter = new Enumerator(Service.ExecQuery("SELECT * FROM meta_class")); !Iter.atEnd(); Iter.MoveNext()) { try { getClassInfo(Iter.item(), ds, false); } catch(e) { response.write(e); } } //select ?p ?s ?o using #ds where {?p ?s ?o}; insert {[rdfs:subClassOf] ?c [dcml:Entity]} into cimschema using cimschema where {[rdf:type] ?c [owl:Class]} and not {[rdfs:subClassOf] ?c ?x} and not {[rdfs:subClassOf] ?c [cim:Association]}; } function getClassInfo(cls, dsp, bGetInstances) { var resCls = makeResource(cls.Path_); var strCls = cls.Path_.RelPath; var ds = new datasource(); (insert {[rdf:type] #resCls [owl:Class]} {[rdfs:label] #resCls #strCls} into #ds); response.write(resCls); if (isAssociation(cls)) { (insert {[rdfs:subClassOf] #resCls [cim:Association]} into #ds); } for (var Iter = new Enumerator(cls.Subclasses_(0x11)); !Iter.atEnd(); Iter.moveNext()) { (insert {[rdfs:subClassOf] #(makeResource(Iter.item().Path_)) #resCls} into #ds); } for (var Iter = new Enumerator(cls.Properties_); !Iter.atEnd(); Iter.moveNext()) { var resProp = resource(resCls + "_" + Iter.item().Name) /// var resProp new Resource("cim:" + Iter.item().Origin + "_" + Iter.item().Name); (insert {[rdfs:domain] #resProp #resCls} {[rdfs:label] #resProp #(Iter.item().Origin + "_" + Iter.item().Name)} into #ds); if (Iter.item().CIMType == 102) { var cimtype = Iter.item().Qualifiers_.item("CIMTYPE"); var res = (regexp("ref:(.*)")).exec(cimtype); if (res != null) { (insert {[rdfs:range] #resProp #(resource("cim:" + res[1]))} into #ds); } } else { (insert {[rdfs:range] #resProp #(getXSDType(Iter.item().CIMType))} into #ds); } } dsp.insert(ds); } function makeResource(path) { return new Resource("cim:" + path.RelPath); } function isAssociation(cls) { try { if (cls.Qualifiers_.Item("Association").Value == 1) return true; } catch(e) { } return false; }