[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [Elist Home]
Subject: RE: [xtm-wg] XTM syntax issues
Correction to the last item in the message below: c) Allow all the subelements of topic to occur on association This would make the association content model into this: <!ELEMENT association (associationSpec? , subjectIdentity? , (baseName | occurrence )* , scope? , member+ )> should read as follows c) Allow all the subelements of topic to occur on association This would make the association content model into this: <!ELEMENT association (associationSpec? , InstanceOf* , subjectIdentity? , (baseName | occurrence )* , scope? , member+ )> Daniel -----Original Message----- From: Daniel Rivers-Moore [mailto:daniel.rivers-moore@rivcom.com] Sent: 15 December 2000 18:29 To: xtm-wg@egroups.com Subject: [xtm-wg] XTM syntax issues To illustrate and explain the issues I have with the current XTM syntax, I shall use the following scenario. I want to create a topic association between John, a man, and Mary, a woman. The association is the marriage between John and Mary. In this association, John is Mary's husband, and Mary is John's wife. The association is based on an association template, called "marriage", which expresses the constraint that the husband in a marriage must be a man and the wife in a marriage must be a woman. I shall build the topic map for this, and highlight problem issues as I come upon them. Stage 1: Creating topics for the things I'll be dealing with: I create a topic for man, a topic for woman, a topic for John, who is an instance of man, and a topic for Mary, who is an instance of woman, a topic for the role of husband, and a topic for the role of wife. No problems so far. Here is the resultant syntax: <topicMap> <topic id="topic.man"> <baseName> <baseNameString>man</baseNameString> </baseName> </topic> <topic id="topic.woman"> <baseName> <baseNameString>woman</baseNameString> </baseName> </topic> <topic id="topic.John"> <instanceOf> <topicRef xlink:href="#topic.man"/> </instanceOf> <baseName> <baseNameString>John</baseNameString> </baseName> </topic> <topic id="topic.Mary"> <instanceOf> <topicRef xlink:href="#topic.woman"/> </instanceOf> <baseName> <baseNameString>Mary</baseNameString> </baseName> </topic> <topic id="topic.husband"> <baseName> <baseNameString>husband</baseNameString> </baseName> </topic> <topic id="topic.wife"> <baseName> <baseNameString>wife</baseNameString> </baseName> </topic> </topicMap> Stage 2: Creating an association Now I want to create the association that is the marriage between John and Mary. This is a topic. Its baseName will be "marriage of John and Mary". To do this I have to create two elements, a topic to contain the baseName, and an association to contain the members, with roleSpecs pointing to the roles those members play. <topic id="topic.marriage-of-John-and-Mary"> <baseName> <baseNameString>marriage of John and Mary</baseNameString> </baseName> </topic> <association id="association.marriage-of-John-and-Mary"> <member> <roleSpec> <topicRef xlink:href="#topic.husband"/> </roleSpec> <topicRef xlink:href="#topic.John"/> </member> <member> <roleSpec> <topicRef xlink:href="#topic.wife"/> </roleSpec> <topicRef xlink:href="#topic.Mary"/> </member> </association> So far so good. But now we begin to encounter problems. ISSUE 1 - Making an association and a topic element become a single node in the graph. How do I say that this topic and this association are the same thing (a single node in the graph), so that the name "marriage of John and Mary" will apply to the association? The mechanism of subjectIdentity is the requisite method. I'd like to put a subjectIdentity on the association and use it to point to the topic, but the DTD does not allow a subjectIdentity subelement on association. I can put a subjectIdentity on the topic with a topicRef to the association, but despite the fact that an association is a topic, I'm disallowed from doing this by the restriction that a topicRef can only point to a topic element. Solutions: a) allow topicRef to point to an association element b) allow association to have a subjectIdentity subelement c) allow association to have all the subelements that topic has, plus others that are peculiar to them. Solution a) would allow this: <topic id="topic.marriage-of-John-and-Mary"> <subjectIdentity> <topicRef>#association.marriage-of-John-and-Mary</topicRef> </subjectIdentity> <baseName> <baseNameString>marriage of John and Mary</baseNameString> </baseName> </topic> <association id="association.marriage-of-John-and-Mary"> <member> <roleSpec> <topicRef xlink:href="#topic.husband"/> </roleSpec> <topicRef xlink:href="#topic.John"/> </member> <member> <roleSpec> <topicRef xlink:href="#topic.wife"/> </roleSpec> <topicRef xlink:href="#topic.Mary"/> </member> </association> Solution b) would allow this (which is preferable because I can find the baseName of the association by following a pointer from within the association's subtree, rather than having to search my entire topic map for a pointer from some topic element back to the association element in order to find its baseName): <topic id="topic.marriage-of-John-and-Mary"> <baseName> <baseNameString>marriage of John and Mary</baseNameString> </baseName> </topic> <association id="association.marriage-of-John-and-Mary"> <subjectIdentity> <topicRef>#topic.marriage-of-John-and-Mary</topicRef> </subjectIdentity> <member> <roleSpec> <topicRef xlink:href="#topic.husband"/> </roleSpec> <topicRef xlink:href="#topic.John"/> </member> <member> <roleSpec> <topicRef xlink:href="#topic.wife"/> </roleSpec> <topicRef xlink:href="#topic.Mary"/> </member> </association> Solution c) would allow this (which is yet more preferable because all information about the association is in one place, can be immediately processed, and the instance is more readable and intuitive, and less verbose): <association id="association.marriage-of-John-and-Mary"> <baseName> <baseNameString>marriage of John and Mary</baseNameString> </baseName> <member> <roleSpec> <topicRef xlink:href="#topic.husband"/> </roleSpec> <topicRef xlink:href="#topic.John"/> </member> <member> <roleSpec> <topicRef xlink:href="#topic.wife"/> </roleSpec> <topicRef xlink:href="#topic.Mary"/> </member> </association> Stage 3: Deriving the association from an association template Now I want to state that the association that is the marriage of John and Mary is derived from the marriage association template. First, I create an association that serves as a template for all marriage associations, and which has, as members in each role, the classes of things that can play that role in instance associations that conform to the template. I also create a topic in order to give this association template the baseName "marriage". <topic id="topic.marriage"> <subjectIdentity> <topicRef>#association-template.marriage</topicRef> </subjectIdentity> <baseName> <baseNameString>marriage</baseNameString> </baseName> </topic> <association id="association-template.marriage"> <member> <roleSpec> <topicRef xlink:href="#topic.husband"/> </roleSpec> <topicRef xlink:href="#topic.man"/> </member> <member> <roleSpec> <topicRef xlink:href="#topic.wife"/> </roleSpec> <topicRef xlink:href="#topic.woman"/> </member> </association> ISSUE 2: Stating that an association is derived from an association template? How do I now relate the instance association with this template? The only way I can to this with the current syntax is by using the instanceOf subelement on the association. However, when my document is processed, and the association and the topic have become a single node in the graph, this instanceOf and any instanceOfs in the topic element will be brought together. <topic id="topic.marriage-of-John-and-Mary"> <instanceOf> <topicRef xlink:href="#sacred-union"/> </instanceOf> <instanceOf> <topicRef xlink:href="#contractual-relationship"/> </instanceOf> <baseName> <baseNameString>marriage of John and Mary</baseNameString> </baseName> </topic> <association id="association.marriage-of-John-and-Mary"> <instanceOf> <topicRef xlink:href="#association-template.marriage"/> </instanceOf> <member> <roleSpec> <topicRef xlink:href="#topic.husband"/> </roleSpec> <topicRef xlink:href="#topic.John"/> </member> <member> <roleSpec> <topicRef xlink:href="#topic.wife"/> </roleSpec> <topicRef xlink:href="#topic.Mary"/> </member> </association> Once the above elements have been merged, the resultant topic map node will have instanceOf relationships with association-template.marriage, with sacred-union and with contractual-relationship. Which of these is the relevant association template? There is no way of knowing. We need a special subelement of association for this purpose. It would be logical to call it associationSpec. This will allow the following: <association id="association.marriage-of-John-and-Mary"> <associationSpec> <topicRef xlink:href="#association-template.marriage"/> </associationSpec> <member> <roleSpec> <topicRef xlink:href="#topic.husband"/> </roleSpec> <topicRef xlink:href="#topic.John"/> </member> <member> <roleSpec> <topicRef xlink:href="#topic.wife"/> </roleSpec> <topicRef xlink:href="#topic.Mary"/> </member> </association> Now the pointer from association.marriage-of-John-and-Mary to the marriage template cannot be confused with any instanceOf pointers on the topic.marriage-of-John-and-Mary after they are merged in the graph. SUMMARY: The following DTD changes would meet my minimal concerns: i) Allow xlink:href attributes on topicRef elements to point to association elements as well as topic elements. This requires no change to the formal declarations, but only a change to the descriptive text. ii) Use associationSpec instead of instanceOf as first subelement of association This would require the following in the DTD <!ELEMENT association (associationSpec? , scope? , member+ )> <!ATTLIST association id ID #REQUIRED > <!ELEMENT associationSpec (topicRef | subjectIndicatorRef )> <!ATTLIST associationSpec id ID #IMPLIED > The following additional DTD change would greatly facilitate processing and readability b) Allow a subjectIdentity subelement on association This would make the association content model into this: <!ELEMENT association (associationSpec? , subjectIdentity? , scope? , member+ )> The following additional DTD change would allow more compact and readable XTM instance documents c) Allow all the subelements of topic to occur on association This would make the association content model into this: <!ELEMENT association (associationSpec? , subjectIdentity? , (baseName | occurrence )* , scope? , member+ )> I hope what I have said above is sufficiently clear and concise. I'd be happy to clarify if it is not clear, and look forward to seeing what others think about these issues. Specifically, if others have found ways of doing what I describe without changing the DTD, I'd love to see examples of instances (based on the John-Mary example or otherwise) that show how they've managed to do this. Best regards to all Daniel = = = = = = = = = = = = = = = = = = Daniel Rivers-Moore Director of New Technologies RivCom Tel: +44 (0) 1793 792004 Email: daniel.rivers-moore@rivcom.com To Post a message, send it to: xtm-wg@eGroups.com To Unsubscribe, send a blank message to: xtm-wg-unsubscribe@eGroups.com -------------------------- eGroups Sponsor -------------------------~-~> eLerts It's Easy. It's Fun. Best of All, it's Free! http://click.egroups.com/1/9699/0/_/337252/_/976915214/ ---------------------------------------------------------------------_-> To Post a message, send it to: xtm-wg@eGroups.com To Unsubscribe, send a blank message to: xtm-wg-unsubscribe@eGroups.com
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [Elist Home]
Powered by eList eXpress LLC