at.margin.note
Schema Diff
+58 -160
Compatibility Analysis
Breaking Changes Detected
78 breaking changes, 34 non-breaking changes.
Breaking Changes (78)
- RemovedVertex RemovedVertex { vertex_id: "at.margin.note#cssSelector" }
- RemovedVertex RemovedVertex { vertex_id: "at.margin.note#cssSelector.type" }
- RemovedVertex RemovedVertex { vertex_id: "at.margin.note#cssSelector.value" }
- RemovedVertex RemovedVertex { vertex_id: "at.margin.note#fragmentSelector" }
- RemovedVertex RemovedVertex { vertex_id: "at.margin.note#fragmentSelector.conformsTo" }
- RemovedVertex RemovedVertex { vertex_id: "at.margin.note#fragmentSelector.type" }
- RemovedVertex RemovedVertex { vertex_id: "at.margin.note#fragmentSelector.value" }
- RemovedVertex RemovedVertex { vertex_id: "at.margin.note#rangeSelector" }
- RemovedVertex RemovedVertex { vertex_id: "at.margin.note#rangeSelector.endSelector" }
- RemovedVertex RemovedVertex { vertex_id: "at.margin.note#rangeSelector.endSelector:variant0" }
- RemovedVertex RemovedVertex { vertex_id: "at.margin.note#rangeSelector.endSelector:variant1" }
- RemovedVertex RemovedVertex { vertex_id: "at.margin.note#rangeSelector.endSelector:variant2" }
- RemovedVertex RemovedVertex { vertex_id: "at.margin.note#rangeSelector.endSelector:variant3" }
- RemovedVertex RemovedVertex { vertex_id: "at.margin.note#rangeSelector.startSelector" }
- RemovedVertex RemovedVertex { vertex_id: "at.margin.note#rangeSelector.startSelector:variant0" }
- RemovedVertex RemovedVertex { vertex_id: "at.margin.note#rangeSelector.startSelector:variant1" }
- RemovedVertex RemovedVertex { vertex_id: "at.margin.note#rangeSelector.startSelector:variant2" }
- RemovedVertex RemovedVertex { vertex_id: "at.margin.note#rangeSelector.startSelector:variant3" }
- RemovedVertex RemovedVertex { vertex_id: "at.margin.note#rangeSelector.type" }
- RemovedVertex RemovedVertex { vertex_id: "at.margin.note#target.selector:variant0" }
- RemovedVertex RemovedVertex { vertex_id: "at.margin.note#target.selector:variant1" }
- RemovedVertex RemovedVertex { vertex_id: "at.margin.note#target.selector:variant2" }
- RemovedVertex RemovedVertex { vertex_id: "at.margin.note#target.selector:variant3" }
- RemovedVertex RemovedVertex { vertex_id: "at.margin.note#target.selector:variant4" }
- RemovedVertex RemovedVertex { vertex_id: "at.margin.note#target.selector:variant5" }
- RemovedVertex RemovedVertex { vertex_id: "at.margin.note#textPositionSelector" }
- RemovedVertex RemovedVertex { vertex_id: "at.margin.note#textPositionSelector.end" }
- RemovedVertex RemovedVertex { vertex_id: "at.margin.note#textPositionSelector.start" }
- RemovedVertex RemovedVertex { vertex_id: "at.margin.note#textPositionSelector.type" }
- RemovedVertex RemovedVertex { vertex_id: "at.margin.note#textQuoteSelector" }
- RemovedVertex RemovedVertex { vertex_id: "at.margin.note#textQuoteSelector.exact" }
- RemovedVertex RemovedVertex { vertex_id: "at.margin.note#textQuoteSelector.prefix" }
- RemovedVertex RemovedVertex { vertex_id: "at.margin.note#textQuoteSelector.suffix" }
- RemovedVertex RemovedVertex { vertex_id: "at.margin.note#textQuoteSelector.type" }
- RemovedVertex RemovedVertex { vertex_id: "at.margin.note#xpathSelector" }
- RemovedVertex RemovedVertex { vertex_id: "at.margin.note#xpathSelector.type" }
- RemovedVertex RemovedVertex { vertex_id: "at.margin.note#xpathSelector.value" }
- RemovedEdge RemovedEdge { src: "at.margin.note#cssSelector", tgt: "at.margin.note#cssSelector.type", kind: "prop", name: Some("type") }
- RemovedEdge RemovedEdge { src: "at.margin.note#cssSelector", tgt: "at.margin.note#cssSelector.value", kind: "prop", name: Some("value") }
- RemovedEdge RemovedEdge { src: "at.margin.note#fragmentSelector", tgt: "at.margin.note#fragmentSelector.conformsTo", kind: "prop", name: Some("conformsTo") }
- RemovedEdge RemovedEdge { src: "at.margin.note#fragmentSelector", tgt: "at.margin.note#fragmentSelector.type", kind: "prop", name: Some("type") }
- RemovedEdge RemovedEdge { src: "at.margin.note#fragmentSelector", tgt: "at.margin.note#fragmentSelector.value", kind: "prop", name: Some("value") }
- RemovedEdge RemovedEdge { src: "at.margin.note#rangeSelector", tgt: "at.margin.note#rangeSelector.endSelector", kind: "prop", name: Some("endSelector") }
- RemovedEdge RemovedEdge { src: "at.margin.note#rangeSelector", tgt: "at.margin.note#rangeSelector.startSelector", kind: "prop", name: Some("startSelector") }
- RemovedEdge RemovedEdge { src: "at.margin.note#rangeSelector", tgt: "at.margin.note#rangeSelector.type", kind: "prop", name: Some("type") }
- RemovedEdge RemovedEdge { src: "at.margin.note#rangeSelector.endSelector", tgt: "at.margin.note#rangeSelector.endSelector:variant0", kind: "variant", name: Some("#textQuoteSelector") }
- RemovedEdge RemovedEdge { src: "at.margin.note#rangeSelector.endSelector", tgt: "at.margin.note#rangeSelector.endSelector:variant1", kind: "variant", name: Some("#textPositionSelector") }
- RemovedEdge RemovedEdge { src: "at.margin.note#rangeSelector.endSelector", tgt: "at.margin.note#rangeSelector.endSelector:variant2", kind: "variant", name: Some("#cssSelector") }
- RemovedEdge RemovedEdge { src: "at.margin.note#rangeSelector.endSelector", tgt: "at.margin.note#rangeSelector.endSelector:variant3", kind: "variant", name: Some("#xpathSelector") }
- RemovedEdge RemovedEdge { src: "at.margin.note#rangeSelector.startSelector", tgt: "at.margin.note#rangeSelector.startSelector:variant0", kind: "variant", name: Some("#textQuoteSelector") }
- RemovedEdge RemovedEdge { src: "at.margin.note#rangeSelector.startSelector", tgt: "at.margin.note#rangeSelector.startSelector:variant1", kind: "variant", name: Some("#textPositionSelector") }
- RemovedEdge RemovedEdge { src: "at.margin.note#rangeSelector.startSelector", tgt: "at.margin.note#rangeSelector.startSelector:variant2", kind: "variant", name: Some("#cssSelector") }
- RemovedEdge RemovedEdge { src: "at.margin.note#rangeSelector.startSelector", tgt: "at.margin.note#rangeSelector.startSelector:variant3", kind: "variant", name: Some("#xpathSelector") }
- RemovedEdge RemovedEdge { src: "at.margin.note#target.selector", tgt: "at.margin.note#target.selector:variant0", kind: "variant", name: Some("#textQuoteSelector") }
- RemovedEdge RemovedEdge { src: "at.margin.note#target.selector", tgt: "at.margin.note#target.selector:variant1", kind: "variant", name: Some("#textPositionSelector") }
- RemovedEdge RemovedEdge { src: "at.margin.note#target.selector", tgt: "at.margin.note#target.selector:variant2", kind: "variant", name: Some("#cssSelector") }
- RemovedEdge RemovedEdge { src: "at.margin.note#target.selector", tgt: "at.margin.note#target.selector:variant3", kind: "variant", name: Some("#xpathSelector") }
- RemovedEdge RemovedEdge { src: "at.margin.note#target.selector", tgt: "at.margin.note#target.selector:variant4", kind: "variant", name: Some("#fragmentSelector") }
- RemovedEdge RemovedEdge { src: "at.margin.note#target.selector", tgt: "at.margin.note#target.selector:variant5", kind: "variant", name: Some("#rangeSelector") }
- RemovedEdge RemovedEdge { src: "at.margin.note#textPositionSelector", tgt: "at.margin.note#textPositionSelector.end", kind: "prop", name: Some("end") }
- RemovedEdge RemovedEdge { src: "at.margin.note#textPositionSelector", tgt: "at.margin.note#textPositionSelector.start", kind: "prop", name: Some("start") }
- RemovedEdge RemovedEdge { src: "at.margin.note#textPositionSelector", tgt: "at.margin.note#textPositionSelector.type", kind: "prop", name: Some("type") }
- RemovedEdge RemovedEdge { src: "at.margin.note#textQuoteSelector", tgt: "at.margin.note#textQuoteSelector.exact", kind: "prop", name: Some("exact") }
- RemovedEdge RemovedEdge { src: "at.margin.note#textQuoteSelector", tgt: "at.margin.note#textQuoteSelector.prefix", kind: "prop", name: Some("prefix") }
- RemovedEdge RemovedEdge { src: "at.margin.note#textQuoteSelector", tgt: "at.margin.note#textQuoteSelector.suffix", kind: "prop", name: Some("suffix") }
- RemovedEdge RemovedEdge { src: "at.margin.note#textQuoteSelector", tgt: "at.margin.note#textQuoteSelector.type", kind: "prop", name: Some("type") }
- RemovedEdge RemovedEdge { src: "at.margin.note#xpathSelector", tgt: "at.margin.note#xpathSelector.type", kind: "prop", name: Some("type") }
- RemovedEdge RemovedEdge { src: "at.margin.note#xpathSelector", tgt: "at.margin.note#xpathSelector.value", kind: "prop", name: Some("value") }
- KindChanged KindChanged { vertex_id: "at.margin.note#target.selector", old_kind: "union", new_kind: "ref" }
- ConstraintAdded ConstraintAdded { vertex_id: "at.margin.note#selector.value", sort: "maxLength", value: "2000" }
- ConstraintAdded ConstraintAdded { vertex_id: "at.margin.note#selector.prefix", sort: "maxLength", value: "500" }
- ConstraintAdded ConstraintAdded { vertex_id: "at.margin.note#selector.prefix", sort: "maxGraphemes", value: "150" }
- ConstraintAdded ConstraintAdded { vertex_id: "at.margin.note#selector.exact", sort: "maxLength", value: "5000" }
- ConstraintAdded ConstraintAdded { vertex_id: "at.margin.note#selector.exact", sort: "maxGraphemes", value: "1500" }
- ConstraintAdded ConstraintAdded { vertex_id: "at.margin.note#selector.start", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "at.margin.note#selector.end", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "at.margin.note#selector.suffix", sort: "maxLength", value: "500" }
- ConstraintAdded ConstraintAdded { vertex_id: "at.margin.note#selector.suffix", sort: "maxGraphemes", value: "150" }
Non-Breaking Changes (34)
- AddedVertex AddedVertex { vertex_id: "at.margin.note#selector" }
- AddedVertex AddedVertex { vertex_id: "at.margin.note#selector.conformsTo" }
- AddedVertex AddedVertex { vertex_id: "at.margin.note#selector.end" }
- AddedVertex AddedVertex { vertex_id: "at.margin.note#selector.exact" }
- AddedVertex AddedVertex { vertex_id: "at.margin.note#selector.prefix" }
- AddedVertex AddedVertex { vertex_id: "at.margin.note#selector.start" }
- AddedVertex AddedVertex { vertex_id: "at.margin.note#selector.suffix" }
- AddedVertex AddedVertex { vertex_id: "at.margin.note#selector.type" }
- AddedVertex AddedVertex { vertex_id: "at.margin.note#selector.value" }
- AddedEdge AddedEdge { src: "at.margin.note#selector", tgt: "at.margin.note#selector.conformsTo", kind: "prop", name: Some("conformsTo") }
- AddedEdge AddedEdge { src: "at.margin.note#selector", tgt: "at.margin.note#selector.end", kind: "prop", name: Some("end") }
- AddedEdge AddedEdge { src: "at.margin.note#selector", tgt: "at.margin.note#selector.exact", kind: "prop", name: Some("exact") }
- AddedEdge AddedEdge { src: "at.margin.note#selector", tgt: "at.margin.note#selector.prefix", kind: "prop", name: Some("prefix") }
- AddedEdge AddedEdge { src: "at.margin.note#selector", tgt: "at.margin.note#selector.start", kind: "prop", name: Some("start") }
- AddedEdge AddedEdge { src: "at.margin.note#selector", tgt: "at.margin.note#selector.suffix", kind: "prop", name: Some("suffix") }
- AddedEdge AddedEdge { src: "at.margin.note#selector", tgt: "at.margin.note#selector.type", kind: "prop", name: Some("type") }
- AddedEdge AddedEdge { src: "at.margin.note#selector", tgt: "at.margin.note#selector.value", kind: "prop", name: Some("value") }
- ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#textQuoteSelector.exact", sort: "maxGraphemes" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#textQuoteSelector.exact", sort: "maxLength" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#cssSelector.value", sort: "maxLength" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#textPositionSelector.type", sort: "const" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#cssSelector.type", sort: "const" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#fragmentSelector.type", sort: "const" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#textQuoteSelector.suffix", sort: "maxLength" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#textQuoteSelector.suffix", sort: "maxGraphemes" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#xpathSelector.type", sort: "const" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#textQuoteSelector.type", sort: "const" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#rangeSelector.type", sort: "const" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#fragmentSelector.value", sort: "maxLength" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#textQuoteSelector.prefix", sort: "maxLength" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#textQuoteSelector.prefix", sort: "maxGraphemes" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#xpathSelector.value", sort: "maxLength" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#textPositionSelector.start", sort: "minimum" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#textPositionSelector.end", sort: "minimum" }
Migration Guidance
Removed Elements
RemovedVertex { vertex_id: "at.margin.note#cssSelector" }RemovedVertex { vertex_id: "at.margin.note#cssSelector.type" }RemovedVertex { vertex_id: "at.margin.note#cssSelector.value" }RemovedVertex { vertex_id: "at.margin.note#fragmentSelector" }RemovedVertex { vertex_id: "at.margin.note#fragmentSelector.conformsTo" }RemovedVertex { vertex_id: "at.margin.note#fragmentSelector.type" }RemovedVertex { vertex_id: "at.margin.note#fragmentSelector.value" }RemovedVertex { vertex_id: "at.margin.note#rangeSelector" }RemovedVertex { vertex_id: "at.margin.note#rangeSelector.endSelector" }RemovedVertex { vertex_id: "at.margin.note#rangeSelector.endSelector:variant0" }RemovedVertex { vertex_id: "at.margin.note#rangeSelector.endSelector:variant1" }RemovedVertex { vertex_id: "at.margin.note#rangeSelector.endSelector:variant2" }RemovedVertex { vertex_id: "at.margin.note#rangeSelector.endSelector:variant3" }RemovedVertex { vertex_id: "at.margin.note#rangeSelector.startSelector" }RemovedVertex { vertex_id: "at.margin.note#rangeSelector.startSelector:variant0" }RemovedVertex { vertex_id: "at.margin.note#rangeSelector.startSelector:variant1" }RemovedVertex { vertex_id: "at.margin.note#rangeSelector.startSelector:variant2" }RemovedVertex { vertex_id: "at.margin.note#rangeSelector.startSelector:variant3" }RemovedVertex { vertex_id: "at.margin.note#rangeSelector.type" }RemovedVertex { vertex_id: "at.margin.note#target.selector:variant0" }RemovedVertex { vertex_id: "at.margin.note#target.selector:variant1" }RemovedVertex { vertex_id: "at.margin.note#target.selector:variant2" }RemovedVertex { vertex_id: "at.margin.note#target.selector:variant3" }RemovedVertex { vertex_id: "at.margin.note#target.selector:variant4" }RemovedVertex { vertex_id: "at.margin.note#target.selector:variant5" }RemovedVertex { vertex_id: "at.margin.note#textPositionSelector" }RemovedVertex { vertex_id: "at.margin.note#textPositionSelector.end" }RemovedVertex { vertex_id: "at.margin.note#textPositionSelector.start" }RemovedVertex { vertex_id: "at.margin.note#textPositionSelector.type" }RemovedVertex { vertex_id: "at.margin.note#textQuoteSelector" }RemovedVertex { vertex_id: "at.margin.note#textQuoteSelector.exact" }RemovedVertex { vertex_id: "at.margin.note#textQuoteSelector.prefix" }RemovedVertex { vertex_id: "at.margin.note#textQuoteSelector.suffix" }RemovedVertex { vertex_id: "at.margin.note#textQuoteSelector.type" }RemovedVertex { vertex_id: "at.margin.note#xpathSelector" }RemovedVertex { vertex_id: "at.margin.note#xpathSelector.type" }RemovedVertex { vertex_id: "at.margin.note#xpathSelector.value" }
Added Elements
AddedVertex { vertex_id: "at.margin.note#selector" }AddedVertex { vertex_id: "at.margin.note#selector.conformsTo" }AddedVertex { vertex_id: "at.margin.note#selector.end" }AddedVertex { vertex_id: "at.margin.note#selector.exact" }AddedVertex { vertex_id: "at.margin.note#selector.prefix" }AddedVertex { vertex_id: "at.margin.note#selector.start" }AddedVertex { vertex_id: "at.margin.note#selector.suffix" }AddedVertex { vertex_id: "at.margin.note#selector.type" }AddedVertex { vertex_id: "at.margin.note#selector.value" }
Constraint Changes
- ConstraintAdded ConstraintAdded { vertex_id: "at.margin.note#selector.start", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "at.margin.note#selector.exact", sort: "maxGraphemes", value: "1500" }
- ConstraintAdded ConstraintAdded { vertex_id: "at.margin.note#selector.exact", sort: "maxLength", value: "5000" }
- ConstraintAdded ConstraintAdded { vertex_id: "at.margin.note#selector.value", sort: "maxLength", value: "2000" }
- ConstraintAdded ConstraintAdded { vertex_id: "at.margin.note#selector.prefix", sort: "maxLength", value: "500" }
- ConstraintAdded ConstraintAdded { vertex_id: "at.margin.note#selector.prefix", sort: "maxGraphemes", value: "150" }
- ConstraintAdded ConstraintAdded { vertex_id: "at.margin.note#selector.suffix", sort: "maxLength", value: "500" }
- ConstraintAdded ConstraintAdded { vertex_id: "at.margin.note#selector.suffix", sort: "maxGraphemes", value: "150" }
- ConstraintAdded ConstraintAdded { vertex_id: "at.margin.note#selector.end", sort: "minimum", value: "0" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#xpathSelector.value", sort: "maxLength" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#textPositionSelector.start", sort: "minimum" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#textQuoteSelector.type", sort: "const" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#xpathSelector.type", sort: "const" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#textQuoteSelector.exact", sort: "maxLength" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#textQuoteSelector.exact", sort: "maxGraphemes" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#cssSelector.type", sort: "const" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#textQuoteSelector.suffix", sort: "maxLength" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#textQuoteSelector.suffix", sort: "maxGraphemes" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#cssSelector.value", sort: "maxLength" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#fragmentSelector.type", sort: "const" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#textPositionSelector.end", sort: "minimum" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#rangeSelector.type", sort: "const" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#fragmentSelector.value", sort: "maxLength" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#textQuoteSelector.prefix", sort: "maxLength" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#textQuoteSelector.prefix", sort: "maxGraphemes" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "at.margin.note#textPositionSelector.type", sort: "const" }
Additional Notes
- Breaking: RemovedEdge { src: "at.margin.note#cssSelector", tgt: "at.margin.note#cssSelector.type", kind: "prop", name: Some("type") }
- Breaking: RemovedEdge { src: "at.margin.note#cssSelector", tgt: "at.margin.note#cssSelector.value", kind: "prop", name: Some("value") }
- Breaking: RemovedEdge { src: "at.margin.note#fragmentSelector", tgt: "at.margin.note#fragmentSelector.conformsTo", kind: "prop", name: Some("conformsTo") }
- Breaking: RemovedEdge { src: "at.margin.note#fragmentSelector", tgt: "at.margin.note#fragmentSelector.type", kind: "prop", name: Some("type") }
- Breaking: RemovedEdge { src: "at.margin.note#fragmentSelector", tgt: "at.margin.note#fragmentSelector.value", kind: "prop", name: Some("value") }
- Breaking: RemovedEdge { src: "at.margin.note#rangeSelector", tgt: "at.margin.note#rangeSelector.endSelector", kind: "prop", name: Some("endSelector") }
- Breaking: RemovedEdge { src: "at.margin.note#rangeSelector", tgt: "at.margin.note#rangeSelector.startSelector", kind: "prop", name: Some("startSelector") }
- Breaking: RemovedEdge { src: "at.margin.note#rangeSelector", tgt: "at.margin.note#rangeSelector.type", kind: "prop", name: Some("type") }
- Breaking: RemovedEdge { src: "at.margin.note#rangeSelector.endSelector", tgt: "at.margin.note#rangeSelector.endSelector:variant0", kind: "variant", name: Some("#textQuoteSelector") }
- Breaking: RemovedEdge { src: "at.margin.note#rangeSelector.endSelector", tgt: "at.margin.note#rangeSelector.endSelector:variant1", kind: "variant", name: Some("#textPositionSelector") }
- Breaking: RemovedEdge { src: "at.margin.note#rangeSelector.endSelector", tgt: "at.margin.note#rangeSelector.endSelector:variant2", kind: "variant", name: Some("#cssSelector") }
- Breaking: RemovedEdge { src: "at.margin.note#rangeSelector.endSelector", tgt: "at.margin.note#rangeSelector.endSelector:variant3", kind: "variant", name: Some("#xpathSelector") }
- Breaking: RemovedEdge { src: "at.margin.note#rangeSelector.startSelector", tgt: "at.margin.note#rangeSelector.startSelector:variant0", kind: "variant", name: Some("#textQuoteSelector") }
- Breaking: RemovedEdge { src: "at.margin.note#rangeSelector.startSelector", tgt: "at.margin.note#rangeSelector.startSelector:variant1", kind: "variant", name: Some("#textPositionSelector") }
- Breaking: RemovedEdge { src: "at.margin.note#rangeSelector.startSelector", tgt: "at.margin.note#rangeSelector.startSelector:variant2", kind: "variant", name: Some("#cssSelector") }
- Breaking: RemovedEdge { src: "at.margin.note#rangeSelector.startSelector", tgt: "at.margin.note#rangeSelector.startSelector:variant3", kind: "variant", name: Some("#xpathSelector") }
- Breaking: RemovedEdge { src: "at.margin.note#target.selector", tgt: "at.margin.note#target.selector:variant0", kind: "variant", name: Some("#textQuoteSelector") }
- Breaking: RemovedEdge { src: "at.margin.note#target.selector", tgt: "at.margin.note#target.selector:variant1", kind: "variant", name: Some("#textPositionSelector") }
- Breaking: RemovedEdge { src: "at.margin.note#target.selector", tgt: "at.margin.note#target.selector:variant2", kind: "variant", name: Some("#cssSelector") }
- Breaking: RemovedEdge { src: "at.margin.note#target.selector", tgt: "at.margin.note#target.selector:variant3", kind: "variant", name: Some("#xpathSelector") }
- Breaking: RemovedEdge { src: "at.margin.note#target.selector", tgt: "at.margin.note#target.selector:variant4", kind: "variant", name: Some("#fragmentSelector") }
- Breaking: RemovedEdge { src: "at.margin.note#target.selector", tgt: "at.margin.note#target.selector:variant5", kind: "variant", name: Some("#rangeSelector") }
- Breaking: RemovedEdge { src: "at.margin.note#textPositionSelector", tgt: "at.margin.note#textPositionSelector.end", kind: "prop", name: Some("end") }
- Breaking: RemovedEdge { src: "at.margin.note#textPositionSelector", tgt: "at.margin.note#textPositionSelector.start", kind: "prop", name: Some("start") }
- Breaking: RemovedEdge { src: "at.margin.note#textPositionSelector", tgt: "at.margin.note#textPositionSelector.type", kind: "prop", name: Some("type") }
- Breaking: RemovedEdge { src: "at.margin.note#textQuoteSelector", tgt: "at.margin.note#textQuoteSelector.exact", kind: "prop", name: Some("exact") }
- Breaking: RemovedEdge { src: "at.margin.note#textQuoteSelector", tgt: "at.margin.note#textQuoteSelector.prefix", kind: "prop", name: Some("prefix") }
- Breaking: RemovedEdge { src: "at.margin.note#textQuoteSelector", tgt: "at.margin.note#textQuoteSelector.suffix", kind: "prop", name: Some("suffix") }
- Breaking: RemovedEdge { src: "at.margin.note#textQuoteSelector", tgt: "at.margin.note#textQuoteSelector.type", kind: "prop", name: Some("type") }
- Breaking: RemovedEdge { src: "at.margin.note#xpathSelector", tgt: "at.margin.note#xpathSelector.type", kind: "prop", name: Some("type") }
- Breaking: RemovedEdge { src: "at.margin.note#xpathSelector", tgt: "at.margin.note#xpathSelector.value", kind: "prop", name: Some("value") }
- Breaking: KindChanged { vertex_id: "at.margin.note#target.selector", old_kind: "union", new_kind: "ref" }
- Non-breaking: AddedEdge { src: "at.margin.note#selector", tgt: "at.margin.note#selector.conformsTo", kind: "prop", name: Some("conformsTo") }
- Non-breaking: AddedEdge { src: "at.margin.note#selector", tgt: "at.margin.note#selector.end", kind: "prop", name: Some("end") }
- Non-breaking: AddedEdge { src: "at.margin.note#selector", tgt: "at.margin.note#selector.exact", kind: "prop", name: Some("exact") }
- Non-breaking: AddedEdge { src: "at.margin.note#selector", tgt: "at.margin.note#selector.prefix", kind: "prop", name: Some("prefix") }
- Non-breaking: AddedEdge { src: "at.margin.note#selector", tgt: "at.margin.note#selector.start", kind: "prop", name: Some("start") }
- Non-breaking: AddedEdge { src: "at.margin.note#selector", tgt: "at.margin.note#selector.suffix", kind: "prop", name: Some("suffix") }
- Non-breaking: AddedEdge { src: "at.margin.note#selector", tgt: "at.margin.note#selector.type", kind: "prop", name: Some("type") }
- Non-breaking: AddedEdge { src: "at.margin.note#selector", tgt: "at.margin.note#selector.value", kind: "prop", name: Some("value") }
1
1
{
2
2
"id": "at.margin.note",
3
3
"defs": {
4
4
"body": {
5
5
"type": "object",
6
6
"properties": {
7
7
"uri": {
8
8
"type": "string",
9
9
"format": "uri",
10
10
"description": "Reference to external body content"
11
11
},
12
12
"value": {
13
13
"type": "string",
14
14
"maxLength": 10000,
15
15
"description": "Text content of the annotation. For bookmarks, this is the description.",
16
16
"maxGraphemes": 3000
17
17
},
18
18
"format": {
19
19
"type": "string",
20
20
"default": "text/plain",
21
21
"description": "MIME type of the body content"
22
22
}
23
23
},
24
24
"description": "Annotation body - the content of the annotation"
25
25
},
26
26
"main": {
27
27
"key": "tid",
28
28
"type": "record",
29
29
"record": {
30
30
"type": "object",
31
31
"required": [
32
32
"motivation",
33
33
"target",
34
34
"createdAt"
35
35
],
36
36
"properties": {
37
37
"body": {
38
38
"ref": "#body",
39
39
"type": "ref",
40
40
"description": "The annotation content (text or reference). For bookmarks, use body.value for the description."
41
41
},
42
42
"tags": {
43
43
"type": "array",
44
44
"items": {
45
45
"type": "string",
46
46
"maxLength": 64,
47
47
"maxGraphemes": 32
48
48
},
49
49
"maxLength": 10,
50
50
"description": "Tags for categorization"
51
51
},
52
52
"color": {
53
53
"type": "string",
54
54
"maxLength": 20,
55
-
"description": "Highlight color tint (ATProto extension)"
55
+
"description": "Highlight color tint"
56
56
},
57
57
"facets": {
58
58
"type": "array",
59
59
"items": {
60
60
"ref": "app.bsky.richtext.facet",
61
61
"type": "ref"
62
62
},
63
63
"description": "Rich text facets (e.g. mentions, links)"
64
64
},
65
65
"labels": {
66
66
"ref": "com.atproto.label.defs#selfLabels",
67
67
"type": "ref",
68
68
"description": "Self-applied content labels for this annotation"
69
69
},
70
70
"rights": {
71
71
"type": "string",
72
72
"format": "uri",
73
73
"description": "License URI (e.g., https://creativecommons.org/licenses/by/4.0/)"
74
74
},
75
75
"target": {
76
76
"ref": "#target",
77
77
"type": "ref",
78
78
"description": "The resource being annotated with optional selector"
79
79
},
80
80
"createdAt": {
81
81
"type": "string",
82
82
"format": "datetime"
83
83
},
84
84
"generator": {
85
85
"ref": "#generator",
86
86
"type": "ref",
87
87
"description": "The client/agent that created this record"
88
88
},
89
89
"modifiedAt": {
90
90
"type": "string",
91
91
"format": "datetime",
92
92
"description": "When this record was last modified"
93
93
},
94
94
"motivation": {
95
95
"type": "string",
96
96
"description": "W3C motivation for the annotation",
97
97
"knownValues": [
98
98
"commenting",
99
99
"highlighting",
100
100
"bookmarking",
101
101
"tagging",
102
102
"describing",
103
103
"linking",
104
104
"replying",
105
105
"editing",
106
106
"questioning",
107
107
"assessing"
108
108
]
109
109
}
110
110
}
111
111
},
112
112
"description": "A W3C-compliant web annotation stored on the AT Protocol"
113
113
},
114
114
"target": {
115
115
"type": "object",
116
116
"required": [
117
117
"source"
118
118
],
119
119
"properties": {
120
120
"state": {
121
121
"ref": "#timeState",
122
122
"type": "ref",
123
123
"description": "State of the resource at annotation time"
124
124
},
125
125
"title": {
126
126
"type": "string",
127
127
"maxLength": 500,
128
128
"description": "Page title at time of annotation"
129
129
},
130
130
"source": {
131
131
"type": "string",
132
132
"format": "uri",
133
133
"description": "The URL being annotated"
134
134
},
135
135
"selector": {
136
-
"refs": [
137
-
"#textQuoteSelector",
138
-
"#textPositionSelector",
139
-
"#cssSelector",
140
-
"#xpathSelector",
141
-
"#fragmentSelector",
142
-
"#rangeSelector"
143
-
],
144
-
"type": "union",
145
-
"description": "Selector to identify the specific segment"
136
+
"ref": "#selector",
137
+
"type": "ref",
138
+
"description": "W3C Selector to identify the annotated segment. Uses W3C 'type' field (not ATProto $type) per the Web Annotation Data Model."
146
139
},
147
140
"sourceHash": {
148
141
"type": "string",
149
142
"description": "SHA256 hash of normalized URL for indexing"
150
143
}
151
144
},
152
145
"description": "W3C SpecificResource - the target with optional selector"
153
146
},
154
-
"generator": {
155
-
"type": "object",
156
-
"properties": {
157
-
"id": {
158
-
"type": "string",
159
-
"format": "uri"
160
-
},
161
-
"name": {
162
-
"type": "string"
163
-
},
164
-
"homepage": {
165
-
"type": "string",
166
-
"format": "uri"
167
-
}
168
-
},
169
-
"description": "The client/agent that created this record"
170
-
},
171
-
"timeState": {
172
-
"type": "object",
173
-
"properties": {
174
-
"cached": {
175
-
"type": "string",
176
-
"format": "uri",
177
-
"description": "URL to cached/archived version"
178
-
},
179
-
"sourceDate": {
180
-
"type": "string",
181
-
"format": "datetime",
182
-
"description": "When the source was accessed"
183
-
}
184
-
},
185
-
"description": "W3C TimeState - record when content was captured"
186
-
},
187
-
"cssSelector": {
147
+
"selector": {
188
148
"type": "object",
189
149
"required": [
190
-
"type",
191
-
"value"
150
+
"type"
192
151
],
193
152
"properties": {
194
-
"type": {
195
-
"type": "string",
196
-
"const": "CssSelector"
153
+
"end": {
154
+
"type": "integer",
155
+
"minimum": 0,
156
+
"description": "TextPositionSelector: end character offset (exclusive)"
197
157
},
198
-
"value": {
199
-
"type": "string",
200
-
"maxLength": 2000,
201
-
"description": "CSS selector string"
202
-
}
203
-
},
204
-
"description": "W3C CssSelector - select DOM elements by CSS selector"
205
-
},
206
-
"rangeSelector": {
207
-
"type": "object",
208
-
"required": [
209
-
"type",
210
-
"startSelector",
211
-
"endSelector"
212
-
],
213
-
"properties": {
214
158
"type": {
215
159
"type": "string",
216
-
"const": "RangeSelector"
160
+
"description": "W3C selector type identifier",
161
+
"knownValues": [
162
+
"TextQuoteSelector",
163
+
"TextPositionSelector",
164
+
"CssSelector",
165
+
"XPathSelector",
166
+
"FragmentSelector",
167
+
"RangeSelector"
168
+
]
217
169
},
218
-
"endSelector": {
219
-
"refs": [
220
-
"#textQuoteSelector",
221
-
"#textPositionSelector",
222
-
"#cssSelector",
223
-
"#xpathSelector"
224
-
],
225
-
"type": "union",
226
-
"description": "Selector for range end"
170
+
"exact": {
171
+
"type": "string",
172
+
"maxLength": 5000,
173
+
"description": "TextQuoteSelector: the exact text being selected",
174
+
"maxGraphemes": 1500
227
175
},
228
-
"startSelector": {
229
-
"refs": [
230
-
"#textQuoteSelector",
231
-
"#textPositionSelector",
232
-
"#cssSelector",
233
-
"#xpathSelector"
234
-
],
235
-
"type": "union",
236
-
"description": "Selector for range start"
237
-
}
238
-
},
239
-
"description": "W3C RangeSelector - select range between two selectors"
240
-
},
241
-
"xpathSelector": {
242
-
"type": "object",
243
-
"required": [
244
-
"type",
245
-
"value"
246
-
],
247
-
"properties": {
248
-
"type": {
249
-
"type": "string",
250
-
"const": "XPathSelector"
176
+
"start": {
177
+
"type": "integer",
178
+
"minimum": 0,
179
+
"description": "TextPositionSelector: start character offset (inclusive)"
251
180
},
252
181
"value": {
253
182
"type": "string",
254
183
"maxLength": 2000,
255
-
"description": "XPath expression"
256
-
}
257
-
},
258
-
"description": "W3C XPathSelector - select by XPath expression"
259
-
},
260
-
"fragmentSelector": {
261
-
"type": "object",
262
-
"required": [
263
-
"type",
264
-
"value"
265
-
],
266
-
"properties": {
267
-
"type": {
184
+
"description": "CssSelector/XPathSelector/FragmentSelector: the selector expression or fragment value"
185
+
},
186
+
"prefix": {
268
187
"type": "string",
269
-
"const": "FragmentSelector"
188
+
"maxLength": 500,
189
+
"description": "TextQuoteSelector: text immediately before the selection, for disambiguation",
190
+
"maxGraphemes": 150
270
191
},
271
-
"value": {
192
+
"suffix": {
272
193
"type": "string",
273
-
"maxLength": 1000,
274
-
"description": "Fragment identifier value"
194
+
"maxLength": 500,
195
+
"description": "TextQuoteSelector: text immediately after the selection, for disambiguation",
196
+
"maxGraphemes": 150
275
197
},
276
198
"conformsTo": {
277
199
"type": "string",
278
200
"format": "uri",
279
-
"description": "Specification the fragment conforms to"
201
+
"description": "FragmentSelector: URI of the specification the fragment conforms to"
280
202
}
281
203
},
282
-
"description": "W3C FragmentSelector - select by URI fragment"
204
+
"description": "W3C Web Annotation Selector. The 'type' field discriminates the selector kind using W3C type names (e.g. TextQuoteSelector). This follows W3C conventions, not ATProto union $type."
283
205
},
284
-
"textQuoteSelector": {
206
+
"generator": {
285
207
"type": "object",
286
-
"required": [
287
-
"type",
288
-
"exact"
289
-
],
290
208
"properties": {
291
-
"type": {
292
-
"type": "string",
293
-
"const": "TextQuoteSelector"
294
-
},
295
-
"exact": {
209
+
"id": {
296
210
"type": "string",
297
-
"maxLength": 5000,
298
-
"description": "The exact text to match",
299
-
"maxGraphemes": 1500
211
+
"format": "uri"
300
212
},
301
-
"prefix": {
302
-
"type": "string",
303
-
"maxLength": 500,
304
-
"description": "Text immediately before the selection",
305
-
"maxGraphemes": 150
213
+
"name": {
214
+
"type": "string"
306
215
},
307
-
"suffix": {
216
+
"homepage": {
308
217
"type": "string",
309
-
"maxLength": 500,
310
-
"description": "Text immediately after the selection",
311
-
"maxGraphemes": 150
218
+
"format": "uri"
312
219
}
313
220
},
314
-
"description": "W3C TextQuoteSelector - select text by quoting it with context"
221
+
"description": "The client/agent that created this record"
315
222
},
316
-
"textPositionSelector": {
223
+
"timeState": {
317
224
"type": "object",
318
-
"required": [
319
-
"type",
320
-
"start",
321
-
"end"
322
-
],
323
225
"properties": {
324
-
"end": {
325
-
"type": "integer",
326
-
"minimum": 0,
327
-
"description": "Ending character position (exclusive)"
328
-
},
329
-
"type": {
226
+
"cached": {
330
227
"type": "string",
331
-
"const": "TextPositionSelector"
228
+
"format": "uri",
229
+
"description": "URL to cached/archived version"
332
230
},
333
-
"start": {
334
-
"type": "integer",
335
-
"minimum": 0,
336
-
"description": "Starting character position (0-indexed, inclusive)"
231
+
"sourceDate": {
232
+
"type": "string",
233
+
"format": "datetime",
234
+
"description": "When the source was accessed"
337
235
}
338
236
},
339
-
"description": "W3C TextPositionSelector - select by character offsets"
237
+
"description": "W3C TimeState - record when content was captured"
340
238
}
341
239
},
342
240
"$type": "com.atproto.lexicon.schema",
343
241
"lexicon": 1,
344
-
"revision": 2,
242
+
"revision": 3,
345
243
"description": "W3C Web Annotation Data Model compliant unified note record for ATProto"
346
244
}