- From: Jeremy Carroll <jjc@hpl.hp.com>
- Date: Tue, 20 Nov 2007 11:51:15 +0000
- To: Alan Ruttenberg <alanruttenberg@gmail.com>
- CC: Carsten Lutz <clu@tcs.inf.tu-dresden.de>, Michael Smith <msmith@clarkparsia.com>, Uli Sattler <sattler@cs.man.ac.uk>, Sandro Hawke <sandro@w3.org>, Bijan Parsia <bparsia@cs.man.ac.uk>, public-owl-wg <public-owl-wg@w3.org>, ewallace@cme.nist.gov
Alan Ruttenberg wrote:
> Doesn't this just mean we have to be a little more careful where we put
> the namespace?
No, and yes.
First no:
Consider:
<owl:Class ID="ActionTime"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:my="http://example.org/myDatatypes" >
<owl:equivalentClass>
<owl:Restriction>
<owl:onProperty rdf:resource="#hasTime"/>
<owl:someValuesFrom rdf:parseType="Literal">
<xs:simpleType xmlns:my="http://example.org/myDatatypes" >
<xs:restriction base="my:precision3">
<xs:minInclusive value="305.200" />
<xs:maxInclusive value="310.199" />
</xs:restriction>
</xs:simpleType>
</owl:someValuesFrom>
</owl:Restriction>
</owl:equivalentClass>
</owl:Class>
the second declaration of xmlns:my has no effect, and hence XML
Canonicalization deteles it, as non-canonical.
i.e. XML Canonicalization rearranges namespace declarations.
When canonicalizing fragments of XML documents, as, for example, with
rdf:parseType="Literal", it is usual to use exclusive canonicalization,
which, discards namespaces from the outer context, which are not visibly
used. For technical reasons, exclusive canonicalization discards all
namespaces which are not visibly used. The namespace declaration
xmlns:my="http://example.org/myDatatypes"
is not a visible use.
So no, your proposed fix does not work.
See
http://www.w3.org/TR/2002/REC-xml-exc-c14n-20020718/#sec-Enveloping
for background motivating the visible use rule.
However, there is a similar fix that would work.
In
http://www.w3.org/TR/2002/REC-xml-exc-c14n-20020718/#sec-Limitations
they suggest
[[
the XML must be modified so that use of the namespace prefix involved is
visible, or ...
]]
So, we could have a rule that the definition of the datatype is the XML
Schema datatype definition, with additional namespace qualified
attribtues, with local name 'hack'. All these attributes are to be
discarded before passing the definition to an XML Schema engine.
With this rule then we could have
<owl:Class ID="ActionTime"
xmlns:xs="http://www.w3.org/2001/XMLSchema" >
<owl:equivalentClass>
<owl:Restriction>
<owl:onProperty rdf:resource="#hasTime"/>
<owl:someValuesFrom rdf:parseType="Literal">
<xs:simpleType xmlns:my="http://example.org/myDatatypes"
my:hack="" >
<xs:restriction base="my:precision3">
<xs:minInclusive value="305.200" />
<xs:maxInclusive value="310.199" />
</xs:restriction>
</xs:simpleType>
</owl:someValuesFrom>
</owl:Restriction>
</owl:equivalentClass>
</owl:Class>
or equivalently
<owl:Class ID="ActionTime"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:my="http://example.org/myDatatypes" >
<owl:equivalentClass>
<owl:Restriction>
<owl:onProperty rdf:resource="#hasTime"/>
<owl:someValuesFrom rdf:parseType="Literal">
<xs:simpleType
my:hack="" >
<xs:restriction base="my:precision3">
<xs:minInclusive value="305.200" />
<xs:maxInclusive value="310.199" />
</xs:restriction>
</xs:simpleType>
</owl:someValuesFrom>
</owl:Restriction>
</owl:equivalentClass>
</owl:Class>
where the my:hack attribute acts as a visible use.
(Clearly any attribute name would do! I think it would be helpful to
have one fixed one, a possible long but descriptive name would be
"namespace-work-around")
OTOH for an unnamed datatype, maybe its derivation history is
irrelevant. All datatypes defined with XML Schema, are derived from XML
Schema built-in types, so the alternative is simply to flatten the
derivation - with my example precision3 had a pattern, and the derived
type has a minInclusive and maxInclusive, so maybe
<xs:simpleType
xmlns:xs="http://www.w3.org/2001/XMLSchema" >
<xs:restriction base="xs:decimal">
<xs:minInclusive value="305.200" />
<xs:maxInclusive value="310.199" />
<xs:pattern value="[0-9]*.[0-9]{3}" >
</xs:pattern>
</xs:restriction>
</xs:simpleType>
can be used instead of
<xs:simpleType
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:my="http://example.org/myDatatypes" >
<xs:restriction base="my:precision3">
<xs:minInclusive value="305.200" />
<xs:maxInclusive value="310.199" />
</xs:restriction>
</xs:simpleType>
[I don't believe that it is trivial to merge two patterns, if the user
defined type is derived using a pattern, and then a further pattern is
used to derive a subtype]
Jeremy
Received on Tuesday, 20 November 2007 11:51:49 UTC