Inheritance/defaulting of attributes

Sean Mc Grath (digitome@iol.ie)
Wed, 8 Oct 1997 16:53:33 +0100


A small amount of a modern OO language can go a long way towards
providing a mechanism for wielding inheritance with SGML element types
and spitting out 8879 DTDs.

Just for fun, I doodled this in Python. N.B. this idea can be taken
a *whole* lot further. Also, I'm sure Perl5, Java etc. can be wielded
similarly.

# Declare a class "Animal" derived from ElementType
class Animal(ElementType):
def __init__(self,gi):
ElementType.__init__(self,gi)
# All Animals have legs
self.attrs["LEGS"] = ("NUMBER","#REQUIRED")

# Declare a class "Dog" derived from "Animal"
class Dog(Animal):
def __init__(self,gi):
Animal.__init__(self,gi)
#Some dogs have Rabies
self.attrs["RABIES"] = ("(YES,NO)","#REQUIRED")

# Create Animal and Dog element types, printing out the attribute list
declaration
print Animal("MyAnimal")
print Dog ("MyDog")

This script prints :-

<!ATTLIST MyAnimal
LEGS NUMBER #REQUIRED>
<!ATTLIST MyDog
RABIES (YES,NO) #REQUIRED
LEGS NUMBER #REQUIRED
>

The bass class "ElementType" is just this:-

class ElementType:
def __init__(self,gi):
self.attrs = {}
self.gi = gi

# Method to print self
def __repr__(self):
res = "<!ATTLIST " + self.gi
for (Name,(DeclaredValue,DefaultValue)) in self.attrs.items():
res = res+"\t"+Name+" "+DeclaredValue+"
"+DefaultValue + "\n"
res = res + ">"
return res

Sean Mc Grath
sean@digitome.com
www.digitome.com