In your case, you can decompose these sentences into 3 RDF statements or use a blank node .
Examples of decomposition, a course has its own URI ( :Course999 ):
:Mr_Parker :teaches :Course999 . :Course999 :courseName "Machine Learning" . :Course999 :hasSupportBook "ML-for-newbies" .
With anonymous nodes (empty node _:b1 ), this is the same principle, but the course is clearly not fixed:
:Mr_Parker :teaches _:b1 . _:b1 :courseName "Machine Learning" . _:b1 :hasSupportBook "ML-for-newbies" .
Now, as mentioned in the comments, the line "ML-for-newbies" is not really a book, it just represents the name of the book. Thus, you can add more triples to get additional information about this element (for example, the author of this book). You might consider reusing an already developed dictionary for this task (for example, the Dublin Core):
:Mr_Parker :teaches _:b1 . _:b1 :hasSupportBook :book2 . :book2 dcterms:title "ML-for-newbies" . :book2 dcterms:creator "John Smith" .
... and then here the line represents the name of the author, but not the author (for the book, for example), so you can expand your triples even more by presenting this type of object, if necessary.
source share