I should probably mention the SIMILE project at this point
(http://simile.mit.edu/) which is working on applying semantic web tools
and technologies to library metadata, starting with VRA core and IMS LOM,
and adding in lots of useful related things like SKOS-encoded thesaurii
(e.g. LC's TGM II and the CIA World Factbook). When I forwarded the MADS
announcement to the team, there was a discussion about just this question
(converting MADS to RDF, which is what we would do with it), they had two
initial conclusions:
-- All the semantics are in the attribute values relatedType="" and
authority="". relatedType="" values are controlled by the schema, but the
attribute itself is optional. authority="" values are *not* controlled by
the schema and the attribute is optional. Converting this schema to a
useful RDF is algorithmically impossible since too much information is kept
implicit and/or optional. The only graph topology that can be inferred from
this MADS schema is that some literals have some sort of relationship with
others (optionally labelled) and that this relationship is optionally
backed up by a literal. If all the attributes were required and all the
attributes value were controlled and restricted by the schema, then the
migration could be straightforward." (Stefano Mazzocchi)
-- Writing XML in this way is quite a useful design pattern for getting
RDF-like extensibility in XML while retaining compatibility with things
like WSDL based web services, where we have to write an XML Schema to
describe our data. Writing such a schema limits our ability to add
extensions, so one way to overcome this is to use attributes to encode
property names, as this frees us from the schema constraint. Of course once
we are free of the schema constraint, then we lose our ability to validate,
but then that's a problem we have with RDF as well. (Mark Butler)
Mark's sample XSL for the conversion is attached, FYI. So the upshot is
that it will be possible to convert to RDF but not to validate so it's
unclear how useful it will be in practice. We'll probably try it anyway,
and are making heavy use of OCLC's name authority Web Service to build
relationships between records from different domains.
MacKenzie
At 09:26 AM 6/15/2004 -0800, Bruce D'Arcus wrote:
>On Tue, 15 Jun 2004 12:20:48 -0400, "Houghton,Andrew"
><[log in to unmask]> said:
> > Chastising Microsoft for using triples in like chastising Lotus for
> > using triples for the familiar spreadsheet concept.
>
>Getting off-topic (probably my fault), but I'm sure you realize the
>(rather subtle, actually) MS-bashing on this sort of issue has nothing
>whatsoever to do with them using the idea (indeed, my point was about
>their use of the idea as another validation of it). It has to do with
>the fact that they regularly take perfectly functional standards and
>technologies and create proprietary analogs. Longhorn is a perfect
>example of exactly this. It makes good business sense for them to do
>this, but I don't have to like it.
>
>I don't understand RDF well-enough to claim it "the answer" to the sort
>of problems encountered with authority data, but I do know that some
>very smart people in that world believe it is. On that basis, it seems
>sensible to get some input from some of them on MADS.
>
>Bruce
MacKenzie Smith
Associate Director for Technology
MIT Libraries
Building 14S-308
77 Massachusetts Avenue
Cambridge, MA 02139
(617)253-8184
[log in to unmask]
<?xml version='1.0'?>
<!DOCTYPE xsl:stylesheet [
<!ENTITY xsd 'http://www.w3.org/2001/XMLSchema'>
<!ENTITY rdf 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
<!ENTITY rdfs 'http://www.w3.org/2000/01/rdf-schema#'>
<!ENTITY str 'http://web.mit.edu/simile/xslt/'>
<!ENTITY mads 'http://web.mit.edu/simile/www/2004/06/mads#'>
<!ENTITY custom 'http://web.mit.edu/simile/www/2004/06/mads-custom#'>
]>
<xsl:stylesheet
version='1.0'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
xmlns:rdf="&rdf;"
xmlns:rdfs="&rdfs;"
xmlns:str="&str;"
xmlns:xsd="&xsd;"
xmlns:mads="&mads;"
xmlns:custom="&custom;">
<xsl:output method="xml" version="1.0"
encoding="iso-8859-1" indent="yes"/>
<xsl:function name="str:urlencode">
<xsl:param name="url"/>
<xsl:value-of select="replace(replace(replace(replace(lower-case(normalize-space($url)),'#','_'),': ','_'),' ','_'),'"','_')"/>
</xsl:function>
<xsl:template match="mads">
<rdf:RDF xmlns:rdf="&rdf;"
xmlns:rdfs="&rdfs;"
xmlns:mads="&mads;"
xmlns:xsd="&xsd;">
<rdf:Description>
<xsl:choose>
<xsl:when test="authority/geographic">
<xsl:attribute name="rdf:about">http://web.mit.edu/simile/www/2004/06/madsdata#<xsl:value-of select="str:urlencode(authority/geographic)"/></xsl:attribute>
<rdf:type rdf:resource="&mads;Geographic"/>
</xsl:when>
<xsl:when test="authority/topic">
<xsl:attribute name="rdf:about">http://web.mit.edu/simile/www/2004/06/madsdata#<xsl:value-of select="str:urlencode(authority/topic)"/></xsl:attribute>
<rdf:type rdf:resource="&mads;Topic"/>
</xsl:when>
</xsl:choose>
<xsl:apply-templates/>
</rdf:Description>
</rdf:RDF>
</xsl:template>
<xsl:template match="authority">
<xsl:apply-templates/>
</xsl:template>
<xsl:template name="common">
<xsl:choose>
<xsl:when test="@authority">
<rdfs:label><xsl:value-of select="."/></rdfs:label>
<mads:authority>
<rdf:Description>
<xsl:attribute name="rdf:about">http://web.mit.edu/simile/www/2004/06/madsdata#<xsl:value-of select="str:urlencode(@authority)"/></xsl:attribute>
<rdfs:label><xsl:value-of select="@authority"/></rdfs:label>
</rdf:Description>
</mads:authority>
</xsl:when>
<xsl:otherwise>
<rdfs:label><xsl:value-of select="."/></rdfs:label>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="geographic">
<xsl:call-template name="common"/>
</xsl:template>
<xsl:template match="topic">
<xsl:call-template name="common"/>
</xsl:template>
<xsl:template match="refs">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="ref">
<xsl:element name="{@relatedType}" namespace="http://web.mit.edu/simile/www/2004/06/mads-custom#">
<rdf:Description>
<xsl:choose>
<xsl:when test="geographic">
<xsl:attribute name="rdf:about">http://web.mit.edu/simile/www/2004/06/madsdata#<xsl:value-of select="str:urlencode(geographic)"/></xsl:attribute>
</xsl:when>
<xsl:when test="topic">
<xsl:attribute name="rdf:about">http://web.mit.edu/simile/www/2004/06/madsdata#<xsl:value-of select="str:urlencode(topic)"/></xsl:attribute>
</xsl:when>
</xsl:choose>
<xsl:apply-templates/>
</rdf:Description>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
|