private void gen(String bn, ValueSet vs) throws FHIRException {
    Section section = section(bn);
    section.triple(bn, "a", "fhir:ValueSet");
    if (vs.hasVersion()) section.triple(bn, "fhir:version", literal(vs.getVersion()));
    if (vs.hasName()) section.label(bn, vs.getName());
    if (vs.hasDescription())
      section.comment(
          bn,
          vs.getDescription()
              .replace("code system", "value set")
              .replace("Code System", "Value Set")
              .replace("Code system", "Value set"));
    if (vs.hasCopyright()) section.triple(bn, "dc:rights", literal(vs.getCopyright()));
    if (vs.hasDate()) section.triple(bn, "dc:date", literal(vs.getDateElement().asStringValue()));

    for (UsageContext cc : vs.getUseContext())
      codedTriple(section, bn, "fhir:useContext", cc.getValueCodeableConcept());
    section.triple(
        bn,
        "fhir:status",
        complex().predicate("a", "fhir:conformance-resource-status\\#" + vs.getStatus().toCode()));
    section.triple(
        bn,
        "fhir:canonicalStatus",
        complex().predicate("a", getCanonicalStatus("ValueSet.status", vs.getStatus().toCode())));
  }
  private void genExtension(StructureDefinition extension) throws FHIRException {
    // for now, only simple extensions
    if (extension.getSnapshot().getElement().size() == 5
        && !hasSection("Extension: " + tail(extension.getUrl()))) {
      ElementDefinition base = extension.getSnapshot().getElement().get(0);
      ElementDefinition valueX = extension.getSnapshot().getElement().get(4);
      Section section = section("Extension: " + tail(extension.getUrl()));
      Subject subject = section.subject("ex:birthplace");
      subject.predicate("a", "fhir:ExtensionDefinition");
      subject.label(extension.getTitle());
      subject.comment(extension.getDescription());
      if (extension.hasVersion())
        subject.predicate("fhir:version", literal(extension.getVersion()));
      if (extension.hasCopyright())
        subject.predicate("dc:rights", literal(extension.getCopyright()));
      subject.predicate(
          "fhir:status",
          complex()
              .predicate(
                  "a", "fhir:conformance-resource-status\\#" + extension.getStatus().toCode()));
      subject.predicate(
          "fhir:canonicalStatus",
          complex()
              .predicate(
                  "a", getCanonicalStatus("ValueSet.status", extension.getStatus().toCode())));
      for (UsageContext cc : extension.getUseContext())
        codedTriple(subject, "fhir:useContext", cc.getValueCodeableConcept());
      if (extension.hasDate())
        subject.predicate("dc:date", literal(extension.getDateElement().asStringValue()));

      subject.predicate("rdfs:range", processType(valueX.getType().get(0).getCode()));
      if (base.getIsModifier()) subject.predicate("fhir:flag", "fhir:isModifier");
    }
  }