...
Sprint to extend some of the "read only" APIs, to finalize unit/integration testing for existing functionality, to extend the interface, to develop additional loaders, and to begin developing editing capabilities.
Priority things
- For "semantic type" mechanism - if there are tree numbers, order by that and indent"
- DONE: owl deployment
- JFW :Refresh server deployments
- UMLS, SNOMED, SNOMED VET, ICD (reload on machine)
- DONE: JFW: QA queries
- referential integrity
- Verify for each type of loader and the sample data.
- JFW: Jekins - mojo tests
- REST integration tests
- BAC: OWL - NCIt
- BAC: consider adding top-level hierarchies as "semantic types" to concepts for loaders in general
- This could be a function of the treeposition or transitive closure computers.
- the corresponding metadata would have to be created as well
- BAC: remove "void addXXX" and "void removeXXX" methods from model objects. Use getObjects().add/remove(...) only
- DONE: Terminology sampler mojo - bring over from old term server project.
- Model: GCI
- DONE: General class axioms
- Mapping, MapRecord, MapEntry (each with attributes) - similar to Subset, SubsetMember except with one more layer.
- Then implement this for RRF loader
- Then implement this for RF2 loader (snapshot)
- Then implement this for RF2 loader (delta)
- User Interface
- Enable glass pane while switching tabs - need to say increment in tab controller and decrement at the end of the controller.
- Integration Tests - Jpa/REST - get them tested again
- DONE: support "mode" parameter on loaders to automatically recreate db and clear indexes.
- Have search handler work for all searching, including relationships and trees. - separate methods to build query?? - probably
- DONE Improve search
- Create "SearchHandler" as an extension point (like graph resolution handler). Have a "default implementation"
- Search algorithm
- First search
- for
- on exact string (e.g. "literal" search)
- handles short strings containing special characters, consider doing a literal search (e.g. "!" or "+" or "Ca+")
- alternative is to save untokenized forms of all strings for exact searching
- handles short strings containing special characters, consider doing a literal search (e.g. "!" or "+" or "Ca+")
- e.g. for the query "+" use a lucene query like "terminology:SNOMEDCT AND version:latest AND atoms.nameSort:"\+" (not sure if you have to escape the + if it is in quotes).
- Then search on matches - this is the normal search
- The trick here is to combine the results from the first search and the second search into a single list, where the ordered results from the first search are at the head of the list followed by the ordered results of the second search - but with any duplicates removed.
- could consider "(literal search) OR (normal search)" as a single query.
- This is better because then lucene can do the paging
- if no results, Then do spelling correct and (then) acronym expansion and search again
- Use Lucene SpellChecker class for this.
- config/src/main/resources/data/
- spelling.txt
- First search on exact string (e.g. "literal" search)
- Then search on matches
- if no results, Then do acronym expansion and spelling correction and search again
- config/src/main/resources/data/acronym.txt
- Use Lucene SpellChecker class for this.
- For obtaining words for spelling correction, use "FieldedStringTokenizer" with " \t" as delimiter
- (consider this delimiter list later: " \t-({[)}]_!@#%&*\\:;\"',.?/~+=|<>$`^")
- For obtaining words for acronym expansion, split only on " \t"
- For obtaining words for spelling correction, use "FieldedStringTokenizer" with " \t" as delimiter
- if no results, then try putting * after each term and search again
- on exact string (e.g. "literal" search)
- should autocomplete algorithm include acronym expansion? NO
Marketing/SEO
- Create a video demo of the site (camtasia) and post as a link on the header (video glyphicon if there is one)
- Promote "ICD10" browser on various lists
- Ensure all entry pages for applications contain SEO text for browsers and are indexed by google
- Verify all entry pages for applications are officially mobile friendly
- Consider advertising SNOMED/UMLS/ICD browsers on google adwords.FB?
- Training Video for UMLS browser (need 10 min)
- Training Video for SNOMED browser (simple 5 min)
User Interface Enhancements
- Add features for "deep" relationships when browsing UMLS.
- Need a generalized way to know when to use this
- it is definitely only for "concept"
- It may be that if any "atoms" of the concept don't match the terminology, then we show it.
- Reimplement the component report as a directive (with service callbacks for history and other features)
- Implement routing for terminologyId/terminology/version/type so we can preserve URLs. can even include ?query=... for the query
- Also clean up the way routes work first so we have
- https://umls.terminology.tools/content
- instead of
- https://umls.terminology.tools/#/content
- This is likely related to the starting URL redirected to https://umls.terminology.tools/#/
- See http://stackoverflow.com/questions/14319967/angularjs-routing-without-the-hash
- e.g. https://umls.terminology.tools/content/CUI/SNOMEDCT/2015_01_31/12738006
- Also clean up the way routes work first so we have
- Support opening a concept in a new window (e.g. there's a pointing off arrow icon that opens a new window with a routing URL that shows exactly that concept - then drag/drop between windows can be editing mechanism).
- DONE: Websocket (for a WebsocketWorkflowListener)
- test it
- What to do with it??
- Expression-based searching?
- Consider adding "LABELFOR" all subsets and making the star pop up a picklist of the things to highlight (ordered by type with extensions first, subsets later)
- RECURRING: Mobile-friendly and other style issues
...
- RF2 delta/full loaders
- Implement mojo testing too
- Owl loader (e.g. for NCIt) - will require use of "DL" features
- Examples: https://github.com/owlcs/owlapi/blob/version4/contract/src/test/java/org/semanticweb/owlapi/examples/Examples.java
- DONE: Step 1: create the infrastrucure (mojo, rest call, client, algorithm, get parameters right).
- Step 2: get OwlAPI into the project,
- Step 3: add complexity
- May need a "SNOMED" style and a general style to capture "distribution normal form" for SNOMED (e.g. rel groups, etc)
- Also have a corresponding Owl export feature (e.g. "release")
- Implement mojo testing too
- REasoner
- JFact
example: http://jfact.sourceforge.net/Example.java
Code Block <dependency> <groupId>net.sourceforge.owlapi</groupId> <artifactId>jfact</artifactId> <version>1.0.0</version> </dependency>
- .Hermit
example: http://hermit-reasoner.com/java.html
Code Block <dependency> <groupId>com.hermit-reasoner</groupId> <artifactId>org.semanticweb.hermit</artifactId> <version>1.3.8.4</version> </dependency>
- ELK: **
example: https://code.google.com/p/elk-reasoner/wiki/ElkOwlApi
Code Block <dependency> <groupId>org.semanticweb.elk</groupId> <artifactId>elk-owlapi</artifactId> <version>0.4.2</version> </dependency>
- Snorocket
example: https://github.com/aehrc/snorocket
Code Block <dependency> <groupId>au.csiro</groupId> <artifactId>snorocket-owlapi</artifactId> <version>2.7.2</version> </dependency>
- JFact
Services
- Action Service
- Implement classification.
- Need to go to/from Owl so do Owl loader FIRST.
...