/build
/public
.grass
+%*
--- /dev/null
+# SPDX-FileCopyrightText: 2024 Lady <https://www.ladys.computer/about/#lady>
+# SPDX-License-Identifier: CC0-1.0
+
+-s .DS_Store
+-s #*
+-s %*
-Subproject commit 5c2f4a2d2c9913196c6092f0f72a8c4ff6e76752
+Subproject commit ca7be60f15de191e25f8cc1890e13dc499576ec4
<!ELEMENT code (#PCDATA)>
<!ELEMENT em (#PCDATA)>
<!ELEMENT strong (#PCDATA)>
+<!ELEMENT var (#PCDATA)>
<!-- Notes -->
<!ELEMENT note (%blocks;)>
>
<!-- Skos -->
+<!ELEMENT broader (resource)>
<!ELEMENT inScheme (resource)>
+<!ELEMENT narrower (resource)>
<!-- Shacl -->
<!ELEMENT declare (prefix,namespace)>
<!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
name CDATA #IMPLIED
status (plumbing|unstable|testing|stable|archaic) #IMPLIED
>
-<!ELEMENT NamedIndividual (%annotations;,type*,sameAs*,differentFrom*,inScheme*)>
+<!ELEMENT NamedIndividual (%annotations;,type*,sameAs*,differentFrom*,inScheme*,broader*,narrower*)>
<!ATTLIST NamedIndividual
name CDATA #IMPLIED
status (plumbing|unstable|testing|stable|archaic) #IMPLIED
YSEME := .👥📤
YSEMEOPTS := $(MAKEOPTS) BUILDTARGET='$(BUILDTARGET)' DESTDIR='$(DESTDIR)' SERVERPATH='lady/vocab'
-xmls := $(wildcard $(DATADIR)/*/*)
+PORT := 3000
+
+xmls := $(wildcard $(DATADIR)/*/[0-9A-Za-z_]*) $(wildcard $(DATADIR)/*/¦*)
# ━ § Call out to ⛩📰 书社 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
.IGNORE : $(foreach xml,$(xmls),lint][$(xml)) ;
-.PHONY : FORCE build clean dry-sync gone lint $(foreach xml,$(xmls),lint][$(xml)) list prebuild sync uninstall ;
+.PHONY : FORCE build clean dry-sync gone lint $(foreach xml,$(xmls),lint][$(xml)) list prebuild serve sync uninstall ;
gone : clean uninstall ;
+serve :
+ @printf '%b\n' '\0033[1m\n\0033[7m NOTE: \0033[27m Visit <http://localhost:$(PORT)/> to view the site.\n\0033[7m \0033[27m \n\0033[7m \0033[27m Press control + C to exit.\n\0033[22m' >&2
+ @ruby ./scripts/serve.rb $(PORT) >&2
+
uninstall :
@for publicfile in $(patsubst %,"%",$(wildcard $(DESTDIR)/*)); do if $(GIT) check-ignore -q "$$publicfile"; then $(RM) -rf "$$publicfile"; fi; done
--- /dev/null
+<?xml version="1.0"?>
+<!--
+SPDX-FileCopyrightText: 2025 Lady <https://www.ladys.computer/about/#lady>
+SPDX-License-Identifier: CC0-1.0
+-->
+<!DOCTYPE AnnotationProperty SYSTEM "../../DTD">
+<AnnotationProperty>
+ <label xml:lang="en">similar to</label>
+ <comment xml:lang="en">
+ <p>
+ Some·thing which this <ref target="ore:Aggregation">Aggregation</ref> is an expression of or “broadly equivalent” to.
+ </p>
+ <p>
+ The intended usage of this property is to point from Aggregations, which are specifically sets of <ref target="ore:AggregatedResource">Aggregated Resources</ref>, to other things which might be interchangeable in some contexts, but which are modelled differently.
+ For example, a book might be modelled as an Aggregation of chapters, as an Aggregation of pages, or as an atomic unit; this property could be used to link between these different representations.
+ </p>
+ </comment>
+ <isDefinedBy>
+ <SpecificResource source="(OAI-ORE)" fragment="ore-similarTo"/>
+ </isDefinedBy>
+ <subPropertyOf>
+ <resource name="rdfs:seeAlso"/>
+ </subPropertyOf>
+ <domain>
+ <resource name="ore:Aggregation"/>
+ </domain>
+</AnnotationProperty>
<?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">
</allValuesFrom>
</Restriction>
</subClassOf>
+ <subClassOf>
+ <Restriction>
+ <onProperty>
+ <resource name="anno:refinedBy"/>
+ </onProperty>
+ <allValuesFrom>
+ <Class>
+ <complementOf>
+ <resource name="anno:State"/>
+ </complementOf>
+ </Class>
+ </allValuesFrom>
+ </Restriction>
+ </subClassOf>
</Class>
<?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">
<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>
<?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">
<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>
<subClassOf>
<resource name="dcterms:RightsStatement"/>
</subClassOf>
+ <subClassOf>
+ <resource name="foaf:Document"/>
+ </subClassOf>
</Class>
<?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">
<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>
<?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">
<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>
<?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">
<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>
<equivalentClass>
<resource name="dcterms:Agent"/>
</equivalentClass>
- <disjointWith>
- <resource name="foaf:Document"/>
- </disjointWith>
- <disjointWith>
- <resource name="foaf:Project"/>
- </disjointWith>
</Class>
<disjointWith>
<resource name="foaf:Agent"/>
</disjointWith>
- <disjointWith>
- <resource name="foaf:Project"/>
- </disjointWith>
</Class>
--- /dev/null
+<?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="OrderedAggregation">Ordered Aggregation</ref> which has a definite <ref target="olo:length">length</ref>.
+ </p>
+ </comment>
+ <isDefinedBy>
+ <SpecificResource source="(OLO)" fragment="OrderedList"/>
+ </isDefinedBy>
+ <subClassOf>
+ <resource name="OrderedAggregation"/>
+ </subClassOf>
+ <subClassOf>
+ <Restriction>
+ <onProperty>
+ <resource name="hasSlot"/>
+ </onProperty>
+ <allValuesFrom>
+ <resource name="olo:Slot"/>
+ </allValuesFrom>
+ </Restriction>
+ </subClassOf>
+ <subClassOf>
+ <Restriction>
+ <onProperty>
+ <resource name="olo:length"/>
+ </onProperty>
+ <cardinality>1</cardinality>
+ </Restriction>
+ </subClassOf>
+</Class>
--- /dev/null
+<?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 associated with a numeric <ref target="olo:index">index</ref>.
+ </p>
+ <p>
+ The <ref target="olo:item">item</ref> of a Slot provides the thing being it proxies.
+ </p>
+ <p>
+ The index of a Slot should be less than or equal to the <ref target="olo:length">length</ref> of its <ref target="olo:ordered_list">ordered list</ref>.
+ </p>
+ </comment>
+ <isDefinedBy>
+ <SpecificResource source="(OLO)" fragment="Slot"/>
+ </isDefinedBy>
+ <subClassOf>
+ <resource name="Slot"/>
+ </subClassOf>
+ <subClassOf>
+ <Restriction>
+ <onProperty>
+ <resource name="olo:ordered_list"/>
+ </onProperty>
+ <cardinality>1</cardinality>
+ </Restriction>
+ </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>
+</Class>
--- /dev/null
+<?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">Aggregated Resource</label>
+ <comment xml:lang="en">
+ <p>
+ Some·thing which is <ref target="ore:isAggregatedBy">aggregated by</ref> some <ref target="ore:Aggregation">Aggregation</ref>.
+ </p>
+ <p>
+ This class, on its own, does not imply much of anything, and there isn¦t much need to use it directly.
+ </p>
+ </comment>
+ <isDefinedBy>
+ <SpecificResource source="(OAI-ORE)" fragment="aggr_res"/>
+ </isDefinedBy>
+ <subClassOf>
+ <Restriction>
+ <onProperty>
+ <resource name="ore:isAggregatedBy"/>
+ </onProperty>
+ <minCardinality>1</minCardinality>
+ </Restriction>
+ </subClassOf>
+</Class>
--- /dev/null
+<?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">Aggregation</label>
+ <comment xml:lang="en">
+ <p>
+ A <ref target="dcmitype:Collection">Collection</ref> of (presumably related) <ref target="ore:AggregatedResource">Aggregated Resources</ref>, grouped together such that the set can be treated as a single thing.
+ </p>
+ </comment>
+ <isDefinedBy>
+ <SpecificResource source="(OAI-ORE)" fragment="aggr"/>
+ </isDefinedBy>
+ <subClassOf>
+ <resource name="dcmitype:Collection"/>
+ </subClassOf>
+</Class>
--- /dev/null
+<?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">Proxy</label>
+ <comment xml:lang="en">
+ <p>
+ A <ref target="Proxy">Proxy</ref> of some <ref target="ore:AggregatedResource">Aggregated Resource</ref> as it exists within a specific <ref target="ore:Aggregation">Aggregation</ref>.
+ </p>
+ <p>
+ State·ments about Aggregated Resources which are specific to a particular Aggregation need to be made on a Proxy, as such state·ments are not “generally true”.
+ It is recommended that Proxies not be Aggregated Resources themselves, but this isn¦t formally required.
+ </p>
+ <p>
+ There is no restriction that an Aggregated Resource only have one Proxy for a given Aggregation.
+ The restrictions on <ptr target="ore:proxyFor"/> and <ptr target="ore:proxyIn"/> are not formally expressed in <ptr target="(OAI-ORE)"/>, but are in <ptr target="(PCDM)"/>.
+ </p>
+ <p>
+ Horizontal (previous~next) linking for Proxies is described by <ptr target="(PCDM)"/>, with the quirk of using the spelling <resource name="rel:prev"/> for <ptr target="rel:previous" type="property"/>.
+ This ontology only recognizes the spelling <resource name="rel:previous"/>, which is formally defined by <ptr target="(RFC5005)"/>.
+ </p>
+ </comment>
+ <isDefinedBy>
+ <SpecificResource source="(OAI-ORE)" fragment="proxy"/>
+ </isDefinedBy>
+ <isDefinedBy>
+ <SpecificResource source="(PCDM)" fragment="oreproxy"/>
+ </isDefinedBy>
+ <subClassOf>
+ <resource name="Proxy"/>
+ </subClassOf>
+ <subClassOf>
+ <Restriction>
+ <onProperty>
+ <resource name="ore:proxyFor"/>
+ </onProperty>
+ <cardinality>1</cardinality>
+ </Restriction>
+ </subClassOf>
+ <subClassOf>
+ <Restriction>
+ <onProperty>
+ <resource name="ore:proxyIn"/>
+ </onProperty>
+ <cardinality>1</cardinality>
+ </Restriction>
+ </subClassOf>
+ <subClassOf>
+ <Restriction>
+ <onProperty>
+ <resource name="rel:previous"/>
+ </onProperty>
+ <maxCardinality>1</maxCardinality>
+ </Restriction>
+ </subClassOf>
+ <subClassOf>
+ <Restriction>
+ <onProperty>
+ <resource name="rel:previous"/>
+ </onProperty>
+ <allValuesFrom>
+ <resource name="ore:Proxy"/>
+ </allValuesFrom>
+ </Restriction>
+ </subClassOf>
+ <subClassOf>
+ <Restriction>
+ <onProperty>
+ <resource name="rel:next"/>
+ </onProperty>
+ <maxCardinality>1</maxCardinality>
+ </Restriction>
+ </subClassOf>
+ <subClassOf>
+ <Restriction>
+ <onProperty>
+ <resource name="rel:next"/>
+ </onProperty>
+ <allValuesFrom>
+ <resource name="ore:Proxy"/>
+ </allValuesFrom>
+ </Restriction>
+ </subClassOf>
+</Class>
--- /dev/null
+<?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">Nothing</label>
+ <comment xml:lang="en">
+ <p>
+ No thing.
+ </p>
+ </comment>
+ <isDefinedBy>
+ <SpecificResource source="(OWL2)" fragment="a_Nothing"/>
+ </isDefinedBy>
+</Class>
--- /dev/null
+<?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">Thing</label>
+ <comment xml:lang="en">
+ <p>
+ Any thing.
+ </p>
+ </comment>
+ <isDefinedBy>
+ <SpecificResource source="(OWL2)" fragment="a_Thing"/>
+ </isDefinedBy>
+ <hasKey>
+ <resource name="in"/>
+ <resource name="n"/>
+ </hasKey>
+</Class>
--- /dev/null
+<?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">Extracted Text</label>
+ <comment xml:lang="en">
+ <p>
+ A <ref target="pcdm:File">File</ref> which is a textual representation appropriate for fulltext indexing.
+ </p>
+ </comment>
+ <isDefinedBy>
+ <SpecificResource source="(PCDM)"/>
+ </isDefinedBy>
+ <subClassOf>
+ <resource name="pcdm:File"/>
+ </subClassOf>
+</Class>
--- /dev/null
+<?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">Intermediate File</label>
+ <comment xml:lang="en">
+ <p>
+ A <ref target="pcdm:File">File</ref> which is high‐quality and suitable for use in creating derivatives or for other additional processing.
+ </p>
+ </comment>
+ <isDefinedBy>
+ <SpecificResource source="(PCDM)"/>
+ </isDefinedBy>
+ <subClassOf>
+ <resource name="pcdm:File"/>
+ </subClassOf>
+</Class>
--- /dev/null
+<?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">Original File</label>
+ <comment xml:lang="en">
+ <p>
+ A <ref target="pcdm:File">File</ref> which is in its original creation format.
+ </p>
+ </comment>
+ <isDefinedBy>
+ <SpecificResource source="(PCDM)"/>
+ </isDefinedBy>
+ <subClassOf>
+ <resource name="pcdm:File"/>
+ </subClassOf>
+</Class>
--- /dev/null
+<?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">Preservation File</label>
+ <comment xml:lang="en">
+ <p>
+ A <ref target="pcdm:File">File</ref> which is appropriate for long‐term preservation.
+ </p>
+ </comment>
+ <isDefinedBy>
+ <SpecificResource source="(PCDM)"/>
+ </isDefinedBy>
+ <subClassOf>
+ <resource name="pcdm:File"/>
+ </subClassOf>
+</Class>
--- /dev/null
+<?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">Service File</label>
+ <comment xml:lang="en">
+ <p>
+ A <ref target="pcdm:File">File</ref> which is of reasonable quality for end‐users.
+ </p>
+ </comment>
+ <isDefinedBy>
+ <SpecificResource source="(PCDM)"/>
+ </isDefinedBy>
+ <subClassOf>
+ <resource name="pcdm:File"/>
+ </subClassOf>
+</Class>
--- /dev/null
+<?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">Thumbnail Image</label>
+ <comment xml:lang="en">
+ <p>
+ A <ref target="pcdm:File">File</ref> which is a low‐quality, thumbnail representation of some thing, appropriate for use as an icon.
+ </p>
+ </comment>
+ <isDefinedBy>
+ <SpecificResource source="(PCDM)"/>
+ </isDefinedBy>
+ <subClassOf>
+ <resource name="pcdm:File"/>
+ </subClassOf>
+ <subClassOf>
+ <resource name="foaf:Image"/>
+ </subClassOf>
+</Class>
--- /dev/null
+<?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">Transcript</label>
+ <comment xml:lang="en">
+ <p>
+ A <ref target="pcdm:File">File</ref> which is a textual representation appropriate for presentation to users.
+ </p>
+ </comment>
+ <isDefinedBy>
+ <SpecificResource source="(PCDM)"/>
+ </isDefinedBy>
+ <subClassOf>
+ <resource name="pcdm:File"/>
+ </subClassOf>
+</Class>
--- /dev/null
+<?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">File Set</label>
+ <comment xml:lang="en">
+ <p>
+ An <ref target="pcdm:Object">Object</ref> representing a single conceptual entity which might have multiple <ref target="pcdm:File">File</ref> representations.
+ </p>
+ <p>
+ File Sets describe the conceptual entity that Files are concrete manifestations of.
+ When that entity has multiple manifestations, it may <ref target="pcdm:hasFile">have</ref> multiple Files.
+ For example, a page in a book may exist in both Tiff and P·N·G format.
+ These are separate files, but they represent the same conceptual entity, the page.
+ </p>
+ <p>
+ File Sets do not <ref target="pcdm:hasMember">have members</ref>.
+ Typically, they are <ref target="pcdm:isMemberOf">members of</ref> <ref target="pcdm:Work">Works</ref>.
+ </p>
+ </comment>
+ <isDefinedBy>
+ <SpecificResource source="(PCDM)"/>
+ </isDefinedBy>
+ <subClassOf>
+ <resource name="pcdm:Object"/>
+ </subClassOf>
+ <subClassOf>
+ <Restriction>
+ <onProperty>
+ <resource name="pcdm:hasMember"/>
+ </onProperty>
+ <maxCardinality>0</maxCardinality>
+ </Restriction>
+ </subClassOf>
+ <disjointWith>
+ <resource name="pcdmworks:Work"/>
+ </disjointWith>
+</Class>
--- /dev/null
+<?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">Work</label>
+ <comment xml:lang="en">
+ <p>
+ An <ref target="pcdm:Object">Object</ref> representing an abstract intellectual entity.
+ </p>
+ <p>
+ Works differ from Objects more generally in that they do not themselves <ref target="pcdm:hasFile">have files</ref>.
+ Instead, they <ref target="pcdm:hasMember">have member</ref> <ref target="pcdmworks:FileSet">File Sets</ref> which contain their files.
+ </p>
+ </comment>
+ <isDefinedBy>
+ <SpecificResource source="(PCDM)"/>
+ </isDefinedBy>
+ <subClassOf>
+ <resource name="pcdm:Object"/>
+ </subClassOf>
+ <subClassOf>
+ <Restriction>
+ <onProperty>
+ <resource name="pcdm:hasFile"/>
+ </onProperty>
+ <maxCardinality>0</maxCardinality>
+ </Restriction>
+ </subClassOf>
+</Class>
--- /dev/null
+<?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">Collection</label>
+ <comment xml:lang="en">
+ <p>
+ An <ref target="ore:Aggregation">Aggregation</ref> which can <ref target="pcdm:hasMember">have member</ref> <ref target="pcdm:Object">Objects</ref> or other Collections.
+ </p>
+ <p>
+ <ptr target="(PCDM)"/> defines semantics for <ptr target="rel:first" type="property"/> and <ptr target="rel:last" type="property"/> (to point to a <ref target="ore:Proxy">Proxy</ref> of the first member), but this is confused:
+ These terms are meant to be used for horizontal linking between aggregation members, not vertical linking between aggregations and the things they aggregate.
+ Consequently, the usage of these properties with Collections is not recommended by this ontology.
+ </p>
+ </comment>
+ <isDefinedBy>
+ <SpecificResource source="(PCDM)" fragment="pcdmcollection"/>
+ </isDefinedBy>
+</Class>
--- /dev/null
+<?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">File</label>
+ <comment xml:lang="en">
+ <p>
+ A sequence of binary data, as contained within a specific <ref target="pcdm:Object">Object</ref>.
+ </p>
+ <p>
+ The <ref target="dcterms:extent">extent</ref> is meant to be interpreted as a file size in bytes (but the exact representation is left fuzzy), and the <ref target="dc11:format">format</ref> is meant to be interpreted as an internet media type.
+ For the latter, the more specific property <ptr target="awol:type"/> may be used.
+ </p>
+ </comment>
+ <isDefinedBy>
+ <SpecificResource source="(PCDM)" fragment="pcdmfile"/>
+ </isDefinedBy>
+ <subClassOf>
+ <resource name="siocactions:DigitalArtifact"/>
+ </subClassOf>
+ <subClassOf>
+ <Restriction>
+ <onProperty>
+ <resource name="pcdm:isFileOf"/>
+ </onProperty>
+ <cardinality>1</cardinality>
+ </Restriction>
+ </subClassOf>
+ <subClassOf>
+ <Restriction>
+ <onProperty>
+ <resource name="dc11:format"/>
+ </onProperty>
+ <maxCardinality>1</maxCardinality>
+ </Restriction>
+ </subClassOf>
+ <subClassOf>
+ <Restriction>
+ <onProperty>
+ <resource name="dc11:format"/>
+ </onProperty>
+ <allValuesFrom>
+ <resource name="xsd:string"/>
+ </allValuesFrom>
+ </Restriction>
+ </subClassOf>
+ <subClassOf>
+ <Restriction>
+ <onProperty>
+ <resource name="dcterms:extent"/>
+ </onProperty>
+ <maxCardinality>1</maxCardinality>
+ </Restriction>
+ </subClassOf>
+ <subClassOf>
+ <Restriction>
+ <onProperty>
+ <resource name="dcterms:created"/>
+ </onProperty>
+ <maxCardinality>1</maxCardinality>
+ </Restriction>
+ </subClassOf>
+ <subClassOf>
+ <Restriction>
+ <onProperty>
+ <resource name="dcterms:modified"/>
+ </onProperty>
+ <maxCardinality>1</maxCardinality>
+ </Restriction>
+ </subClassOf>
+ <disjointWith>
+ <resource name="pcdm:Collection"/>
+ </disjointWith>
+ <disjointWith>
+ <resource name="pcdm:Object"/>
+ </disjointWith>
+</Class>
--- /dev/null
+<?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">Object</label>
+ <comment xml:lang="en">
+ <p>
+ An <ref target="ore:Aggregation">Aggregation</ref> representing an intellectual entity of some kind.
+ </p>
+ <p>
+ Objects may <ref target="pcdm:hasMember">have member</ref> Objects (but not Collections) and may also <ref target="pcdm:hasFile">have</ref> <ref target="pcdm:File">Files</ref>.
+ The <ptr target="pcdmworks:Work"/> and <ptr target="pcdmworks:FileSet"/> subclasses provide a more sophisticated modelling.
+ </p>
+ <p>
+ <ptr target="(PCDM)"/> defines semantics for <ptr target="rel:first" type="property"/> and <ptr target="rel:last" type="property"/> (to point to a <ref target="ore:Proxy">Proxy</ref> of the first member), but this is confused:
+ These terms are meant to be used for horizontal linking between aggregation members, not vertical linking between aggregations and the things they aggregate.
+ Consequently, the usage of these properties with Objects is not recommended by this ontology.
+ </p>
+ </comment>
+ <isDefinedBy>
+ <SpecificResource source="(PCDM)" fragment="pcdmobject"/>
+ </isDefinedBy>
+ <subClassOf>
+ <Restriction>
+ <onProperty>
+ <resource name="pcdm:hasMember"/>
+ </onProperty>
+ <allValuesFrom>
+ <resource name="pcdm:Object"/>
+ </allValuesFrom>
+ </Restriction>
+ </subClassOf>
+ <disjointWith>
+ <resource name="pcdm:Collection"/>
+ </disjointWith>
+</Class>
<?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">
<isDefinedBy>
<SpecificResource source="(SKOS)" fragment="Label"/>
</isDefinedBy>
+ <subClassOf>
+ <resource name="awol:PlainText"/>
+ </subClassOf>
<subClassOf>
<Restriction>
<onProperty>
<?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">
<isDefinedBy>
<SpecificResource source="(SKOS)" fragment="Collection"/>
</isDefinedBy>
+ <subClassOf>
+ <resource name="dcmitype:Collection"/>
+ </subClassOf>
<disjointWith>
<resource name="skos:Concept"/>
</disjointWith>
--- /dev/null
+<?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 status="testing">
+ <label xml:lang="en">Ordered Aggregation</label>
+ <comment xml:lang="en">
+ <p>
+ An <ref target="ore:Aggregation">Aggregation</ref> which may <ref target="hasSlot">have slots</ref> that are orderable by positive integral <ref target="n">local notation</ref>.
+ </p>
+ </comment>
+ <subClassOf>
+ <resource name="ore:Aggregation"/>
+ </subClassOf>
+ <subClassOf>
+ <Restriction>
+ <onProperty>
+ <resource name="hasSlot"/>
+ </onProperty>
+ <allValuesFrom>
+ <Restriction>
+ <onProperty>
+ <resource name="n"/>
+ </onProperty>
+ <allValuesFrom>
+ <resource name="xsd:positiveInteger"/>
+ </allValuesFrom>
+ </Restriction>
+ </allValuesFrom>
+ </Restriction>
+ </subClassOf>
+ <disjointWith>
+ <Class>
+ <intersectionOf>
+ <resource name="Branch"/>
+ <resource name="BNSComponent"/>
+ </intersectionOf>
+ </Class>
+ </disjointWith>
+</Class>
--- /dev/null
+<?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 status="testing">
+ <label xml:lang="en">Proxy</label>
+ <comment xml:lang="en">
+ <p>
+ A <ref target="anno:ResourceSelection">Resource Selection</ref> which selects its <ref target="anno:hasSource">source</ref> in its entirety.
+ </p>
+ <p>
+ Proxies may be used to make state·ments which are only contextually true; the Proxy provides the appropriate context for interpreting the statement.
+ For example, in <ptr target="(OAI-ORE)"/>, <ref target="ore:Proxy">Proxies</ref> are used to make state·ments which are only true in the context of a particular <ref target="ore:Aggregation">Aggregation</ref>.
+ </p>
+ </comment>
+ <subClassOf>
+ <resource name="anno:ResourceSelection"/>
+ </subClassOf>
+ <subClassOf>
+ <Restriction>
+ <onProperty>
+ <resource name="anno:hasSelector"/>
+ </onProperty>
+ <hasValue>
+ <resource name="Everything"/>
+ </hasValue>
+ </Restriction>
+ </subClassOf>
+ <subClassOf>
+ <Restriction>
+ <onProperty>
+ <resource name="anno:hasState"/>
+ </onProperty>
+ <hasValue>
+ <resource name="AnyWhichWay"/>
+ </hasValue>
+ </Restriction>
+ </subClassOf>
+</Class>
--- /dev/null
+<?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 status="testing">
+ <label xml:lang="en">Slot</label>
+ <comment xml:lang="en">
+ <p>
+ A <ref target="ore:Proxy">Proxy</ref> which has a <ref target="n">local notation</ref>, unique within the <ref target="ore:Aggregation">Aggregation</ref> that it is <ref target="ore:proxyIn">proxy in</ref>.
+ </p>
+ </comment>
+ <subClassOf>
+ <resource name="ore:Proxy"/>
+ </subClassOf>
+ <subClassOf>
+ <Restriction>
+ <onProperty>
+ <ObjectProperty>
+ <inverseOf>
+ <resource name="hasSlot"/>
+ </inverseOf>
+ </ObjectProperty>
+ </onProperty>
+ <cardinality>1</cardinality>
+ </Restriction>
+ </subClassOf>
+ <subClassOf>
+ <Restriction>
+ <onProperty>
+ <ObjectProperty>
+ <inverseOf>
+ <resource name="inSlot"/>
+ </inverseOf>
+ </ObjectProperty>
+ </onProperty>
+ <cardinality>1</cardinality>
+ </Restriction>
+ </subClassOf>
+ <subClassOf>
+ <Restriction>
+ <onProperty>
+ <resource name="n"/>
+ </onProperty>
+ <cardinality>1</cardinality>
+ </Restriction>
+ </subClassOf>
+ <disjointWith>
+ <resource name="ore:Aggregation"/>
+ </disjointWith>
+</Class>
--- /dev/null
+<?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 status="testing">
+ <label xml:lang="en">Unicode Scalar Value</label>
+ <comment xml:lang="en">
+ <p>
+ A thing with a <ref target="rdf:value">value</ref> between 0 and 10FFFF₁₆ but not between D800₁₆ and DFFF₁₆, representing a valid Unicode scalar value.
+ </p>
+ <p>
+ Not all Unicode scalar values can be represented in a <resource name="xsd:string"/>, so representing them as integers is required.
+ Unicode Scalar Values are uniquely identified by their value.
+ </p>
+ </comment>
+ <subClassOf>
+ <Restriction>
+ <onProperty>
+ <resource name="rdf:value"/>
+ </onProperty>
+ <cardinality>1</cardinality>
+ </Restriction>
+ </subClassOf>
+ <subClassOf>
+ <Restriction>
+ <onProperty>
+ <resource name="rdf:value"/>
+ </onProperty>
+ <allValuesFrom>
+ <Datatype>
+ <unionOf>
+ <Datatype>
+ <onDatatype>
+ <resource name="xsd:integer"/>
+ </onDatatype>
+ <withRestrictions>
+ <minInclusive datatype="xsd:integer">0</minInclusive>
+ <maxInclusive datatype="xsd:integer">55295</maxInclusive>
+ </withRestrictions>
+ </Datatype>
+ <Datatype>
+ <onDatatype>
+ <resource name="xsd:integer"/>
+ </onDatatype>
+ <withRestrictions>
+ <minInclusive datatype="xsd:integer">57344</minInclusive>
+ <maxInclusive datatype="xsd:integer">1114111</maxInclusive>
+ </withRestrictions>
+ </Datatype>
+ </unionOf>
+ </Datatype>
+ </allValuesFrom>
+ </Restriction>
+ </subClassOf>
+ <hasKey>
+ <resource name="rdf:value"/>
+ </hasKey>
+</Class>
--- /dev/null
+<?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 status="testing">
+ <label xml:lang="en">Unicode String</label>
+ <comment xml:lang="en">
+ <p>
+ A <ref target="olo:OrderedList">Ordered List</ref> of <ref target="UnicodeScalarValue">Unicode Scalar Values</ref>.
+ </p>
+ <p>
+ Unicode Strings essentially provide an alternative encoding of <resource name="xsd:string"/> in a way which can be reasoned about in R·D·F.
+ Some Unicode scalar values cannot be represented in a <resource name="xsd:string"/>, so strings containing them can only be represented in this manner.
+ </p>
+ </comment>
+ <subClassOf>
+ <resource name="olo:OrderedList"/>
+ </subClassOf>
+ <subClassOf>
+ <Restriction>
+ <onProperty>
+ <resource name="olo:slot"/>
+ </onProperty>
+ <allValuesFrom>
+ <Restriction>
+ <onProperty>
+ <resource name="olo:item"/>
+ </onProperty>
+ <allValuesFrom>
+ <resource name="UnicodeScalarValue"/>
+ </allValuesFrom>
+ </Restriction>
+ </allValuesFrom>
+ </Restriction>
+ </subClassOf>
+</Class>
--- /dev/null
+<?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>
+ <subPropertyOf>
+ <resource name="n"/>
+ </subPropertyOf>
+ <domain>
+ <resource name="olo:Slot"/>
+ </domain>
+ <range>
+ <resource name="xsd:positiveInteger"/>
+ </range>
+</DatatypeProperty>
--- /dev/null
+<?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>
<?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 DatatypeProperty SYSTEM "../../DTD">
<SpecificResource source="(SKOS)" fragment="xl-literalForm"/>
</isDefinedBy>
<subPropertyOf>
- <resource name="rdf:value"/>
+ <resource name="awol:body"/>
</subPropertyOf>
<domain>
<resource name="skosxl:Label"/>
</domain>
- <range>
- <resource name="rdf:PlainLiteral"/>
- </range>
</DatatypeProperty>
--- /dev/null
+<?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 status="testing">
+ <label xml:lang="en">local notation</label>
+ <comment xml:lang="en">
+ <p>
+ An integer, string, or time·stamp which identifies and orders a thing within its <ref target="in">local context</ref>.
+ </p>
+ <p>
+ String values can either be valid <resource name="xsd:NCName"/>¦s or else have the form of a <resource name="xsd:gYearMonth"/> or <resource name="xsd:date"/> with no time·zone component.
+ These possibilities were selected to ensure that the lexical forms of each type are disjoint.
+ </p>
+ <p>
+ Because this property is functional, a <resource name="Proxy"/> must be used when local notation depends on a particular context.
+ </p>
+ <p>
+ Correctly ordering things by local notation involves two steps.
+ First, the local notation must be split into a tuple of two parts :—
+ </p>
+ <list>
+ <item>
+ <p>
+ If it is a string which begins with an underscore and contains another underscore which is followed by a period :—
+ </p>
+ <list>
+ <item>
+ <p>
+ Let <var>base</var> be the portion of the string which follows the initial underscore and precedes the first successive underscore‐period sequence.
+ </p>
+ </item>
+ <item>
+ <p>
+ Let <var>mod</var> be the portion of the string which follows that same underscore‐period sequence.
+ </p>
+ </item>
+ <item>
+ <p>
+ If <var>mod</var> is not itself a valid canonical representation for some local notation, then the first value of the tuple is the original string, and the second value is the empty string.
+ </p>
+ </item>
+ <item>
+ <p>
+ Otherwise, if <var>base</var> is a valid <resource name="xsd:NCName"/> or else has the form of a <resource name="xsd:gYearMonth"/> or <resource name="xsd:date"/> with no time·zone component, then the tuple is {<var>base</var>, <var>mod</var>}.
+ </p>
+ </item>
+ <item>
+ <p>
+ Otherwise, if <var>base</var> is the canonical representation of some <resource name="xsd:integer"/> <var>int</var>, then the tuple is {<var>int</var>, <var>mod</var>}.
+ </p>
+ </item>
+ <item>
+ <p>
+ Otherwise, make the following modifications to <var>base</var> :—
+ </p>
+ <list>
+ <item>
+ <p>
+ Replace all underscores in <var>base</var> with plusses.
+ </p>
+ </item>
+ <item>
+ <p>
+ If <var>base</var> contains <code>T</code>, replace the first two periods in <var>base</var> which follow <code>T</code> (if present) with colons.
+ </p>
+ </item>
+ <item>
+ <p>
+ If <var>base</var> ends in a digit, replace the final remaining period in <var>base</var> (if present) with a colon.
+ </p>
+ </item>
+ </list>
+ <p>
+ If, after making the above substitutions, <var>base</var> is the canonical representation of some <resource name="xsd:dateTimeStamp"/> <var>time</var>, then the tuple is {<var>time</var>, <var>mod</var>}.
+ </p>
+ </item>
+ <item>
+ <p>
+ Otherwise, the first value of the tuple is the original string, and the second value is the empty string.
+ </p>
+ </item>
+ </list>
+ </item>
+ <item>
+ <p>
+ Otherwise, the first value of the tuple is the original string, and the second value is the empty string.
+ </p>
+ </item>
+ </list>
+ <p>
+ Then, the values of the tuples can be sorted according to the following rules, with the first part taking priority over the second :—
+ </p>
+ <list>
+ <item>
+ <p>
+ Empty strings are always sorted first.
+ </p>
+ </item>
+ <item>
+ <p>
+ Integers are sorted by numeric value and come after empty strings.
+ </p>
+ </item>
+ <item>
+ <p>
+ Time·stamps and strings which match <resource name="xsd:gYearMonth"/> or <resource name="xsd:date"/> come after integers, and are sorted according to their corresponding “time on timeline” values, with the following modifications :—
+ </p>
+ <list>
+ <item>
+ <p>
+ For <resource name="xsd:gYearMonth"/> values, the missing day component is treated as the first rather than the last day of the month
+ </p>
+ </item>
+ <item>
+ <p>
+ When the “time on timeline” value is the same, <resource name="xsd:gYearMonth"/> sorts before <resource name="xsd:date"/>, and <resource name="xsd:date"/> sorts before <resource name="xsd:dateTimeStamp"/>.
+ </p>
+ </item>
+ <item>
+ <p>
+ When the “time on timeline” value is the same for two <resource name="xsd:dateTimeStamp"/> values, they are sorted based on their timezone offsets in ascending order.
+ </p>
+ </item>
+ </list>
+ </item>
+ <item>
+ <p>
+ Strings which match <resource name="xsd:NCName"/> follow the above, and are sorted lexically by code·point value.
+ </p>
+ </item>
+ </list>
+ <p>
+ The above algorithm effectively establishes a special microsyntax in which <code>_base_.mod</code> will always sort after <code>base</code>, regardless of <code>base</code>¦s type.
+ When <code>base</code> is a <resource name="xsd:dateTimeStamp"/>, a few reversible modifications need to be made in order to satisfy the <resource name="xsd:NCName"/> syntax :—
+ </p>
+ <list>
+ <item>
+ <p>
+ Any colons in the time component or time·zone offset must be replaced with periods.
+ </p>
+ </item>
+ <item>
+ <p>
+ A plus in the time·zone offset, if present, must be replaced with an underscore.
+ </p>
+ </item>
+ </list>
+ </comment>
+ <subPropertyOf>
+ <resource name="dcterms:identifier"/>
+ </subPropertyOf>
+ <domain>
+ <Restriction>
+ <onProperty>
+ <resource name="in"/>
+ </onProperty>
+ <cardinality>1</cardinality>
+ </Restriction>
+ </domain>
+ <range>
+ <Datatype>
+ <unionOf>
+ <resource name="xsd:integer"/>
+ <resource name="xsd:NCName"/>
+ <Datatype>
+ <onDatatype>
+ <resource name="xsd:string"/>
+ </onDatatype>
+ <withRestrictions>
+ <pattern>[0-9]{4}(-[0-9]{2}){1,2}</pattern>
+ </withRestrictions>
+ </Datatype>
+ <resource name="xsd:dateTimeStamp"/>
+ </unionOf>
+ </Datatype>
+ </range>
+</DatatypeProperty>
--- /dev/null
+<?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 status="testing">
+ <label xml:lang="en">n·c name</label>
+ <comment xml:lang="en">
+ <p>
+ An <resource name="xsd:NCName"/> identifier for this thing.
+ </p>
+ </comment>
+ <subPropertyOf>
+ <resource name="dcterms:identifier"/>
+ </subPropertyOf>
+ <range>
+ <resource name="xsd:NCName"/>
+ </range>
+</DatatypeProperty>
<item>
<p>
<resource name="foaf:mbox"/> and <resource name="foaf:mbox_sha1sum"/> are properties for identifying the original, not current, owner of an internet mailbox, and thus not useful for the actual sending of messages.
- Originally, these properties were conceived as a means of determining <ref target="foaf:Agent">Agent</ref> identity; in the case of <resource name="foaf:mbox"/>, this intent is much better served by just using a <code>tag:</code> U·R·I, which can be email‐derived.
+ Originally, these properties were conceived as a means of determining <ref target="foaf:Agent">Agent</ref> identity; in the case of <resource name="foaf:mbox"/>, this intent is much better served by just using a <code>tag:</code> U·R·I, which can be e·mail‐derived.
<resource name="foaf:mbox_sha1sum"/> is of questionable utility in practice.
</p>
</item>
--- /dev/null
+<?xml version="1.0"?>
+<!--
+SPDX-FileCopyrightText: 2024, 2025 Lady <https://www.ladys.computer/about/#lady>
+SPDX-License-Identifier: CC0-1.0
+-->
+<!DOCTYPE NamedIndividual SYSTEM "../../DTD">
+<NamedIndividual name="https://iiif.io/api/">
+ <label xml:lang="en">I·I·I·F</label>
+ <type>
+ <resource name="dcterms:BibliographicResource"/>
+ </type>
+ <type>
+ <resource name="doap:Specification"/>
+ </type>
+</NamedIndividual>
--- /dev/null
+<?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="https://www.openarchives.org/ore/1.0/vocabulary">
+ <label xml:lang="en">O·A·I Ore</label>
+ <comment xml:lang="en">
+ <p>
+ The Open Archives Intiative (O·A·I) vocabulary for Object Re·use and Exchange (Ore) provides a set of basic terms for defining aggregations of resources and the relationships between them.
+ It also introduces the concept of a “Resource Map”, which is an R·D·F graph containing a description of an aggregation conforming to its vocabulary and data model.
+ </p>
+ <p>
+ The terms for describing aggregations are generally use·ful, and have been extended by models like <ptr target="(PCDM)"/>; they are included in this ontology.
+ The Resource Map concept and its related terms (<resource name="ore:ResourceMap"/>, <resource name="ore:describes"/>, <resource name="ore:isDescribedBy"/>) is less obviously use·ful, and has been excluded for now.
+ </p>
+ </comment>
+ <type>
+ <resource name="dcterms:BibliographicResource"/>
+ </type>
+ <type>
+ <resource name="doap:Specification"/>
+ </type>
+</NamedIndividual>
--- /dev/null
+<?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>
--- /dev/null
+<?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="https://github.com/duraspace/pcdm/wiki">
+ <label xml:lang="en">P·C·D·M</label>
+ <comment xml:lang="en">
+ <p>
+ The Portland Common Data Model (P·C·D·M) is a set of vocabularies published by Duraspace and used by certain institutions and communities in the library and cultural heritage sphere for modelling their collections.
+ It comprises five parts :—
+ </p>
+ <list>
+ <item>
+ <p>
+ <strong>P·C·D·M Models</strong> builds on top of <ptr target="(OAI-ORE)"/> to provide basic structural modelling for <ref target="pcdm:Collection">Collections</ref>, their <ref target="pcdm:Object">Objects</ref>, and the <ref target="pcdm:File">Files</ref> associated with them.
+ This ontology only omits the term <resource name="pcdm:AlternateOrder"/>, whose meaning and utility is unclear.
+ </p>
+ </item>
+ <item>
+ <p>
+ <strong>P·C·D·M Use</strong> provides subclasses for <ptr target="pcdm:File"/> which identify its intended <em>use</em>.
+ The choice of modelling this using classes, rather than a relationship like <ptr target="anno:hasPurpose"/>, is a bit suspect, but a conversion from one to the other is not especially difficult.
+ </p>
+ </item>
+ <item>
+ <p>
+ <strong>P·C·D·M Rights</strong> provides a few terms for specifying temporary, time‐limited overrides to rights statements.
+ As this is use·case is fairly domain‐specific and niche, this ontology does not bother defining its terms.
+ </p>
+ </item>
+ <item>
+ <p>
+ <strong>P·C·D·M Works</strong> expands P·C·D·M Models to add the concepts of <ref target="pcdmworks:Work">Work</ref> and <ref target="pcdmworks:FileSet">File Set</ref>.
+ It also defines two classes for use with <ptr target="(IIIF)"/>, <resource name="pcdmworks:Range"/> and <resource name="pcdmworks:TopRange"/>, which are more suspect in utility and not included in this ontology.
+ </p>
+ </item>
+ <item>
+ <p>
+ <strong>P·C·D·M File Formats</strong> provides a set of <ref target="skos:Concept">Concepts</ref> for denoting specific file format genres.
+ These are a bit undocumented, and don¦t have a clear use·case, so they not been encoded into this ontology.
+ </p>
+ </item>
+ </list>
+ </comment>
+ <type>
+ <resource name="dcterms:BibliographicResource"/>
+ </type>
+</NamedIndividual>
--- /dev/null
+<?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://www.rfc-editor.org/info/rfc5005">
+ <label xml:lang="en">Feed Paging and Archiving</label>
+ <comment xml:lang="en">
+ <p>
+ This specification describes the pagination and archiving of Atom feeds, and consequently is a kind of extension to <ptr target="(RFC4287)"/>.
+ As with that specification, it provides the normative definition for a few <ref target="awol:RelationType">Relation Types</ref>.
+ Note that <resource name="rel:previous"/> and <resource name="rel:next"/> were previously defined in <ptr target="(HTML)"/>, but H·T·M·L¦s approach to linking is generally unsuitable for use with R·D·F and not considered normative by this ontology.
+ </p>
+ </comment>
+ <type>
+ <resource name="dcterms:BibliographicResource"/>
+ </type>
+ <type>
+ <resource name="doap:Specification"/>
+ </type>
+</NamedIndividual>
--- /dev/null
+<?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>
+ <label xml:lang="en">Current</label>
+ <comment xml:lang="en">
+ <p>
+ A <ref target="awol:RelationType">Relation Type</ref> indicating a thing which contains the most recent entries in a feed.
+ </p>
+ </comment>
+ <isDefinedBy>
+ <SpecificResource source="(RFC5005)"/>
+ </isDefinedBy>
+ <type>
+ <resource name="awol:RelationType"/>
+ </type>
+</NamedIndividual>
--- /dev/null
+<?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>
+ <label xml:lang="en">First</label>
+ <comment xml:lang="en">
+ <p>
+ A <ref target="awol:RelationType">Relation Type</ref> indicating a thing which is first in the current series.
+ </p>
+ </comment>
+ <isDefinedBy>
+ <SpecificResource source="(RFC5005)"/>
+ </isDefinedBy>
+ <type>
+ <resource name="awol:RelationType"/>
+ </type>
+</NamedIndividual>
--- /dev/null
+<?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>
+ <label xml:lang="en">Last</label>
+ <comment xml:lang="en">
+ <p>
+ A <ref target="awol:RelationType">Relation Type</ref> indicating a thing which is last in the current series.
+ </p>
+ </comment>
+ <isDefinedBy>
+ <SpecificResource source="(RFC5005)"/>
+ </isDefinedBy>
+ <type>
+ <resource name="awol:RelationType"/>
+ </type>
+</NamedIndividual>
--- /dev/null
+<?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>
+ <label xml:lang="en">Next</label>
+ <comment xml:lang="en">
+ <p>
+ A <ref target="awol:RelationType">Relation Type</ref> indicating a following thing.
+ </p>
+ </comment>
+ <isDefinedBy>
+ <SpecificResource source="(RFC5005)"/>
+ </isDefinedBy>
+ <type>
+ <resource name="awol:RelationType"/>
+ </type>
+</NamedIndividual>
--- /dev/null
+<?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>
+ <label xml:lang="en">Next Archive</label>
+ <comment xml:lang="en">
+ <p>
+ A <ref target="awol:RelationType">Relation Type</ref> indicating a following archival thing.
+ </p>
+ </comment>
+ <isDefinedBy>
+ <SpecificResource source="(RFC5005)"/>
+ </isDefinedBy>
+ <type>
+ <resource name="awol:RelationType"/>
+ </type>
+</NamedIndividual>
--- /dev/null
+<?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>
+ <label xml:lang="en">Previous Archive</label>
+ <comment xml:lang="en">
+ <p>
+ A <ref target="awol:RelationType">Relation Type</ref> indicating a preceding archival thing.
+ </p>
+ </comment>
+ <isDefinedBy>
+ <SpecificResource source="(RFC5005)"/>
+ </isDefinedBy>
+ <type>
+ <resource name="awol:RelationType"/>
+ </type>
+</NamedIndividual>
--- /dev/null
+<?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>
+ <label xml:lang="en">Previous</label>
+ <comment xml:lang="en">
+ <p>
+ A <ref target="awol:RelationType">Relation Type</ref> indicating a preceding thing.
+ </p>
+ </comment>
+ <isDefinedBy>
+ <SpecificResource source="(RFC5005)"/>
+ </isDefinedBy>
+ <type>
+ <resource name="awol:RelationType"/>
+ </type>
+</NamedIndividual>
--- /dev/null
+<?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 status="testing">
+ <label xml:lang="en">Any Which Way</label>
+ <comment xml:lang="en">
+ <p>
+ A <ref target="anno:State">State</ref> which reflects a thing regardless of, or in any, state, time, or condition.
+ </p>
+ </comment>
+ <type>
+ <resource name="anno:State"/>
+ </type>
+ <type>
+ <Restriction>
+ <onProperty>
+ <resource name="anno:refinedBy"/>
+ </onProperty>
+ <maxCardinality>0</maxCardinality>
+ </Restriction>
+ </type>
+</NamedIndividual>
--- /dev/null
+<?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 status="testing">
+ <label xml:lang="en">Everything</label>
+ <comment xml:lang="en">
+ <p>
+ A <ref target="anno:Selector">Selector</ref> which selects the entirety of a thing.
+ </p>
+ </comment>
+ <type>
+ <resource name="anno:Selector"/>
+ </type>
+ <type>
+ <Restriction>
+ <onProperty>
+ <resource name="anno:refinedBy"/>
+ </onProperty>
+ <maxCardinality>0</maxCardinality>
+ </Restriction>
+ </type>
+</NamedIndividual>
<?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">
<ObjectProperty>
- <label xml:lang="en">has email</label>
+ <label xml:lang="en">has e·mail</label>
<comment xml:lang="en">
<p>
An electronic mailbox for this <ref target="contact:SocialEntity">Social Entity</ref>.
<?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">
<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"/>.
<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>
<?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">
<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>
--- /dev/null
+<?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>
+ <ObjectProperty>
+ <inverseOf>
+ <resource name="inSlot"/>
+ </inverseOf>
+ </ObjectProperty>
+ </subPropertyOf>
+ <domain>
+ <resource name="olo:Slot"/>
+ </domain>
+</ObjectProperty>
--- /dev/null
+<?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>
--- /dev/null
+<?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>
--- /dev/null
+<?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>
--- /dev/null
+<?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>
+ <resource name="hasSlot"/>
+ </subPropertyOf>
+ <domain>
+ <resource name="olo:OrderedList"/>
+ </domain>
+ <range>
+ <resource name="olo:Slot"/>
+ </range>
+</ObjectProperty>
--- /dev/null
+<?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>
+ <label xml:lang="en">aggregates</label>
+ <comment xml:lang="en">
+ <p>
+ An <ref target="ore:AggregatedResource">Aggregated Resource</ref> which is a member of this <ref target="ore:Aggregation">Aggregation</ref>.
+ </p>
+ </comment>
+ <isDefinedBy>
+ <SpecificResource source="(OAI-ORE)" fragment="ore-aggregates"/>
+ </isDefinedBy>
+ <subPropertyOf>
+ <resource name="dcterms:hasPart"/>
+ </subPropertyOf>
+ <propertyChainAxiom>
+ <ObjectProperty>
+ <inverseOf>
+ <resource name="ore:proxyIn"/>
+ </inverseOf>
+ </ObjectProperty>
+ <resource name="ore:proxyFor"/>
+ </propertyChainAxiom>
+ <domain>
+ <resource name="ore:Aggregation"/>
+ </domain>
+ <range>
+ <resource name="ore:AggregatedResource"/>
+ </range>
+</ObjectProperty>
--- /dev/null
+<?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>
+ <label xml:lang="en">aggregated by</label>
+ <comment xml:lang="en">
+ <p>
+ An <ref target="ore:Aggregation">Aggregation</ref> which includes this <ref target="ore:AggregatedResource">Aggregated Resource</ref> as a member.
+ </p>
+ </comment>
+ <isDefinedBy>
+ <SpecificResource source="(OAI-ORE)" fragment="ore-is-aggregated-by"/>
+ </isDefinedBy>
+ <subPropertyOf>
+ <resource name="dcterms:isPartOf"/>
+ </subPropertyOf>
+ <inverseOf>
+ <resource name="ore:aggregates"/>
+ </inverseOf>
+ <propertyChainAxiom>
+ <ObjectProperty>
+ <inverseOf>
+ <resource name="ore:proxyFor"/>
+ </inverseOf>
+ </ObjectProperty>
+ <resource name="ore:proxyIn"/>
+ </propertyChainAxiom>
+ <domain>
+ <resource name="ore:AggregatedResource"/>
+ </domain>
+ <range>
+ <resource name="ore:Aggregation"/>
+ </range>
+</ObjectProperty>
--- /dev/null
+<?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>
+ <label xml:lang="en">lineage</label>
+ <comment xml:lang="en">
+ <p>
+ A <ref target="ore:Proxy">Proxy</ref> representing an <ref target="ore:aggregates">aggregation</ref> of an <ref target="ore:AggregatedResource">Aggregated Resource</ref> in an <ref target="ore:Aggregation">Aggregation</ref> which served as a source for the aggregation that this Proxy represents.
+ </p>
+ <p>
+ When an Aggregated Resource in one Aggregation is due to its inclusion as an Aggregated Resource in a different Aggregation, this property, alongside Proxies which represent the Aggregated Resource in each case, can be used to demonstrate the relationship.
+ The modelling for this is probably a bit soft and needlessly confusing; a relationship between the Aggregation itself and the Proxies that it was derived from might be clearer.
+ </p>
+ </comment>
+ <isDefinedBy>
+ <SpecificResource source="(OAI-ORE)" fragment="ore-lineage"/>
+ </isDefinedBy>
+ <domain>
+ <resource name="ore:Proxy"/>
+ </domain>
+ <range>
+ <resource name="ore:Proxy"/>
+ </range>
+</ObjectProperty>
--- /dev/null
+<?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">proxy for</label>
+ <comment xml:lang="en">
+ <p>
+ The <ref target="ore:AggregatedResource">Aggregated Resource</ref> which this <ref target="ore:Proxy">Proxy</ref> is proxying.
+ </p>
+ </comment>
+ <isDefinedBy>
+ <SpecificResource source="(OAI-ORE)" fragment="ore-proxyFor"/>
+ </isDefinedBy>
+ <subPropertyOf>
+ <resource name="anno:hasSource"/>
+ </subPropertyOf>
+ <domain>
+ <resource name="ore:Proxy"/>
+ </domain>
+ <range>
+ <resource name="ore:AggregatedResource"/>
+ </range>
+</ObjectProperty>
--- /dev/null
+<?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">proxy in</label>
+ <comment xml:lang="en">
+ <p>
+ The <ref target="ore:Aggregation">Aggregation</ref> which provides the context for this <ref target="ore:Proxy">Proxy</ref>.
+ </p>
+ </comment>
+ <isDefinedBy>
+ <SpecificResource source="(OAI-ORE)" fragment="ore-proxyIn"/>
+ </isDefinedBy>
+ <subPropertyOf>
+ <resource name="in"/>
+ </subPropertyOf>
+ <domain>
+ <resource name="ore:Proxy"/>
+ </domain>
+ <range>
+ <resource name="ore:Aggregation"/>
+ </range>
+</ObjectProperty>
--- /dev/null
+<?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 file</label>
+ <comment xml:lang="en">
+ <p>
+ A <ref target="pcdm:File">File</ref> which comprises part of this <ref target="pcdm:Object">Object</ref>.
+ </p>
+ </comment>
+ <isDefinedBy>
+ <SpecificResource source="(PCDM)"/>
+ </isDefinedBy>
+ <subPropertyOf>
+ <resource name="ore:aggregates"/>
+ </subPropertyOf>
+ <domain>
+ <resource name="pcdm:Object"/>
+ </domain>
+ <range>
+ <resource name="pcdm:File"/>
+ </range>
+</ObjectProperty>
--- /dev/null
+<?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>
+ <label xml:lang="en">has member</label>
+ <comment xml:lang="en">
+ <p>
+ An <ref target="ore:Aggregation">Aggregation</ref> which forms a component part of this Aggregation.
+ </p>
+ <p>
+ <ptr target="(PCDM)"/> describes this property only in terms of <ref target="pcdm:Object">Objects</ref> and <ref target="pcdm:Collection">Collections</ref>, but formally defines its domain and range as Aggregations.
+ While this might have only been a modelling convenience, this ontology preserves the broader definition, to allow the use of this term without needing a firm stance on whether something is (or isn¦t) an Object or Collection as <ptr target="(PCDM)"/> would have it.
+ </p>
+ </comment>
+ <isDefinedBy>
+ <SpecificResource source="(PCDM)"/>
+ </isDefinedBy>
+ <subPropertyOf>
+ <resource name="ore:aggregates"/>
+ </subPropertyOf>
+ <range>
+ <resource name="ore:Aggregation"/>
+ </range>
+</ObjectProperty>
--- /dev/null
+<?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 asymmetric="yes" irreflexive="yes">
+ <label xml:lang="en">has related object</label>
+ <comment xml:lang="en">
+ <p>
+ An <ref target="pcdm:Object">Object</ref> which is aggregated as part of this <ref target="ore:Aggregation">Aggregation</ref>, but which is not considered a component part.
+ </p>
+ <p>
+ This property is intended for things like licensing agreements or cover art which are considered part of an Aggregation from the perspective of resource aggregation, but not from the perspective of conceptual composition.
+ Related objects are <ref target="ore:aggregates">aggregated in</ref> and consequently <ref target="dcterms:isPartOf">part of</ref> the things they are related to, but as something other than a compositional component.
+ For more general kinds of relation, use <ptr target="sioc:related_to"/>.
+ </p>
+ </comment>
+ <isDefinedBy>
+ <SpecificResource source="(PCDM)"/>
+ </isDefinedBy>
+ <subPropertyOf>
+ <resource name="ore:aggregates"/>
+ </subPropertyOf>
+ <propertyDisjointWith>
+ <resource name="pcdm:hasMember"/>
+ </propertyDisjointWith>
+ <range>
+ <resource name="pcdm:Object"/>
+ </range>
+</ObjectProperty>
--- /dev/null
+<?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">file of</label>
+ <comment xml:lang="en">
+ <p>
+ An <ref target="pcdm:Object">Object</ref> which this <ref target="pcdm:File">File</ref> comprises part of.
+ </p>
+ </comment>
+ <isDefinedBy>
+ <SpecificResource source="(PCDM)"/>
+ </isDefinedBy>
+ <subPropertyOf>
+ <resource name="ore:isAggregatedBy"/>
+ </subPropertyOf>
+ <inverseOf>
+ <resource name="pcdm:hasFile"/>
+ </inverseOf>
+ <domain>
+ <resource name="pcdm:File"/>
+ </domain>
+ <range>
+ <resource name="pcdm:Object"/>
+ </range>
+</ObjectProperty>
--- /dev/null
+<?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>
+ <label xml:lang="en">member of</label>
+ <comment xml:lang="en">
+ <p>
+ An <ref target="ore:Aggregation">Aggregation</ref> which this Aggregation is a component part of.
+ </p>
+ <p>
+ <ptr target="(PCDM)"/> describes this property only in terms of <ref target="pcdm:Object">Objects</ref> and <ref target="pcdm:Collection">Collections</ref>, but formally defines its domain and range as Aggregations.
+ While this might have only been a modelling convenience, this ontology preserves the broader definition, to allow the use of this term without needing a firm stance on whether something is (or isn¦t) an Object or Collection as <ptr target="(PCDM)"/> would have it.
+ </p>
+ </comment>
+ <isDefinedBy>
+ <SpecificResource source="(PCDM)"/>
+ </isDefinedBy>
+ <subPropertyOf>
+ <resource name="ore:isAggregatedBy"/>
+ </subPropertyOf>
+ <inverseOf>
+ <resource name="pcdm:hasMember"/>
+ </inverseOf>
+ <domain>
+ <resource name="ore:Aggregation"/>
+ </domain>
+</ObjectProperty>
--- /dev/null
+<?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 asymmetric="yes" irreflexive="yes">
+ <label xml:lang="en">related object of</label>
+ <comment xml:lang="en">
+ <p>
+ An <ref target="ore:Aggregation">Aggregation</ref> which this <ref target="pcdm:Object">Object</ref> is aggregated as part of, but in a way which does not imply being a component part.
+ </p>
+ <p>
+ See <ptr target="pcdm:hasRelatedObject"/> for further discussion on the correct usage of this property.
+ </p>
+ </comment>
+ <isDefinedBy>
+ <SpecificResource source="(PCDM)"/>
+ </isDefinedBy>
+ <subPropertyOf>
+ <resource name="ore:isAggregatedBy"/>
+ </subPropertyOf>
+ <inverseOf>
+ <resource name="pcdm:hasRelatedObject"/>
+ </inverseOf>
+ <propertyDisjointWith>
+ <resource name="pcdm:isMemberOf"/>
+ </propertyDisjointWith>
+ <domain>
+ <resource name="pcdm:Object"/>
+ </domain>
+</ObjectProperty>
--- /dev/null
+<?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>
+ <label xml:lang="en">has current</label>
+ <comment xml:lang="en">
+ <p>
+ A thing containing the most recent entries in the feed to which this thing also belongs.
+ </p>
+ </comment>
+ <isDefinedBy>
+ <SpecificResource source="(RFC5005)"/>
+ </isDefinedBy>
+</ObjectProperty>
--- /dev/null
+<?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>
+ <label xml:lang="en">has first</label>
+ <comment xml:lang="en">
+ <p>
+ A first thing in a series of things to which this thing belongs.
+ </p>
+ </comment>
+ <isDefinedBy>
+ <SpecificResource source="(RFC5005)"/>
+ </isDefinedBy>
+</ObjectProperty>
--- /dev/null
+<?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>
+ <label xml:lang="en">has last</label>
+ <comment xml:lang="en">
+ <p>
+ A last thing in a series of things to which this thing belongs.
+ </p>
+ </comment>
+ <isDefinedBy>
+ <SpecificResource source="(RFC5005)"/>
+ </isDefinedBy>
+</ObjectProperty>
--- /dev/null
+<?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>
+ <label xml:lang="en">has next</label>
+ <comment xml:lang="en">
+ <p>
+ A next thing in a series of things to which this thing belongs.
+ </p>
+ </comment>
+ <isDefinedBy>
+ <SpecificResource source="(RFC5005)"/>
+ </isDefinedBy>
+</ObjectProperty>
--- /dev/null
+<?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>
+ <label xml:lang="en">has next archive</label>
+ <comment xml:lang="en">
+ <p>
+ An immediately following archive document to this thing.
+ </p>
+ </comment>
+ <isDefinedBy>
+ <SpecificResource source="(RFC5005)"/>
+ </isDefinedBy>
+</ObjectProperty>
--- /dev/null
+<?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>
+ <label xml:lang="en">has previous archive</label>
+ <comment xml:lang="en">
+ <p>
+ An immediately preceding archive document to this thing.
+ </p>
+ </comment>
+ <isDefinedBy>
+ <SpecificResource source="(RFC5005)"/>
+ </isDefinedBy>
+</ObjectProperty>
--- /dev/null
+<?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>
+ <label xml:lang="en">has previous</label>
+ <comment xml:lang="en">
+ <p>
+ A previous thing in a series of things to which this thing belongs.
+ </p>
+ </comment>
+ <isDefinedBy>
+ <SpecificResource source="(RFC5005)"/>
+ </isDefinedBy>
+</ObjectProperty>
-->
<!DOCTYPE ObjectProperty SYSTEM "../../DTD">
<ObjectProperty>
- <label xml:lang="en">has email</label>
+ <label xml:lang="en">has e·mail</label>
<comment xml:lang="en">
<p>
An electronic mail address for this <ref target="contact:SocialEntity">Social Entity</ref>.
<?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">
<subPropertyOf>
<resource name="skos:semanticRelation"/>
</subPropertyOf>
+ <subPropertyOf>
+ <resource name="sioc:related_to"/>
+ </subPropertyOf>
<propertyDisjointWith>
<resource name="skos:broader"/>
</propertyDisjointWith>
<?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">
<SpecificResource source="(SKOS)" fragment="semanticRelation"/>
</isDefinedBy>
<subPropertyOf>
- <resource name="skos:semanticRelation"/>
+ <resource name="dcterms:relation"/>
</subPropertyOf>
<domain>
<resource name="skos:Concept"/>
--- /dev/null
+<?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" status="testing">
+ <label xml:lang="en">has slot</label>
+ <comment xml:lang="en">
+ <p>
+ A <ref target="Slot">Slot</ref> in this <ref target="ore:Aggregation">Aggregation</ref>.
+ </p>
+ </comment>
+ <subPropertyOf>
+ <ObjectProperty>
+ <inverseOf>
+ <resource name="ore:proxyIn"/>
+ </inverseOf>
+ </ObjectProperty>
+ </subPropertyOf>
+ <domain>
+ <resource name="ore:Aggregation"/>
+ </domain>
+ <range>
+ <resource name="Slot"/>
+ </range>
+</ObjectProperty>
--- /dev/null
+<?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" status="testing">
+ <label xml:lang="en">has local context</label>
+ <comment xml:lang="en">
+ <p>
+ The local context for this thing, in terms of which its properties should be considered.
+ </p>
+ <p>
+ If a thing does not have an inherent local context, local contexts (and associated properties) may be added thru the use of <ref target="Proxy">Proxies</ref>.
+ </p>
+ </comment>
+</ObjectProperty>
--- /dev/null
+<?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" irreflexive="yes" status="testing">
+ <label xml:lang="en">in slot</label>
+ <comment xml:lang="en">
+ <p>
+ A <ref target="Slot">Slot</ref> that is <ref target="ore:proxyFor">proxy for</ref> this thing.
+ </p>
+ </comment>
+ <subPropertyOf>
+ <ObjectProperty>
+ <inverseOf>
+ <resource name="ore:proxyFor"/>
+ </inverseOf>
+ </ObjectProperty>
+ </subPropertyOf>
+ <range>
+ <resource name="Slot"/>
+ </range>
+</ObjectProperty>
<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>
+ </declare>
<declare>
<prefix>owl</prefix>
<namespace>http://www.w3.org/2002/07/owl#</namespace>
</declare>
+ <declare>
+ <prefix>pcdm</prefix>
+ <namespace>http://pcdm.org/models#</namespace>
+ </declare>
+ <declare>
+ <prefix>pcdmuse</prefix>
+ <namespace>http://pcdm.org/use#</namespace>
+ </declare>
+ <declare>
+ <prefix>pcdmworks</prefix>
+ <namespace>http://pcdm.org/works#</namespace>
+ </declare>
<declare>
<prefix>rdf</prefix>
<namespace>http://www.w3.org/1999/02/22-rdf-syntax-ns#</namespace>
</call-template>
</variable>
<if test="$prefixed!='xsd:string'">
+ <text>^^</text>
<choose>
<when test="contains($prefixed, '/') or contains(substring-after($prefixed, ':'), ':')">
<text><</text>
<when test="contains(' superClassOf ', $spaced)">
<text>Vocabvocab:</text>
</when>
- <when test="contains(' code em p strong ', $spaced)">
+ <when test="contains(' code em p strong var ', $spaced)">
<text>html:</text>
</when>
<when test="contains(' AllDifferent AllDisjointClasses AllDisjointProperties AnnotationProperty Class DatatypeProperty NamedIndividual NegativeObjectPropertyAssertion ObjectProperty Ontology Restriction allValuesFrom assertionProperty cardinality complementOf datatypeComplementOf differentFrom disjointUnionOf disjointWith equivalentClass equivalentProperty hasKey hasSelf hasValue intersectionOf inverseOf maxCardinality maxQualifiedCardinality members minCardinality minQualifiedCardinality onClass onDataRange onDatatype onProperty oneOf propertyChainAxiom propertyDisjointWith qualifiedCardinality sameAs someValuesFrom sourceIndividual targetIndividual unionOf withRestrictions ', $spaced)">
<when test="contains(' declare namespace prefix ', $spaced)">
<text>shacl:</text>
</when>
- <when test="contains(' inScheme ', $spaced)">
+ <when test="contains(' broader inScheme narrower ', $spaced)">
<text>skos:</text>
</when>
<otherwise>
<text>http://www.w3.org/2001/XMLSchema#string</text>
</when>
<otherwise>
- <call-template name="unprefix">
- <with-param name="prefixed" select="@datatype"/>
+ <call-template name="Vocab:unprefix">
+ <with-param name="prefixed" select="string(@datatype)"/>
</call-template>
</otherwise>
</choose>
--- /dev/null
+#!/usr/bin/ruby
+# SPDX-FileCopyrightText: 2025 Lady <https://www.ladys.computer/about/#lady>
+# SPDX-License-Identifier: CC0-1.0
+
+require "webrick"
+
+server = WEBrick::HTTPServer.new(Port: ARGV[0] || 3000, DocumentRoot: "public", DirectoryIndex: ["index.xhtml"])
+trap 'INT' do server.shutdown end
+
+class XHTMLHandler < WEBrick::HTTPServlet::DefaultFileHandler
+ def do_GET request, response
+ super
+ response['Content-Type'] = 'application/xhtml+xml'
+ end
+end
+WEBrick::HTTPServlet::FileHandler.add_handler("xhtml", XHTMLHandler)
+
+server.start
<template match="/rdf:RDF//text()[not(ancestor::html:*) and normalize-space()!='']" mode="书社:finalize" priority="10">
<value-of select="normalize-space()"/>
</template>
+ <template match="comment()[contains(., '
SPDX-License-Identifier:')]"/>
</transform>
<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"/>
<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>
</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>
</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>
<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>
</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()"/>
</apply-templates>
<text>}</text>
</when>
- <when test="owl:complementOf">
+ <when test="owl:datatypeComplementOf">
<if test="$use-parens">
<text>(</text>
</if>
<text>not </text>
- <apply-templates select="(owl:complimentOf/@rdf:resource|owl:complimentOf/*)[1]" mode="Vocab:render-class">
+ <apply-templates select="(owl:datatypeComplementOf/@rdf:resource|owl:datatypeComplementOf/*)[1]" mode="Vocab:render-class">
<with-param name="root" select="$root"/>
<with-param name="use-parens" select="true()"/>
</apply-templates>
<when test="owl:oneOf">
<text>{</text>
<for-each select="owl:oneOf/*">
- <apply-templates select="." name="Vocab:render-individual">
+ <apply-templates select="." mode="Vocab:render-individual">
<with-param name="root" select="$root"/>
<with-param name="resource-context" select="$resource-context"/>
</apply-templates>
</call-template>
</for-each>
</template>
- <template match="*" mode="Vocab:render-class">
+ <template match="@*|node()" mode="Vocab:render-class">
<text>??</text>
</template>
<template match="rdf:Description" mode="Vocab:render-individual">
</call-template>
</for-each>
</template>
- <template match="*" mode="Vocab:render-individual">
+ <template match="@*|node()" mode="Vocab:render-individual">
<text>??</text>
</template>
<template match="owl:AnnotationProperty|owl:DatatypeProperty|rdf:Description" mode="Vocab:render-property">
</call-template>
</for-each>
</template>
- <template match="*" mode="Vocab:render-property">
+ <template match="@*|node()" mode="Vocab:render-property">
<text>??</text>
</template>
- <template match="*" mode="Vocab:render-value">
+ <template match="@*|node()" mode="Vocab:render-value">
<param name="root" select="/"/>
+ <variable name="datatype" select="@rdf:datatype"/>
<element name="code" namespace="&xhtml;">
<text>"</text>
<element name="span" namespace="&xhtml;">
<text>@</text>
<value-of select="@xml:lang"/>
</when>
- <when test="@rdf:datatype and string(@rdf:datatype)!='http://www.w3.org/2001/XMLSchema#string'">
+ <when test="$datatype and string($datatype)!='http://www.w3.org/2001/XMLSchema#string'">
<text>^^</text>
- <for-each select="/">
+ <for-each select="$root">
<call-template name="Vocab:link-to">
- <with-param name="resource" select="@rdf:datatype"/>
+ <with-param name="resource" select="string($datatype)"/>
<with-param name="kind" select="'class'"/>
</call-template>
</for-each>
</copy>
</template>
<template match="html:article[rdf:RDF]">
- <for-each select="rdf:RDF">
- <for-each select="//owl:Ontology[1]">
- <element name="hgroup" namespace="&xhtml;">
- <element name="h1" namespace="&xhtml;">
+ <copy>
+ <copy-of select="@*"/>
+ <for-each select="rdf:RDF">
+ <for-each select="//owl:Ontology[1]">
+ <element name="meta" namespace="&xhtml;">
+ <attribute name="itemprop">
+ <text>urn:fdc:ladys.computer:20231231:Shu1She4:title</text>
+ </attribute>
<attribute name="lang">
<value-of select="rdfs:label[1]/@xml:lang"/>
</attribute>
<attribute name="xml:lang">
<value-of select="rdfs:label[1]/@xml:lang"/>
</attribute>
- <value-of select="rdfs:label[1]"/>
+ <attribute name="content">
+ <value-of select="//owl:Ontology[1]/rdfs:label[1]"/>
+ </attribute>
</element>
- <element name="p" namespace="&xhtml;">
- &en;
- <text>An ontology.</text>
+ <element name="hgroup" namespace="&xhtml;">
+ <element name="h1" namespace="&xhtml;">
+ <attribute name="lang">
+ <value-of select="rdfs:label[1]/@xml:lang"/>
+ </attribute>
+ <attribute name="xml:lang">
+ <value-of select="rdfs:label[1]/@xml:lang"/>
+ </attribute>
+ <value-of select="rdfs:label[1]"/>
+ </element>
+ <element name="p" namespace="&xhtml;">
+ &en;
+ <text>An ontology.</text>
+ </element>
</element>
- </element>
- <element name="div" namespace="&xhtml;">
- <attribute name="class">
- <text>owl</text>
- </attribute>
- <element name="dl" namespace="&xhtml;">
- <element name="div" namespace="&xhtml;">
- <element name="dt" namespace="&xhtml;">
- <element name="abbr" namespace="&xhtml;">
- &en;
- <attribute name="title">
- <text>Internationalized Resource Identifier</text>
- </attribute>
- <text>I·R·I</text>
+ <element name="div" namespace="&xhtml;">
+ <attribute name="class">
+ <text>owl</text>
+ </attribute>
+ <element name="dl" namespace="&xhtml;">
+ <element name="div" namespace="&xhtml;">
+ <element name="dt" namespace="&xhtml;">
+ <element name="abbr" namespace="&xhtml;">
+ &en;
+ <attribute name="title">
+ <text>Internationalized Resource Identifier</text>
+ </attribute>
+ <text>I·R·I</text>
+ </element>
</element>
- </element>
- <element name="dd" namespace="&xhtml;">
- <element name="a" namespace="&xhtml;">
- <attribute name="href">
- <value-of select="@rdf:about"/>
- </attribute>
- <element name="code" namespace="&xhtml;">
- <value-of select="@rdf:about"/>
+ <element name="dd" namespace="&xhtml;">
+ <element name="a" namespace="&xhtml;">
+ <attribute name="href">
+ <value-of select="@rdf:about"/>
+ </attribute>
+ <element name="code" namespace="&xhtml;">
+ <value-of select="@rdf:about"/>
+ </element>
</element>
</element>
</element>
</element>
</element>
- </element>
- <apply-templates select="rdfs:comment[1]/html:div" mode="Vocab:render-term"/>
- <element name="section" namespace="&xhtml;">
- <element name="h2" namespace="&xhtml;">
- &en;
- <text>List of Name·spaces</text>
- </element>
- <element name="table" namespace="&xhtml;">
- <element name="thead" namespace="&xhtml;">
- <element name="tr" namespace="&xhtml;">
- <element name="th" namespace="&xhtml;">
- &en;
- <attribute name="scope">
- <text>col</text>
- </attribute>
- Prefix
- </element>
- <element name="th" namespace="&xhtml;">
- &en;
- <attribute name="scope">
- <text>col</text>
- </attribute>
- Name·space I·R·I
- </element>
- </element>
+ <apply-templates select="rdfs:comment[1]/html:div" mode="Vocab:render-term"/>
+ <element name="section" namespace="&xhtml;">
+ <element name="h2" namespace="&xhtml;">
+ &en;
+ <text>List of Name·spaces</text>
</element>
- <element name="tbody" namespace="&xhtml;">
- <for-each select="shacl:declare[shacl:prefix!='']">
- <sort select="shacl:prefix"/>
+ <element name="table" namespace="&xhtml;">
+ <element name="thead" namespace="&xhtml;">
<element name="tr" namespace="&xhtml;">
<element name="th" namespace="&xhtml;">
+ &en;
<attribute name="scope">
- <text>row</text>
+ <text>col</text>
</attribute>
- <element name="code" namespace="&xhtml;">
- <value-of select="shacl:prefix"/>
- <text>:</text>
- </element>
+ Prefix
</element>
- <element name="td" namespace="&xhtml;">
- <element name="code" namespace="&xhtml;">
- <value-of select="shacl:namespace"/>
- </element>
+ <element name="th" namespace="&xhtml;">
+ &en;
+ <attribute name="scope">
+ <text>col</text>
+ </attribute>
+ Name·space I·R·I
</element>
</element>
- </for-each>
+ </element>
+ <element name="tbody" namespace="&xhtml;">
+ <for-each select="shacl:declare[shacl:prefix!='']">
+ <sort select="shacl:prefix"/>
+ <element name="tr" namespace="&xhtml;">
+ <element name="th" namespace="&xhtml;">
+ <attribute name="scope">
+ <text>row</text>
+ </attribute>
+ <element name="code" namespace="&xhtml;">
+ <value-of select="shacl:prefix"/>
+ <text>:</text>
+ </element>
+ </element>
+ <element name="td" namespace="&xhtml;">
+ <element name="code" namespace="&xhtml;">
+ <value-of select="shacl:namespace"/>
+ </element>
+ </element>
+ </element>
+ </for-each>
+ </element>
</element>
</element>
- </element>
+ <element name="section" namespace="&xhtml;">
+ <element name="h2" namespace="&xhtml;">
+ &en;
+ <text>Terms Defined By </text>
+ <element name="cite" namespace="&xhtml;">
+ <attribute name="lang">
+ <value-of select="rdfs:label[1]/@xml:lang"/>
+ </attribute>
+ <attribute name="xml:lang">
+ <value-of select="rdfs:label[1]/@xml:lang"/>
+ </attribute>
+ <value-of select="rdfs:label[1]"/>
+ </element>
+ </element>
+ <call-template name="Vocab:list-all-terms"/>
+ </element>
+ </for-each>
<element name="section" namespace="&xhtml;">
<element name="h2" namespace="&xhtml;">
&en;
- <text>Terms Defined By </text>
- <element name="cite" namespace="&xhtml;">
- <attribute name="lang">
- <value-of select="rdfs:label[1]/@xml:lang"/>
- </attribute>
- <attribute name="xml:lang">
- <value-of select="rdfs:label[1]/@xml:lang"/>
- </attribute>
- <value-of select="rdfs:label[1]"/>
- </element>
+ <text>Terms Defined Else·where</text>
</element>
- <call-template name="Vocab:list-all-terms"/>
- </element>
- </for-each>
- <element name="section" namespace="&xhtml;">
- <element name="h2" namespace="&xhtml;">
- &en;
- <text>Terms Defined Else·where</text>
- </element>
- <for-each select="//owl:NamedIndividual">
- <sort select="rdfs:label" lang="en"/>
- <if test="(//rdfs:isDefinedBy|//rdfs:isDefinedBy/anno:ResourceSelection/anno:hasSource)[string(@rdf:resource)=string(current()/@rdf:about)]">
- <element name="section" namespace="&xhtml;">
- <element name="h3" namespace="&xhtml;">
- <element name="a" namespace="&xhtml;">
- <attribute name="href">
- <value-of select="@rdf:about"/>
- </attribute>
- <element name="cite" namespace="&xhtml;">
- <attribute name="lang">
- <value-of select="rdfs:label[1]/@xml:lang"/>
- </attribute>
- <attribute name="xml:lang">
- <value-of select="rdfs:label[1]/@xml:lang"/>
+ <for-each select="//owl:NamedIndividual">
+ <sort select="rdfs:label" lang="en"/>
+ <if test="(//rdfs:isDefinedBy|//rdfs:isDefinedBy/anno:ResourceSelection/anno:hasSource)[string(@rdf:resource)=string(current()/@rdf:about)]">
+ <element name="section" namespace="&xhtml;">
+ <element name="h3" namespace="&xhtml;">
+ <element name="a" namespace="&xhtml;">
+ <attribute name="href">
+ <value-of select="@rdf:about"/>
</attribute>
- <value-of select="rdfs:label[1]"/>
+ <element name="cite" namespace="&xhtml;">
+ <attribute name="lang">
+ <value-of select="rdfs:label[1]/@xml:lang"/>
+ </attribute>
+ <attribute name="xml:lang">
+ <value-of select="rdfs:label[1]/@xml:lang"/>
+ </attribute>
+ <value-of select="rdfs:label[1]"/>
+ </element>
</element>
</element>
+ <apply-templates select="rdfs:comment[1]/html:div" mode="Vocab:render-term"/>
+ <call-template name="Vocab:list-all-terms">
+ <with-param name="source" select="@rdf:about"/>
+ </call-template>
</element>
- <apply-templates select="rdfs:comment[1]/html:div" mode="Vocab:render-term"/>
- <call-template name="Vocab:list-all-terms">
- <with-param name="source" select="@rdf:about"/>
- </call-template>
- </element>
- </if>
- </for-each>
- </element>
- </for-each>
+ </if>
+ </for-each>
+ </element>
+ </for-each>
+ </copy>
</template>
<template match="*[@rdf:about and (self::owl:AnnotationProperty or self::owl:Class or self::owl:DatatypeProperty or self::owl:NamedIndividual or self::owl:ObjectProperty or self::rdfs:Datatype)]" mode="Vocab:render-term" priority="2">
<variable name="root" select="/"/>
</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()<last()">
+ <text>, </text>
+ </if>
+ </for-each>
+ </element>
+ </for-each>
+ </element>
+ </if>
<if test="$inverses">
<choose>
<when test="$kind='class'">
</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'">
</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;">
</for-each>
</element>
</if>
+ <if test="skos:broader">
+ <element name="div" namespace="&xhtml;">
+ <element name="dt" namespace="&xhtml;">
+ &en;
+ <text>Has Broader</text>
+ </element>
+ <for-each select="skos:broader">
+ <element name="dd" namespace="&xhtml;">
+ <call-template name="Vocab:link-to">
+ <with-param name="resource" select="string(@rdf:resource)"/>
+ <with-param name="kind" select="'individual'"/>
+ </call-template>
+ </element>
+ </for-each>
+ </element>
+ </if>
+ <if test="skos:narrower">
+ <element name="div" namespace="&xhtml;">
+ <element name="dt" namespace="&xhtml;">
+ &en;
+ <text>Has Narrower</text>
+ </element>
+ <for-each select="skos:narrower">
+ <element name="dd" namespace="&xhtml;">
+ <call-template name="Vocab:link-to">
+ <with-param name="resource" select="string(@rdf:resource)"/>
+ <with-param name="kind" select="'individual'"/>
+ </call-template>
+ </element>
+ </for-each>
+ </element>
+ </if>
<if test="rdfs:isDefinedBy[not(starts-with(@rdf:resource, $base-iri))]">
<element name="div" namespace="&xhtml;">
<element name="dt" namespace="&xhtml;">