MadMode

Dan Connolly's tinkering lab notebook

Using RDF and OWL to model language evolution

diagram on whiteboard Back in September, the TAG had this great whiteboard discussion of versioning.

versioning diagram TimBL captured an omnigraffle version, which is nice because it's XML and I can convert it to RDF with XSLT, but it's a mac thing and Dave Orchard, who's doing most of the relevant writing, was more inclined to building UML diagrams with Visio. Then Henry Thompson found this violet tool that's just what we need: a light-weight, cross-platform (Java, in this case) editor that produces pretty clean XML representations of UML class diagrams.

This week, Dave sent an update on the terminology section.

That was just the prompt I was looking for to swap in my work on formally defining W3C's namespace change policy options from last September. I thought for a while about how to test that the RDF version of the UML diagram was right, and I realized I could get cwm to smush producers and consumers based on cardinality constraints.

First we extract RDF from the UML diagram...

ext-vers$ make test-agent-pf.n3
xsltproc ... --output ext-vers-uml.rdf grokVioletUML.xsl ext-vers-uml.violet

... and then we mix with some rules to implement OWL cardinalities...

python $swap/cwm.py ext-vers-uml.rdf test-agent.n3 \
owl-excerpt.n3 rdfs-excerpt.n3 --think \
--filter=test-agent-goal.n3 --why >test-agent-pf.n3

And indeed, it concludes a1 = a2.

I'm working on getting a proof/justification using --why and some proof browsing tools, but that's another story.

One of the reasons I'm pleased with this ontology that the TAG came up with in Edinburgh is that it allows me to formalize the concept of sublanguage that I have heard TimBL talk about now and again. For example:

  1. HTML2 is a sublanguage of HTML4.
  2. a production of chap2 is in HTML2; the intent is chap1in
  3. a consumption of chap2, ?C is in HTML4
  4. Show: ?C intent chap1in
  5. ?C intent chap1in by 1, 2, 3 and defn sublanguage

where the definition of sublanguage is:

{
[] ev:text ?TXT; :language [ is :sublanguage of ?BIG ]; :intent ?I.
?COMM ev:text ?TXT; :language ?BIG.
} => { ?COMM :intent ?I }.
{
[] ev:text ?TXT; :language ?BIG; :impact ?I.
?COMM ev:text ?TXT; :language [ is :sublanguage of ?BIG ].
} => { ?COMM :impact ?I }.