]> Lady’s Gitweb - Vocab/commitdiff
Support disjoint unions; improve modelling somewhat
authorLady <redacted>
Sat, 1 Mar 2025 22:43:24 +0000 (17:43 -0500)
committerLady <redacted>
Thu, 31 Jul 2025 01:13:41 +0000 (21:13 -0400)
- `anno:Selector` can no longer be refined by `anno:State` (in cases
  where an object is both).

- `awol:FeedOrEntry` is now formalized as a disjoint union of
  `awol:Feed` and `awol:Entry`. This was already true, as Feeds and
  Entries were disjoint and Feed Or Entry was equivalent to their
  union, but this states it explicitly.

- `dcterms:LicenseDocument` is now a subclass of `foaf:Document`.

- Plumbing `dcterms:` classes which simply indicated one of a variety
  of classes are now equivalent to their union, not simply superclasses
  of them. This simplifies the ranges of properties which previously
  indicated the union and aligns with how these classes were probably
  intended. This union is _not_ defined as disjoint.

- Superfluous disjoint rules were removed from `foaf:Agent` and
  `foaf:Document`; these can be inferred.

13 files changed:
DTD
data/classes/anno¦Selector
data/classes/awol¦FeedOrEntry
data/classes/dcterms¦LicenseDocument
data/classes/dcterms¦LocationPeriodOrJurisdiction
data/classes/dcterms¦MediaType
data/classes/dcterms¦MediaTypeOrExtent
data/classes/foaf¦Agent
data/classes/foaf¦Document
data/object_properties/dcterms¦coverage
data/object_properties/dcterms¦format
transforms/infer.xslt
transforms/terms.xslt

diff --git a/DTD b/DTD
index 203e6b3bb05b6cc8bf103df2f332bfa71ce5043c..f35a9ec64025d2c1c1b30cff170ddad55b3cccd5 100644 (file)
--- a/DTD
+++ b/DTD
@@ -163,7 +163,7 @@ SPDX-License-Identifier: CC0-1.0
 <!ELEMENT Restriction (onProperty,(((minQualifiedCardinality|maxQualifiedCardinality|qualifiedCardinality),(onClass|onDataRange))|allValuesFrom|cardinality|hasValue|hasSelf|minCardinality|maxCardinality|someValuesFrom))>
 
 <!-- Declarations -->
-<!ELEMENT Class (%annotations;,((equivalentClass*,subClassOf*,superClassOf*,disjointWith*,hasKey*)|complementOf|disjointUnionOf|intersectionOf|oneOf|unionOf))>
+<!ELEMENT Class (%annotations;,((equivalentClass*,disjointUnionOf*,subClassOf*,superClassOf*,disjointWith*,hasKey*)|complementOf|intersectionOf|oneOf|unionOf))>
 <!ATTLIST Class
        name CDATA #IMPLIED
        status (plumbing|unstable|testing|stable|archaic) #IMPLIED
index 7b72de6d94812bd13fdadf6a733d60b74a085fa5..bfd1844298d74474599b524063f6e9fecdd38004 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0"?>
 <!--
-SPDX-FileCopyrightText: 2024 Lady <https://www.ladys.computer/about/#lady>
+SPDX-FileCopyrightText: 2024, 2025 Lady <https://www.ladys.computer/about/#lady>
 SPDX-License-Identifier: CC0-1.0
 -->
 <!DOCTYPE Class SYSTEM "../../DTD">
@@ -27,4 +27,18 @@ SPDX-License-Identifier: CC0-1.0
                        </allValuesFrom>
                </Restriction>
        </subClassOf>
+       <subClassOf>
+               <Restriction>
+                       <onProperty>
+                               <resource name="anno:refinedBy"/>
+                       </onProperty>
+                       <allValuesFrom>
+                               <Class>
+                                       <complementOf>
+                                               <resource name="anno:State"/>
+                                       </complementOf>
+                               </Class>
+                       </allValuesFrom>
+               </Restriction>
+       </subClassOf>
 </Class>
index 6a6bd9352ef41af42d079e31201bba37fc75720d..04e87ed1f5444d95e93674c312a9d5158f670fd7 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0"?>
 <!--
-SPDX-FileCopyrightText: 2024 Lady <https://www.ladys.computer/about/#lady>
+SPDX-FileCopyrightText: 2024, 2025 Lady <https://www.ladys.computer/about/#lady>
 SPDX-License-Identifier: CC0-1.0
 -->
 <!DOCTYPE Class SYSTEM "../../DTD">
@@ -20,14 +20,10 @@ SPDX-License-Identifier: CC0-1.0
        <isDefinedBy>
                <SpecificResource source="(AWOL)" fragment="FeedOrEntry"/>
        </isDefinedBy>
-       <equivalentClass>
-               <Class>
-                       <unionOf>
-                               <resource name="awol:Feed"/>
-                               <resource name="awol:Entry"/>
-                       </unionOf>
-               </Class>
-       </equivalentClass>
+       <disjointUnionOf>
+               <resource name="awol:Feed"/>
+               <resource name="awol:Entry"/>
+       </disjointUnionOf>
        <subClassOf>
                <resource name="awol:Version"/>
        </subClassOf>
index c8e29bc75498fae996ffea966b5a048deca3db7d..f4dcf616871c40de302ea5ed3567338d187634d4 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0"?>
 <!--
-SPDX-FileCopyrightText: 2024 Lady <https://www.ladys.computer/about/#lady>
+SPDX-FileCopyrightText: 2024, 2025 Lady <https://www.ladys.computer/about/#lady>
 SPDX-License-Identifier: CC0-1.0
 -->
 <!DOCTYPE Class SYSTEM "../../DTD">
@@ -8,7 +8,7 @@ SPDX-License-Identifier: CC0-1.0
        <label xml:lang="en">License Document</label>
        <comment xml:lang="en">
                <p>
-                       A legal document giving official permission to do something with a resource.
+                       A legal <ref target="foaf:Document">Document</ref> giving official permission to do something with a resource.
                </p>
        </comment>
        <isDefinedBy>
@@ -17,4 +17,7 @@ SPDX-License-Identifier: CC0-1.0
        <subClassOf>
                <resource name="dcterms:RightsStatement"/>
        </subClassOf>
+       <subClassOf>
+               <resource name="foaf:Document"/>
+       </subClassOf>
 </Class>
index 72ecd5cb764f1d1b2d80d684b29bc024629c04a0..889207a4b92a6932fadc3644417761460888ef6c 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0"?>
 <!--
-SPDX-FileCopyrightText: 2024 Lady <https://www.ladys.computer/about/#lady>
+SPDX-FileCopyrightText: 2024, 2025 Lady <https://www.ladys.computer/about/#lady>
 SPDX-License-Identifier: CC0-1.0
 -->
 <!DOCTYPE Class SYSTEM "../../DTD">
@@ -14,4 +14,13 @@ SPDX-License-Identifier: CC0-1.0
        <isDefinedBy>
                <SpecificResource source="(DCMI)" fragment="http://purl.org/dc/terms/LocationPeriodOrJurisdiction"/>
        </isDefinedBy>
+       <equivalentClass>
+               <Class>
+                       <unionOf>
+                               <resource name="dcterms:Jurisdiction"/>
+                               <resource name="dcterms:Location"/>
+                               <resource name="dcterms:PeriodOfTime"/>
+                       </unionOf>
+               </Class>
+       </equivalentClass>
 </Class>
index 67a197c45be50ff9f271dcd55bc03d49cfb3a54d..3f9a376b7196690fbdb4f11f3d1512513dbf949f 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0"?>
 <!--
-SPDX-FileCopyrightText: 2024 Lady <https://www.ladys.computer/about/#lady>
+SPDX-FileCopyrightText: 2024, 2025 Lady <https://www.ladys.computer/about/#lady>
 SPDX-License-Identifier: CC0-1.0
 -->
 <!DOCTYPE Class SYSTEM "../../DTD">
@@ -14,6 +14,14 @@ SPDX-License-Identifier: CC0-1.0
        <isDefinedBy>
                <SpecificResource source="(DCMI)" fragment="http://purl.org/dc/terms/MediaType"/>
        </isDefinedBy>
+       <equivalentClass>
+               <Class>
+                       <unionOf>
+                               <resource name="dcterms:FileFormat"/>
+                               <resource name="dcterms:PhysicalMedium"/>
+                       </unionOf>
+               </Class>
+       </equivalentClass>
        <subClassOf>
                <resource name="dcterms:MediaTypeOrExtent"/>
        </subClassOf>
index c21cc3c60a2b1fd90cc49ef61b0f852089bd3e38..ee72143c45f9723cfef3bc32c055db557189e103 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0"?>
 <!--
-SPDX-FileCopyrightText: 2024 Lady <https://www.ladys.computer/about/#lady>
+SPDX-FileCopyrightText: 2024, 2025 Lady <https://www.ladys.computer/about/#lady>
 SPDX-License-Identifier: CC0-1.0
 -->
 <!DOCTYPE Class SYSTEM "../../DTD">
@@ -14,4 +14,12 @@ SPDX-License-Identifier: CC0-1.0
        <isDefinedBy>
                <SpecificResource source="(DCMI)" fragment="http://purl.org/dc/terms/MediaTypeOrExtent"/>
        </isDefinedBy>
+       <equivalentClass>
+               <Class>
+                       <unionOf>
+                               <resource name="dcterms:MediaType"/>
+                               <resource name="dcterms:SizeOrDuration"/>
+                       </unionOf>
+               </Class>
+       </equivalentClass>
 </Class>
index 556a76caecd2eb23c1ef94b19aab2b60068ddb03..da3f23296a185fb9100643536dedb32daa2067bb 100644 (file)
@@ -24,10 +24,4 @@ SPDX-License-Identifier: CC0-1.0
        <equivalentClass>
                <resource name="dcterms:Agent"/>
        </equivalentClass>
-       <disjointWith>
-               <resource name="foaf:Document"/>
-       </disjointWith>
-       <disjointWith>
-               <resource name="foaf:Project"/>
-       </disjointWith>
 </Class>
index 1786df5aab8402770520ba75b4a6e32e8aa54bca..58f468fd9afbd5d23b57b72301966872eda3ea9d 100644 (file)
@@ -25,7 +25,4 @@ SPDX-License-Identifier: CC0-1.0
        <disjointWith>
                <resource name="foaf:Agent"/>
        </disjointWith>
-       <disjointWith>
-               <resource name="foaf:Project"/>
-       </disjointWith>
 </Class>
index 6ba10e7c9ec3df24ec21abbeb3d87ead29c10077..9351beef95ae93f81f06e5ee7273394a1dcf80ee 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0"?>
 <!--
-SPDX-FileCopyrightText: 2024 Lady <https://www.ladys.computer/about/#lady>
+SPDX-FileCopyrightText: 2024, 2025 Lady <https://www.ladys.computer/about/#lady>
 SPDX-License-Identifier: CC0-1.0
 -->
 <!DOCTYPE ObjectProperty SYSTEM "../../DTD">
@@ -8,7 +8,7 @@ SPDX-License-Identifier: CC0-1.0
        <label xml:lang="en">has coverage</label>
        <comment xml:lang="en">
                <p>
-                       A <ref target="dcterms:Location">Location</ref>, <ref target="dcterms:PeriodOfTime">PeriodOfTime</ref>, or <ref target="dcterms:Jurisdiction">Jurisdiction</ref> of this thing, which this thing is applicable to, or under which this thing is relevant.
+                       A <ref target="dcterms:LocationPeriodOrJurisdiction">Location, Period, Or Jurisdiction</ref> of this thing, which this thing is applicable to, or under which this thing is relevant.
                </p>
                <p>
                        <ptr target="(DCMI)"/> states that because coverage is so broadly defined, it is preferable to use the more specific subproperties <ptr target="dcterms:temporal"/> and <ptr target="dcterms:spatial"/>.
@@ -18,12 +18,6 @@ SPDX-License-Identifier: CC0-1.0
                <SpecificResource source="(DCMI)" fragment="http://purl.org/dc/terms/coverage"/>
        </isDefinedBy>
        <range>
-               <Class>
-                       <unionOf>
-                               <resource name="dcterms:Location"/>
-                               <resource name="dcterms:PeriodOfTime"/>
-                               <resource name="dcterms:Jurisdiction"/>
-                       </unionOf>
-               </Class>
+               <resource name="dcterms:LocationPeriodOrJurisdiction"/>
        </range>
 </ObjectProperty>
index 805e9a7b73e577a75bace6dcb7cac6c1f1285629..8c44f13aef115759a3c677d55359196e8adc6e2c 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0"?>
 <!--
-SPDX-FileCopyrightText: 2024 Lady <https://www.ladys.computer/about/#lady>
+SPDX-FileCopyrightText: 2024, 2025 Lady <https://www.ladys.computer/about/#lady>
 SPDX-License-Identifier: CC0-1.0
 -->
 <!DOCTYPE ObjectProperty SYSTEM "../../DTD">
@@ -8,18 +8,13 @@ SPDX-License-Identifier: CC0-1.0
        <label xml:lang="en">in format</label>
        <comment xml:lang="en">
                <p>
-                       A <ref target="dcterms:FileFormat">File Format</ref>, <ref target="dcterms:PhysicalMedioum">Physical Medium</ref>, or <ref target="dcterms:SizeOrDuration">Size Or Duration</ref> of this thing.
+                       A <ref target="dcterms:MediaTypeOrExtent">Media Type Or Extent</ref> of this thing.
                </p>
        </comment>
        <isDefinedBy>
                <SpecificResource source="(DCMI)" fragment="http://purl.org/dc/terms/format"/>
        </isDefinedBy>
        <range>
-               <Class>
-                       <unionOf>
-                               <resource name="dcterms:MediaType"/>
-                               <resource name="dcterms:SizeOrDuration"/>
-                       </unionOf>
-               </Class>
+               <resource name="dcterms:MediaTypeOrExtent"/>
        </range>
 </ObjectProperty>
index c37f339ab80520dfedea887ed26a8d03954a90f2..9d12e2151ec5a5bac3201b27822ad4e8874ca267 100644 (file)
@@ -30,6 +30,7 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one
        <key name="Vocab:inverse-class" match="owl:Class|rdfs:Datatype" use="owl:complementOf/@rdf:resource"/>
        <key name="Vocab:inverse-property" match="owl:DatatypeProperty|owl:ObjectProperty" use="owl:inverseOf/@rdf:resource"/>
        <key name="Vocab:disjoint-class" match="owl:Class|rdfs:Datatype" use="owl:disjointWith/@rdf:resource"/>
+       <key name="Vocab:disjoint-class-union" match="owl:Class" use="owl:disjointUnionOf/rdf:Description/@rdf:about"/>
        <key name="Vocab:disjoint-property" match="owl:DatatypeProperty|owl:ObjectProperty" use="owl:propertyDisjointWith/@rdf:resource"/>
        <exslfunc:function name="Vocab:get-equivalents">
                <param name="resource-nodes"/>
@@ -97,11 +98,24 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one
                                                                        <with-param name="source" select="string(@rdf:about)"/>
                                                                </apply-templates>
                                                        </for-each>
+                                                       <if test="$relationship-names/Vocab:in-union">
+                                                               <for-each select="key(concat($relationship-key, '-union'), $source)">
+                                                                       <apply-templates select="*[local-name()=$relationship-names/Vocab:in-union/Vocab:local-name and namespace-uri()=$relationship-names/Vocab:in-union/Vocab:namespace]/*" mode="Vocab:format-get">
+                                                                               <with-param name="source" select="string(@rdf:about)"/>
+                                                                       </apply-templates>
+                                                               </for-each>
+                                                       </if>
                                                </for-each>
                                        </for-each>
                                </variable>
+                               <variable name="filter-fragment">
+                                       <copy-of select="$exclude"/>
+                                       <if test="not($include-self)">
+                                               <copy-of select="$equivalents"/>
+                                       </if>
+                               </variable>
                                <for-each select="exsl:node-set($unfiltered-result-fragment)/*">
-                                       <copy-of select="self::*[not(@rdf:about and ($exclude|preceding-sibling::*)/@rdf:about[string()=string(current()/@rdf:about)])]"/>
+                                       <copy-of select="self::*[not(@rdf:about and (exsl:node-set($filter-fragment)/*|preceding-sibling::*)/@rdf:about[string()=string(current()/@rdf:about)])]"/>
                                </for-each>
                        </if>
                </variable>
@@ -152,6 +166,16 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one
                                        </otherwise>
                                </choose>
                        </element>
+                       <if test="$relationship='disjoint' and $kind='class'">
+                               <element name="Vocab:in-union">
+                                       <element name="Vocab:local-name">
+                                               <text>disjointUnionOf</text>
+                                       </element>
+                                       <element name="Vocab:namespace">
+                                               <text>http://www.w3.org/2002/07/owl#</text>
+                                       </element>
+                               </element>
+                       </if>
                </variable>
                <exslfunc:result select="exsl:node-set($result-fragment)"/>
        </exslfunc:function>
index 381c556777e3e635b72d9d8239d469e26bbeda88..201e757186fe8d4e851f62ce8f4e5fb2203f2f14 100644 (file)
@@ -750,6 +750,24 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one
                                                </choose>
                                        </element>
                                </if>
+                               <if test="owl:disjointUnionOf">
+                                       <element name="div" namespace="&xhtml;">
+                                               <element name="dt" namespace="&xhtml;">
+                                                       &en;
+                                                       <text>Disjoint Union Of</text>
+                                               </element>
+                                               <for-each select="owl:disjointUnionOf">
+                                                       <element name="dd" namespace="&xhtml;">
+                                                               <for-each select="*">
+                                                                       <apply-templates select="." mode="Vocab:render-class"/>
+                                                                       <if test="position()&lt;last()">
+                                                                               <text>, </text>
+                                                                       </if>
+                                                               </for-each>
+                                                       </element>
+                                               </for-each>
+                                       </element>
+                               </if>
                                <if test="$inverses">
                                        <choose>
                                                <when test="$kind='class'">
@@ -884,32 +902,6 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one
                                                </for-each>
                                        </element>
                                </if>
-                               <if test="rdfs:domain">
-                                       <element name="div" namespace="&xhtml;">
-                                               <element name="dt" namespace="&xhtml;">
-                                                       &en;
-                                                       <text>Domain</text>
-                                               </element>
-                                               <for-each select="rdfs:domain">
-                                                       <element name="dd" namespace="&xhtml;">
-                                                               <apply-templates select="(@rdf:resource|*)[1]" mode="Vocab:render-class"/>
-                                                       </element>
-                                               </for-each>
-                                       </element>
-                               </if>
-                               <if test="rdfs:range">
-                                       <element name="div" namespace="&xhtml;">
-                                               <element name="dt" namespace="&xhtml;">
-                                                       &en;
-                                                       <text>Range</text>
-                                               </element>
-                                               <for-each select="rdfs:range">
-                                                       <element name="dd" namespace="&xhtml;">
-                                                               <apply-templates select="(@rdf:resource|*)[1]" mode="Vocab:render-class"/>
-                                                       </element>
-                                               </for-each>
-                                       </element>
-                               </if>
                                <if test="$disjoints">
                                        <choose>
                                                <when test="$kind='class'">
@@ -946,6 +938,32 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one
                                                </when>
                                        </choose>
                                </if>
+                               <if test="rdfs:domain">
+                                       <element name="div" namespace="&xhtml;">
+                                               <element name="dt" namespace="&xhtml;">
+                                                       &en;
+                                                       <text>Domain</text>
+                                               </element>
+                                               <for-each select="rdfs:domain">
+                                                       <element name="dd" namespace="&xhtml;">
+                                                               <apply-templates select="(@rdf:resource|*)[1]" mode="Vocab:render-class"/>
+                                                       </element>
+                                               </for-each>
+                                       </element>
+                               </if>
+                               <if test="rdfs:range">
+                                       <element name="div" namespace="&xhtml;">
+                                               <element name="dt" namespace="&xhtml;">
+                                                       &en;
+                                                       <text>Range</text>
+                                               </element>
+                                               <for-each select="rdfs:range">
+                                                       <element name="dd" namespace="&xhtml;">
+                                                               <apply-templates select="(@rdf:resource|*)[1]" mode="Vocab:render-class"/>
+                                                       </element>
+                                               </for-each>
+                                       </element>
+                               </if>
                                <if test="skos:inScheme">
                                        <element name="div" namespace="&xhtml;">
                                                <element name="dt" namespace="&xhtml;">
This page took 0.041695 seconds and 4 git commands to generate.