The Periodic Table is one of the most beautiful works of science. In the mid 1800s chemists had found some sixty elements and had characterised many of their physicochemical properties. A goal of chemists was to organise elements according to increasing atomic weight and by their physicochemical properties. Chemists, including Newlands, had noticed periodicity in physicochemical properties, but Mendelev, in the 1860s, produced his Periodic table of the elements. His table organised elements in periods of increasing atomic weight with groups of elements that had similar physicochemical properties. Mendelev’s table had predictive properties – gaps – where he proposed putative elements and predicted their properties. In the 1920s physicists elucidated the electtronic structure of the atom and the shells of electrons and the numbers of electrons in these shells matched the structure of Mendelev’s table.
I’ve been trying an experiment along the lines of “Could Mendeleev dreamt in OWL?”. That is, can we deduce, just from the physico chemical properties known to chemists of the mid-1800s, the groups of the Periodic Table?the To this end I built a Periodic Table Ontology to try out this idea. I used modern notions of what was known in the mid-1800s. An ontology of the Periodic Table is easy if one uses the electronic structure of atoms, but this wasn’t known until the 1920s. Victorian chemist did, however, know about moles, ions and most of the physicochemical properties that we use today, even if under other names. So, my ontology has lots of values for these physicochemical properties and gives data properties in OWL a good exercise.
the Periodic Table Ontology (PTO) has the following major distinctions:
- Moles of atom (lumps of substance);
- Moles of Ion.
- Moles of chemical compound – lumps of more than one type of atom.
One of the main characteristics of chemical groups are the ratios in which the elements form salts. A salt is a compound made of at least one kind of metal ion with at least one kind of anion. To do this, we need the notion of a metal and defining “metal” actually prooved rather difficult.
From the list above, it can be seen that I’ve made a distinction between “atoms” as discrete physical objects and “Moles of atom” as lumps of stuff. So, we have sodium atom and mole of sodium atom (which is made of just sodium atoms). The sodium atom has properties such as numbers of proton, atomic radius, ionisation eneergies, and so on. The mole of sodium has properties such as boiling point, melting point, heat of enthalpy, and so on. A mole of something also has electrical conductance and this is what I used to define metals. Metals appear to be defined by their ability to form metal bonds and the formation of metal bonds depends on, amongst other things, pressure. Many elements will form metals at high enough pressure – indeed many more than what we call metal. The formation of metal bonds has nuclei sitting in a sea of electrons and this is what enables metals to conduct electricity. So, I used electrical conductance as a proxcy for metalness. The definition:
Class: MoleOfMetalAtom EquivalentTo: [in pto.owl] MoleOfPureAtom and (hasMeasurement some (Measurement and (hasQuantity some (ElectricalConductivity and (hasValue some double[>= 5.405])))))
picks up most things as metals. A non-mental is defined as something with a conductivity of zero. Metaloids are troublesome; a semi-conductor is not the same as a metalloid, though many of the metalloids are semi-conductors. However, carbon can be a semi-conductor, but isn’t a metalloid. Being a metalloid is defined by a variety of properties, inclduing the type of compounds formed.
The definition above has a not very good description of measurements and units. The Measurement class captures observations. Each measurement measures some Quantity and can have other attributes such as conditions (standard temperature and pressure, for instance) and even some kind of provenance. a Quantity has a value (simple data property) and a unit. For the quantity of ElectricalConductivity we have a unit of SiemensPerMetre. My units ontology is a two hour lash up made from the Wikipedia page on SI units. Siemens per metre is a derived unit using the base units of length and conductance. Again, not a beautiful ontology, but it does its job. Overall, I’d much rather use Bijan Parsia’s OWL extension for units that does all the work for me (hierarchy plus some inter-unit conversion); for my purposes here I need no ontological explanation of units; units simply allow me to interpret some numbers.
Being a metal depends on conditions and a variety of behaviours and the spectrum is rather broad. Writing a definition in OWL (with the artificial constraint of not being very modern) was hard. An extensional definition, where all the metals are simply listed, might be the best route; an element is a metal because chemists say it is a metal based on a collection of broadish criteria that any given substance doesn’t have to universally comply.
I have a definition of mole of metal atom. I then wanted to define “metal atom”. I did this by adding that atoms form moles of atom (as the opposite of moles of atom being made of atoms). To be more ontologicallly proper I would say that atoms have a disposition to form moles of atom as not all atoms form moles of atom. However, this brings me nothing, so i haven’t done it.
As well as atoms, I have classes of ion. Atoms form ions and thus I can have metal ions as well. I added universal constraints on what ions each atom forms so that I coulddefine, if I wished, atoms that form only mono-valent cations and so on.
Having formed metal ions, I could define moles of metal ion, along with anion, cation, mono-, bi-, tri- and so on, valent cations and anions.
A mole of salt was then defined as:
Class: MoleOfSalt EquivalentTo: [in pto.owl] MoleOfCompoundChemical and (isMadeOfMoleOfIon some MoleOfAnion) and (isMadeOfMoleOfIon some MoleOfMetalIon) and (isMadeOfMoleOfIon only (MoleOfAnion or MoleOfMetalIon))
and a mole of sodium chloride looks like:
Class: MoleOfSodiumChloride SubClassOf: [in pto.owl] MoleOfCompoundChemical, hasColour some WhiteColour, hasState some SolidState, hasMeasurement some (Measurement and (hasQuantity some (Density and (hasValue value 2.16)))), hasMeasurement some (Measurement and (hasQuantity some (KelvinBoilingPoint and (hasValue value 1465.0))) and (inCondition some StandardPressure)), hasMeasurement some (Measurement and (hasQuantity some (KelvinMeltingPoint and (hasValue value 801.0))) and (inCondition some StandardPressure)), hasMeasurement some (Measurement and (hasQuantity some (MolarMass and (hasValue value 58.442)))), hasMeasurement some (Measurement and (hasQuantity some (SolubilityInWater and (hasValue value 35.9)))), isMadeOfMoleOfIon only (MoleOfChlorideIon or MoleOfSodiumIon), isMadeOfMoleOfIon exactly 1 MoleOfChlorideIon, isMadeOfMoleOfIon exactly 1 MoleOfSodiumIon
Hidden in here is a shameful description of colour. All I’ve done is write down the colours as described on Web pages for chemicals. I even have a colour of “colourless colour” (yuk). Anyway, this does let me capture coloured salts, coloured compounds, white salts and so on.
with many other salts described I had the ability to start defining classes such as “salts that are made of exactly one mole of metal ion and one mole of chloride ion”, as in the alkali metal chlorides.
This highlights how verbose the modelling of measurement and quanity makes the ontology; much better to have some simple mechanism for describing quantities. Note also that the units for each quantity are on the named quanitty, so need not be put at this level.
I can define classes that pick up the alkali metal chlorides; the alkaline earths and the halogens. For example:
Class: MoleOfAlkaliMetalChloride Annotations: [in pto.owl] label "Mole Of Alkali Metal Chloride"@ EquivalentTo: [in pto.owl] MoleOfCompoundChemical and (hasMeasurement some (Measurement and (hasQuantity some (Density and (hasValue some double[< 4.0]))))) and (isMadeOfMoleOfIon only (MoleOfChlorideIon or MoleOfMetalIon)) and (isMadeOfMoleOfIon exactly 1 MoleOfChlorideIon) and (isMadeOfMoleOfIon exactly 1 MoleOfMetalIon)
Like much of the PTO, this relies on qualified cardinality constraints. Much of this kind of chemistry is defined by precise descriptions of exactly how much of this combines with that and so on. FaCT++ (and other reasoners) gets upset with QCRs much greater than 3 or so. Initially I had each atom defined by its proton; this made the reasoners die. (Of course, this is modern chemistry, but has no impact on my particualar constraints.) I’ve also skirted around describing moles as having Avogadro’s number of entities via QCR!
The PTO takes about 15 minutes to classify on my little lap top with FaCT+. Other reasoners (Pellet and HermiT) are defeated. The QCR probably slows things down and I know there are redundant axioms (the +hasPart exactly n Proton makes the disjointness between the atoms redundant. The disjointness was put in as part of a standard normalisation pattern. As I tend to do now, I made no tree, but just a list of atoms (and the other major classes) and use defined classes to build all hierarchy; this is probably rather expensive. However, building the hiearchy of groups is entirely the purpose of this exercise, so putting in my own would be cheating.
Several things have defeated me on forming definitions for other groups:
- My ignorance of transition metal chemistry.
- The inability to easily define trends. Alkali metals get softer, more reactive and so on as atomic weight (mass) increases.
- The noble gases are an interesting case. Their other name, the “inert gases” gives the clue; they are defined by the fact that, under most conditions, They do nothing. Without explicitly saying this, OWL’s open world assumption makes this hard.
- The groups at the start of the P-block move over metals and non-metals and, again, I’m just not good enough at the chemistry. I need to model how reactions take place and I’ve not done this.n
I can nearly do what I want; I can end up with classes that describe various groups in the Periodic Table. The layout is not the job of the ontology; this needs to be done by by a programme using the PTO. the predictive quality of the PTO was helped along by layout — the “gaps” in the table and some interpolation of values for physicochemical properties by chemists; this isn’t really the job of the ontology, but it is a job in which the ontology can participate. there wil be more on this later. Making a group based ontology of the elements is easy if one uses electronic structure. Alkali metals are defined by having one electron in the valence S-shell; alkaline earths have two electrons in the valence S-shell; halogens have five electrons in their valence P-Shell. Thre’s a little fiddling about in the transition or D-block, but its all quite straight-forward. A PTO using electronic structure is available. My attempt to “dream the Periodic Table in OwL” has, at best, been a partial success. It could be done, but I need much more clever ways of expressing relationships between classes — as atomic number (or atomic radius) increases, hardness decreases and reactivity increases; this, together with the formation of chlorides only in a ratio of one to one and oxides only in the ratio two to one, is suggicient to recognise an atom as being an alkali metal atom. I shall use the PTO has a way of highlighting many more issues in using OWL to model a domain’s semantics; some good and some bad.