1 <?xml encoding="UTF-8"?>
 
   3 SPDX-FileCopyrightText: 2024, 2025 Lady <https://www.ladys.computer/about/#lady>
 
   4 SPDX-License-Identifier: CC0-1.0
 
   8 <!ENTITY % blocks '(list|p|table)+'>
 
   9 <!ENTITY % inlines 'code|em|ptr|ref|resource|strong|value'>
 
  10 <!ELEMENT p (#PCDATA|%inlines;|note)*>
 
  11 <!ELEMENT code (#PCDATA)>
 
  12 <!ELEMENT em (#PCDATA)>
 
  13 <!ELEMENT strong (#PCDATA)>
 
  14 <!ELEMENT var (#PCDATA)>
 
  17 <!ELEMENT note (%blocks;)>
 
  25         target CDATA #REQUIRED
 
  26         type (class|property|individual) #IMPLIED
 
  28 <!ELEMENT ref (#PCDATA)>
 
  30         target CDATA #REQUIRED
 
  31         type (class|property|individual) #IMPLIED
 
  35 <!ELEMENT table (row)+>
 
  36 <!ELEMENT row (cell)+>
 
  38         role (label|data) "data"
 
  40 <!ELEMENT cell (#PCDATA|%inlines;)*>
 
  42         role (label|data) "data"
 
  46 <!ELEMENT list (item)*>
 
  48         rend (bulleted|numbered) "bulleted"
 
  50 <!ELEMENT item (%blocks;)>
 
  53 <!ELEMENT SpecificResource EMPTY><!-- this actually becomes anno:ResourceSelection, not anno:SpecificResource, but changing the name to match would require editing a lot of files -->
 
  54 <!ATTLIST SpecificResource
 
  55   source CDATA #REQUIRED
 
  56   fragment CDATA #IMPLIED
 
  60 <!ELEMENT broader (resource)>
 
  61 <!ELEMENT inScheme (resource)>
 
  62 <!ELEMENT narrower (resource)>
 
  65 <!ELEMENT declare (prefix,namespace)>
 
  66 <!ELEMENT namespace (#PCDATA)>
 
  67 <!ELEMENT prefix (#PCDATA)>
 
  70 <!ENTITY % annotations '(label*,comment*,isDefinedBy*)'>
 
  71 <!ELEMENT comment (%blocks;)>
 
  73         xml:lang NMTOKEN #REQUIRED
 
  75 <!ELEMENT isDefinedBy (resource|SpecificResource)>
 
  76 <!ELEMENT label (#PCDATA)>
 
  78         xml:lang NMTOKEN #REQUIRED
 
  81 <!-- Helper Elements -->
 
  82 <!ELEMENT resource (#PCDATA)>
 
  86 <!ELEMENT value (#PCDATA)>
 
  88         datatype CDATA #IMPLIED
 
  89         xml:lang NMTOKEN #IMPLIED
 
  93 <!ELEMENT allValuesFrom (Class|Datatype|Restriction|resource)>
 
  94 <!ELEMENT assertionProperty (resource)>
 
  95 <!ELEMENT cardinality (#PCDATA)>
 
  96 <!ELEMENT complementOf (Class|Restriction|resource)>
 
  97 <!ELEMENT datatypeComplementOf (Datatype|resource)>
 
  98 <!ELEMENT differentFrom (resource)>
 
  99 <!ELEMENT disjointUnionOf (Class|Restriction|resource)+>
 
 100 <!ELEMENT disjointWith (Class|Datatype|Restriction|resource)>
 
 101 <!ELEMENT domain (Class|Restriction|resource)>
 
 102 <!ELEMENT equivalentClass (Class|Datatype|Restriction|resource)>
 
 103 <!ELEMENT equivalentProperty (DatatypeProperty|ObjectProperty|resource)>
 
 104 <!ELEMENT hasKey (DatatypeProperty|ObjectProperty|resource)+>
 
 105 <!ELEMENT hasSelf EMPTY>
 
 106 <!ELEMENT hasValue (resource|value)>
 
 107 <!ELEMENT intersectionOf (Class|Datatype|Restriction|resource)+>
 
 108 <!ELEMENT inverseOf (Class|Datatype|Restriction|resource)>
 
 109 <!ELEMENT maxCardinality (#PCDATA)>
 
 110 <!ELEMENT maxQualifiedCardinality (#PCDATA)>
 
 111 <!ELEMENT members (Class|Restriction|resource)+>
 
 112 <!ELEMENT minCardinality (#PCDATA)>
 
 113 <!ELEMENT minQualifiedCardinality (#PCDATA)>
 
 114 <!ELEMENT onClass (Class|Restriction|resource)>
 
 115 <!ELEMENT onDataRange (Datatype|resource)>
 
 116 <!ELEMENT onDatatype (resource)>
 
 117 <!ELEMENT onProperty (ObjectProperty|DatatypeProperty|resource)>
 
 118 <!ELEMENT oneOf (Class|Datatype|Restriction|resource)+>
 
 119 <!ELEMENT propertyChainAxiom (ObjectProperty|resource)+>
 
 120 <!ELEMENT propertyDisjointWith (DatatypeProperty|ObjectProperty|resource)>
 
 121 <!ELEMENT qualifiedCardinality (#PCDATA)>
 
 122 <!ELEMENT range (Class|Datatype|Restriction|resource)>
 
 123 <!ELEMENT sameAs (resource)>
 
 124 <!ELEMENT someValuesFrom (Class|Datatype|Restriction|resource)>
 
 125 <!ELEMENT sourceIndividual (resource)>
 
 126 <!ELEMENT subClassOf (Class|Restriction|resource)>
 
 127 <!ELEMENT subPropertyOf (DatatypeProperty|ObjectProperty|resource)>
 
 128 <!ELEMENT superClassOf (Class|Restriction)> <!-- inverse subClassOf; only use for anonymous subclasses -->
 
 129 <!ELEMENT targetIndividual (resource)>
 
 130 <!ELEMENT type (Class|Restriction|resource)>
 
 131 <!ELEMENT unionOf (Class|Datatype|Restriction|resource)+>
 
 132 <!ELEMENT withRestrictions (langRange|length|maxExclusive|maxInclusive|maxLength|minExclusive|minInclusive|minLength|pattern)+>
 
 134 <!-- Restrictions -->
 
 135 <!ELEMENT langRange (#PCDATA)>
 
 136 <!ELEMENT length (#PCDATA)>
 
 137 <!ELEMENT maxExclusive (#PCDATA)>
 
 138 <!ATTLIST maxExclusive
 
 139         datatype CDATA #REQUIRED
 
 141 <!ELEMENT maxInclusive (#PCDATA)>
 
 142 <!ATTLIST maxInclusive
 
 143         datatype CDATA #REQUIRED
 
 145 <!ELEMENT maxLength (#PCDATA)>
 
 146 <!ELEMENT minExclusive (#PCDATA)>
 
 147 <!ATTLIST minExclusive
 
 148         datatype CDATA #REQUIRED
 
 150 <!ELEMENT minInclusive (#PCDATA)>
 
 151 <!ATTLIST minInclusive
 
 152         datatype CDATA #REQUIRED
 
 154 <!ELEMENT minLength (#PCDATA)>
 
 155 <!ELEMENT pattern (#PCDATA)>
 
 157 <!-- Axiom Classes -->
 
 158 <!ELEMENT AllDifferent (members)>
 
 159 <!ELEMENT AllDisjointClasses (members)>
 
 160 <!ELEMENT AllDisjointProperties (members)>
 
 161 <!ELEMENT NegativeObjectPropertyAssertion (assertionProperty,sourceIndividual,targetIndividual)>
 
 163 <!-- Restrictions -->
 
 164 <!ELEMENT Restriction (onProperty,(((minQualifiedCardinality|maxQualifiedCardinality|qualifiedCardinality),(onClass|onDataRange))|allValuesFrom|cardinality|hasValue|hasSelf|minCardinality|maxCardinality|someValuesFrom))>
 
 166 <!-- Declarations -->
 
 167 <!ELEMENT Class (%annotations;,((equivalentClass*,disjointUnionOf*,subClassOf*,superClassOf*,disjointWith*,hasKey*)|complementOf|intersectionOf|oneOf|unionOf))>
 
 170         status (plumbing|unstable|testing|stable|archaic) #IMPLIED
 
 172 <!ELEMENT Datatype (%annotations;,(equivalentClass|datatypeComplementOf|intersectionOf|unionOf|(onDatatype,withRestrictions)))> <!-- oneOf not supported; lists of literals are difficult -->
 
 175         status (plumbing|unstable|testing|stable|archaic) #IMPLIED
 
 177 <!ELEMENT AnnotationProperty (%annotations;,subPropertyOf*,domain*,range*)>
 
 178 <!ATTLIST AnnotationProperty
 
 180         status (plumbing|unstable|testing|stable|archaic) #IMPLIED
 
 182 <!ELEMENT ObjectProperty (%annotations;,equivalentProperty*,subPropertyOf*,inverseOf*,propertyDisjointWith*,propertyChainAxiom*,domain*,range*)>
 
 183 <!ATTLIST ObjectProperty
 
 184         asymmetric (no|yes) "no"
 
 185         functional (no|yes) "no"
 
 186         inverseFunctional (no|yes) "no"
 
 187         irreflexive (no|yes) "no"
 
 189         reflexive (no|yes) "no"
 
 190         status (plumbing|unstable|testing|stable|archaic) #IMPLIED
 
 191         symmetric (no|yes) "no"
 
 192         transitive (no|yes) "no"
 
 194 <!ELEMENT DatatypeProperty (%annotations;,equivalentProperty*,subPropertyOf*,propertyDisjointWith*,domain*,range*)>
 
 195 <!ATTLIST DatatypeProperty
 
 196         functional (no|yes) "no"
 
 198         status (plumbing|unstable|testing|stable|archaic) #IMPLIED
 
 200 <!ELEMENT NamedIndividual (%annotations;,type*,sameAs*,differentFrom*,inScheme*,broader*,narrower*)>
 
 201 <!ATTLIST NamedIndividual
 
 203         status (plumbing|unstable|testing|stable|archaic) #IMPLIED
 
 207 <!ELEMENT Ontology (%annotations;,declare*)>