Common Terminology Services Edition 2 (CTS2) Harold Solbrig Mayo Clinic Rochester, MN Outline • Terminology Services – what are they and why do we care? • Common Terminology Services – a brief history • CTS2 from flight level 200 • CTS2 and the Semantic Web “Terminology” A generic “term” that covers a broad spectrum: • Code / Value pairs – Country codes, airline codes, fare codes, … • Controlled vocabularies – when United Airlines uses “confirmed reservation”, they mean “…” • Thesauri – if you’re are looking for information on the Tiger Swallowtail, you might also look at books with butterfly pictures, books about insect migration, … (BT, NT, RT, note, …) “Terminology” (continued) • Classifications – “buckets” for various statistical and information gathering purposes. Example: ICD-9-CM – 250.01 “Diabetes Mellitus with complication, type 1, not stated as uncontrolled” • Formal Logic Systems – Web Ontology Language (OWL), OBO, Common Logic, …. Classes, individuals relationships. SNOMED-CT, Gene Ontology, FMA, CYC, SUMO, … Why Terminology Services? Start with a simple example – the ISO Country Codes: • Where can you download them? • What formats are they available in? • How are they organized? How do I list just EU countries? Countries in Africa? • Oh – they change???? How do I know when a change occurs? How do I know what happened? Why Terminology Services? Ok – I’ve downloaded them… • I create a set of SQL tables… • … construct some queries to create a dropdown list for a form • … write an Ajax application for my web page • … write some more queries to print the full names on a report Why Terminology Services? • Discover the accounting package needs three character codes • Ack – I repeat the download and write a conversion • Discover the accounting package hasn’t updated their tables since 1990… - what do we do with “YU” • Discover ISO reuses codes (!!!) Why Terminology Services? • We’ve just been bought… our new owner doesn’t use ISO codes • … we’ve got to start translating between ISO codes and 01-299 codes • … and they’ve got “YU”… • … and they now need to know what currencies are (and were) used in a given country… Why Terminology Services? Take the scenario above and figure that a reasonably complex business such as a medical practice may have to deal with …. hundreds of tables / classifications / relationships each with its own formats, labels, release cycles, rules … many applications that define, create and consume these terminologies … other businesses with the same information but different codes and formats …. An ever increasing load of reporting / analysis / billing requirements … Why Terminology Services Requirements At some point, it begins to make sense to try to come up with: • “A” catalog of terminologies • Who maintains them, what they are for, how often they are updated, what they cost, … • A simple way to download, deploy and update their content Why Terminology Services? Requirements A way to ask similar queries in the same way: • By textual content – “All currencies that use the ‘$’ symbol” • By organization – “All EU countries” • By relationship – “All countries that share a border with France” • By secondary set – “All countries that are HL7 members” Why Terminology Services? Requirements • … reasoning • … maps between terminologies • … incremental updates • … local extensions • … “binding” to data elements • … different output formats • … Why Terminology Services? • SOA and information exchange require shared semantics (terminology) • Shared semantics, in turn, requires shared terminology • No one can afford to do their own research, write their own importers, access methods, Ajax widgets, update mechanisms, etc. Why Terminology Services? Terminology Service Standards provide: • Semantics for terminology • Shared exchange models • Complete and robust requirements • Common API’s Common Terminology Services Edition 2 Derives from: • OMG LQS Standard (1999) • OO Model, read only, but laid most of the foundation for subsequent efforts • HL7 CTS Specification (2004) • ANSI and ISO Standard • SOA Model, read only, reduced scope from LQS Common Terminology Services Edition 2 • Derives from (continued): • Mayo LexGrid information model (2002 – present) • NCI LexEVS (2005 – present) • HL7 Service Functional Model • (requirements) • Work and insights of many individuals and organizations… CTS2 Design Philosophy Simple things should be simple – Charlie Mead’s “linear value proposition” Representational State Transfer Architectural Style … … but will support SOA(p), POJO or CTS2 Component Resources • Code System • Concept Domain • Code System • Concept Domain • Entity Description • Association • Map Catalog • Map Version • Value Set Catalog • Value Set Definition • Resolved Value Set Catalog Version Catalog Catalog Binding CTS2 Functional Profiles • Read • Query • Import / Export • Update • History • Maintenance • Temporal • (specialized) CTS2- codesystemversions CTS2- entity CTS2 Key points: 1) CTS2 implementations are designed to be distributed and/or federated • Everything can be linked to everything else via hyperlinks • Partial or complete copies can be distributed across the network CodeSystemCatalogEntry CodeSystemCatalog http:// informatics.mayo.edu/ cts2/Codesystem s http://rest.bioontology.org/ cts2/codesystem/sct? apikey=… SNOMED CT http://who.int/icd/cts2/codesystem/… icd9 ICD-9 ICD-10 … http://nlm.nih.gov/cts2/MeSH/ MeSH Association http:// informatics.mayo.edu/ cts2/Codesystem/wine/ version/20030818/ association/1 subject: wine:Wine predicate: rdfs:subClassOf EntityDescription http://rest.bioontology.org/cts2/ codesystem/wine/…/Wine… Wine http://informatics.mayo.edu/cts2/ codesystem/rdfs/…subClassOf target: food:PotableLiquid subClassOf http://nlm.nih.gov/cts2/codesystem/ food/…/food:PotableLiquid MeSH CTS2 Key points: 2) A CTS2 implementation only needs to build what is required… … useful CTS2 compliant services can be constructed with an XML editor and a file system or basic Apache server CTS2 Key points: 3) The CTS2 specification is not intended to be restrictive (aka strict compliance) – it is intended to be extensible – both structurally and functionally … … it specifies a common way to do common things. CTS2 and the Semantic Web CTS2 can run on top of an RDF triple store • Specifies consistent structure • Provides consistent tags • Provides URI resolution CTS2 and the Semantic Web Consistent Structure • Translatable into XML, JSON, HTML, … • Easily consumed by Ajax and REST clients • Consistent tags • “definition” is always definition when it is present URI Resolution CTS2 makes a clear distinction between • what is being described (e.g. “Food”, “Afghanistan”) • the description (e.g. the Food Ontology description of “Food”, the ISO Country Codes description of “Afghanistan”) • the rendering (e.g. BioPortal’s CTS2 rendering of “Food”, ISO’s RDF rendering of “Afghanistan”) CTS2 Statement Model class Statement Changeable Statement subject: StatementSubject predicate: URIAndEntityName associatedAttribute: ModelAttributeReference [0..1] source: SourceAndRoleReference [0..*] assertedBy: CodeSystemVersionReference assertedIn: CodeSystemVersionReference ::Changeable entryID: PersistentURI {readOnly} entryState: EntryState status: StatusReference [0..1] StatementTarget targetType: StatementTargetType target externalIdentifier: String [0..1] literal: OpaqueData [0..1] 1..* resource: ExternalURI [0..1] entity: URIAndEntityName [0..1] bnode: AnonymousStatement [0..*] target 1 AnonymousStatement qualifier 0..* predicate: PredicateReference target: StatementTarget statmentQualifier: Property [0..*] StatementQualifier qualifierPredicate: PredicateReference associatedAttribute: ModelAttributeReference [0..1] StatementSubject subjectType: StatementSubjectType resource: ExternalURI [0..1] entity: URIAndEntityName [0..1] «enumeration» StatementSubjectType RESOURCE_SUBJECT ENTITY_SUBJECT «enumeration» StatementTargetType RESOURCE ENTITY LITERAL BNODE EMPTY CTS2 Of interest to Ontology Community class Statement Changeable Statement subject: StatementSubject predicate: URIAndEntityName associatedAttribute: ModelAttributeReference [0..1] source: SourceAndRoleReference [0..*] assertedBy: CodeSystemVersionReference assertedIn: CodeSystemVersionReference ::Changeable entryID: PersistentURI {readOnly} entryState: EntryState status: StatusReference [0..1] URI vs. Namespace/Name StatementTarget targetType: StatementTargetType target externalIdentifier: String [0..1] literal: OpaqueData [0..1] 1..* resource: ExternalURI [0..1] entity: URIAndEntityName [0..1] bnode: AnonymousStatement [0..*] target 1 AnonymousStatement qualifier 0..* predicate: PredicateReference target: StatementTarget statmentQualifier: Property [0..*] StatementQualifier qualifierPredicate: PredicateReference associatedAttribute: ModelAttributeReference [0..1] StatementSubject subjectType: StatementSubjectType resource: ExternalURI [0..1] entity: URIAndEntityName [0..1] «enumeration» StatementSubjectType RESOURCE_SUBJECT ENTITY_SUBJECT «enumeration» StatementTargetType RESOURCE ENTITY LITERAL BNODE EMPTY CTS2 Of interest to Ontology Community class Statement Changeable Statement subject: StatementSubject predicate: URIAndEntityName associatedAttribute: ModelAttributeReference [0..1] source: SourceAndRoleReference [0..*] assertedBy: CodeSystemVersionReference assertedIn: CodeSystemVersionReference ::Changeable entryID: PersistentURI {readOnly} entryState: EntryState status: StatusReference [0..1] Flattened Lists StatementTarget targetType: StatementTargetType target externalIdentifier: String [0..1] literal: OpaqueData [0..1] 1..* resource: ExternalURI [0..1] entity: URIAndEntityName [0..1] bnode: AnonymousStatement [0..*] target 1 AnonymousStatement qualifier 0..* predicate: PredicateReference target: StatementTarget statmentQualifier: Property [0..*] StatementQualifier qualifierPredicate: PredicateReference associatedAttribute: ModelAttributeReference [0..1] StatementSubject subjectType: StatementSubjectType resource: ExternalURI [0..1] entity: URIAndEntityName [0..1] «enumeration» StatementSubjectType RESOURCE_SUBJECT ENTITY_SUBJECT «enumeration» StatementTargetType RESOURCE ENTITY LITERAL BNODE EMPTY CTS2 Of interest to Ontology Community class Statement Changeable Statement subject: StatementSubject predicate: URIAndEntityName associatedAttribute: ModelAttributeReference [0..1] source: SourceAndRoleReference [0..*] assertedBy: CodeSystemVersionReference assertedIn: CodeSystemVersionReference ::Changeable entryID: PersistentURI {readOnly} entryState: EntryState status: StatusReference [0..1] Embedded BNODEs StatementTarget targetType: StatementTargetType target externalIdentifier: String [0..1] literal: OpaqueData [0..1] 1..* resource: ExternalURI [0..1] entity: URIAndEntityName [0..1] bnode: AnonymousStatement [0..*] target 1 AnonymousStatement qualifier 0..* predicate: PredicateReference target: StatementTarget statmentQualifier: Property [0..*] StatementQualifier qualifierPredicate: PredicateReference associatedAttribute: ModelAttributeReference [0..1] StatementSubject subjectType: StatementSubjectType resource: ExternalURI [0..1] entity: URIAndEntityName [0..1] «enumeration» StatementSubjectType RESOURCE_SUBJECT ENTITY_SUBJECT «enumeration» StatementTargetType RESOURCE ENTITY LITERAL BNODE EMPTY CTS2 Of interest to Ontology Community class Statement Changeable Statement subject: StatementSubject predicate: URIAndEntityName associatedAttribute: ModelAttributeReference [0..1] source: SourceAndRoleReference [0..*] assertedBy: CodeSystemVersionReference assertedIn: CodeSystemVersionReference ::Changeable entryID: PersistentURI {readOnly} entryState: EntryState status: StatusReference [0..1] Embedded Reification StatementTarget targetType: StatementTargetType target externalIdentifier: String [0..1] literal: OpaqueData [0..1] 1..* resource: ExternalURI [0..1] entity: URIAndEntityName [0..1] bnode: AnonymousStatement [0..*] target 1 AnonymousStatement qualifier 0..* predicate: PredicateReference target: StatementTarget statmentQualifier: Property [0..*] StatementQualifier qualifierPredicate: PredicateReference associatedAttribute: ModelAttributeReference [0..1] StatementSubject subjectType: StatementSubjectType resource: ExternalURI [0..1] entity: URIAndEntityName [0..1] «enumeration» StatementSubjectType RESOURCE_SUBJECT ENTITY_SUBJECT «enumeration» StatementTargetType RESOURCE ENTITY LITERAL BNODE EMPTY CTS2 Of interest to Ontology Community class Statement Changeable Statement subject: StatementSubject predicate: URIAndEntityName associatedAttribute: ModelAttributeReference [0..1] source: SourceAndRoleReference [0..*] assertedBy: CodeSystemVersionReference assertedIn: CodeSystemVersionReference ::Changeable entryID: PersistentURI {readOnly} entryState: EntryState status: StatusReference [0..1] Identity StatementTarget targetType: StatementTargetType target externalIdentifier: String [0..1] literal: OpaqueData [0..1] 1..* resource: ExternalURI [0..1] entity: URIAndEntityName [0..1] bnode: AnonymousStatement [0..*] target 1 AnonymousStatement qualifier 0..* predicate: PredicateReference target: StatementTarget statmentQualifier: Property [0..*] StatementQualifier qualifierPredicate: PredicateReference associatedAttribute: ModelAttributeReference [0..1] StatementSubject subjectType: StatementSubjectType resource: ExternalURI [0..1] entity: URIAndEntityName [0..1] «enumeration» StatementSubjectType RESOURCE_SUBJECT ENTITY_SUBJECT «enumeration» StatementTargetType RESOURCE ENTITY LITERAL BNODE EMPTY CTS2 – Next Steps Value Set Bindings OMV HL7 / IHTSDO Outstanding CTS2 Summary Designed to address a broad spectrum of needs when it comes to “terminological resources” Designed for ease of use • Resource oriented (RESTful) architecture • Federation and distribution • Fine-grained implementation CTS2 Summary Provides a bridge between SPARQL / RDF triples and structured terminology CTS2 STATUS Officially accepted as an OMG specification June 2011 • Finalization Task Force (FTF) in place – due for completion June 2012 • Reference implementations underway • Next steps in HL7 court CTS2 Resources CTS 2 Submission Wiki: http://informatics.mayo.edu/cts2 OMG Finalization Task Force Contact Information: E-Mail to cts2-ftf@omg.org