
In producing a signlist and analysing its contents , it is obviously very important to consider the question of what actually constitutes a " sign " . Much has changed since the traditional Assyriological signlists were first produced , both in Assyriology and in the description and analysis of writing and writing systems in general . The minimal unit of written language - and this applies equally to logo-syllabic scripts such as cuneiform as it does to alphabetic scripts - is the grapheme . One might describe this as the smallest contrastive unit of writing . By substituting one such unit for another , a significant change in meaning ( using the term in its broad sense ) occurs . Grapheme is not an unproblematic term ( notice , for instance , that there is no one-to-one relationship between graphemes and phonemes ) but it is both defensible and useful , as far as the present study of cuneiform is concerned , at least . There are many and various indications of what ancient scribes considered units in cuneiform ; in light of these , a set of criteria is being drawn up to allow the identification of signs . The CDP project will catalogue and analyse these units , these graphemes . Thus for the signlist , the sign is a grapheme . There are two further levels at which cuneiform signs can be described . Graphemes may appear in several different , yet equally valid , forms ; these are labelled allographs . Each instance - the actual mark or set of marks one sees in the clay - is an example of an allograph of a grapheme ; these are labelled graphs . To illustrate the difference between graph , allograph and grapheme , consider alphabetic writing . Readers of alphabetic writing , as they look at what they are reading , see a long string of graphs . Effortlessly they identify each graph as a valid instance of a particular letter or mark of punctuation , that is , as a depiction of a grapheme . Even in the highly controlled graphic environment of print there is still a lot of allographic variation : the grapheme /a / , for instance , may be a roman ' a ' or an italic ' a ' , ( in most typefaces a completely different form ) . All of these are recognised without hesitation by skilled readers as being different versions of the same thing , allographs of the grapheme /a / , and therefore , in our alphabetic script , inviting the same range of phonological realisation . We see those different graphic shapes , and in our head appears the noise ' a ' or ' ay ' or whatever else the context dictates . For a more detailed discussion , see the terminology section . In the study of cuneiform , work has been concentrated at the graphemic level . Great efforts have been made to identify the cuneiform signs , and there are standard lists that name and illustrate them . But little work has been done at the allographic level , which is the level of a truly useful sign list , nor at the graphic level , the level at which the identifying characteristics of individual scribes are to be found . The reasons for this are partly 