|
From: Kendall C. <ke...@mo...> - 2001-04-27 14:39:27
|
All,
Here's the latest version of the OMF DTD. I think I passed a version
similar to this to G. Leblanc for further maintenance, but it doesn't
seem to have gotten into OMF's CVS. I've added a 'uri' attribute as a
way to sort out the URL/URI confusion. (Issue needs further
discussion.)
I'm not including the entity sets I'd worked on, largely as an
experiment of my own, as the OMF team never discussed maintaining
formal vocabularies or what mechanism to use to do so. (I'll send
these to people off-list, but they're probably worthless at this
point. Hmm, I'll also note further that I don't remember OMF ever
making a distinction between the language of the *resource* and the
language of the OMF file itself. The language element is the language
of the resource; as for whether OMF files can be in languages other
than English, I don't know why not, in which case something like
xml:lang should be used.)
I also want to answer some of the off-list questions I've gotten.
As for why OMF didn't use RDF, there are two reasons.
First, the primary OMF deliverable is the written specification of
elements, not this XML DTD, the XML Schema I started sketching out at
the end of 2000, nor any other formal schema. Our view was that
projects like SK that were using OMF would best know which formal
schema tool to use. Now that there is a helpful (IMO) proliferation of
such tools, I think that view is a bit vindicated.
The second reason is purely biographical and historical; I thought
since early on that RDF was particularly fitting to OMF, but at the
time, there was no RDF schema language, there was no N3 RDF syntax,
and I knew more about DTDs than RDF anyway.
As for the entity sets, which were my way of trying to work on a
controlled vocabulary for some of the OMF values, they too were also
an experiment I did on my own, primarily by writing Python scripts to
turn ISO data files for country and language codes into XML entities,
as well as trying to stay on top of the mass of Linux (and, in truth,
not just Linux, but any OS that might use OMF: the BSDs, the
commercial Unixes, etc. ) distributions and free software licenses
that exist. Both of these require more active attention that I've had
to give, especially since they weren't being used as far as I know.
(The other, purely technical issue that I never really sorted out is
how the entity sets should be used, whether as parameter or general
entities, or as something else. This issue may well tip the scales
from XML DTD to one of the other, more contemporary schema tools that
provide some means for doing this more cleanly. One might look at the
NewsML stuff for inspiration; if I remember correctly, it or its
successors does something similar with its news topic sets.)
I suspect since SK has more people-power than OMF, one service that SK
could provide to the free software world is to be the place that
maintains controlled vocabularies for OS-distributions and free-open
software licenses. The language and country code vocabularies are, in
my view, essentially handled by ISO and just require some scriptage so
as to make maintenance as non-painful as possible.
Finally, please excuse my on-list reply to off-list questions; I've
just moved into a new old-house, have the wiring contractor due any
minute to spread the joy of cat5 throughout, and all my XML and SGML
books are packed and not handy for reference.
Best,
Kendall Clark
--
<?xml version="1.0"?>
<!--
Open Source Metadata Framework (OMF XML DTD) Version 1.1
Copyright (C) 1999, 2000, 2001 Kendall Grant Clark. All rights reserved.
$Id: OMF.dtd,v 1.4 2001/04/27 14:10:23 kclark Exp $
To use the OMF.dtd, an FPI like the following works:
"-//Open Source Metadata Framework //DTD OMF V1.1//EN"
Permission to use, copy, modify and distribute the OMF DTD and its
accompanying documentation for any purpose and without fee is hereby
granted in perpetuity, provided that the above copyright notice and
this paragraph appear in all copies. The copyright holders make no
representation about the suitability of the DTD for any purpose. It
is provided "as is" without expressed or implied warranty. If you
modify the OMF DTD in any way, except for declaring and referencing
additional sets of general entities, declaring additional notations,
please label your DTD as a variant of OMF. This license requirement is
stated solely in the interests of maintaining data interchange
capability.
-->
<!-- ............................................................. -->
<!-- Entity Sets ................................................. -->
<!-- ............................................................. -->
<!ENTITY % licenseTypes PUBLIC
"-//Open Source Metadata Framework (OMF)//ENTITIES License Types//EN"
"licenseTypes.mod" >
<!-- %licenseTypes; -->
<!ENTITY % countryCodes PUBLIC
"-//Open Source Metadata Framework (OMF)//ENTITIES Country Codes//EN"
"countryCodes.mod" >
<!-- %countryCodes; -->
<!ENTITY % languageCodes PUBLIC
"-//Open Source Metadata Framework (OMF)//ENTITIES Language Codes//EN"
"languageCodes.mod" >
<!-- %languageCodes; -->
<!ENTITY % linuxDistributions PUBLIC
"-//Open Source Metadata Framework (OMF)//ENTITIES Linux Distributions//EN"
"linuxDistributions.mod" >
<!-- %linuxDistributions; -->
<!-- ............................................................. -->
<!-- ............................................................. -->
<!-- ............................................................. -->
<!-- Internal Entities ........................................... -->
<!-- ............................................................. -->
<!ENTITY % base.attribute.set
"id ID #IMPLIED
modified CDATA #IMPLIED
created CDATA #IMPLIED" >
<!ENTITY % core.attribute.set
"%base.attribute.set;
agent CDATA #IMPLIED
status CDATA #IMPLIED" >
<!ENTITY % url.attribute.set
"url CDATA #REQUIRED
uri CDATA #IMPLIED
%core.attribute.set;" >
<!ENTITY % value.attribute.set
"value CDATA #REQUIRED
%core.attribute.set;" >
<!ENTITY % person.model
"(honorific* | firstName | otherName* | surname | email+)">
<!ENTITY % org.model
"(name+ | division* | email+)" >
<!ENTITY % content.entity.model
"(organization | person)*" >
<!-- ............................................................. -->
<!-- ............................................................. -->
<!-- ............................................................. -->
<!-- Element Declarations......................................... -->
<!-- ............................................................. -->
<!-- omf root element -->
<!ELEMENT omf (resource)+ >
<!ATTLIST omf
%base.attribute.set; >
<!-- resource -->
<!ELEMENT resource (creator
| maintainer
| contributor
| title
| date
| versionGroup
| subject
| description
| type
| format
| identifier
| source
| language
| relation
| coverage
| rights)* >
<!ATTLIST resource
%core.attribute.set; >
<!-- creator -->
<!ELEMENT creator
%content.entity.model; >
<!ATTLIST creator
%core.attribute.set; >
<!-- organization -->
<!ELEMENT organization
%org.model; >
<!-- name -->
<!ELEMENT name (#PCDATA) >
<!ATTLIST name
%core.attribute.set; >
<!-- division -->
<!ELEMENT division (#PCDATA) >
<!ATTLIST division
%core.attribute.set; >
<!-- person -->
<!ELEMENT person
%person.model; >
<!-- email -->
<!ELEMENT email (#PCDATA) >
<!ATTLIST email
%core.attribute.set; >
<!-- honorific -->
<!ELEMENT honorific (#PCDATA) >
<!ATTLIST honorific
%core.attribute.set; >
<!-- firstName -->
<!ELEMENT firstName (#PCDATA) >
<!ATTLIST firstName
%core.attribute.set; >
<!-- otherName -->
<!ELEMENT otherName (#PCDATA) >
<!ATTLIST otherName
%core.attribute.set; >
<!-- surname -->
<!ELEMENT surname (#PCDATA) >
<!ATTLIST surname
%core.attribute.set; >
<!-- maintainer -->
<!ELEMENT maintainer
%content.entity.model; >
<!ATTLIST maintainer
%core.attribute.set; >
<!-- contributor -->
<!ELEMENT contributor
%content.entity.model; >
<!ATTLIST contributor
%core.attribute.set; >
<!-- title -->
<!ELEMENT title (#PCDATA) >
<!ATTLIST title
%core.attribute.set; >
<!-- versiongroup -->
<!ELEMENT versionGroup (version)* >
<!ATTLIST versionGroup
%core.attribute.set; >
<!-- version -->
<!ELEMENT version (id | date | description?) >
<!ATTLIST version
%core.attribute.set; >
<!-- id -->
<!ELEMENT id (#PCDATA) >
<!ATTLIST id
%core.attribute.set; >
<!-- date -->
<!ELEMENT date (#PCDATA) >
<!ATTLIST date
%core.attribute.set; >
<!-- description -->
<!ELEMENT description (#PCDATA) >
<!ATTLIST description
%core.attribute.set; >
<!-- subject -->
<!ELEMENT subject (#PCDATA) >
<!ATTLIST subject
%core.attribute.set; >
<!-- type -->
<!ELEMENT type (#PCDATA) >
<!ATTLIST type
%core.attribute.set; >
<!-- format -->
<!ELEMENT format EMPTY >
<!ATTLIST format
mime CDATA #REQUIRED
dtd CDATA #IMPLIED
%core.attribute.set; >
<!-- identifier -->
<!ELEMENT identifier EMPTY >
<!ATTLIST identifier
%url.attribute.set; >
<!-- source -->
<!ELEMENT source (#PCDATA) >
<!ATTLIST source
%core.attribute.set; >
<!-- language -->
<!-- see languageCodes.mod, an entity set
comprising a formal vocabulary for
language, derived from ISO 639 and 639-2 -->
<!ELEMENT language EMPTY >
<!ATTLIST language
code CDATA #REQUIRED
name CDATA #IMPLIED
src CDATA #IMPLIED
%core.attribute.set; >
<!-- relation -->
<!ELEMENT relation EMPTY >
<!ATTLIST relation
%url.attribute.set; >
<!-- coverage -->
<!ELEMENT coverage (geographic | distribution | kernel |
architecture | os)* >
<!ATTLIST coverage
%core.attribute.set; >
<!-- see countryCodes.mod, an entity set
comprising a formal vocabulary for
geographic, derived from ISO 3166-1 -->
<!-- geographic -->
<!ELEMENT geographic (#PCDATA) >
<!ATTLIST geographic
%core.attribute.set; >
<!-- see linuxDistributions.mod, an entity set
comprising a formal vocabulary for
distribution -->
<!-- distribution -->
<!ELEMENT distribution (#PCDATA) >
<!ATTLIST distribution
%core.attribute.set; >
<!-- kernel -->
<!ELEMENT kernel (#PCDATA) >
<!ATTLIST kernel
%core.attribute.set; >
<!-- architecture -->
<!ELEMENT architecture (#PCDATA) >
<!ATTLIST architecture
%core.attribute.set; >
<!-- os -->
<!ELEMENT os (#PCDATA) >
<!ATTLIST os
%core.attribute.set; >
<!-- rights -->
<!-- see licenseTypes.mod, an entity set
comprising a formal vocabulary for rights -->
<!ELEMENT rights (holder | license)* >
<!ATTLIST rights
%core.attribute.set; >
<!-- holder -->
<!ELEMENT holder EMPTY >
<!ATTLIST holder
name CDATA #REQUIRED
%core.attribute.set; >
<!-- license -->
<!ELEMENT license EMPTY >
<!ATTLIST license
name CDATA #REQUIRED
url CDATA #REQUIRED
version CDATA #IMPLIED
%core.attribute.set; >
<!-- ............................................................. -->
<!-- ............................................................. -->
|