private void gen(ResourceDefn rd) throws Exception {
   Section section = section(rd.getName());
   ElementDefn t = rd.getRoot();
   if (t.getTypes().isEmpty()) section.triple("fhir:" + t.getName(), "a", "rdfs:Class");
   else section.triple("fhir:" + t.getName(), "rdfs:subClassOf", processType(t.typeCode()));
   section.comment("fhir:" + t.getName(), rd.getDefinition());
   if (!Utilities.noString(t.getW5()))
     section.triple(
         "fhir:" + t.getName(), "fhir:w5", complex().predicate("a", "fhir:w5\\#" + t.getW5()));
   processMappings(section, "fhir:" + rd.getName(), rd.getRoot());
   for (ElementDefn e : t.getElements()) {
     if (e.getName().endsWith("[x]")) {
       String cn = e.getName().substring(0, e.getName().length() - 3);
       section.triple("fhir:" + t.getName() + "." + cn, "a", "rdf:Property");
       section.comment("fhir:" + t.getName() + "." + cn, e.getDefinition());
       processMappings(section, "fhir:" + t.getName() + "." + cn, e);
       for (TypeRef tr : e.typeCode().equals("*") ? getAnyTypes() : e.getTypes()) {
         String en = cn + Utilities.capitalize(tr.getName());
         section.triple(
             "fhir:" + t.getName() + "." + en,
             "rdfs:subPropertyOf",
             "fhir:" + t.getName() + "." + cn);
         section.triple("fhir:" + t.getName() + "." + en, "rdfs:domain", "fhir:" + rd.getName());
         genRange(section, t.getName(), en, e, tr, false);
       }
     } else {
       section.triple("fhir:" + t.getName() + "." + e.getName(), "a", "rdf:Property");
       section.comment("fhir:" + t.getName() + "." + e.getName(), e.getDefinition());
       section.triple(
           "fhir:" + t.getName() + "." + e.getName(), "rdfs:domain", "fhir:" + rd.getName());
       processMappings(section, "fhir:" + t.getName() + "." + e.getName(), e);
       genRange(
           section,
           t.getName(),
           e.getName(),
           e,
           e.getTypes().isEmpty() ? null : e.getTypes().get(0),
           false);
     }
   }
   processAnonTypes();
 }
  private ResourceDefn loadResource(String n, Map<String, ResourceDefn> map, boolean sandbox)
      throws Exception {
    String src = sandbox ? sndBoxDir : srcDir;
    File spreadsheet =
        new CSFile(
            (sandbox ? sndBoxDir : srcDir) + n + File.separatorChar + n + "-spreadsheet.xml");
    if (!spreadsheet.exists())
      spreadsheet =
          new CSFile((sandbox ? sndBoxDir : srcDir) + n + File.separatorChar + n + "-def.xml");

    SpreadsheetParser sparser =
        new SpreadsheetParser(
            new CSFileInputStream(spreadsheet),
            spreadsheet.getName(),
            definitions,
            src,
            logger,
            registry);
    ResourceDefn root;
    try {
      root = sparser.parseResource();
    } catch (Exception e) {
      throw new Exception("Error Parsing Resource " + n + ": " + e.getMessage(), e);
    }

    root.setSandbox(sandbox);
    for (EventDefn e : sparser.getEvents()) processEvent(e, root.getRoot());

    // EK: Commented this out, seems double with next statement, since
    // loadResource()
    // is always called with definitions.getResources in its map argument.
    // definitions.getResources().put(root.getName(), root);
    if (map != null) {
      map.put(root.getName(), root);
      definitions
          .getKnownResources()
          .put(root.getName(), new DefinedCode(root.getName(), root.getRoot().getDefinition(), n));
    }
    root.setStatus(ini.getStringProperty("status", n));
    return root;
  }
 protected ElementDefn getRootDefinition() {
   ElementDefn el = null;
   ResourceDefn resource = definitions.getResources().get(name);
   resource = (resource == null) ? definitions.getBaseResources().get(name) : resource;
   if (resource != null) {
     el = resource.getRoot();
   } else {
     el = definitions.getInfrastructure().get(name);
     el = (el == null) ? definitions.getTypes().get(name) : el;
     el = (el == null) ? definitions.getStructures().get(name) : el;
   }
   return el;
 }