]> Lady’s Gitweb - Vocab/commitdiff
Add Olo
authorLady <redacted>
Mon, 24 Feb 2025 02:10:58 +0000 (21:10 -0500)
committerLady <redacted>
Mon, 24 Feb 2025 02:10:58 +0000 (21:10 -0500)
This defines Ordered Lists as effectively a more ergonomic kind of
Aggregation, which helps with bridging them and Ore‐ or P·C·D·M‐based
models. One caveat is that this requires Slots to have exactly one
item, and their item to be an object (i·e not a literal). In an
alternate universe, Slots could instead have had _either_ an item _or_
a value, but it’s simple enough to just make their item be an object
with that value instead.

13 files changed:
data/classes/olo¦OrderedList [new file with mode: 0644]
data/classes/olo¦Slot [new file with mode: 0644]
data/datatype_properties/olo¦index [new file with mode: 0644]
data/datatype_properties/olo¦length [new file with mode: 0644]
data/named_individuals/_OLO_ [new file with mode: 0644]
data/object_properties/olo¦item [new file with mode: 0644]
data/object_properties/olo¦next [new file with mode: 0644]
data/object_properties/olo¦ordered_list [new file with mode: 0644]
data/object_properties/olo¦previous [new file with mode: 0644]
data/object_properties/olo¦slot [new file with mode: 0644]
data/object_properties/ore¦proxyFor
data/ontologies/¦
transforms/infer.xslt

diff --git a/data/classes/olo¦OrderedList b/data/classes/olo¦OrderedList
new file mode 100644 (file)
index 0000000..95bd3e6
--- /dev/null
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<!--
+SPDX-FileCopyrightText: 2025 Lady <https://www.ladys.computer/about/#lady>
+SPDX-License-Identifier: CC0-1.0
+-->
+<!DOCTYPE Class SYSTEM "../../DTD">
+<Class>
+       <label xml:lang="en">Ordered List</label>
+       <comment xml:lang="en">
+               <p>
+                       An <ref target="ore:Aggregation">Aggregation</ref> which provides an ordered listing of <ref target="olo:Slot">Slots</ref>.
+               </p>
+               <p>
+                       Ordered Lists are required to have a <ref target="olo:length">length</ref>.
+               </p>
+       </comment>
+       <isDefinedBy>
+               <SpecificResource source="(OLO)" fragment="OrderedList"/>
+       </isDefinedBy>
+       <subClassOf>
+               <resource name="ore:Aggregation"/>
+       </subClassOf>
+       <subClassOf>
+               <Restriction>
+                       <onProperty>
+                               <resource name="olo:length"/>
+                       </onProperty>
+                       <cardinality>1</cardinality>
+               </Restriction>
+       </subClassOf>
+</Class>
diff --git a/data/classes/olo¦Slot b/data/classes/olo¦Slot
new file mode 100644 (file)
index 0000000..6d0b2ba
--- /dev/null
@@ -0,0 +1,55 @@
+<?xml version="1.0"?>
+<!--
+SPDX-FileCopyrightText: 2025 Lady <https://www.ladys.computer/about/#lady>
+SPDX-License-Identifier: CC0-1.0
+-->
+<!DOCTYPE Class SYSTEM "../../DTD">
+<Class>
+       <label xml:lang="en">Slot</label>
+       <comment xml:lang="en">
+               <p>
+                       A <ref target="ore:Proxy">Proxy</ref> representing a single item in an <ptr target="olo:OrderedList">Ordered List</ptr>.
+               </p>
+               <p>
+                       Slots are required to have an <ref target="olo:index">index</ref>, which should be less than or equal to its <ref target="olo:ordered_list">ordered list</ref>¦s <ref target="olo:length">length</ref>, and an <ref target="olo:item">item</ref>, providing the thing being proxied by the slot.
+               </p>
+               <p>
+                       A Slot is not actually required to have an ordered list by <ptr target="(OLO)"/>, and this caveat may prove useful for ordered slots in <ref target="ore:Aggregation">Aggregations</ref> of indeterminate length, or Aggregations which allow multiple slots with identical indices.
+                       In these cases, Slots will still never·the·less <ref target="ore:proxyIn">be a proxy in</ref> some Aggregation, which provides the context for interpreting their index.
+               </p>
+       </comment>
+       <isDefinedBy>
+               <SpecificResource source="(OLO)" fragment="Slot"/>
+       </isDefinedBy>
+       <subClassOf>
+               <resource name="ore:Proxy"/>
+       </subClassOf>
+       <subClassOf>
+               <Restriction>
+                       <onProperty>
+                               <resource name="olo:index"/>
+                       </onProperty>
+                       <cardinality>1</cardinality>
+               </Restriction>
+       </subClassOf>
+       <subClassOf>
+               <Restriction>
+                       <onProperty>
+                               <resource name="olo:item"/>
+                       </onProperty>
+                       <cardinality>1</cardinality>
+               </Restriction>
+       </subClassOf>
+       <subClassOf>
+               <Restriction>
+                       <onProperty>
+                               <resource name="olo:ordered_list"/>
+                       </onProperty>
+                       <maxCardinality>1</maxCardinality>
+               </Restriction>
+       </subClassOf>
+       <hasKey>
+               <resource name="olo:ordered_list"/>
+               <resource name="olo:index"/>
+       </hasKey>
+</Class>
diff --git a/data/datatype_properties/olo¦index b/data/datatype_properties/olo¦index
new file mode 100644 (file)
index 0000000..0930507
--- /dev/null
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<!--
+SPDX-FileCopyrightText: 2025 Lady <https://www.ladys.computer/about/#lady>
+SPDX-License-Identifier: CC0-1.0
+-->
+<!DOCTYPE DatatypeProperty SYSTEM "../../DTD">
+<DatatypeProperty functional="yes">
+       <label xml:lang="en">index</label>
+       <comment xml:lang="en">
+               <p>
+                       The index of this <ref target="olo:Slot">Slot</ref>.
+               </p>
+               <p>
+                       Indices start from 1.
+               </p>
+       </comment>
+       <isDefinedBy>
+               <SpecificResource source="(OLO)" fragment="index"/>
+       </isDefinedBy>
+       <domain>
+               <resource name="olo:Slot"/>
+       </domain>
+       <range>
+               <resource name="xsd:positiveInteger"/>
+       </range>
+</DatatypeProperty>
diff --git a/data/datatype_properties/olo¦length b/data/datatype_properties/olo¦length
new file mode 100644 (file)
index 0000000..468e4fc
--- /dev/null
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+<!--
+SPDX-FileCopyrightText: 2025 Lady <https://www.ladys.computer/about/#lady>
+SPDX-License-Identifier: CC0-1.0
+-->
+<!DOCTYPE DatatypeProperty SYSTEM "../../DTD">
+<DatatypeProperty functional="yes">
+       <label xml:lang="en">length</label>
+       <comment xml:lang="en">
+               <p>
+                       The length of this <ref target="olo:OrderedList">Ordered List</ref>.
+               </p>
+       </comment>
+       <isDefinedBy>
+               <SpecificResource source="(OLO)" fragment="length"/>
+       </isDefinedBy>
+       <domain>
+               <resource name="olo:OrderedList"/>
+       </domain>
+       <range>
+               <resource name="xsd:nonNegativeInteger"/>
+       </range>
+</DatatypeProperty>
diff --git a/data/named_individuals/_OLO_ b/data/named_individuals/_OLO_
new file mode 100644 (file)
index 0000000..9dde828
--- /dev/null
@@ -0,0 +1,25 @@
+<?xml version="1.0"?>
+<!--
+SPDX-FileCopyrightText: 2025 Lady <https://www.ladys.computer/about/#lady>
+SPDX-License-Identifier: CC0-1.0
+-->
+<!DOCTYPE NamedIndividual SYSTEM "../../DTD">
+<NamedIndividual name="http://purl.org/ontology/olo/core">
+       <label xml:lang="en">Olo</label>
+       <comment xml:lang="en">
+               <p>
+                       The Ordered List Ontology (Olo) provides, as its name implies, a small number of terms for use describing ordered lists.
+                       This help to rectify the faults of other list‐specification mechanisms in consort with Owl; <ref target="rdf:List">Lists</ref> are hard to reason about and <ref target="rdfs:Container">Containers</ref> require an implicit understanding of <resource name="rdfs:ContainerMembershipProperty"/> which Owl does not provide.
+               </p>
+               <p>
+                       This ontology interprets <ref target="olo:OrderedList">Ordered Lists</ref> as <ref target="ore:Aggregation">Aggregations</ref>, and their <ref target="olo:Slot">Slots</ref> as a kind of <ref target="ore:Proxy">Proxy</ref>.
+                       This makes them an ergonomic extension to the mechanisms specified in <ptr target="(OAI-ORE)"/>.
+               </p>
+       </comment>
+       <type>
+               <resource name="dcterms:BibliographicResource"/>
+       </type>
+       <type>
+               <resource name="doap:Specification"/>
+       </type>
+</NamedIndividual>
diff --git a/data/object_properties/olo¦item b/data/object_properties/olo¦item
new file mode 100644 (file)
index 0000000..ab3c4d7
--- /dev/null
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+<!--
+SPDX-FileCopyrightText: 2025 Lady <https://www.ladys.computer/about/#lady>
+SPDX-License-Identifier: CC0-1.0
+-->
+<!DOCTYPE ObjectProperty SYSTEM "../../DTD">
+<ObjectProperty functional="yes" irreflexive="yes">
+       <label xml:lang="en">has item</label>
+       <comment xml:lang="en">
+               <p>
+                       The thing being proxied by this <ref target="olo:Slot">Slot</ref>.
+               </p>
+       </comment>
+       <isDefinedBy>
+               <SpecificResource source="(OLO)" fragment="item"/>
+       </isDefinedBy>
+       <subPropertyOf>
+               <resource name="ore:proxyFor"/>
+       </subPropertyOf>
+       <domain>
+               <resource name="olo:Slot"/>
+       </domain>
+</ObjectProperty>
diff --git a/data/object_properties/olo¦next b/data/object_properties/olo¦next
new file mode 100644 (file)
index 0000000..56a08b1
--- /dev/null
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<!--
+SPDX-FileCopyrightText: 2025 Lady <https://www.ladys.computer/about/#lady>
+SPDX-License-Identifier: CC0-1.0
+-->
+<!DOCTYPE ObjectProperty SYSTEM "../../DTD">
+<ObjectProperty functional="yes" inverseFunctional="yes">
+       <label xml:lang="en">has next</label>
+       <comment xml:lang="en">
+               <p>
+                       The <ref target="olo:Slot">Slot</ref> which immediately follows this Slot (by index) in its <ref target="olo:OrderedList">Ordered List</ref>.
+               </p>
+       </comment>
+       <isDefinedBy>
+               <SpecificResource source="(OLO)" fragment="next"/>
+       </isDefinedBy>
+       <subPropertyOf>
+               <resource name="rel:next"/>
+       </subPropertyOf>
+       <domain>
+               <resource name="olo:Slot"/>
+       </domain>
+       <range>
+               <resource name="olo:Slot"/>
+       </range>
+</ObjectProperty>
diff --git a/data/object_properties/olo¦ordered_list b/data/object_properties/olo¦ordered_list
new file mode 100644 (file)
index 0000000..ad0cad5
--- /dev/null
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<!--
+SPDX-FileCopyrightText: 2025 Lady <https://www.ladys.computer/about/#lady>
+SPDX-License-Identifier: CC0-1.0
+-->
+<!DOCTYPE ObjectProperty SYSTEM "../../DTD">
+<ObjectProperty functional="yes">
+       <label xml:lang="en">has ordered list</label>
+       <comment xml:lang="en">
+               <p>
+                       The <ref target="olo:OrderedList">Ordered List</ref> of this <ref target="olo:Slot">Slot</ref>.
+               </p>
+       </comment>
+       <isDefinedBy>
+               <SpecificResource source="(OLO)" fragment="ordered_list"/>
+       </isDefinedBy>
+       <subPropertyOf>
+               <resource name="ore:proxyIn"/>
+       </subPropertyOf>
+       <inverseOf>
+               <resource name="olo:slot"/>
+       </inverseOf>
+       <domain>
+               <resource name="olo:Slot"/>
+       </domain>
+</ObjectProperty>
diff --git a/data/object_properties/olo¦previous b/data/object_properties/olo¦previous
new file mode 100644 (file)
index 0000000..4d9b389
--- /dev/null
@@ -0,0 +1,29 @@
+<?xml version="1.0"?>
+<!--
+SPDX-FileCopyrightText: 2025 Lady <https://www.ladys.computer/about/#lady>
+SPDX-License-Identifier: CC0-1.0
+-->
+<!DOCTYPE ObjectProperty SYSTEM "../../DTD">
+<ObjectProperty functional="yes" inverseFunctional="yes">
+       <label xml:lang="en">has previous</label>
+       <comment xml:lang="en">
+               <p>
+                       The <ref target="olo:Slot">Slot</ref> which immediately precedes this Slot (by index) in its <ref target="olo:OrderedList">Ordered List</ref>.
+               </p>
+       </comment>
+       <isDefinedBy>
+               <SpecificResource source="(OLO)" fragment="previous"/>
+       </isDefinedBy>
+       <subPropertyOf>
+               <resource name="rel:previous"/>
+       </subPropertyOf>
+       <inverseOf>
+               <resource name="olo:next"/>
+       </inverseOf>
+       <domain>
+               <resource name="olo:Slot"/>
+       </domain>
+       <range>
+               <resource name="olo:Slot"/>
+       </range>
+</ObjectProperty>
diff --git a/data/object_properties/olo¦slot b/data/object_properties/olo¦slot
new file mode 100644 (file)
index 0000000..6beb79b
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0"?>
+<!--
+SPDX-FileCopyrightText: 2025 Lady <https://www.ladys.computer/about/#lady>
+SPDX-License-Identifier: CC0-1.0
+-->
+<!DOCTYPE ObjectProperty SYSTEM "../../DTD">
+<ObjectProperty inverseFunctional="yes">
+       <label xml:lang="en">has slot</label>
+       <comment xml:lang="en">
+               <p>
+                       A <ref target="olo:Slot">Slot</ref> in this <ref target="olo:OrderedList">Ordered List</ref>.
+               </p>
+       </comment>
+       <isDefinedBy>
+               <SpecificResource source="(OLO)" fragment="slot"/>
+       </isDefinedBy>
+       <subPropertyOf>
+               <ObjectProperty>
+                       <inverseOf>
+                               <resource name="ore:proxyIn"/>
+                       </inverseOf>
+               </ObjectProperty>
+       </subPropertyOf>
+       <domain>
+               <resource name="olo:Slot"/>
+       </domain>
+</ObjectProperty>
index c2bd8ed76e49da226ad1c894347963053268ba04..2ed3a4d273069dd17eed9fcf50caca8c1fd32c2d 100644 (file)
@@ -4,7 +4,7 @@ SPDX-FileCopyrightText: 2025 Lady <https://www.ladys.computer/about/#lady>
 SPDX-License-Identifier: CC0-1.0
 -->
 <!DOCTYPE ObjectProperty SYSTEM "../../DTD">
-<ObjectProperty functional="yes">
+<ObjectProperty functional="yes" irreflexive="yes">
        <label xml:lang="en">proxy for</label>
        <comment xml:lang="en">
                <p>
index cdc6aa13db8d94747bc365ad1ad74610dc12b434..680b0e9deaf293da51fb8a6b8de340f4599cb2f5 100644 (file)
@@ -77,6 +77,10 @@ SPDX-License-Identifier: CC0-1.0
                <prefix>ladys</prefix>
                <namespace>https://vocab.ladys.computer/terms/</namespace>
        </declare>
+       <declare>
+               <prefix>olo</prefix>
+               <namespace>http://purl.org/ontology/olo/core#</namespace>
+       </declare>
        <declare>
                <prefix>ore</prefix>
                <namespace>http://www.openarchives.org/ore/terms/</namespace>
index 056e57a7d8b0b4d8ec52dfc1da5c5f0787f1bcb7..c37f339ab80520dfedea887ed26a8d03954a90f2 100644 (file)
@@ -92,7 +92,7 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one
                                                                        <with-param name="source" select="$source"/>
                                                                </apply-templates>
                                                        </for-each>
-                                                       <for-each select="key($relationship-key, $source)">
+                                                       <for-each select="key($relationship-key, $source)[@rdf:about]">
                                                                <apply-templates select="." mode="Vocab:format-get">
                                                                        <with-param name="source" select="string(@rdf:about)"/>
                                                                </apply-templates>
@@ -175,7 +175,7 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one
                                                                <with-param name="source" select="$source"/>
                                                        </apply-templates>
                                                </for-each>
-                                               <for-each select="key(concat('Vocab:equivalent-', $kind), $source)">
+                                               <for-each select="key(concat('Vocab:equivalent-', $kind), $source)[@rdf:about]">
                                                        <apply-templates select="." mode="Vocab:format-get">
                                                                <with-param name="source" select="string(@rdf:about)"/>
                                                        </apply-templates>
@@ -276,6 +276,7 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one
                                </element>
                        </when>
                        <otherwise>
+                               <!-- assume this is a property (like `owl:inverseOf´), not an instance (like `owl:ObjectProperty´); in this case, the members are what is desired -->
                                <for-each select="*">
                                        <copy>
                                                <copy-of select="@*|node()"/>
This page took 0.055305 seconds and 4 git commands to generate.