vocabulary <http://ua.be/sdo2l/vocabulary/formalisms/code#> as code {
	extends <http://ua.be/sdo2l/vocabulary/formalisms/text#> as text


    concept CodeData < text:TextData
    concept CodeLanguage

    scalar CodeLanguageOption [
    	oneOf
        "C",
        "C++",
        "Python",
        "MATLAB"
    ]

    scalar property hasCodeLanguageOption [
        domain CodeLanguage
        range CodeLanguageOption
    ]

    relation entity UsesCodeLanguage [
        from CodeData
        to CodeLanguage
        forward usesCodeLanguage
    ]

    concept CCodeLanguage < CodeLanguage [
        restricts hasCodeLanguageOption to "C"
    ]

    concept CCode < CodeData [
        restricts all usesCodeLanguage to CCodeLanguage
    ]

    concept CppCodeLanguage < CodeLanguage [
        restricts hasCodeLanguageOption to "C++"
    ]

    concept CppCode < CodeData [
        restricts all usesCodeLanguage to CppCodeLanguage
    ]

    concept PythonCodeLanguage < CodeLanguage [
        restricts  hasCodeLanguageOption to "Python"
    ]

    concept PythonCode < CodeData [
        restricts all  usesCodeLanguage to PythonCodeLanguage
    ]

    concept MATLABCodeLanguage < CodeLanguage [
        restricts hasCodeLanguageOption to "MATLAB"
    ]

    concept MATLABCode < CodeData [
        restricts all  usesCodeLanguage to MATLABCodeLanguage
    ]


}
