Navigation Menu

Skip to content

Commit

Permalink
Initial version of the skill-tree modeling
Browse files Browse the repository at this point in the history
  • Loading branch information
Kai Himstedt committed Jun 1, 2018
1 parent 4c05cb4 commit 22e6628
Show file tree
Hide file tree
Showing 21 changed files with 9,554 additions and 1 deletion.
65 changes: 64 additions & 1 deletion README.md
@@ -1 +1,64 @@
# curriculum
# HPC Certification Forum

Establishing an HPC Certification Program is a central part of the joint
Performance Conscious HPC (PeCoH) project that started in April 2017.

The three Hamburg compute centers involved in PeCoH, German Climate Computing
Center (DKRZ), Regional Computing Center at the Universit¨at Hamburg (RRZ),
and Computer Center at the Technische Universität Hamburg (TUHH RZ) started the
Hamburg HPC Competence Center ([HHCC](https://www.hhcc.uni-hamburg.de/)) as a
virtual institution and central contact point for their users.

More information on the project is available in the
[download area](https://www.hhcc.uni-hamburg.de/en/support/downloads.html)
on the HHCC website.

Our concept paper for the HPC Certification Program (Draft 0.91 -- June
2018) ([hpccp-paper.pdf](./hpccp-paper.pdf)) is also contained in this repository.

During the first year, it became apparent to broaden the scope and form
an independent governance entity to sustain the effort and gain acceptance.

For this purpose we establish a further website which focuses on the International
Certification Program:
[https://www.hpc-certification.org/](https://www.hpc-certification.org/)

# Technical Notes

The implementation of the skill tree is based on the Extensible Markup Language
[(XML)](https://www.w3.org/XML/) and corresponding XML Schema Definitions
[(XSD)](https://www.w3.org/2001/XMLSchema).

[SkillsBase.xml](./modeling/skill-tree/SkillsBase.xml) contains the list of
all skills we have identified for the HPC Certification Program so far.

First of all, [SkillsBase.xml](./modeling/skill-tree/SkillsBase.xml) contains all
the nodes of the skill tree in a flat data structure.
In order to describe the tree, each skill that depends on other
sub-skills has – besides its unique name, description, and further attributes – a
list of references to these sub-skills. This is similar to using a `Makefile` for
the well-known `make` build automation tool to define the dependencies of
compilation units (Stuart I. Feldmann
[Make -- A Program for Maintaining Computer
Programs](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.39.7058).
Software Practice & Experience. Vol. 9 (1979):255-265).
Three levels of education (basic, intermediate, and expert) are used to further
subdivide each skill.

XSLT programs are used to transform the data in
[SkillsBase.xml](./modeling/skill-tree/SkillsBase.xml) to other formats and
represenations.

We welcome your comments on the analysis and classification of HPC competences and
their value for scientists or any other input for the HPC Certification Program.

# After Downloading

Use `make` with the Makefile located in [./modeling/](./modeling/Makefile)
to build by the help of
[SkillsBase2SkillsWithSpeechPrefix.xsl](./modeling/skill-tree/SkillsBase2SkillsWithSpeechPrefix.xsl)
two copies of the SkillsBase.xml file with a) personal and b) non-personal speech
prefixes inserted to the description items of each skill and to build by the help of
[SkillTree2MindMap.xsl](./modeling/skill-tree/SkillTree2MindMap.xsl)
two corresponding mindmap files that can be viewed with the
[Freeplane](https://www.freeplane.org/wiki/index.php/Home) mindmap tool.
Binary file added hpccp-paper.pdf
Binary file not shown.
27 changes: 27 additions & 0 deletions modeling/Makefile
@@ -0,0 +1,27 @@
all: \
./skill-tree/skill-tree-expert-skills-non-personal-speech-auto-generated.mm \
./skill-tree/skill-tree-expert-skills-personal-speech-auto-generated.mm
@echo "done all"

# kh 01.06.18 copy the skill tree in SkillsBase.xml and insert non-personal speech prefixes to the description items of a skill (e.g. "Ability to ...", "Knowledge of ...")
./skill-tree/skills-non-personal-speech-auto-generated.xml: ./skill-tree/SkillsBase.xml
java -jar "./tools/saxon/saxon9he.jar" -o:"./skill-tree/skills-non-personal-speech-auto-generated.xml" "./skill-tree/SkillsBase.xml" "./skill-tree/SkillsBase2SkillsWithSpeechPrefix.xsl" "PersonalSpeech=false"

# kh 01.06.18 copy the skill tree in SkillsBase.xml and insert personal speech prefixes to the description items of a skill (e.g. "You will learn to ...", "You will learn about ...")
./skill-tree/skills-personal-speech-auto-generated.xml: ./skill-tree/SkillsBase.xml
java -jar "./tools/saxon/saxon9he.jar" -o:"./skill-tree/skills-personal-speech-auto-generated.xml" "./skill-tree/SkillsBase.xml" "./skill-tree/SkillsBase2SkillsWithSpeechPrefix.xsl" "PersonalSpeech=true"

./skill-tree/skill-tree-expert-skills-non-personal-speech-auto-generated.mm: ./skill-tree/skills-non-personal-speech-auto-generated.xml
java -jar "./tools/saxon/saxon9he.jar" -o:"./skill-tree/skill-tree-expert-skills-non-personal-speech-auto-generated.mm" "./skill-tree/skills-non-personal-speech-auto-generated.xml" "./skill-tree/SkillTree2MindMap.xsl" \
"TargetName=Skill Tree" "TargetLevel=Expert"

./skill-tree/skill-tree-expert-skills-personal-speech-auto-generated.mm: ./skill-tree/skills-personal-speech-auto-generated.xml
java -jar "./tools/saxon/saxon9he.jar" -o:"./skill-tree/skill-tree-expert-skills-personal-speech-auto-generated.mm" "./skill-tree/skills-personal-speech-auto-generated.xml" "./skill-tree/SkillTree2MindMap.xsl" \
"TargetName=Skill Tree" "TargetLevel=Expert"

clean:
rm \
./skill-tree/skills-non-personal-speech-auto-generated.xml \
./skill-tree/skills-personal-speech-auto-generated.xml \
./skill-tree/skill-tree-expert-skills-non-personal-speech-auto-generated.mm \
./skill-tree/skill-tree-expert-skills-personal-speech-auto-generated.mm
236 changes: 236 additions & 0 deletions modeling/skill-tree/Skill.xsd
@@ -0,0 +1,236 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" elementFormDefault="qualified" vc:minVersion="1.1">
<xsd:include schemaLocation="SkillBasicTypes.xsd"/>
<xsd:element name="Skill">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="Authors"/>
<xsd:element ref="Definition"/>
<xsd:element ref="RelevantForDomains"/>
<xsd:element ref="RelevantForRoles"/>
<xsd:element name="MainParentSkillRef" type="SkillRefType"/>
<xsd:element name="SubSkillRefs" type="SkillRefsType" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="Name" type="tName" use="required"/>
<xsd:attribute name="Id" type="xsd:ID" use="required"/>
<xsd:attribute name="Level" type="tLevel" use="required"/>
<xsd:attribute name="Category" type="tCategory" use="required"/>

<!-- kh 03.04.18 only SubSkills with a level that is less than or equal to the skill level can be referenced -->
<xsd:assert test="every $s in SubSkillRefs/SkillRef satisfies (@Level = 'All')
or ( (@Level = 'Expert')
and ( ($s/@Level = 'Expert')
or ($s/@Level = 'Intermediate')
or ($s/@Level = 'Basic')
)
)
or ( (@Level = 'Intermediate')
and ( ($s/@Level = 'Intermediate')
or ($s/@Level = 'Basic')
)
)
or ( (@Level = 'Basic')
and ($s/@Level = 'Basic')
)"/>

<!-- kh 03.04.18 for every Description/Item there has to be a corresponding SkillRef -->
<xsd:assert test="every $i in Definition/Description/Item satisfies ( not (exists($i/@AssociatedSkillRefName))
and not (exists($i/@AssociatedSkillRefLevel))
)
or (count(SubSkillRefs//SkillRef[ (@Name = $i/@AssociatedSkillRefName)
and (@Level = $i/@AssociatedSkillRefLevel)]) = 1)"/>

</xsd:complexType>

<xsd:key name="SkillAuthorKey">
<xsd:selector xpath="./Authors/Author"/>
<xsd:field xpath="."/>
</xsd:key>

<xsd:key name="SubSkillRefsKey">
<xsd:selector xpath="./SubSkillRefs/SkillRef"/>
<xsd:field xpath="@Name"/>
<xsd:field xpath="@Level"/>
</xsd:key>

</xsd:element>

<xsd:element name="Definition">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="ShortBackground" minOccurs="0">
<xsd:complexType>
<xsd:sequence minOccurs="0" maxOccurs="unbounded">
<xsd:element name="Item" type="BackgroundItemType"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>

<xsd:element name="Description" minOccurs="0">
<xsd:complexType>
<xsd:sequence minOccurs="0" maxOccurs="unbounded">
<xsd:element name="Item" type="DescriptionItemType"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>

</xsd:sequence>
</xsd:complexType>
</xsd:element>

<xsd:complexType name="BackgroundItemType">
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="IsGeneralPhrase" type="xsd:boolean" />
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>

<xsd:complexType name="DescriptionItemType">
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="Type" type="tImpartionType" use="required"/>
<xsd:attribute name="AssociatedSkillRefName" type="tName" />
<xsd:attribute name="AssociatedSkillRefLevel" type="tLevel" />
<xsd:attribute name="IsBackgroundTopic" type="xsd:boolean" />
<xsd:attribute name="IsGeneralPhrase" type="xsd:boolean" />
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>

<xsd:simpleType name="tImpartionType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Knowledge"/>
<xsd:enumeration value="Ability"/>
</xsd:restriction>
</xsd:simpleType>

<xsd:element name="RelevantForDomains">
<xsd:complexType>
<xsd:sequence maxOccurs="unbounded">
<xsd:element ref="Domain"/>
</xsd:sequence>
</xsd:complexType>
<xsd:key name="RelevantForDomainKey">
<xsd:selector xpath="./Domain"/>
<xsd:field xpath="@Name"/>
</xsd:key>
</xsd:element>
<xsd:element name="Domain">
<xsd:complexType>
<xsd:attribute name="Name" type="tDomainType" use="required"/>
<xsd:attribute name="EstimatedBenefit" type="tDomainEstimatedBenefit" use="required"/>
</xsd:complexType>
</xsd:element>
<xsd:simpleType name="tDomainType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="All"/>
<xsd:enumeration value="SocialSciences"/>
<xsd:enumeration value="NaturalSciences"/>
<xsd:enumeration value="EarthSciences"/>
<xsd:enumeration value="ComputerSciences"/>
<xsd:enumeration value="Chemistry"/>
<xsd:enumeration value="Physics"/>
<xsd:enumeration value="Medicine"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="tDomainEstimatedBenefit">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Low"/>
<xsd:enumeration value="Normal"/>
<xsd:enumeration value="High"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:element name="RelevantForRoles">
<xsd:complexType>
<xsd:sequence maxOccurs="unbounded">
<xsd:element ref="Role"/>
</xsd:sequence>
</xsd:complexType>
<xsd:key name="RelevantForRoleKey">
<xsd:selector xpath="./Role"/>
<xsd:field xpath="@Name"/>
</xsd:key>
</xsd:element>
<xsd:element name="Role">
<xsd:complexType>
<xsd:attribute name="Name" type="tRoleType" use="required"/>
<xsd:attribute name="EstimatedBenefit" type="tRoleEstimatedBenefit" use="required"/>
</xsd:complexType>
</xsd:element>
<xsd:simpleType name="tRoleType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="All"/>
<xsd:enumeration value="Tester"/>
<xsd:enumeration value="Builder"/>
<xsd:enumeration value="Developer"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="tRoleEstimatedBenefit">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Low"/>
<xsd:enumeration value="Normal"/>
<xsd:enumeration value="High"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:complexType name="SkillRefsType">
<xsd:sequence maxOccurs="unbounded">
<xsd:element name="SkillRef" type="SkillRefType"/>
</xsd:sequence>
<xsd:attribute name="TestOperation" type="tTestOperation" use="required"/>
<xsd:attribute name="nAbsolute" type="tnAbsolute"/>
<xsd:attribute name="nPercentage" type="tnPercentage"/>

<!-- kh 18.01.18 neither nAbsolute nor nPercentage are allowed for operation type 'And' and 'Or' -->
<xsd:assert test=" not ((@TestOperation = 'And') or (@TestOperation = 'Or'))
or not ( exists(@nAbsolute)
or exists(@nPercentage))"/>

<!-- kh 18.01.18 either nAbsolute or nPercentage is allowed for operation type 'nOutOfm' -->
<xsd:assert test=" not (@TestOperation = 'nOutOfm')
or ( ( exists(@nAbsolute)
or exists(@nPercentage))
and not (exists(@nAbsolute) and exists(@nPercentage))
)"/>

<!-- kh 18.01.18 nAbsolute has to be in the range 2..(childcount - 1) for operation type 'nOutOfm' -->
<xsd:assert test=" not (@TestOperation = 'nOutOfm')
or ( not (exists(@nAbsolute))
or ( (@nAbsolute gt 1)
and (@nAbsolute lt count(./child::*))
)
)"/>

</xsd:complexType>
<xsd:simpleType name="tnAbsolute">
<xsd:restriction base="xsd:nonNegativeInteger">
<xsd:minInclusive value="1"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="tnPercentage">
<xsd:restriction base="xsd:decimal">
<xsd:fractionDigits value="2"/>
<xsd:minExclusive value="0"/>
<xsd:maxInclusive value="100"/>
</xsd:restriction>
</xsd:simpleType>

<xsd:complexType name="SkillRefType">
<xsd:attribute name="Name" type="tName" use="required"/>
<xsd:attribute name="Level" type="tLevel" use="required"/>
</xsd:complexType>
<xsd:simpleType name="tRelevance">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Low"/>
<xsd:enumeration value="Medium"/>
<xsd:enumeration value="High"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="tTestOperation">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="And"/>
<xsd:enumeration value="Or"/>
<xsd:enumeration value="nOutOfm"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
36 changes: 36 additions & 0 deletions modeling/skill-tree/SkillBasicTypes.xsd
@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xsd:element name="Authors">
<xsd:complexType>
<xsd:sequence maxOccurs="unbounded">
<xsd:element name="Author" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:key name="ContentItemAuthorKey">
<xsd:selector xpath="./Author"/>
<xsd:field xpath="."/>
</xsd:key>
</xsd:element>
<xsd:simpleType name="tName">
<xsd:restriction base="xsd:string">
<!--<xs:pattern value="\c*-\c*"/>-->
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="tLevel">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="All"/>
<xsd:enumeration value="Basic"/>
<xsd:enumeration value="Intermediate"/>
<xsd:enumeration value="Expert"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="tCategory">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="All"/>
<xsd:enumeration value="HPC Knowledge"/>
<xsd:enumeration value="Use of the HPC Environment"/>
<xsd:enumeration value="Performance Engineering"/>
<xsd:enumeration value="Software Engineering for HPC"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>

0 comments on commit 22e6628

Please sign in to comment.