XMLFramework Project Posted: Apr 23
The project is critical to your overall grade in the course, and parts of it count toward 25% of the questions on the Final Exam. Consider this the take-home part of the Final Exam. No matter how you performed on the previous projects, you need to work on this project.
The project is due by 11:59:59 pm on Friday, May 8. The project consists of the following:
- Parsing XML with a variety of push and pull parsers
- XPath evaluation - XPath is an addressing language for XML
- XSLT transformation - XSLT is a transformation language for XML
- Combining these operations as needed by the applications
The open-layered architecture framework, XMLFramework, supports all of this and includes:
- Apps
- Applications using the XMLFramework
- xmlpipeline.cpp - CLI for using the framework
- XMLFramework
- XMLToolkit
- Set of C++ classes for processing XML
- Used to implement XMLFramework, but can be used directly
- Where your XMLParser lives (if you add it)
- XMLLibrary
- Set of C functions for processing XML
- Used to implement the XMLToolkit, but can be used directly
There is already a lot of code in the project. The primary task is to finish the remaining @TODOs. Some examples are:
All @TODOs are worth the same. You are required to implement all but 6 of the @TODOs. Any more @TODOs after that count as extra credit. As a result, you are not required to integrate your XMLParser into the framework.
The work involved is:
- (50%) Complete any
@TODOs. Each completion of a @TODO must be in a separate commit.
- (20%) Fill in all classes
@pattern and @role comments. A class can participate in multiple roles in multiple patterns.
- (10%) Document the use of design patterns in the markdown file DESIGN.md. Each instance of a design pattern in XMLFramework must be listed, including the collaborators.
- (10%) Document the architectures used in the XMLFramework in the markdown file ARCHITECTURE.md
- (10%) Draw a UML diagram of the entire project in the file UML.pdf
Notes:
- The GitHub Classroom invitation link is on Brightspace.
- The answers to some questions on the Final Exam are from your work on this project. For example, instead of creating a UML diagram during the Final Exam, your UML diagram from this project is your Final Exam answer. You must do these parts as they also count toward the Final Exam.
- The project has a complete CMake build. You can add files to the subdirectories, and the CMake build will handle them automatically. Each file in the apps directory is assumed to be a single executable. If you add files, make sure you also commit and push them to GitHub. Always verify on GitHub that the correct files are there.
- In XMLFramework, the app, xmlpipeline, uses CLI11 for parsing command-line options. When you run cmake, the file is downloaded.
- To quickly find code,
git grep works well. For all the lines of code that contain @TODO, enter the command git grep "@TODO" in the project's top directory. To see only the filenames, git grep -l "@TODO". The command depends on the directory where you run it; e.g., if you run it in the framework directory, the results are from that directory and its subdirectories. To view an overall report of which @TODOs are left, use the build target: make todo entered in the build directory.