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"); } }
private void genBaseMetadata() { Section section = section("Basic Framework"); // terminology base: section.triple("fhir:Concept", "a", "rdf:Class"); section.label("fhir:Concept", "A concept in a code system defined by FHIR"); section.comment( "fhir:Concept", "Concepts are defined as classes, and individual properties have a value which is an anonymous class with a type of the appropriate concept"); section.triple("fhir:CodeSystem", "rdfs:subClassOf", "rdf:Class"); section.label("fhir:CodeSystem", "Base class for code systems"); section.comment( "fhir:CodeSystem", "A code system identifies the definition framework. Code systems contain concepts"); section.triple("fhir:ValueSet", "rdfs:subClassOf", "rdf:Class"); section.label( "fhir:ValueSet", "A value set - a set of codes for concepts from one or more code systems"); section.comment("fhir:Concept", "ValueSets..."); // wiring the terminology base together section.triple("fhir:contains", "a", "rdf:Property"); section.label("fhir:contains", "A concept in a code system"); section.triple("fhir:contains", "rdfs:domain", "fhir:CodeSystem"); section.triple( "fhir:contains", "rdfs:range", "fhir:Concept"); // todo: is this valid? a meta-range? section.triple("fhir:include", "a", "rdf:Property"); section.label("fhir:include", "A concept included in a value set"); section.comment("fhir:include", "Include a code system or value set in a value set"); section.triple("fhir:include", "rdfs:domain", "fhir:ValueSet"); section.triple( "fhir:include", "rdfs:range", "fhir:Concept"); // todo: is this valid? a meta-range? // standard properties section.triple("fhir:binding", "a", "rdf:Property"); section.label("fhir:binding", "ValueSet bound to this property"); section.comment("fhir:binding", "Refer to FHIR documentation for the use of this property"); section.triple("fhir:binding", "rdfs:range", "xs:anyUri"); section.triple("fhir:bindingStrength", "a", "rdf:Property"); section.label("fhir:bindingStrength", "Strength of ValueSet binding"); section.comment( "fhir:bindingStrength", "Refer to FHIR documentation for the use of this property"); section.triple("fhir:bindingStrength", "rdfs:range", "xs:anyUri"); section.triple("fhir:canonicalStatus", "a", "rdf:Property"); section.label("fhir:canonicalStatus", "Canonical Status Mapping"); section.comment( "fhir:canonicalStatus", "Each resource has it's own list of status codes. This contains a mapping through to the basic status"); section.triple("fhir:canonicalStatus", "rdfs:range", "fhir:canonical-status"); section.triple("fhir:hasFlag", "a", "rdf:Property"); section.label("fhir:hasFlag", "Flags for FHIR properties"); section.comment( "fhir:hasFlag", "A set of flags that provide additional knowledge about the meaning of a property"); section.triple("fhir:hasFlag", "rdfs:range", "fhir:flag-item"); section.triple("fhir:w5", "a", "rdf:Property"); section.label("fhir:w5", "W5 Categorization (preliminary)"); section.comment( "fhir:w5", "FHIR W5 categorization is a preliminary classification of the type of fhir property"); section.triple("fhir:w5", "rdfs:range", "fhir:w5.system"); section.triple("fhir:status", "a", "rdf:Property"); section.label("fhir:status", "The status of the item"); section.comment("fhir:status", "The status of the item"); section.triple("fhir:status", "rdfs:range", "fhir:conformance-resource-status"); section.triple("fhir:version", "a", "rdf:Property"); section.label("fhir:version", "Assigned Version Number"); section.comment("fhir:version", "The version number assigned to the item"); section.triple("fhir:version", "rdfs:range", "xs:string"); section.triple("fhir:loinc", "a", "rdf:Property"); section.label("fhir:loinc", "LOINC equivalent concept"); section.comment( "fhir:loinc", "LOINC equivalent concept - may be a LOINC code, a LOINC part code, or a LOINC property"); section.triple("fhir:loinc", "rdfs:range", "xs:anyURI"); // nil instance nilInstance = section.subject("fhir:nil"); nilInstance.comment( "To indicate positively that a property has no value. Intended to be used where elements have a meaning when missing, to indicate that they realyl are missing in the instance"); // --------------------------------------------------- section = section("Property Flags"); section.triple("fhir:flag-item.system", "a", "fhir:CodeSystem"); section.comment( "fhir:flag-item.system", "An internal code system defined for the FHIR definitions"); section.triple("fhir:flag-item.system", "fhir:contains", "fhir:flag-item"); section.triple("fhir:flag-item", "a", "fhir:Concept"); section.triple("fhir:flag-item\\#isModifier", "rdfs:subClassOf", "fhir:flag-item"); section.triple("fhir:flag-item\\#isModifier", "owl:oneOf", "(fhir:flag-item\\#isModifier)"); section.comment( "fhir:flag-item\\#isModifier", "An element is labeled isModifier if the value it contains may change the interpretation of the element that contains it (including if the element is the resource as a whole). Typical examples of elements that are labeled isModifier are elements such as 'status', 'active', 'refuted', or 'certainty'"); section.triple("fhir:flag-item\\#isSummaryItem", "rdfs:subClassOf", "fhir:flag-item"); section.triple( "fhir:flag-item\\#isSummaryItem", "owl:oneOf", "(fhir:flag-item\\#isSummaryItem)"); section.comment( "fhir:flag-item\\#isSummaryItem", "Whether the element should be included if a client requests a search with the parameter _summary=true."); section.triple("fhir:flag-item\\#isXmlAtribute", "rdfs:subClassOf", "fhir:flag-item"); section.triple( "fhir:flag-item\\#isXmlAtribute", "owl:oneOf", "(fhir:flag-item\\#isXmlAtribute)"); section.comment( "fhir:flag-item\\#isXmlAtribute", "In the XML format, this property is represented as an attribute not an element"); section.triple("fhir:isXmlAtribute", "a", "fhir:flag-item\\#isXmlAtribute"); // --------------------------------------------------- section = section("Canonical Status Codes"); section.triple("fhir:canonical-status.system", "a", "fhir:CodeSystem"); section.comment( "fhir:canonical-status.system", "An internal ontology defined for the FHIR definitions"); section.triple("fhir:canonical-status.system", "fhir:contains", "fhir:canonical-status"); section.triple("fhir:canonical-status", "a", "fhir:Concept"); for (int i = 0; i < definitions.getStatusCodes().get("@code").size(); i++) { if (!Utilities.noString(definitions.getStatusCodes().get("@code").get(i))) { String pcc = pctEncode(definitions.getStatusCodes().get("@code").get(i)); section.triple( "fhir:canonical-status\\#" + pcc, "rdfs:subClassOf", "fhir:canonical-status"); section.comment( "fhir:canonical-status\\#" + pcc, definitions.getStatusCodes().get("@definition").get(i)); } } // --------------------------------------------------- section = section("W5 Classifications"); section.triple("fhir:w5.system", "a", "fhir:CodeSystem"); section.comment("fhir:w5.system", "An internal ontology defined for the FHIR definitions"); section.triple("fhir:w5.system", "fhir:contains", "fhir:w5"); section.triple("fhir:w5", "a", "fhir:Concept"); for (W5Entry e : definitions.getW5s().values()) { String pcc = pctEncode(e.getCode()); section.triple("fhir:w5\\#" + pcc, "rdfs:subClassOf", "fhir:w5"); section.comment("fhir:w5\\#" + pcc, e.getDescription()); } }