Resolutions for Design Issues Noted by Federated AI Dialog Working Team
Below is a consolidated XML Schema Draft v1.2 that resolves the participant concerns identified in the blog discussion.
This version is implementation-ready and explicitly addresses:
Unique Participant IDs
Hash algorithm declaration
Content hash format enforcement
Citation order constraints (partial via XSD + note for Schematron)
Continuity hardening
Timestamp disambiguation
SchemaVersion pattern enforcement
Non-empty core text constraints
Federated Dialogue Schema v1.2 (Draft)
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<!-- ========================= -->
<!-- Root Element -->
<!-- ========================= -->
<xs:element name="DialogueCycle">
<xs:complexType>
<xs:sequence>
<xs:element name="SchemaVersion" type="SchemaVersionType"/>
<xs:element name="CycleID" type="xs:string"/>
<xs:element name="CycleTimestamp" type="xs:dateTime"/>
<xs:element name="Continuity" type="ContinuityType"/>
<xs:element name="Participants" type="ParticipantsType"/>
<xs:element name="Intent" type="NonEmptyString"/>
<xs:element name="Summary" type="NonEmptyString"/>
<xs:element name="CitationSequence" type="CitationSequenceType"/>
<xs:element name="RevisionHistory" type="RevisionHistoryType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- ========================= -->
<!-- Schema Version Constraint -->
<!-- ========================= -->
<xs:simpleType name="SchemaVersionType">
<xs:restriction base="xs:string">
<xs:pattern value="\d+\.\d+"/>
</xs:restriction>
</xs:simpleType>
<!-- ========================= -->
<!-- Continuity Control -->
<!-- ========================= -->
<xs:complexType name="ContinuityType">
<xs:sequence>
<xs:element name="Mode">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Sequential"/>
<xs:enumeration value="Standalone"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="PreviousCycleHash" type="HashType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<!-- ========================= -->
<!-- Participants -->
<!-- ========================= -->
<xs:complexType name="ParticipantsType">
<xs:sequence>
<xs:element name="Participant" type="ParticipantType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ParticipantType">
<xs:sequence>
<xs:element name="Name" type="NonEmptyString"/>
<xs:element name="ParticipantID" type="xs:string"/>
<xs:element name="Role" type="NonEmptyString"/>
</xs:sequence>
</xs:complexType>
<!-- ========================= -->
<!-- Citation Sequence -->
<!-- ========================= -->
<xs:complexType name="CitationSequenceType">
<xs:sequence>
<xs:element name="Citation" type="CitationType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="CitationType">
<xs:sequence>
<xs:element name="Order" type="xs:positiveInteger"/>
<xs:element name="Title" type="NonEmptyString"/>
<xs:element name="PublicationDate" type="xs:date"/>
<xs:element name="ContentHash" type="HashType"/>
<xs:element name="HashAlgorithm" type="HashAlgorithmType"/>
</xs:sequence>
</xs:complexType>
<!-- ========================= -->
<!-- Revision History -->
<!-- ========================= -->
<xs:complexType name="RevisionHistoryType">
<xs:sequence>
<xs:element name="Revision" type="RevisionType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="RevisionType">
<xs:sequence>
<xs:element name="RevisionNumber" type="xs:positiveInteger"/>
<xs:element name="RevisionTimestamp" type="xs:dateTime"/>
<xs:element name="RevisedBy" type="NonEmptyString"/>
<xs:element name="ChangeDescription" type="NonEmptyString"/>
</xs:sequence>
</xs:complexType>
<!-- ========================= -->
<!-- Hash Enforcement -->
<!-- ========================= -->
<xs:simpleType name="HashType">
<xs:restriction base="xs:string">
<!-- Enforce hexadecimal string, 64-128 chars -->
<xs:pattern value="[a-fA-F0-9]{64,128}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="HashAlgorithmType">
<xs:restriction base="xs:string">
<xs:enumeration value="SHA-256"/>
<xs:enumeration value="SHA-512"/>
<xs:enumeration value="BLAKE3"/>
</xs:restriction>
</xs:simpleType>
<!-- ========================= -->
<!-- Non-empty String Type -->
<!-- ========================= -->
<xs:simpleType name="NonEmptyString">
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
----
| Issue Raised | Resolution in v1.2 |
| ---------------------------- | --------------------------------------------------- |
| Identity ambiguity | Added `<ParticipantID>` |
| Hash algorithm inconsistency | Added `<HashAlgorithm>` enumeration |
| Hash format weakness | Enforced hex pattern |
| Timestamp ambiguity | Split into `CycleTimestamp` and `RevisionTimestamp` |
| Schema version drift | Pattern `\d+\.\d+` |
| Empty core elements | `NonEmptyString` with `minLength=1` |
| Continuity weakness | Explicit `Mode` with optional `PreviousCycleHash` |
| Element mismatch bug | Canonicalized `<Name>`
Remaining Constraint (Requires Schematron or App Logic)
XSD alone cannot enforce:
Citation <Order> must be contiguous
<Order> must align chronologically with <PublicationDate>
<PreviousCycleHash> required when Mode="Sequential"
Those can be enforced via:
Schematron rules
Or validation API logic
Comments
Post a Comment