This section presents a selection of design patterns with a focus on representing approaches to information organisation which are common in information architecture and library sciences.
The topic map consists of a hierarchical ordering of topics. The topics in the hierarchy may all be of the same topic type or of different types. The problem is to provide topic names that can be easily processed by an application to provide either full context or no context depending on the use. For example, when listing all topics which are subordinate to a parent, just the topic name is needed as the name of the parent should provide sufficient context. However, when displaying a list of topics returned by a search, the full path to the topic through the hierarhcy should be displayed to give the user sufficient contextual information.
A further problem to be addressed is that the Topic Naming Constraint, which requires that two topics with the same name in the same scope be merged, forces nodes at different positions in the hierarchy to be merged if they have the same name. For example in a tree consisting of branches Top / Arts / People and Top / Sciences / People, we do not want the two nodes with the name "People" to be merged.
In the Hierarchical Naming pattern, each topic which is not at the root of the hierarchy is assigned two names. A "short name" which is the topic's display name determined according to the subject that the topic represents; and a "long name" which is a concatenation of the short names of all topics on the hierarchical path from the root to the topic, with a suitable separator character.
Examples of the Hierarchical Naming pattern can be seen in the Open Directory and other web directories based on DMoz data. Each category in the Open Directory has a short name which is the standard display name for the category. A long name for the category is composed of the names of all categories starting from Top that form the route from Top to the category.
In implementation, each topic which is part of the hierarchy has two base names. The long name is a topic base name in the unconstrained scope. The short name is a topic base name whose scope contains the topic that represents the parent category as a theme.
The following example shows two topics representing a pair of hierarchically ordered categories named using the Hierarchical Naming pattern.
<?xml version="1.0" encoding="utf-8"?>
<topicMap xmlns="http://www.topicmaps.org/xtm/1.0/"
xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Category Ontology -->
<topic id="category">
<baseName>
<baseNameString>Category</baseNameString>
</baseName>
</topic>
<topic id="subcategory-supercategory">
<baseName>
<baseNameString>Subcategory/Supercategory</baseNameString>
</baseName>
<baseName>
<scope><topicRef xlink:href="#supercategory"/></scope>
<baseNameString>Has Subcategory</baseNameString>
</baseName>
<baseName>
<scope><topicRef xlink:href="#subcategory"/></scope>
<baseNameString>Subcategory Of</baseNameString>
</baseName>
</topic>
<topic id="subcategory">
<baseName>
<baseNameString>Subcategory</baseNameString>
</baseName>
</topic>
<topic id="supercategory">
<baseName>
<baseNameString>Supercategory</baseNameString>
</baseName>
</topic>
<!-- Category Instances -->
<topic id="top">
<instanceOf><topicRef xlink:href="#category"/></instanceOf>
<baseName><baseNameString>Top</baseNameString></baseName>
</topic>
<topic id="arts">
<instanceOf><topicRef xlink:href="#category"/></instanceOf>
<baseName><baseNameString>Top / Arts</baseNameString></baseName>
<baseName>
<scope><topicRef xlink:href="#top"/></scope>
<baseNameString>Arts</baseNameString></baseName>
</topic>
<topic id="arts.people">
<instanceOf><topicRef xlink:href="#category"/></instanceOf>
<baseName>
<baseNameString>Top / Arts / People</baseNameString>
</baseName>
<baseName>
<scope><topicRef xlink:href="#arts"/></scope>
<baseNameString>People</baseNameString>
</baseName>
</topic>
<topic id="sciences">
<instanceOf><topicRef xlink:href="#category"/></instanceOf>
<baseName>
<baseNameString>Top / Sciences</baseNameString>
</baseName>
<baseName>
<scope><topicRef xlink:href="#top"/></scope>
<baseNameString>Sciences</baseNameString>
</baseName>
</topic>
<topic id="sciences.people">
<instanceOf><topicRef xlink:href="#category"/></instanceOf>
<baseName>
<baseNameString>Top / Sciences / People</baseNameString>
</baseName>
<baseName>
<scope><topicRef xlink:href="#sciences"/></scope>
<baseNameString>People</baseNameString>
</baseName>
</topic>
<!-- Category associations -->
<association>
<instanceOf>
<topicRef xlink:href="#subcategory-supercategory"/>
</instanceOf>
<member>
<roleSpec><topicRef xlink:href="#supercategory"/></roleSpec>
<topicRef xlink:href="#top"/>
</member>
<member>
<roleSpec><topicRef xlink:href="#subcategory"/></roleSpec>
<topicRef xlink:href="#arts"/>
</member>
</association>
<association>
<instanceOf>
<topicRef xlink:href="#subcategory-supercategory"/>
</instanceOf>
<member>
<roleSpec><topicRef xlink:href="#supercategory"/></roleSpec>
<topicRef xlink:href="#top"/>
</member>
<member>
<roleSpec><topicRef xlink:href="#subcategory"/></roleSpec>
<topicRef xlink:href="#sciences"/>
</member>
</association>
<association>
<instanceOf>
<topicRef xlink:href="#subcategory-supercategory"/>
</instanceOf>
<member>
<roleSpec><topicRef xlink:href="#supercategory"/></roleSpec>
<topicRef xlink:href="#arts"/>
</member>
<member>
<roleSpec><topicRef xlink:href="#subcategory"/></roleSpec>
<topicRef xlink:href="#arts.people"/>
</member>
</association>
<association>
<instanceOf>
<topicRef xlink:href="#subcategory-supercategory"/>
</instanceOf>
<member>
<roleSpec><topicRef xlink:href="#supercategory"/></roleSpec>
<topicRef xlink:href="#sciences"/>
</member>
<member>
<roleSpec><topicRef xlink:href="#subcategory"/></roleSpec>
<topicRef xlink:href="#sciences.people"/>
</member>
</association>
</topicMap>
The Hierarchical Naming pattern ensures that topics representing distinct categories in a hierarchy are not merged by the Topic Naming Constraint as long as no topic in the hierarchy has two child topics with the same short name. The pattern ensures that topics can be displayed with either a complete name giving the topic's context in the hierarchy or with a short name when the context is already established (e.g from the context of the parent category).
The Hierarchical Classification Pattern can be used to define the hierarchical ordering of topics.
Many classification systems consist of one or more hierarchies of subjects. A number of different hierarchical relationships are possible part-whole, broader-narrower and so on. Although the relationships may be different, the hierarchical semantics remain the same. An application dealing with multiple hierarchical relationship types requires a way to identify all of these types.
The pattern given here for modelling a hierarchical classification system uses one topic to represent each class in the system. The hierarchy is then modelled by creating associations between subordinate and superordinate classes. However, it is recognised that there are a wide variety of different hierarchical relationships. For this reason, the type of the associations between the subordinate and superordinate classes are not defined by this pattern. Instead, this pattern defines the type of all such types, and the type of all role types for both subordinate and superordinate role players.
The other issue is how to relate the items classified by this scheme (the instances) to the topics which represent the classes. If an instance is represented by a topic, then an association should be made between the topic representing the class and the topic representing the instance. For this purpose, topic types are introduced to represent the classification of an instance ("Classified As") and the roles played in this relationship ("Classification" and "Instance"). If the instance is not represented as a topic, then an occurrence should be used, in which case the "Instance" type can be used as an occurrence type rather than as an association role type.
This pattern creates a means of flagging an association type as being a hierarchical relationship, and of indicating which role is the superordinate and which the subordinate role. This may be done externally to the topic map which defines the association and role types, enabling a pre-existing topic map to be integrated without the need to edit it.
The classification semantics of the "Classified As", "Classification" and "Instance" types can be ommitted from this pattern where classification is not the purpose of the hierarhcy. For this reason, those subjects are defined in a separate PSI set (with a different base URI) from the hierarchy-defining subjects.
The following Published Subject Identifiers are used by the Hierarhcical Classification Pattern:
| Diagram Class Name | Subject Identifier |
| Hierarchical Relationship Type | http://www.techquila.com/psi/hierarchy/#hierarchical-relation-type |
| Subordinate Role Type | http://www.techquila.com/psi/hierarchy/#subordinate-role-type |
| Superordinate Role Type | http://www.techquila.com/psi/hierarchy/#superordinate-role-type |
| Classified As | http://www.techquila.com/psi/classification/#classified-as |
| Classification | http://www.techquila.com/psi/classification/#classification |
| Instance | http://www.techquila.com/psi/classification/#instance |
http://www.techquila.com/psi/hierarchy/#hierarchical-relation-type
A type of association type. Associations which are typed by a topic which is an instance of this type represent a parent-child relationship between two or more topics.
http://www.techquila.com/psi/hierarchy/#superordinate-role-type
A type of association role type. The player(s) of a role which is typed by an instance of this type in an association of the type Hierarchical Relation Type is the upper element in the hierarchy.
http://www.techquila.com/psi/hierarchy/#subordinate-role-type
An association role type. The player(s) of a role which is typed by an instance of this type in an association of the type Hierarchical Relation Type is the subordinate element in the hierarchy.
http://www.techquila.com/psi/classification/#classified-as
An association type asserting the relationship between a topic representing a class in a classification system (playing the role Classification) and one or more topics representing instances of that class (playing the role Instance).
http://www.techquila.com/psi/classification/#classification
The role played by a topic representing a class in a classification scheme.
http://www.techquila.com/psi/classification/#instance
The role played by a topic representing a subject which is classified under a classification scheme.
The following example builds on the hierarchical naming example to show how an instance (in this case Leonardo da Vinci) is classified in several locations in the hierarchy. Note that the subcategory-supercateory relationship is integrated with the pattern simply by adding types to the topics defining the association and its roles.
<?xml version="1.0" encoding="utf-8"?>
<topicMap xmlns="http://www.topicmaps.org/xtm/1.0/"
xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Import the topics defining the hierarchical -->
<!-- classification ontology from the URI specified -->
<!-- by the PSI set -->
<mergeMap xlink:href="http://www.techquila.com/psi/hierarchy/hierarchy.xtm"/>
<!-- ================= -->
<!-- Category Ontology -->
<!-- ================= -->
<topic id="category">
<baseName>
<baseNameString>Category</baseNameString>
</baseName>
</topic>
<topic id="subcategory-supercategory">
<instanceOf>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/hierarchy/#hierarchical-relation-type"/>
</instanceOf>
<baseName>
<baseNameString>Subcategory/Supercategory</baseNameString>
</baseName>
<baseName>
<scope><topicRef xlink:href="#supercategory"/></scope>
<baseNameString>Has Subcategory</baseNameString>
</baseName>
<baseName>
<scope><topicRef xlink:href="#subcategory"/></scope>
<baseNameString>Subcategory Of</baseNameString>
</baseName>
</topic>
<topic id="subcategory">
<instanceOf>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/hierarchy/#subordinate-role-type"/>
</instanceOf>
<baseName>
<baseNameString>Subcategory</baseNameString>
</baseName>
</topic>
<topic id="supercategory">
<instanceOf>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/hierarchy/#superordinate-role-type"/>
</instanceOf>
<baseName>
<baseNameString>Supercategory</baseNameString>
</baseName>
</topic>
<!-- ======================= -->
<!-- Classification Ontology -->
<!-- ======================= -->
<topic id="classified-as">
<subjectIdentity>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/classification/#classified-as"/>
</subjectIdentity>
<baseName>
<baseNameString>Classified Under</baseNameString>
</baseName>
<baseName>
<scope><topicRef xlink:href="#classification"/></scope>
<baseNameString>Instances of this class</baseNameString>
</baseName>
</topic>
<topic id="classification">
<subjectIdentity>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/classification/#classification"/>
</subjectIdentity>
<baseName>
<baseNameString>Classification</baseNameString>
</baseName>
</topic>
<topic id="instance">
<subjectIdentity>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/classification/#instance"/>
</subjectIdentity>
<baseName>
<baseNameString>Instance</baseNameString>
</baseName>
</topic>
<!-- ================== -->
<!-- Category Instances -->
<!-- ================== -->
<topic id="top">
<instanceOf><topicRef xlink:href="#category"/></instanceOf>
<baseName><baseNameString>Top</baseNameString></baseName>
</topic>
<topic id="arts">
<instanceOf><topicRef xlink:href="#category"/></instanceOf>
<baseName><baseNameString>Top / Arts</baseNameString></baseName>
<baseName>
<scope><topicRef xlink:href="#top"/></scope>
<baseNameString>Arts</baseNameString></baseName>
</topic>
<topic id="arts.people">
<instanceOf><topicRef xlink:href="#category"/></instanceOf>
<baseName>
<baseNameString>Top / Arts / People</baseNameString>
</baseName>
<baseName>
<scope><topicRef xlink:href="#arts"/></scope>
<baseNameString>People</baseNameString>
</baseName>
</topic>
<topic id="sciences">
<instanceOf><topicRef xlink:href="#category"/></instanceOf>
<baseName>
<baseNameString>Top / Sciences</baseNameString>
</baseName>
<baseName>
<scope><topicRef xlink:href="#top"/></scope>
<baseNameString>Sciences</baseNameString>
</baseName>
</topic>
<topic id="sciences.people">
<instanceOf><topicRef xlink:href="#category"/></instanceOf>
<baseName>
<baseNameString>Top / Sciences / People</baseNameString>
</baseName>
<baseName>
<scope><topicRef xlink:href="#sciences"/></scope>
<baseNameString>People</baseNameString>
</baseName>
</topic>
<!-- ===================== -->
<!-- Category associations -->
<!-- ===================== -->
<association>
<instanceOf>
<topicRef xlink:href="#subcategory-supercategory"/>
</instanceOf>
<member>
<roleSpec><topicRef xlink:href="#supercategory"/></roleSpec>
<topicRef xlink:href="#top"/>
</member>
<member>
<roleSpec><topicRef xlink:href="#subcategory"/></roleSpec>
<topicRef xlink:href="#arts"/>
</member>
</association>
<association>
<instanceOf>
<topicRef xlink:href="#subcategory-supercategory"/>
</instanceOf>
<member>
<roleSpec><topicRef xlink:href="#supercategory"/></roleSpec>
<topicRef xlink:href="#top"/>
</member>
<member>
<roleSpec><topicRef xlink:href="#subcategory"/></roleSpec>
<topicRef xlink:href="#sciences"/>
</member>
</association>
<association>
<instanceOf>
<topicRef xlink:href="#subcategory-supercategory"/>
</instanceOf>
<member>
<roleSpec><topicRef xlink:href="#supercategory"/></roleSpec>
<topicRef xlink:href="#arts"/>
</member>
<member>
<roleSpec><topicRef xlink:href="#subcategory"/></roleSpec>
<topicRef xlink:href="#arts.people"/>
</member>
</association>
<association>
<instanceOf>
<topicRef xlink:href="#subcategory-supercategory"/>
</instanceOf>
<member>
<roleSpec><topicRef xlink:href="#supercategory"/></roleSpec>
<topicRef xlink:href="#sciences"/>
</member>
<member>
<roleSpec><topicRef xlink:href="#subcategory"/></roleSpec>
<topicRef xlink:href="#sciences.people"/>
</member>
</association>
<!-- ================== -->
<!-- Category instances -->
<!-- ================== -->
<topic id="leonardo">
<baseName>
<baseNameString>Leonardo da Vinci</baseNameString>
</baseName>
</topic>
<!-- =========================== -->
<!-- Categorisation associations -->
<!-- =========================== -->
<association>
<instanceOf>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/classification/#classified-as"/>
</instanceOf>
<member>
<roleSpec>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/classification/#classification"/>
</roleSpec>
<topicRef xlink:href="#arts.people"/>
</member>
<member>
<roleSpec>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/classification/#instance"/>
</roleSpec>
<topicRef xlink:href="#leonardo"/>
</member>
</association>
<association>
<instanceOf>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/classification/#classified-as"/>
</instanceOf>
<member>
<roleSpec>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/classification/#classification"/>
</roleSpec>
<topicRef xlink:href="#sciences.people"/>
</member>
<member>
<roleSpec>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/classification/#instance"/>
</roleSpec>
<topicRef xlink:href="#leonardo"/>
</member>
</association>
</topicMap>
The topic map application must model information from a thesaurus. Each term in the thesaurus must be available separately, possibly because additional meta data is to be added for each term. The hierarchical relationship between terms must be modelled as must any scope notes and/or term warrants from the thesaurus.
In this pattern, the thesaurus is represented by creating a separate topic for each term. Each topic which represents a term should be typed as a Term using the PSI specified for that purpose.
The term string should be expressed as a base name of the topic. The broader/narrower and preferred/non-preferred term relationships should be expressed using binary associations between terms. If the thesaurus being modelled simply groups synonyms with out expressing a preferred term amongst them, this can be expressed as an n-ary association in which all of the term topics play the same role.
Other thesaurus entry meta data such as scope notes and warrants can be specified as occurrence data on the topic representing the term. To model metadata for a warrant or scope note, the occurrence resource should be reified in the topic map.
As shown in the diagram above, a class of association is created for thesaurus-specific term relationships. The class Term Relationship serves as a base class for all such association types and four subclasses of this association type are defined for Broader-Narrower relationships, for synonymy in a controlled vocabulary where one term is a preferred term, for synonymy in which all terms are considered equal synonyms (with no preferred term role), and for a Part-Whole relationship.
The Broader-Narrower and Part-Whole relationships are modelled as binary associations. Where a term has one of these relationships with many topics (e.g. as a whole consisting of a number of individual parts), these must be modelled using multiple binary relationships. The synonymy relationships, on the other hand, are modelled using a n-ary associations where the intention is to convey the fact that the members of the association are mutually synonymous (although potentially with one of ther terms being a preferred term). This approach is based on a design principle described in
For clarity, the diagram above omits the relationship between the role types in the associations. The Related Term role type serves as a base class for the other roles used in term-to-term relationships. These class relationships are shown in the diagram below.
The pattern presented here allows an existing thesaurus to be translated into a topic map structure without losing the ability to apply warrants and notes to individual synonymous terms. The cost of this flexibility is that for presentation of all synonymous terms, associations must be traversed.
The following subject identifiers are used by this pattern.
| Diagram Class Name | Subject Identifier |
| Term | http://www.techquila.com/psi/thesaurus/#term |
| Term Relationship | http://www.techquila.com/psi/thesaurus/#term-relationship |
| Related Term | http://www.techquila.com/psi/thesaurus/#related-term |
| Broader-Narrower | http://www.techquila.com/psi/thesaurus/#broader-narrower |
| Broader | http://www.techquila.com/psi/thesaurus/#broader |
| Narrower | http://www.techquila.com/psi/thesaurus/#narrower |
| Synonymous Terms | http://www.techquila.com/psi/thesaurus/#synonymous-terms |
| Preferred Term | http://www.techquila.com/psi/thesaurus/#preferred-term |
| Non-Preferred Term | http://www.techquila.com/psi/thesaurus/#non-preferred-term |
| Synonym | http://www.techquila.com/psi/thesaurus/#synonym |
| Part-Whole | http://www.techquila.com/psi/thesaurus/#part-whole |
| Part | http://www.techquila.com/psi/thesaurus/#part |
| Whole | http://www.techquila.com/psi/thesaurus/#whole |
| Scope Note | http://www.techquila.com/psi/thesaurus/#scope-note |
| Editor Note | http://www.techquila.com/psi/thesaurus/#editor-note |
| General Note | http://www.techquila.com/psi/thesaurus/#general-note |
| Hierarchy Note | http://www.techquila.com/psi/thesaurus/#hierarchy-note |
| History Note | http://www.techquila.com/psi/thesaurus/#history-note |
| Translation Note | http://www.techquila.com/psi/thesaurus/#translation-note |
| Warrant | http://www.techquila.com/psi/thesaurus/#term-warrant |
The Published Subject Indicators for each identifier are presented below.
http://www.techquila.com/psi/thesaurus/#term
A type of topic which models a single term in a thesaurus. A term is a single word or phrase in a thesaurus.
http://www.techquila.com/psi/thesaurus/#scope-note
A type of occurrence of a Term which either references or contains information related to the thesaurus term. Typically scope notes are provided by the thesaurus compiler or editor. The scope note resource may be either contained inline as resource data or referenced from an occurrence of this type.
http://www.techquila.com/psi/thesaurus/#editor-note
A specialisation of Scope Note defining the type of occurrence which either references or contains editorial information related to the thesaurus term.
http://www.techquila.com/psi/thesaurus/#general-note
A specialisation of Scope Note defining the type of occurrence which either references or contains general information related to the thesaurus term.
http://www.techquila.com/psi/thesaurus/#hierarchy-note
A specialisation of Scope Note defining the type of occurrence which either references or contains information related to the hierarchical placement of the thesaurus term.
http://www.techquila.com/psi/thesaurus/#history-note
A specialisation of Scope Note defining the type of occurrence which either references or contains historical information related to the thesaurus term.
http://www.techquila.com/psi/thesaurus/#translation-note
A specialisation of Scope Note defining the type of occurrence which either references or contains information related to the translation of the thesaurus term.
http://www.techquila.com/psi/thesaurus/#term-warrant
A type of occurrence of a Term which references a source which justifies the use of the term in the thesaurus. A warrant may be referenced either by a link or by a citation entered as inline resource data in the occurrence. Multiple warrants should be modelled using one occurrence of this type per topic.
http://www.techquila.com/psi/thesaurus/#term-relationship
The base class of relationships between terms defined by a thesaurus. Associations of this type may have any number of roles which must be of the type Related Term.
http://www.techquila.com/psi/thesaurus/#related-term
The base type for roles played in associations of the type Term Relationship. Role players must be instances of the Term type.
http://www.techquila.com/psi/thesaurus/#broader-narrower
A type of association between two Term instances. In an association of this type, at one topic must play the role type Broader, and one topic must play the role type Narrower.
http://www.techquila.com/psi/thesaurus/#broader
A type of association role in an association of the type Broader / Narrower. The player of this role is the term with the broader definition of the two.
http://www.techquila.com/psi/thesaurus/#narrower
A type of association role in an association of the type Broader-Term / Narrower-Term. The player of this role is the term with the narrower definition of the two.
http://www.techquila.com/psi/thesaurus/#synonymous-terms
A type of association between two or more Term instances which asserts that all of the terms represented by the topics which are role players in the association are considered synonymous by the thesaurus. In an association of this type, EITHER all topics must play the role type Synonym OR one topic must play the role type Preferred Term and one topic must play the role type Non-Preferred Term.
http://www.techquila.com/psi/thesaurus/#preferred-term
A type of association role which indicates that the role player or role players are terms preferred for use in the domain covered by the thesaurus.
http://www.techquila.com/psi/thesaurus/#non-preferred-term
A type of association role which indicates that the role player or role players are Term instances whose use is deprecated in the domain covered by the thesaurus.
http://www.techquila.com/psi/thesaurus/#synonym
A type of association role. In an association of the type Synonymous Terms this role indicates that the role player or role players are all considered to be synonymous with one another.
http://www.techquila.com/psi/thesaurus/#part-whole
A type of association which expresses a relationship between two or more terms where or more topics where one topic, playing the role Whole represents a whole thing and one or more topics playing the role Part each represent some component of the whole.
http://www.techquila.com/psi/thesaurus/#part
A type of association role. In an association of the type Part-Whole, the role player or role players are all considered to be components which go to make up the player of the Whole role.
http://www.techquila.com/psi/thesaurus/#whole
A type of association role. In an association of the type Part-Whole, the player of this role is the topic which represents the thing which is constructed of the components represented by players of the Part role.
<?xml version="1.0" encoding="UTF-8"?>
<topicMap xmlns="http://www.topicmaps.org/xtm/1.0/"
xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- ================================= -->
<!-- Topic-per-term thesaurus ontology -->
<!-- ================================= -->
<topic id="term">
<subjectIdentity>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/thesaurus/#term"/>
</subjectIdentity>
<baseName>
<baseNameString>Term</baseNameString>
</baseName>
</topic>
<!-- BT/NT association type -->
<topic id="broader-narrower">
<subjectIdentity>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/thesaurus/#broader-narrower"/>
</subjectIdentity>
<baseName>
<baseNameString>Broader Term-Narrower Term</baseNameString>
</baseName>
<baseName>
<scope>
<topicRef xlink:href="#broader"/>
</scope>
<baseNameString>Specialisations</baseNameString>
</baseName>
<baseName>
<scope>
<topicRef xlink:href="#narrower"/>
</scope>
<baseNameString>Generalisation</baseNameString>
</baseName>
</topic>
<topic id="broader">
<subjectIdentity>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/thesaurus/#broader"/>
</subjectIdentity>
<baseName>
<baseNameString>Broader</baseNameString>
</baseName>
</topic>
<topic id="narrower">
<subjectIdentity>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/thesaurus/#narrower"/>
</subjectIdentity>
<baseName>
<baseNameString>Narrower</baseNameString>
</baseName>
</topic>
<!-- Part/Whole association type -->
<topic id="part-whole">
<subjectIdentity>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/thesaurus/#part-whole"/>
</subjectIdentity>
<baseName>
<baseNameString>Part-Whole</baseNameString>
</baseName>
<baseName>
<scope>
<topicRef xlink:href="#whole"/>
</scope>
<baseNameString>Has Parts</baseNameString>
</baseName>
<baseName>
<scope>
<topicRef xlink:href="#part"/>
</scope>
<baseNameString>Is Part Of</baseNameString>
</baseName>
</topic>
<topic id="whole">
<subjectIdentity>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/thesaurus/#whole"/>
</subjectIdentity>
<baseName>
<baseNameString>Whole</baseNameString>
</baseName>
</topic>
<topic id="part">
<subjectIdentity>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/thesaurus/#part"/>
</subjectIdentity>
<baseName>
<baseNameString>Part</baseNameString>
</baseName>
</topic>
<!-- RT association type -->
<topic id="related-terms">
<baseName>
<baseNameString>Related Terms</baseNameString>
</baseName>
</topic>
<!-- RT association role -->
<topic id="related-term">
<baseName>
<baseNameString>Related Term</baseNameString>
</baseName>
</topic>
<!-- Synonym association type -->
<topic id="synonym">
<subjectIdentity>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/thesaurus/#synonym"/>
</subjectIdentity>
<baseName>
<baseNameString>Synonym</baseNameString>
</baseName>
</topic>
<topic id="preferred-term">
<subjectIdentity>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/thesaurus/#preferred-term"/>
</subjectIdentity>
<baseName>
<baseNameString>Preferred Term</baseNameString>
</baseName>
</topic>
<topic id="non-preferred-term">
<subjectIdentity>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/thesaurus/#non-preferred-term"/>
</subjectIdentity>
<baseName>
<baseNameString>Non-Preferred Term</baseNameString>
</baseName>
</topic>
<!-- Scope note occurrence type -->
<topic id="scope-note">
<subjectIdentity>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/thesaurus/#scope-note"/>
</subjectIdentity>
<baseName>
<baseNameString>Scope Note</baseNameString>
</baseName>
</topic>
<!-- Term warrant occurrence type -->
<topic id="term-warrant">
<subjectIdentity>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/thesaurus/#term-warrant"/>
</subjectIdentity>
<baseName>
<baseNameString>Warrant</baseNameString>
</baseName>
</topic>
<!-- term-warrant subclass of scope-note -->
<association>
<instanceOf>
<subjectIndicatorRef xlink:href="http://www.topicmaps.org/xtm/1.0/core.xtm#subclass-superclass"/>
</instanceOf>
<member>
<roleSpec>
<subjectIndicatorRef xlink:href="http://www.topicmaps.org/xtm/1.0/core.xtm#superclass"/>
</roleSpec>
<topicRef xlink:href="#scope-note"/>
</member>
<member>
<roleSpec>
<subjectIndicatorRef xlink:href="http://www.topicmaps.org/xtm/1.0/core.xtm#sublcass"/>
</roleSpec>
<topicRef xlink:href="#term-warrant"/>
</member>
</association>
<!-- =============== -->
<!-- Thesaurus terms -->
<!-- =============== -->
<topic id="literary_studies">
<instanceOf>
<topicRef xlink:href="#term"/>
</instanceOf>
<baseName>
<baseNameString>literary studies</baseNameString>
</baseName>
<occurrence>
<instanceOf>
<topicRef xlink:href="#term-warrant"/>
</instanceOf>
<resourceRef xlink:href="http://webapps.getty.edu/vow/AATSource?find=&amp;logic=AND&amp;note=&amp;page=1&amp;sourceid=2000017431"/>
</occurrence>
</topic>
<topic id="literature_humanities">
<instanceOf>
<topicRef xlink:href="#term"/>
</instanceOf>
<baseName>
<baseNameString>literature (humanities)</baseNameString>
</baseName>
<occurrence>
<instanceOf>
<topicRef xlink:href="#term-warrant"/>
</instanceOf>
<resourceRef xlink:href="http://webapps.getty.edu/vow/AATSource?find=&amp;logic=AND&amp;note=&amp;page=1&amp;sourceid=2000012941"/>
</occurrence>
</topic>
<topic id="humanities">
<instanceOf>
<topicRef xlink:href="#term"/>
</instanceOf>
<baseName>
<baseNameString>humanities</baseNameString>
</baseName>
</topic>
<topic id="writings">
<instanceOf>
<topicRef xlink:href="#term"/>
</instanceOf>
<baseName>
<baseNameString>writings</baseNameString>
</baseName>
<occurrence>
<instanceOf>
<topicRef xlink:href="#term-warrant"/>
</instanceOf>
<resourceRef xlink:href="http://webapps.getty.edu/vow/AATSource?find=&amp;logic=AND&amp;note=&amp;page=1&amp;sourceid=2000042061"/>
</occurrence>
</topic>
<topic id="document_genres">
<instanceOf>
<topicRef xlink:href="#term"/>
</instanceOf>
<baseName>
<baseNameString>document genres</baseNameString>
</baseName>
</topic>
<association>
<instanceOf>
<topicRef xlink:href="#broader-narrower"/>
</instanceOf>
<member>
<roleSpec>
<topicRef xlink:href="#narrower"/>
</roleSpec>
<topicRef xlink:href="#literature_humanities"/>
</member>
<member>
<roleSpec>
<topicRef xlink:href="#broader"/>
</roleSpec>
<topicRef xlink:href="#humanities"/>
</member>
</association>
<association>
<instanceOf>
<topicRef xlink:href="#broader-narrower"/>
</instanceOf>
<member>
<roleSpec>
<topicRef xlink:href="#narrower"/>
</roleSpec>
<topicRef xlink:href="#literary_studies"/>
</member>
<member>
<roleSpec>
<topicRef xlink:href="#broader"/>
</roleSpec>
<topicRef xlink:href="#humanities"/>
</member>
</association>
<association>
<instanceOf>
<topicRef xlink:href="#broader-narrower"/>
</instanceOf>
<member>
<roleSpec>
<topicRef xlink:href="#narrower"/>
</roleSpec>
<topicRef xlink:href="#writings"/>
</member>
<member>
<roleSpec>
<topicRef xlink:href="#broader"/>
</roleSpec>
<topicRef xlink:href="#document_genres"/>
</member>
</association>
<association>
<instanceOf>
<topicRef xlink:href="#synonym"/>
</instanceOf>
<member>
<roleSpec>
<topicRef xlink:href="#non-preferred-term"/>
</roleSpec>
<topicRef xlink:href="#literary_studies"/>
</member>
<member>
<roleSpec>
<topicRef xlink:href="#preferred-term"/>
</roleSpec>
<topicRef xlink:href="#literature_humanities"/>
</member>
</association>
<association>
<instanceOf>
<topicRef xlink:href="#related-terms"/>
</instanceOf>
<member>
<roleSpec>
<topicRef xlink:href="#related-term"/>
</roleSpec>
<topicRef xlink:href="#literature_humanities"/>
</member>
<member>
<roleSpec>
<topicRef xlink:href="#related-term"/>
</roleSpec>
<topicRef xlink:href="#writings"/>
</member>
</association>
</topicMap>
The Topic Per Concept Thesaurus Pattern models a topic map such that all synonyms are base names of the same topic, eliminating the need to traverse associations in order to present a concept.
The Part Whole and Broader Narrower relationships can be modelled as instances of the Hierachical Relationship Type introduced in the Hierarchical Classification pattern. The Part and Narrower roles are instances of the Subordinate Role Type and the Whole and Broader roles are instances of the Superordinate Role Type. This is shown diagramatically below. Using the Hierarhcical Classification Pattern enables an application aware of that pattern to display the hierarchical ordering of the thesaurus even if it is not aware of this design pattern.
The topic map application must model information from a thesaurus, maintaining the hierarchical relationship between the concepts that the thesaurus defines and enabling efficient access to the list of terms that can be applied to each concept.
This alternate pattern for thesaurus representation eliminates the associations used to relate synonyms in the Topic-Per-Term pattern. Instead, one topic is used to represent the single concept which all entries share in common. In this model, the topic may have multiple base names, one for each synonym and where preferred terms are expressed, the names of the non-preferred synonyms should be scoped appropriately.
The diagram below shows the Concept class of topic as having two kinds of name, one name specified in the unconstrained scope, representing a preferred term for the concept, and the other names scoped as a Non-Preferred Term. However, if the thesaurus being modelled does not express preferred and non-preferred terms, all synonymous terms can instead be represented as topic base names in the unconstrained scope.
For clarity, the diagram below does not repeat all the subclasses of Scope Note, however it is proposed that these should be exactly the same as in the Topic Per Term Thesaurus Pattern.
The following subject identifiers are defined for use by this pattern. These are Published Subject Identifiers. For the complete description of each identifier, please visit the identifier URL.
| Diagram Class Name | Subject Identifier |
| Concept | http://www.techquila.com/psi/thesaurus/#concept |
| Concept Relationship | http://www.techquila.com/psi/thesaurus/#concept-relationship |
| Related Concept | http://www.techquila.com/psi/thesaurus/#related-concept |
| Broader-Narrower | http://www.techquila.com/psi/thesaurus/#broader-narrower |
| Broader | http://www.techquila.com/psi/thesaurus/#broader |
| Narrower | http://www.techquila.com/psi/thesaurus/#narrower |
| Non-Preferred Term | http://www.techquila.com/psi/thesaurus/#non-preferred-term |
| Part-Whole | http://www.techquila.com/psi/thesaurus/#part-whole |
| Part | http://www.techquila.com/psi/thesaurus/#part |
| Whole | http://www.techquila.com/psi/thesaurus/#whole |
| Scope Note | http://www.techquila.com/psi/thesaurus/#scope-note |
| Editor Note | http://www.techquila.com/psi/thesaurus/#editor-note |
| General Note | http://www.techquila.com/psi/thesaurus/#general-note |
| Hierarchy Note | http://www.techquila.com/psi/thesaurus/#hierarchy-note |
| History Note | http://www.techquila.com/psi/thesaurus/#history-note |
| Translation Note | http://www.techquila.com/psi/thesaurus/#translation-note |
| Warrant | http://www.techquila.com/psi/thesaurus/#term-warrant |
The Published Subject Indicators follow. To save space, only the PSIs which are not already defined for the Topic Per Term Thesaurus Pattern are presented here.
http://www.techquila.com/psi/thesaurus/#concept
A type of topic which models the concept represented by a collection of synonymous terms in a thesaurus.
http://www.techquila.com/psi/thesaurus/#concept-relationship
The base type of associations between concepts which are defined in a thesaurus. An association of this type consists of any number of Related Concept roles.
http://www.techquila.com/psi/thesaurus/#related-concept
A type of association role played in a Concept Relationship association. The role player must be an instance of the Concept type.
<?xml version="1.0" encoding="UTF-8"?>
<topicMap xmlns="http://www.topicmaps.org/xtm/1.0/"
xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- ==================================== -->
<!-- Topic-Per-Concept Thesaurus Ontology -->
<!-- ==================================== -->
<!-- Concept topic type -->
<topic id="concept">
<subjectIdentity>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/thesaurus/#concept"/>
</subjectIdentity>
<baseName>
<baseNameString>Concept</baseNameString>
</baseName>
</topic>
<!-- Non-Preferred Term. Used in this model as a basename scoping topic -->
<topic id="non-preferred-term">
<subjectIdentity>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/thesaurus/#non-preferred-term"/>
</subjectIdentity>
<baseName>
<baseNameString>Non-Preferred Term</baseNameString>
</baseName>
</topic>
<!-- BT/NT association type -->
<topic id="broader-narrower">
<subjectIdentity>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/thesaurus/#broader-narrower"/>
</subjectIdentity>
<baseName>
<baseNameString>Broader Than-Narrower Than</baseNameString>
</baseName>
<baseName>
<scope>
<topicRef xlink:href="#broader"/>
</scope>
<baseNameString>Specialisations</baseNameString>
</baseName>
<baseName>
<scope>
<topicRef xlink:href="#narrower"/>
</scope>
<baseNameString>Generalisation</baseNameString>
</baseName>
</topic>
<!-- Broader association role type -->
<topic id="broader">
<subjectIdentity>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/thesaurus/#broader"/>
</subjectIdentity>
<baseName>
<baseNameString>Generalisation</baseNameString>
</baseName>
</topic>
<!-- Narrower association role type -->
<topic id="narrower">
<subjectIdentity>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/thesaurus/#narrower-concept"/>
</subjectIdentity>
<baseName>
<baseNameString>Specialisation</baseNameString>
</baseName>
</topic>
<!-- Related Concepts association type -->
<topic id="concept-relationship">
<subjectIdentity>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/thesaurus/#concept-relationship"/>
</subjectIdentity>
<baseName>
<baseNameString>Related Concepts</baseNameString>
</baseName>
</topic>
<!-- Related concepts association role type -->
<topic id="related-concept">
<subjectIdentity>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/thesaurus/#related-concept"/>
</subjectIdentity>
<baseName>
<baseNameString>Related Concept</baseNameString>
</baseName>
</topic>
<!-- Part/Whole association type -->
<topic id="part-whole">
<subjectIdentity>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/thesaurus/#part-whole"/>
</subjectIdentity>
<baseName>
<baseNameString>Part-Whole</baseNameString>
</baseName>
<baseName>
<scope>
<topicRef xlink:href="#whole"/>
</scope>
<baseNameString>Has Parts</baseNameString>
</baseName>
<baseName>
<scope>
<topicRef xlink:href="#part"/>
</scope>
<baseNameString>Is Part Of</baseNameString>
</baseName>
</topic>
<!-- Part association role type -->
<topic id="part">
<subjectIdentity>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/thesaurus/#part"/>
</subjectIdentity>
<baseName>
<baseNameString>Part</baseNameString>
</baseName>
</topic>
<!-- Whole association role type -->
<topic id="whole">
<subjectIdentity>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/thesaurus/#whole"/>
</subjectIdentity>
<baseName>
<baseNameString>Whole</baseNameString>
</baseName>
</topic>
<!-- Scope Note occurrence type -->
<topic id="scope-note">
<subjectIdentity>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/thesaurus/#scope-note"/>
</subjectIdentity>
<baseName>
<baseNameString>Scope Note</baseNameString>
</baseName>
</topic>
<!-- Warrant occurrence type -->
<topic id="term-warrant">
<subjectIdentity>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/thesaurus/#term-warrant"/>
</subjectIdentity>
<baseName>
<baseNameString>Warrant</baseNameString>
</baseName>
</topic>
<!-- ============================ -->
<!-- Thesaurus entries (concepts) -->
<!-- ============================ -->
<!-- Concept: literature (humanities) -->
<topic id="literature_humanities">
<instanceOf>
<topicRef xlink:href="#concept"/>
</instanceOf>
<baseName>
<baseNameString>literature (humanities)</baseNameString>
</baseName>
<baseName>
<scope>
<topicRef xlink:href="#non-preferred-term"/>
</scope>
<baseNameString>literary studies</baseNameString>
</baseName>
<occurrence>
<instanceOf>
<topicRef xlink:href="#term-warrant"/>
</instanceOf>
<resourceRef xlink:href="http://webapps.getty.edu/vow/AATSource?find=&amp;logic=AND&amp;note=&amp;page=1&amp;sourceid=2000017431"/>
</occurrence>
<occurrence>
<instanceOf>
<topicRef xlink:href="#term-warrant"/>
</instanceOf>
<resourceRef xlink:href="http://webapps.getty.edu/vow/AATSource?find=&amp;logic=AND&amp;note=&amp;page=1&amp;sourceid=2000012941"/>
</occurrence>
</topic>
<!-- Concept: humanities -->
<topic id="humanities">
<instanceOf>
<topicRef xlink:href="#concept"/>
</instanceOf>
<baseName>
<baseNameString>humanities</baseNameString>
</baseName>
</topic>
<!-- Concept: writings -->
<topic id="writings">
<instanceOf>
<topicRef xlink:href="#concept"/>
</instanceOf>
<baseName>
<baseNameString>writings</baseNameString>
</baseName>
<occurrence>
<instanceOf>
<topicRef xlink:href="#term-warrant"/>
</instanceOf>
<resourceRef xlink:href="http://webapps.getty.edu/vow/AATSource?find=&amp;logic=AND&amp;note=&amp;page=1&amp;sourceid=2000042061"/>
</occurrence>
</topic>
<topic id="document_genres">
<instanceOf>
<topicRef xlink:href="#concept"/>
</instanceOf>
<baseName>
<baseNameString>document genres</baseNameString>
</baseName>
</topic>
<!-- literature (humanities) NT humanities -->
<association>
<instanceOf>
<topicRef xlink:href="#broader-narrower"/>
</instanceOf>
<member>
<roleSpec>
<topicRef xlink:href="#narrower"/>
</roleSpec>
<topicRef xlink:href="#literature_humanities"/>
</member>
<member>
<roleSpec>
<topicRef xlink:href="#broader"/>
</roleSpec>
<topicRef xlink:href="#humanities"/>
</member>
</association>
<!-- writings NT document-genres -->
<association>
<instanceOf>
<topicRef xlink:href="#broader-narrower"/>
</instanceOf>
<member>
<roleSpec>
<topicRef xlink:href="#narrower"/>
</roleSpec>
<topicRef xlink:href="#writings"/>
</member>
<member>
<roleSpec>
<topicRef xlink:href="#broader"/>
</roleSpec>
<topicRef xlink:href="#document_genres"/>
</member>
</association>
<!-- literature (humanities) RT writings -->
<association>
<instanceOf>
<topicRef xlink:href="#concept-relationship"/>
</instanceOf>
<member>
<roleSpec>
<topicRef xlink:href="#related-concept"/>
</roleSpec>
<topicRef xlink:href="#literature_humanities"/>
</member>
<member>
<roleSpec>
<topicRef xlink:href="#related-concept"/>
</roleSpec>
<topicRef xlink:href="#writings"/>
</member>
</association>
</topicMap>
In comparison with the Topic Per Term Thesaurus Pattern, this model of the thesaurus, one loses the ability to add warrants, scope notes or other meta data for individual terms but with a number of synonyms per concept, this model can lead to a much more compact topic map and also one which is easier to process for display purposes, as one need only enumerate all of the names of a topic to list all synonyms rather than follow associations.
The Topic Per Term Thesaurus Pattern defines an alternate model for thesaurii which preserves each individual term as a separate topic in the topic map.
As with the Topic-Per-Term Thesaurus pattern, the Part-Whole and Broader-Narrower relationships can be modelled as instances of the Hierachical Relationship Type introduced in the Hierarchical Classification pattern. The Part and Narrower roles are instances of the Subordinate Role Type and the Whole and Broader Concept roles are instances of the Superordinate Role Type. This is shown in Figure 18.
A faceted classification system is one in which each resource
is classified according to several separate hierarchical classification
systems, called facets.
Each separate facet can be easily modelled using the hierarchical classificaiton pattern already described. However in order to really make use of a faceted classification system it is important to be able to determine what facets are defined in the classification system, and the type or types of association which define the hierarchical relationship between classes in each facet.
In this pattern, we represent each facet with a topic. Doing this enables us to use that topic to provide labels for the facet (for creating the user interface) and also allows us to make further assertions about the topics which define the classes for that facet.
For an application to present a facet, it must be able to determine for each facet:
Which topic represents the root of the facet classification.
What type of association is used to construct the classification hierarchy.
These two pieces of information can be provided by associating the topic which represents the root of the facet's classification and the topic used to type the hierarchical association between facet's classes with the topic which represents the facet itself. The classification hierarchy for the facet must then be constructed from associations of the specified type. For the hierarchy to be properly recognised, such association types must themselves be instances of the Hierarchical Relation Type as defined in the Hierarchical Classification Pattern.
The following Published Subject Identifiers are used by the Hierarhcical Classification Pattern:
| Diagram Class Name | Subject Identifier |
| Facet | http://www.techquila.com/psi/faceted-classification/#facet |
| Facet Has Root | http://www.techquila.com/psi/faceted-classification/#facet-has-root |
| Facet-Root | http://www.techquila.com/psi/faceted-classification/#facet-root |
| Facet Has Hierarchy Type | http://www.techquila.com/psi/faceted-classification/#facet-has-hierarchy-type |
| Facet Hierarchy Type | http://www.techquila.com/psi/faceted-classification/#facet-hierarchy-type |
http://www.techquila.com/psi/faceted-classification/#facet
A facet in a faceted classification system.
http://www.techquila.com/psi/faceted-classification/#facet-has-root
A type of binary association between an topic of type Facet (playing the role Facet) and another topic of any type (playing the role Facet-Root) which is the root class of the facet's classification hierarchy.
http://www.techquila.com/psi/faceted-classification/#facet-root
An association role type. This role is played by a topic of any type in an association of the type Facet Has Root by the topic which represents the root class of the facet represented by the topic playing the Facet role.
http://www.techquila.com/psi/faceted-classification/#facet-has-hierarchy-type
A type of binary association between a topic of type Facet which plays the role Facet, and a topic of type Hierarchical Relation Type playing the role of Facet Hierarchy Type. This association asserts that the classification hierarchy used by the player of the Facet role is defined by associations of the type specified by the player of the Facet Hierarchy Type role.
http://www.techquila.com/psi/faceted-classification/#facet-hierarchy-type
A type of association role, played by a topic of the type Hierarchical Relation Type which is itself used to type associations which define the hierarchy of classification for a facet.
<?xml version="1.0" encoding="UTF-8"?>
<topicMap xmlns="http://www.topicmaps.org/xtm/1.0/"
xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- ===================================================
Topic Map : Example Facetted Classification
File: fc-example.xtm
Notes:
This topic map has been created as a simple example
of using the facetted classification model described
in "Topic Map Patterns For Information Architecture"
(http://www.techquila.com/tmsinia.html).
The topic map shows the facetted classification of
wines by a "Region" facet and "Varietal" facet.
This example was derived from a much larger example
of facetted classification which can be seen at
http://www.facetmap.com/browse.jsp
======================================================= -->
<!-- To minimize the size of this example, the topics
defining the faceted classification ontology are imported
rather than being defined in this topic map -->
<mergeMap xlink:href="http://www.techquila.com/psi/faceted-classification/faceted-classification.xtm"/>
<mergeMap xlink:href="http://www.techquila.com/psi/hierarchy/hierarchy.xtm"/>
<mergeMap xlink:href="http://www.techquila.com/psi/thesaurus/thesaurus.xtm"/>
<!-- Topic Types -->
<topic id="wine-class">
<baseName>
<baseNameString>Class Of Wine</baseNameString>
</baseName>
</topic>
<topic id="varietal">
<baseName>
<baseNameString>Varietal</baseNameString>
</baseName>
</topic>
<topic id="region">
<baseName>
<baseNameString>Region</baseNameString>
</baseName>
</topic>
<topic id="wine">
<baseName>
<baseNameString>Wine</baseNameString>
</baseName>
</topic>
<!-- ================= -->
<!-- Association types -->
<!-- ================= -->
<!-- Supercategory/Subcategory. Declared as an instance of the
Hierarchical Relationship pattern -->
<topic id="subcategory-supercategory">
<instanceOf>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/hierarchy/#hierarchical-relation-type"/>
</instanceOf>
<baseName>
<baseNameString>Subcategory/Supercategory</baseNameString>
</baseName>
</topic>
<topic id="subcategory">
<instanceOf>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/hierarchy/#subordinate-role-type"/>
</instanceOf>
<baseName>
<baseNameString>Subcategory</baseNameString>
</baseName>
</topic>
<topic id="supercategory">
<instanceOf>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/hierarchy/#superordinate-role-type"/>
</instanceOf>
<baseName>
<baseNameString>Supercategory</baseNameString>
</baseName>
</topic>
<!-- Part-whole association type from thesaurus PSI set -->
<topic id="part-whole">
<subjectIdentity>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/thesaurus/#part-whole"/>
</subjectIdentity>
</topic>
<topic id="part">
<subjectIdentity>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/thesaurus/#part"/>
</subjectIdentity>
</topic>
<topic id="whole">
<subjectIdentity>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/thesaurus/#whole"/>
</subjectIdentity>
</topic>
<!-- Wine is of Varietal -->
<topic id="wine-of-varietal">
<baseName>
<baseNameString>Wine Varietal</baseNameString>
</baseName>
</topic>
<!-- Wine is from Region -->
<topic id="wine-from-region">
<baseName>
<baseNameString>Wine From Region</baseNameString>
</baseName>
</topic>
<!-- Wine classes -->
<topic id="all-wines">
<instanceOf>
<topicRef xlink:href="#wine-class"/>
</instanceOf>
<baseName><baseNameString>All Wines</baseNameString></baseName>
</topic>
<topic id="red-wine">
<instanceOf>
<topicRef xlink:href="#wine-class"/>
</instanceOf>
<baseName>
<baseNameString>Red Wine</baseNameString>
</baseName>
</topic>
<topic id="white-wine">
<instanceOf>
<topicRef xlink:href="#wine-class"/>
</instanceOf>
<baseName>
<baseNameString>White Wine</baseNameString>
</baseName>
</topic>
<!-- Wine Varietals -->
<topic id="cab-sauv">
<baseName>
<baseNameString>Cabernet Sauvignon</baseNameString>
</baseName>
</topic>
<topic id="merlot">
<baseName>
<baseNameString>Merlot</baseNameString>
</baseName>
</topic>
<topic id="chablis">
<baseName>
<baseNameString>Chablis</baseNameString>
</baseName>
</topic>
<topic id="chardonnay">
<baseName>
<baseNameString>Chardonnay</baseNameString>
</baseName>
</topic>
<!-- ================================================== -->
<!-- Facet Definitions. We create a hierarchical -->
<!-- relationship for each facet in our classification. -->
<!-- ================================================== -->
<!-- Wine Class facet -->
<association>
<instanceOf><topicRef xlink:href="#subcategory-supercategory"/></instanceOf>
<member>
<roleSpec><topicRef xlink:href="#supercategory"/></roleSpec>
<topicRef xlink:href="#all-wines"/>
</member>
<member>
<roleSpec><topicRef xlink:href="#subcategory"/></roleSpec>
<topicRef xlink:href="#red-wine"/>
</member>
</association>
<association>
<instanceOf><topicRef xlink:href="#subcategory-supercategory"/></instanceOf>
<member>
<roleSpec><topicRef xlink:href="#supercategory"/></roleSpec>
<topicRef xlink:href="#all-wines"/>
</member>
<member>
<roleSpec><topicRef xlink:href="#subcategory"/></roleSpec>
<topicRef xlink:href="#white-wine"/>
</member>
</association>
<association>
<instanceOf><topicRef xlink:href="#subcategory-supercategory"/></instanceOf>
<member>
<roleSpec><topicRef xlink:href="#supercategory"/></roleSpec>
<topicRef xlink:href="#red-wine"/>
</member>
<member>
<roleSpec><topicRef xlink:href="#subcategory"/></roleSpec>
<topicRef xlink:href="#cab-sauv"/>
</member>
</association>
<association>
<instanceOf><topicRef xlink:href="#subcategory-supercategory"/></instanceOf>
<member>
<roleSpec><topicRef xlink:href="#supercategory"/></roleSpec>
<topicRef xlink:href="#red-wine"/>
</member>
<member>
<roleSpec><topicRef xlink:href="#subcategory"/></roleSpec>
<topicRef xlink:href="#merlot"/>
</member>
</association>
<association>
<instanceOf><topicRef xlink:href="#subcategory-supercategory"/></instanceOf>
<member>
<roleSpec><topicRef xlink:href="#supercategory"/></roleSpec>
<topicRef xlink:href="#white-wine"/>
</member>
<member>
<roleSpec><topicRef xlink:href="#subcategory"/></roleSpec>
<topicRef xlink:href="#chablis"/>
</member>
</association>
<association>
<instanceOf><topicRef xlink:href="#subcategory-supercategory"/></instanceOf>
<member>
<roleSpec><topicRef xlink:href="#supercategory"/></roleSpec>
<topicRef xlink:href="#white-wine"/>
</member>
<member>
<roleSpec><topicRef xlink:href="#subcategory"/></roleSpec>
<topicRef xlink:href="#chardonnay"/>
</member>
</association>
<!-- Wine Source Facet -->
<topic id="the-world">
<baseName><baseNameString>The World</baseNameString></baseName>
</topic>
<topic id="europe">
<baseName><baseNameString>Europe</baseNameString></baseName>
</topic>
<topic id="france">
<baseName>
<baseNameString>France</baseNameString>
</baseName>
</topic>
<topic id="burgundy">
<baseName>
<baseNameString>Burgundy</baseNameString>
</baseName>
</topic>
<topic id="rhone">
<baseName>
<baseNameString>Rhone</baseNameString>
</baseName>
</topic>
<!-- Part/Whole relationships between regions -->
<association>
<instanceOf><topicRef xlink:href="#part-whole"/></instanceOf>
<member>
<roleSpec><topicRef xlink:href="#whole"/></roleSpec>
<topicRef xlink:href="#the-world"/>
</member>
<member>
<roleSpec><topicRef xlink:href="#part"/></roleSpec>
<topicRef xlink:href="#europe"/>
</member>
</association>
<association>
<instanceOf><topicRef xlink:href="#part-whole"/></instanceOf>
<member>
<roleSpec><topicRef xlink:href="#whole"/></roleSpec>
<topicRef xlink:href="#europe"/>
</member>
<member>
<roleSpec><topicRef xlink:href="#part"/></roleSpec>
<topicRef xlink:href="#france"/>
</member>
</association>
<association>
<instanceOf><topicRef xlink:href="#part-whole"/></instanceOf>
<member>
<roleSpec><topicRef xlink:href="#whole"/></roleSpec>
<topicRef xlink:href="#france"/>
</member>
<member>
<roleSpec><topicRef xlink:href="#part"/></roleSpec>
<topicRef xlink:href="#burgundy"/>
</member>
</association>
<association>
<instanceOf><topicRef xlink:href="#part-whole"/></instanceOf>
<member>
<roleSpec><topicRef xlink:href="#whole"/></roleSpec>
<topicRef xlink:href="#france"/>
</member>
<member>
<roleSpec><topicRef xlink:href="#part"/></roleSpec>
<topicRef xlink:href="#rhone"/>
</member>
</association>
<!-- ============================================ -->
<!-- Faceted Classification Definitions -->
<!-- The following topics and associations define -->
<!-- the facets in our classification. Each facet -->
<!-- is represented by a topic and the root class -->
<!-- of the facet is specified by an association -->
<!-- ============================================ -->
<!-- Region Facet Definition -->
<topic id="region-facet">
<instanceOf>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/faceted-classification/#facet"/>
</instanceOf>
<baseName><baseNameString>Region Facet</baseNameString></baseName>
</topic>
<!-- Region Facet root is The World -->
<association>
<instanceOf>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/faceted-classification/#facet-has-root"/>
</instanceOf>
<member>
<roleSpec>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/faceted-classification/#facet"/>
</roleSpec>
<topicRef xlink:href="#region-facet"/>
</member>
<member>
<roleSpec>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/faceted-classification/#facet-root"/>
</roleSpec>
<topicRef xlink:href="#the-world"/>
</member>
</association>
<!-- Region Facet hierarchy is the Part-Whole relationship -->
<association>
<instanceOf>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/faceted-classification/#facet-has-hierarchy-type"/>
</instanceOf>
<member>
<roleSpec>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/faceted-classification/#facet"/>
</roleSpec>
<topicRef xlink:href="#region-facet"/>
</member>
<member>
<roleSpec>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/faceted-classification/#facet-hierarchy-type"/>
</roleSpec>
<topicRef xlink:href="#part-whole"/>
</member>
</association>
<!-- Wine Type Facet -->
<topic id="wine-type-facet">
<instanceOf>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/faceted-classification/#facet"/>
</instanceOf>
<baseName><baseNameString>Wine Type Facet</baseNameString></baseName>
</topic>
<!-- Wine Type facet root is "All Wines" -->
<association>
<instanceOf>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/faceted-classification/#facet-has-root"/>
</instanceOf>
<member>
<roleSpec>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/faceted-classification/#facet"/>
</roleSpec>
<topicRef xlink:href="#wine-type-facet"/>
</member>
<member>
<roleSpec>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/faceted-classification/#facet-root"/>
</roleSpec>
<topicRef xlink:href="#all-wine-types"/>
</member>
</association>
<!-- Wine Type facet hierarchy is subcategory/supercategory -->
<association>
<instanceOf>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/faceted-classification/#facet-has-hierarchy-type"/>
</instanceOf>
<member>
<roleSpec>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/faceted-classification/#facet"/>
</roleSpec>
<topicRef xlink:href="#wine-type-facet"/>
</member>
<member>
<roleSpec>
<subjectIndicatorRef xlink:href="http://www.techquila.com/psi/faceted-classification/#facet-hierarchy-type"/>
</roleSpec>
<topicRef xlink:href="#subcategory-supercategory"/>
</member>
</association>
<!-- ========================================== -->
<!-- Example classification -->
<!-- NOTE: in a real system, the classification -->
<!-- and its definition should probably be -->
<!-- maintained as separate topic maps -->
<!-- ========================================== -->
<topic id="duboeuf_cab_2001">
<baseName>
<baseNameString>Duboeuf 2001 Cabernet Sauvignon</baseNameString>
</baseName>
</topic>
<!-- Wine's classification on the Wine Type facet -->
<association>
<instanceOf>
<topicRef xlink:href="#wine-of-varietal"/>
</instanceOf>
<member>
<roleSpec><topicRef xlink:href="#varietal"/></roleSpec>
<topicRef xlink:href="#cab-sauv"/>
</member>
<member>
<roleSpec><topicRef xlink:href="#wine"/></roleSpec>
<topicRef xlink:href="#duboeuf_cab_2001"/>
</member>
</association>
<!-- Wine's classification on the Region facet -->
<association>
<instanceOf>
<topicRef xlink:href="#wine-from-region"/>
</instanceOf>
<member>
<roleSpec><topicRef xlink:href="#wine"/></roleSpec>
<topicRef xlink:href="#duboeuf_cab_2001"/>
</member>
<member>
<roleSpec><topicRef xlink:href="#region"/></roleSpec>
<topicRef xlink:href="#burgundy"/>
</member>
</association>
</topicMap>
| Up: Topic Map Design Patterns For Information Architecture | |
| Previous: Describing a Topic Map Design Pattern in UML | Next: Conclusions |