Response to Ege's Blog - More Conceptual Refactoring
Ege had some great ideas about separating Title and Genre into their own concepts here. I think we can take the idea even further, and do a bit more restructuring.
Series
For one, the "remakeOf" and "sequelTo" states belonging to a specific Movie is helpful in some ways, but also unhelpful in some ways. If I have 10 Saw movies, it might be helpful to have somewhere to store all of these Movies together, rather than just as sequel links.
To that end, a Series concept might be helpful.
concept Movie
purpose: info about all movies
state:
year: Movie -> one Year
concept Movie
purpose: info about all movies
state:
year: Movie -> one Year
concept Series[Movie]
purpose: info about a sequence of movies
state:
movie: Series -> set Movie
concept Series[Movie]
purpose: info about a sequence of movies
state:
movie: Series -> set Movie
Subgenres
I like Ege's idea about having subgenres. However, it's possible to go many layers deep on this one. For instance, the action genre might have martial arts as a subgenre, and martial arts has multiple subgenres within itself. Now, we might say that we don't care about anything more specific than one layer down, but just in case we want to make it really clear that our fantasy martial arts movie is a xianxia and not a wuxia, we might want to make things recursive.
concept Genre[Movie]
state:
genre: Movie -> set String
subgenre: Genre -> set Genre
concept Genre[Movie]
state:
genre: Movie -> set String
subgenre: Genre -> set Genre
Titles
To be honest, I would not implement a smart autopopulation feature for titleByLanguage. My reasoning on this is that studios are free to choose what the title is in each language. That is to say, one movie titled "Heat" might be translated to a word that means "high temperature," while a different movie also titled "Heat" might be translated to a word that means "passion." I would err on the side of caution and not opt for auto-translate.
The concept is also applicable to Series, where Series and Movie are both Objects.
concept MultilingualTitle[Object, Language]
state:
originalTitle: Object -> one String
titleByLanguage: Object, Language -> one String
concept MultilingualTitle[Object, Language]
state:
originalTitle: Object -> one String
titleByLanguage: Object, Language -> one String
Versions
That got me thinking, though... what about regional differences between movies? If there are differences to the actual movie (like scenes censored or deleted), what then? Should they be considered different "versions"? And what about other kinds of versions? The "Synder Cut"? How about subtitles vs dubbed?
All questions to think about. It might be worth making these different optional bits of data that can be added on at will.