Toward a Structuralist R D F Schema

When I get the time, I’m going to write a vocab­u­lary cre­ation lan­guage to sup­port struc­tural­ist text inter­pre­ta­tion.  It will con­sist of two specs: one to han­dle the mark­ing up the sur­face fea­tures of text, such as rhetor­i­cal fig­ures and tropes.  This will be based on my work with the Prince­ton Char­rette Project and it will like­ly incor­po­rate some ideas from Steven Bird’s work on anno­ta­tion graphs.  The sec­ond will be either an exten­sion of or a vari­ant of SKOS and|or OWL designed to rep­re­sent extract­ed sym­bol­ic struc­tures.  It will incor­po­rate pred­i­cates to han­dle rela­tions of sig­ni­fi­ca­tion, such as has_part, has_analogy, and has_metonym, between the ele­ments rep­re­sent­ed in the first lan­guage.   At a larg­er lev­el, I want to rep­re­sent holis­tic dimen­sions such as con­text and lev­el, as well as nar­ra­to­log­i­cal things like encom­pass­ment, trans­for­ma­tion, inver­sion, and lim­i­nal­i­ty.

One of the big prob­lems I see in this project is an appar­ent lim­i­ta­tion in RDF to sup­port triples about triples.  For exam­ple, an anal­o­gy is a rela­tion between struc­tures, not terms.  The asser­tion A : B :: C : D is, at minu­mum, an asser­ta­tion about the rela­tion­ship between two asser­ta­tions, A : B and C : D.  (The pred­i­cate of the asser­tions them­selves is usu­al­ly X has_part Y.)  An anol­o­gy looks some­thing like this then:

[A has_part B] just_as [C has_part D]

The eas­i­est way to accom­plish this task would be to pro­vide URIs for each RDF triple.  I haven’t seen a gen­er­al solu­tion to this prob­lem.  I know I can cre­ate local URIs with­in a spe­cif­ic triple store, and use these in triples.  But I need to define an RDF triple as a datatype first.  And I antic­i­pate prob­lems fur­ther down­stream; I won­der if the cur­rent RDF toolset is designed to han­dle index­ing and infer­enc­ing of these kinds of triples.

If any­one has sug­ges­tions about how to han­dle this issue, I’d be glad to hear them.


After writ­ing this, it strikes me that to say that two triples are anal­o­gous is just to say that they share a predicate–so long as that pred­i­cate is suf­fi­cient­ly spec­i­fied.  To assert an anal­o­gy, then, is to assert that such an iden­ti­ty is impor­tant or rel­e­vant in a cer­tain con­text.

7 thoughts on “Toward a Structuralist R D F Schema

  1. Patrick Murray-John

    RDF does have Rei­fied triples. I avoid them when­ev­er I can, but in what you describe they might be just the tick­et. Only trick is a reli­able algo­rithm for mint­ing the URI.

    I’m not good enough with OWL to know for sure, but it might be pos­si­ble to do that in such a way and a rea­son­ing engine could draw con­clu­sions from it. Seems to me, though, that the secret sauce would be sub­tle­ty in the pred­i­cates. has_part seems like just one of many pos­si­bil­i­ties. How about

    Black opposite_of White :: Hot opposite_of Cold

    Car powered_by Gas :: Sail­boat powered_by Wind

    NB opposite_of is sym­met­ric, powered_by is not.

    Very inter­est­ing stuff…love the way this could add new good­ies to the Dig­i­tal Human­i­ties toolk­it! Can’t wait to play with it!


  2. ontoligent

    Patrick — Thanks for the tip re rei­fied triples! This does seem to be the log­i­cal start­ing point. One thing I am try­ing to get my head around is the fact that the same triple, abstract­ly speak­ing, may have dif­fer­ent rei­fied instances. Also, it looks like you can’t just point to an exist­ing triple — you have to rewrite the triple in a new form. This must break most infer­enc­ing engines.

    Just dis­cov­ered this arti­cle on “Reify­ing rei­fied rela­tion­ships” has an inter­est­ing take on the issue.

  3. Patrick Murray-John

    Inter­est­ing article—thanks. That all does make rei­fied triples tricky. I sup­pose the dif­fer­ent instances could at least be described with owl:sameAs, but that might be tricky to keep track of.

    If you are work­ing in PHP, I vague­ly remem­ber the RAP API hav­ing a reify method that rewrites the triples and assigns a bnode to the state­ment. Not sure what’s there in oth­er lan­guage APIs.

    I’m won­der­ing if some­thing com­plete­ly dif­fer­ent might work, that han­dles what you are get­ting at in a more abstract­ed form. Maybe a class called Trope­In­stance with prop­er­ties that get at the info you need. It might be recre­at­ing the same struc­ture of rdf:Statement along with its issues, but might also offer more flex­i­bil­i­ty. So maybe:

    :ti1 a o:TropeInstance ;
    o:subject :resource1 ;
    o:relation o:opposite_of ;
    o:object :resource2 ;
    o:just_as :t2 ;
    o:occurs_at :lineReference1 .

    :ti2 a o:TropeInstance ;
    o:subject :resource3 ;
    o:relation o:opposite_of ;
    o:object :resource4 ;
    o:just_as :t1 ;
    o:occurs_at :lineReference2 .

    Not sure if that would be bet­ter or worse!

  4. ontoligent

    Yes, this looks like a good approach — it real­ly is a mat­ter of cre­at­ing a more elab­o­rate form rdf:Statement. What I am real­iz­ing is that the real work will come in pro­cess­ing these sorts of state­ments. The algoritm’s the thing …

  5. Gardner

    I’m very glad this con­ver­sa­tion is hap­pen­ing on a blog. I under­stand some of the words and strug­gle even to see the out­lines of the argu­ment in most cas­es, but it’s fun to watch you guys at work­play. And I fan­ta­size that if I keep read­ing over some of this seman­tostuff it’ll actu­al­ly start to sink in. Infer­ring from con­text, mak­ing pre­dic­tions, and check­ing results is how I taught myself audio lin­go from read­ing “Stereo Review” mag­a­zine. The process was slow and oh-so-iter­a­tive, but when I final­ly grasped all the basics, I real­ly grasped them. Now, rdf and non-sym­met­ri­cal analo­gies will be much hard­er than “wow” and “flut­ter” (glo­ry days of ana­log, don­cha know) and “total har­mon­ic dis­tor­tion” and “sig­nal-to-noise ratio” (who knew *that* would be so handy in describ­ing online com­mu­ni­ca­tions?), but leave the boy his fan­tasies, and maybe one day he’ll under­stand a few drams more than he does now. Espe­cial­ly with your able indi­rect tute­lage.

    Now, please put that “noti­fy of fol­low-up com­ments” plug-in here so I don’t miss a sin­gle episode. 🙂

  6. ontoligent

    Gard­ner — I’m glad the con­ver­sa­tion appeals to you. I take this is a good sign of the suc­cess of my and oth­ers’ efforts to nudge the whole seman­tostuff con­ver­sa­tion into human­ist waters.

    And yes, I’ll add that plu­g­in ASAP. Thanks for point­ing it out …

Leave a Reply

Your email address will not be published. Required fields are marked *