Initial commit: add all skills files

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-10 16:52:49 +08:00
commit 6487becf60
396 changed files with 108871 additions and 0 deletions

View File

@@ -0,0 +1,470 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- ============================================================================ -->
<!-- Aesthetic Rules Schema for minimax-docx -->
<!-- ============================================================================ -->
<!-- Purpose: Validates whether a document follows basic aesthetic rules that -->
<!-- produce visually harmonious results. This is a "taste checker" that flags -->
<!-- common ugly patterns. -->
<!-- -->
<!-- IMPORTANT: XSD validates STRUCTURE and VALUE RANGES, not SEMANTICS. -->
<!-- Many aesthetic rules require cross-element comparison (e.g., "H1 must be -->
<!-- larger than H2") which XSD cannot express. These rules are documented in -->
<!-- comments and must be enforced by a programmatic validator. -->
<!-- -->
<!-- Rules that CAN be expressed in XSD: -->
<!-- - Font size ranges (body 10-14pt, headings 10-26pt) -->
<!-- - Line spacing ranges (1.0x to 2.33x) -->
<!-- - Margin minimums (at least 0.5in on all sides) -->
<!-- - Table cell padding minimums -->
<!-- -->
<!-- Rules that CANNOT be expressed in XSD (enforce programmatically): -->
<!-- - H1 sz > H2 sz > H3 sz > body sz (hierarchy) -->
<!-- - Maximum 3 font families across all styles -->
<!-- - Heading space-before >= space-after -->
<!-- - Color contrast ratio between text and background -->
<!-- - Consistent font family within heading vs body groups -->
<!-- - Line spacing and font size harmony (larger text needs tighter spacing) -->
<!-- -->
<!-- MIT License - minimax-docx project -->
<!-- ============================================================================ -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"
targetNamespace="http://schemas.openxmlformats.org/wordprocessingml/2006/main"
elementFormDefault="qualified">
<!-- ============================================================ -->
<!-- RULE 1: Body Font Size Range -->
<!-- ============================================================ -->
<!-- Body text must be 10-14pt (half-points: 20-28). -->
<!-- WHY: Below 10pt is hard to read for most adults. -->
<!-- Above 14pt body text looks childish or wasteful. -->
<!-- The sweet spot is 10.5-12pt for most font families. -->
<!-- ============================================================ -->
<xs:simpleType name="ST_AestheticBodyFontSize">
<xs:annotation>
<xs:documentation>
Body text font size in half-points.
Acceptable range: 20-28 (10pt-14pt).
- 10pt (20): minimum for comfortable reading
- 11pt (22): modern default (Calibri, Aptos)
- 12pt (24): traditional default (Times New Roman)
- 14pt (28): maximum before body text looks oversized
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:positiveInteger">
<xs:minInclusive value="20"/> <!-- 10pt minimum -->
<xs:maxInclusive value="28"/> <!-- 14pt maximum -->
</xs:restriction>
</xs:simpleType>
<!-- ============================================================ -->
<!-- RULE 2: Heading Font Size Range -->
<!-- ============================================================ -->
<!-- Headings must be 12-26pt (half-points: 24-52). -->
<!-- WHY: Below 12pt, a heading cannot be visually distinguished -->
<!-- from body text by size alone. -->
<!-- Above 26pt is poster-sized and wastes vertical space. -->
<!-- NOTE: Some academic styles use 12pt headings (same as body) -->
<!-- and differentiate via bold/italic/centering instead. -->
<!-- The lower bound of 24 (12pt) accommodates this. -->
<!-- ============================================================ -->
<xs:simpleType name="ST_AestheticHeadingFontSize">
<xs:annotation>
<xs:documentation>
Heading font size in half-points.
Acceptable range: 24-52 (12pt-26pt).
- 12pt (24): APA-style (hierarchy via bold/italic, not size)
- 16pt (32): typical H2/H3
- 20pt (40): typical H1
- 26pt (52): maximum before headings dominate the page
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:positiveInteger">
<xs:minInclusive value="24"/> <!-- 12pt minimum -->
<xs:maxInclusive value="52"/> <!-- 26pt maximum -->
</xs:restriction>
</xs:simpleType>
<!-- ============================================================ -->
<!-- RULE 3: Line Spacing Range -->
<!-- ============================================================ -->
<!-- Line spacing (in auto mode) must be 240-560 (1.0x-2.33x). -->
<!-- WHY: Below 1.0x, ascenders/descenders overlap — unreadable. -->
<!-- Above 2.33x, lines appear disconnected. -->
<!-- Sweet spots: 1.15x (276) for sans, 1.5x (360) for -->
<!-- generous layouts, 2.0x (480) for academic. -->
<!-- ============================================================ -->
<xs:simpleType name="ST_AestheticLineSpacing">
<xs:annotation>
<xs:documentation>
Line spacing value for auto line-spacing rule.
In 240ths of single spacing: 240 = 1.0x, 480 = 2.0x.
Acceptable range: 240-560 (1.0x to 2.33x).
Common values:
- 240: single spacing (dense, technical)
- 259: Word's 1.08x default
- 276: 1.15x (modern corporate default)
- 336: 1.4x (executive/generous)
- 360: 1.5x (generous/minimal)
- 480: 2.0x (academic double spacing)
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:positiveInteger">
<xs:minInclusive value="240"/> <!-- 1.0x single spacing -->
<xs:maxInclusive value="560"/> <!-- ~2.33x — beyond double feels disconnected -->
</xs:restriction>
</xs:simpleType>
<!-- ============================================================ -->
<!-- RULE 3b: Fixed Line Spacing Range -->
<!-- ============================================================ -->
<!-- For lineRule="exact", line value is in DXA (twentieths of pt) -->
<!-- Range: 200-720 DXA (10pt-36pt fixed line height) -->
<!-- Chinese government standard uses 560 DXA (28pt). -->
<!-- ============================================================ -->
<xs:simpleType name="ST_AestheticFixedLineSpacing">
<xs:annotation>
<xs:documentation>
Fixed line spacing value (lineRule="exact") in DXA.
Acceptable range: 200-720 (10pt-36pt).
- 560: Chinese government standard (28pt, for 16pt body)
- 480: double-space equivalent for 12pt body
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:positiveInteger">
<xs:minInclusive value="200"/> <!-- 10pt minimum fixed height -->
<xs:maxInclusive value="720"/> <!-- 36pt maximum fixed height -->
</xs:restriction>
</xs:simpleType>
<!-- ============================================================ -->
<!-- RULE 4: Margin Minimums -->
<!-- ============================================================ -->
<!-- All margins must be at least 720 DXA (0.5 inch). -->
<!-- WHY: Below 0.5in, most printers clip content. -->
<!-- Also, narrow margins create a cramped, unprofessional -->
<!-- appearance. Even "full bleed" designs need internal -->
<!-- text margins. -->
<!-- Max set to 4320 DXA (3 inches) to prevent absurd margins. -->
<!-- ============================================================ -->
<xs:simpleType name="ST_AestheticMargin">
<xs:annotation>
<xs:documentation>
Page margin in DXA. Minimum 720 (0.5 inch), maximum 4320 (3 inches).
Common values:
- 720: 0.5in (minimum printable)
- 1440: 1.0in (standard US)
- 1588: 28mm (Chinese government left margin)
- 1800: 1.25in (executive/premium)
- 2160: 1.5in (binding margin or narrow-column design)
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:positiveInteger">
<xs:minInclusive value="720"/> <!-- 0.5in — minimum for print safety -->
<xs:maxInclusive value="4320"/> <!-- 3in — beyond this is absurd -->
</xs:restriction>
</xs:simpleType>
<!-- Top/bottom margins: signed because negative values can create -->
<!-- overlap effects, but we still enforce a reasonable minimum. -->
<xs:simpleType name="ST_AestheticVerticalMargin">
<xs:annotation>
<xs:documentation>
Vertical (top/bottom) page margin in DXA.
Range: 360 to 4320 (0.25in to 3in).
Slightly more permissive than horizontal margins because
header/footer areas may reduce effective vertical margin.
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:integer">
<xs:minInclusive value="360"/> <!-- 0.25in — tighter vertical is sometimes acceptable -->
<xs:maxInclusive value="4320"/>
</xs:restriction>
</xs:simpleType>
<!-- ============================================================ -->
<!-- RULE 5: Paragraph Spacing Ranges -->
<!-- ============================================================ -->
<!-- Space before/after paragraphs should be 0-960 DXA (0-48pt). -->
<!-- WHY: More than 48pt of space before/after creates awkward -->
<!-- gaps that disrupt reading flow. -->
<!-- ============================================================ -->
<xs:simpleType name="ST_AestheticParaSpacing">
<xs:annotation>
<xs:documentation>
Paragraph spacing (before/after) in DXA.
Range: 0-960 (0pt-48pt).
Common values:
- 0: academic style (uses first-line indent instead)
- 80: 4pt (tight, used after H2/H3)
- 120: 6pt (moderate)
- 160: 8pt (standard modern spacing)
- 200: 10pt (generous/executive)
- 240: 12pt (very generous/minimal)
- 480: 24pt (heading before — creates section break)
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:nonNegativeInteger">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="960"/> <!-- 48pt max — beyond this is a page break, not spacing -->
</xs:restriction>
</xs:simpleType>
<!-- ============================================================ -->
<!-- RULE 6: Table Cell Padding Minimum -->
<!-- ============================================================ -->
<!-- Table cells need at least 28 DXA (~1.4pt) padding. -->
<!-- WHY: Without padding, text touches cell borders — visually -->
<!-- cramped and hard to read. Even borderless tables need -->
<!-- padding for column separation. -->
<!-- ============================================================ -->
<xs:simpleType name="ST_AestheticCellPadding">
<xs:annotation>
<xs:documentation>
Table cell padding in DXA. Minimum 28 DXA (~1.4pt).
Recommended: 57 DXA (~2.85pt) for comfortable spacing.
Maximum: 288 DXA (~14pt) — beyond this wastes space.
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:nonNegativeInteger">
<xs:minInclusive value="28"/> <!-- ~1.4pt minimum breathing room -->
<xs:maxInclusive value="288"/> <!-- ~14pt — more than this is excessive -->
</xs:restriction>
</xs:simpleType>
<!-- ============================================================ -->
<!-- RULE 7: Border Size Range -->
<!-- ============================================================ -->
<!-- Border size (in eighth-points) should be 2-24 (0.25pt-3pt). -->
<!-- WHY: Below 0.25pt borders may not render or print. -->
<!-- Above 3pt borders look heavy and distracting. -->
<!-- ============================================================ -->
<xs:simpleType name="ST_AestheticBorderSize">
<xs:annotation>
<xs:documentation>
Border width in eighth-points.
Range: 2-24 (0.25pt to 3pt).
Common values:
- 4: 0.5pt (thin, standard)
- 6: 0.75pt (header separator in three-line tables)
- 8: 1.0pt (medium, good for framing borders)
- 12: 1.5pt (heavy, used for top/bottom in three-line tables)
- 24: 3.0pt (maximum before borders dominate)
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:positiveInteger">
<xs:minInclusive value="2"/> <!-- 0.25pt minimum visible -->
<xs:maxInclusive value="24"/> <!-- 3pt maximum tasteful -->
</xs:restriction>
</xs:simpleType>
<!-- ============================================================ -->
<!-- RULE 8: Color Value Format -->
<!-- ============================================================ -->
<!-- Colors must be valid 6-digit hex (RRGGBB) or "auto". -->
<!-- This is structural validation, not aesthetic validation. -->
<!-- ============================================================ -->
<xs:simpleType name="ST_AestheticColor">
<xs:annotation>
<xs:documentation>
Color value: 6-digit hex (RRGGBB) or "auto".
Examples: "000000", "1F3864", "2C3E50", "auto".
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:pattern value="[0-9A-Fa-f]{6}|auto"/>
</xs:restriction>
</xs:simpleType>
<!-- ============================================================ -->
<!-- RULE 9: First-Line Indent Range -->
<!-- ============================================================ -->
<!-- If first-line indent is used, it should be 360-1440 DXA -->
<!-- (0.25in - 1.0in). -->
<!-- WHY: Below 0.25in the indent is barely visible. -->
<!-- Above 1.0in the indent looks like a tab error. -->
<!-- ============================================================ -->
<xs:simpleType name="ST_AestheticFirstLineIndent">
<xs:annotation>
<xs:documentation>
First-line indent in DXA. Range: 0-1440 (0in to 1.0in).
- 0: no indent (modern style with space-after)
- 480: 0.33in (compact)
- 640: ~0.44in (2 Chinese characters at 16pt)
- 720: 0.5in (standard APA/academic)
- 1440: 1.0in (maximum before it looks wrong)
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:nonNegativeInteger">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="1440"/>
</xs:restriction>
</xs:simpleType>
<!-- ============================================================ -->
<!-- COMPOSITE TYPE: Aesthetic Run Properties Check -->
<!-- ============================================================ -->
<!-- Validates run-level properties for aesthetic compliance. -->
<!-- ============================================================ -->
<xs:complexType name="CT_AestheticRPr">
<xs:annotation>
<xs:documentation>
Aesthetic run properties validator.
Checks font size and color format at the run level.
</xs:documentation>
</xs:annotation>
<xs:all>
<xs:element name="sz" minOccurs="0">
<xs:complexType>
<xs:attribute name="val" type="w:ST_AestheticBodyFontSize" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="szCs" minOccurs="0">
<xs:complexType>
<xs:attribute name="val" type="w:ST_AestheticBodyFontSize" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="color" minOccurs="0">
<xs:complexType>
<xs:attribute name="val" type="w:ST_AestheticColor" use="required"/>
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
<!-- ============================================================ -->
<!-- COMPOSITE TYPE: Aesthetic Spacing Check -->
<!-- ============================================================ -->
<xs:complexType name="CT_AestheticSpacing">
<xs:annotation>
<xs:documentation>
Aesthetic spacing validator for paragraph spacing properties.
Validates line spacing and before/after spacing are in range.
</xs:documentation>
</xs:annotation>
<xs:attribute name="line" type="w:ST_AestheticLineSpacing" use="optional"/>
<xs:attribute name="before" type="w:ST_AestheticParaSpacing" use="optional"/>
<xs:attribute name="after" type="w:ST_AestheticParaSpacing" use="optional"/>
<xs:attribute name="lineRule" use="optional">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="auto"/>
<xs:enumeration value="exact"/>
<xs:enumeration value="atLeast"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
<!-- ============================================================ -->
<!-- COMPOSITE TYPE: Aesthetic Page Margins Check -->
<!-- ============================================================ -->
<xs:complexType name="CT_AestheticPageMargins">
<xs:annotation>
<xs:documentation>
Aesthetic page margin validator.
Ensures all margins meet minimum print-safe thresholds.
</xs:documentation>
</xs:annotation>
<xs:attribute name="top" type="w:ST_AestheticVerticalMargin" use="required"/>
<xs:attribute name="bottom" type="w:ST_AestheticVerticalMargin" use="required"/>
<xs:attribute name="left" type="w:ST_AestheticMargin" use="required"/>
<xs:attribute name="right" type="w:ST_AestheticMargin" use="required"/>
<xs:attribute name="header" type="xs:nonNegativeInteger" use="optional"/>
<xs:attribute name="footer" type="xs:nonNegativeInteger" use="optional"/>
<xs:attribute name="gutter" type="xs:nonNegativeInteger" use="optional"/>
</xs:complexType>
<!-- ============================================================ -->
<!-- COMPOSITE TYPE: Aesthetic Table Cell Margin Check -->
<!-- ============================================================ -->
<xs:complexType name="CT_AestheticTableCellMargin">
<xs:annotation>
<xs:documentation>
Aesthetic table cell margin validator.
Ensures minimum padding for readability.
</xs:documentation>
</xs:annotation>
<xs:attribute name="w" type="w:ST_AestheticCellPadding" use="required"/>
<xs:attribute name="type" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="dxa"/>
<xs:enumeration value="nil"/>
<xs:enumeration value="pct"/>
<xs:enumeration value="auto"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
<!-- ============================================================ -->
<!-- PROGRAMMATIC RULES (cannot be expressed in XSD) -->
<!-- ============================================================ -->
<!-- -->
<!-- The following rules must be checked by a programmatic -->
<!-- validator (e.g., AestheticRuleValidator.cs). They are -->
<!-- documented here for completeness. -->
<!-- -->
<!-- ── RULE P1: Heading Size Hierarchy ── -->
<!-- H1 sz >= H2 sz >= H3 sz >= body sz -->
<!-- Exception: APA-style where all headings = body size. -->
<!-- Implementation: Collect sz from Heading1/2/3 styles and -->
<!-- docDefaults. Verify monotonic decrease (or equality). -->
<!-- -->
<!-- ── RULE P2: Maximum 3 Font Families ── -->
<!-- Across docDefaults rPr + all style rPr, at most 3 distinct -->
<!-- font families (by Ascii name) should be used. -->
<!-- WHY: More than 3 fonts creates visual chaos. Professional -->
<!-- designs typically use 1-2 families. -->
<!-- Implementation: Collect all rFonts.ascii values from -->
<!-- docDefaults and all styles. Count distinct. Warn if > 3. -->
<!-- -->
<!-- ── RULE P3: Heading Space-Before >= Space-After ── -->
<!-- For heading styles, spaceBefore should be >= spaceAfter. -->
<!-- WHY: Headings should be visually closer to the content they -->
<!-- introduce than to the content above. This is the -->
<!-- "proximity principle" of Gestalt design. -->
<!-- Implementation: For each Heading style, compare pPr spacing -->
<!-- before vs after values. -->
<!-- -->
<!-- ── RULE P4: Spacing-Size Coherence ── -->
<!-- Paragraph after-spacing should be proportional to body size: -->
<!-- after >= bodySize * 0.5 AND after <= bodySize * 1.5 -->
<!-- WHY: Too little spacing makes paragraphs run together. -->
<!-- Too much spacing disconnects them. -->
<!-- Implementation: Get body sz from docDefaults, convert to DXA -->
<!-- (multiply by 10), check after-spacing ratio. -->
<!-- -->
<!-- ── RULE P5: Color Consistency ── -->
<!-- All heading styles should use the same color value. -->
<!-- Body text color (if set) should be consistent across styles. -->
<!-- WHY: Inconsistent colors look accidental, not designed. -->
<!-- Exception: Caption and footnote styles may differ. -->
<!-- Implementation: Collect color.val from heading styles. -->
<!-- Verify all are identical. -->
<!-- -->
<!-- ── RULE P6: Indent/Spacing Mutual Exclusion ── -->
<!-- If first-line indent > 0 in docDefaults, then after-spacing -->
<!-- should be 0 (and vice versa). Using BOTH indent AND spacing -->
<!-- is visually redundant — it signals uncertainty. -->
<!-- Exception: Headings may override this. -->
<!-- Implementation: Check docDefaults pPr. If firstLine > 0 AND -->
<!-- after > 0, emit a warning (not error). -->
<!-- -->
<!-- ── RULE P7: Table Border Consistency ── -->
<!-- Within a single table, border styles should be internally -->
<!-- consistent (all single, or all none — not a random mix). -->
<!-- Implementation: Check tblBorders for consistent val values. -->
<!-- -->
<!-- ── RULE P8: Line Spacing vs Font Size Harmony ── -->
<!-- For fixed line spacing (lineRule="exact"): -->
<!-- lineHeight >= fontSize * 1.2 -->
<!-- WHY: Fixed line spacing less than 1.2x the font size causes -->
<!-- ascender/descender clipping. -->
<!-- Implementation: When lineRule="exact", compare line value -->
<!-- against the effective font size. -->
<!-- -->
<!-- ============================================================ -->
</xs:schema>

View File

@@ -0,0 +1,130 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Business Rules Gate-Check Schema for minimax-docx -->
<!-- Used in Scenario C (template application) as hard gate -->
<!-- Validates business compliance beyond XML correctness -->
<!-- MIT License - minimax-docx project -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"
targetNamespace="http://schemas.openxmlformats.org/wordprocessingml/2006/main"
elementFormDefault="qualified">
<!-- ============================================================ -->
<!-- Page margins: constrained to reasonable bounds -->
<!-- Minimum 360 DXA (0.25 inch), maximum 4320 DXA (3 inches) -->
<!-- ============================================================ -->
<xs:simpleType name="ST_MarginMeasure">
<xs:restriction base="xs:integer">
<xs:minInclusive value="360"/>
<xs:maxInclusive value="4320"/>
</xs:restriction>
</xs:simpleType>
<!-- Signed margin (top/bottom can be negative for overlap) -->
<xs:simpleType name="ST_SignedMarginMeasure">
<xs:restriction base="xs:integer">
<xs:minInclusive value="-4320"/>
<xs:maxInclusive value="4320"/>
</xs:restriction>
</xs:simpleType>
<!-- ============================================================ -->
<!-- Font size constraints -->
<!-- Body text: 16-144 half-points (8-72pt) -->
<!-- Heading text: 20-192 half-points (10-96pt) -->
<!-- ============================================================ -->
<xs:simpleType name="ST_BodyFontSize">
<xs:restriction base="xs:positiveInteger">
<xs:minInclusive value="16"/>
<xs:maxInclusive value="144"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="ST_HeadingFontSize">
<xs:restriction base="xs:positiveInteger">
<xs:minInclusive value="20"/>
<xs:maxInclusive value="192"/>
</xs:restriction>
</xs:simpleType>
<!-- ============================================================ -->
<!-- Valid standard page sizes (width x height in DXA) -->
<!-- ============================================================ -->
<!-- Letter: 12240 x 15840 -->
<!-- A4: 11906 x 16838 -->
<!-- Legal: 12240 x 20160 -->
<!-- A3: 16838 x 23811 -->
<!-- A5: 8391 x 11906 -->
<xs:simpleType name="ST_PageWidth">
<xs:restriction base="xs:positiveInteger">
<xs:minInclusive value="5040"/>
<xs:maxInclusive value="31680"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="ST_PageHeight">
<xs:restriction base="xs:positiveInteger">
<xs:minInclusive value="5040"/>
<xs:maxInclusive value="31680"/>
</xs:restriction>
</xs:simpleType>
<!-- ============================================================ -->
<!-- Constrained section properties for gate-check -->
<!-- ============================================================ -->
<xs:complexType name="CT_GateCheckSectPr">
<xs:all>
<xs:element name="pgSz" minOccurs="1">
<xs:complexType>
<xs:attribute name="w" type="w:ST_PageWidth" use="required"/>
<xs:attribute name="h" type="w:ST_PageHeight" use="required"/>
<xs:attribute name="orient" use="optional">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="portrait"/>
<xs:enumeration value="landscape"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="pgMar" minOccurs="1">
<xs:complexType>
<xs:attribute name="top" type="w:ST_SignedMarginMeasure" use="required"/>
<xs:attribute name="bottom" type="w:ST_SignedMarginMeasure" use="required"/>
<xs:attribute name="left" type="w:ST_MarginMeasure" use="required"/>
<xs:attribute name="right" type="w:ST_MarginMeasure" use="required"/>
<xs:attribute name="header" type="xs:nonNegativeInteger" use="optional"/>
<xs:attribute name="footer" type="xs:nonNegativeInteger" use="optional"/>
<xs:attribute name="gutter" type="xs:nonNegativeInteger" use="optional"/>
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
<!-- ============================================================ -->
<!-- Required styles: at minimum Normal and Heading1 must exist -->
<!-- This is enforced programmatically by GateCheckValidator -->
<!-- rather than via XSD, since XSD cannot validate style presence -->
<!-- across separate XML parts. -->
<!-- ============================================================ -->
<!-- ============================================================ -->
<!-- Constrained run properties for font size validation -->
<!-- ============================================================ -->
<xs:complexType name="CT_GateCheckRPr">
<xs:all>
<xs:element name="sz" minOccurs="0">
<xs:complexType>
<xs:attribute name="val" type="w:ST_BodyFontSize" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="szCs" minOccurs="0">
<xs:complexType>
<xs:attribute name="val" type="w:ST_BodyFontSize" use="required"/>
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
</xs:schema>

View File

@@ -0,0 +1,159 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Common type definitions for WordprocessingML subset schema -->
<!-- MIT License - minimax-docx project -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://schemas.openxmlformats.org/wordprocessingml/2006/main"
xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"
elementFormDefault="qualified">
<!-- Measurement: non-negative twips (1/1440 inch) -->
<xs:simpleType name="ST_TwipsMeasure">
<xs:restriction base="xs:nonNegativeInteger"/>
</xs:simpleType>
<!-- Measurement: signed twips (for negative margins/indents) -->
<xs:simpleType name="ST_SignedTwipsMeasure">
<xs:restriction base="xs:integer"/>
</xs:simpleType>
<!-- Half-point measure for font sizes (1 = 0.5pt) -->
<xs:simpleType name="ST_HpsMeasure">
<xs:restriction base="xs:positiveInteger"/>
</xs:simpleType>
<!-- Hex color: 6 hex digits -->
<xs:simpleType name="ST_HexColor">
<xs:restriction base="xs:string">
<xs:pattern value="auto|[0-9a-fA-F]{6}"/>
</xs:restriction>
</xs:simpleType>
<!-- On/Off toggle -->
<xs:simpleType name="ST_OnOff">
<xs:restriction base="xs:string">
<xs:enumeration value="true"/>
<xs:enumeration value="false"/>
<xs:enumeration value="0"/>
<xs:enumeration value="1"/>
</xs:restriction>
</xs:simpleType>
<!-- Justification -->
<xs:simpleType name="ST_Jc">
<xs:restriction base="xs:string">
<xs:enumeration value="left"/>
<xs:enumeration value="center"/>
<xs:enumeration value="right"/>
<xs:enumeration value="both"/>
<xs:enumeration value="distribute"/>
<xs:enumeration value="start"/>
<xs:enumeration value="end"/>
</xs:restriction>
</xs:simpleType>
<!-- Break type -->
<xs:simpleType name="ST_BrType">
<xs:restriction base="xs:string">
<xs:enumeration value="page"/>
<xs:enumeration value="column"/>
<xs:enumeration value="textWrapping"/>
</xs:restriction>
</xs:simpleType>
<!-- Underline patterns -->
<xs:simpleType name="ST_Underline">
<xs:restriction base="xs:string">
<xs:enumeration value="none"/>
<xs:enumeration value="single"/>
<xs:enumeration value="words"/>
<xs:enumeration value="double"/>
<xs:enumeration value="thick"/>
<xs:enumeration value="dotted"/>
<xs:enumeration value="dash"/>
<xs:enumeration value="dotDash"/>
<xs:enumeration value="dotDotDash"/>
<xs:enumeration value="wave"/>
</xs:restriction>
</xs:simpleType>
<!-- Vertical alignment for subscript/superscript -->
<xs:simpleType name="ST_VerticalAlignRun">
<xs:restriction base="xs:string">
<xs:enumeration value="baseline"/>
<xs:enumeration value="superscript"/>
<xs:enumeration value="subscript"/>
</xs:restriction>
</xs:simpleType>
<!-- Section break type -->
<xs:simpleType name="ST_SectionMark">
<xs:restriction base="xs:string">
<xs:enumeration value="nextPage"/>
<xs:enumeration value="nextColumn"/>
<xs:enumeration value="continuous"/>
<xs:enumeration value="evenPage"/>
<xs:enumeration value="oddPage"/>
</xs:restriction>
</xs:simpleType>
<!-- Header/footer type -->
<xs:simpleType name="ST_HdrFtr">
<xs:restriction base="xs:string">
<xs:enumeration value="even"/>
<xs:enumeration value="default"/>
<xs:enumeration value="first"/>
</xs:restriction>
</xs:simpleType>
<!-- Table width type -->
<xs:simpleType name="ST_TblWidth">
<xs:restriction base="xs:string">
<xs:enumeration value="auto"/>
<xs:enumeration value="dxa"/>
<xs:enumeration value="nil"/>
<xs:enumeration value="pct"/>
</xs:restriction>
</xs:simpleType>
<!-- Vertical merge -->
<xs:simpleType name="ST_Merge">
<xs:restriction base="xs:string">
<xs:enumeration value="continue"/>
<xs:enumeration value="restart"/>
</xs:restriction>
</xs:simpleType>
<!-- Highlight colors -->
<xs:simpleType name="ST_HighlightColor">
<xs:restriction base="xs:string">
<xs:enumeration value="black"/>
<xs:enumeration value="blue"/>
<xs:enumeration value="cyan"/>
<xs:enumeration value="darkBlue"/>
<xs:enumeration value="darkCyan"/>
<xs:enumeration value="darkGray"/>
<xs:enumeration value="darkGreen"/>
<xs:enumeration value="darkMagenta"/>
<xs:enumeration value="darkRed"/>
<xs:enumeration value="darkYellow"/>
<xs:enumeration value="green"/>
<xs:enumeration value="lightGray"/>
<xs:enumeration value="magenta"/>
<xs:enumeration value="none"/>
<xs:enumeration value="red"/>
<xs:enumeration value="white"/>
<xs:enumeration value="yellow"/>
</xs:restriction>
</xs:simpleType>
<!-- Percentage (for table width pct, etc.) -->
<xs:simpleType name="ST_DecimalNumber">
<xs:restriction base="xs:integer"/>
</xs:simpleType>
<!-- Relationship ID reference -->
<xs:simpleType name="ST_RelationshipId">
<xs:restriction base="xs:string"/>
</xs:simpleType>
</xs:schema>

View File

@@ -0,0 +1,589 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- WordprocessingML Subset Schema for minimax-docx -->
<!-- Curated subset of ISO 29500 covering elements agents commonly generate -->
<!-- MIT License - minimax-docx project -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"
xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"
xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing"
targetNamespace="http://schemas.openxmlformats.org/wordprocessingml/2006/main"
elementFormDefault="qualified">
<xs:import namespace="http://schemas.openxmlformats.org/officeDocument/2006/relationships"/>
<xs:import namespace="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing"/>
<!-- ============================================================ -->
<!-- Root element -->
<!-- ============================================================ -->
<xs:element name="document" type="w:CT_Document"/>
<xs:complexType name="CT_Document">
<xs:sequence>
<xs:element name="body" type="w:CT_Body" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<!-- ============================================================ -->
<!-- Body -->
<!-- ============================================================ -->
<xs:complexType name="CT_Body">
<xs:sequence>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="p" type="w:CT_P"/>
<xs:element name="tbl" type="w:CT_Tbl"/>
<xs:element name="sdt" type="w:CT_SdtBlock"/>
<xs:element name="bookmarkStart" type="w:CT_BookmarkStart"/>
<xs:element name="bookmarkEnd" type="w:CT_BookmarkEnd"/>
</xs:choice>
<xs:element name="sectPr" type="w:CT_SectPr" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<!-- ============================================================ -->
<!-- Paragraph -->
<!-- ============================================================ -->
<xs:complexType name="CT_P">
<xs:sequence>
<xs:element name="pPr" type="w:CT_PPr" minOccurs="0"/>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="r" type="w:CT_R"/>
<xs:element name="hyperlink" type="w:CT_Hyperlink"/>
<xs:element name="bookmarkStart" type="w:CT_BookmarkStart"/>
<xs:element name="bookmarkEnd" type="w:CT_BookmarkEnd"/>
<xs:element name="commentRangeStart" type="w:CT_MarkupRange"/>
<xs:element name="commentRangeEnd" type="w:CT_MarkupRange"/>
<xs:element name="ins" type="w:CT_RunTrackChange"/>
<xs:element name="del" type="w:CT_RunTrackChange"/>
</xs:choice>
</xs:sequence>
<xs:attribute ref="r:id" use="optional"/>
</xs:complexType>
<!-- Paragraph Properties -->
<xs:complexType name="CT_PPr">
<xs:all>
<xs:element name="pStyle" minOccurs="0">
<xs:complexType>
<xs:attribute name="val" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="keepNext" type="w:CT_OnOff" minOccurs="0"/>
<xs:element name="keepLines" type="w:CT_OnOff" minOccurs="0"/>
<xs:element name="pageBreakBefore" type="w:CT_OnOff" minOccurs="0"/>
<xs:element name="widowControl" type="w:CT_OnOff" minOccurs="0"/>
<xs:element name="numPr" type="w:CT_NumPr" minOccurs="0"/>
<xs:element name="spacing" type="w:CT_Spacing" minOccurs="0"/>
<xs:element name="ind" type="w:CT_Ind" minOccurs="0"/>
<xs:element name="jc" minOccurs="0">
<xs:complexType>
<xs:attribute name="val" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="outlineLvl" minOccurs="0">
<xs:complexType>
<xs:attribute name="val" type="xs:integer" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="rPr" type="w:CT_RPr" minOccurs="0"/>
<xs:element name="pBdr" type="w:CT_PBdr" minOccurs="0"/>
<xs:element name="shd" type="w:CT_Shd" minOccurs="0"/>
<xs:element name="tabs" type="w:CT_Tabs" minOccurs="0"/>
<xs:element name="sectPr" type="w:CT_SectPr" minOccurs="0"/>
</xs:all>
</xs:complexType>
<!-- ============================================================ -->
<!-- Run -->
<!-- ============================================================ -->
<xs:complexType name="CT_R">
<xs:sequence>
<xs:element name="rPr" type="w:CT_RPr" minOccurs="0"/>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="t" type="w:CT_Text"/>
<xs:element name="delText" type="w:CT_Text"/>
<xs:element name="br" type="w:CT_Br"/>
<xs:element name="tab" type="w:CT_Empty"/>
<xs:element name="cr" type="w:CT_Empty"/>
<xs:element name="drawing" type="w:CT_Drawing"/>
<xs:element name="commentReference" type="w:CT_MarkupRef"/>
<xs:element name="footnoteReference" type="w:CT_FtnEdnRef"/>
<xs:element name="endnoteReference" type="w:CT_FtnEdnRef"/>
</xs:choice>
</xs:sequence>
</xs:complexType>
<!-- Run Properties -->
<xs:complexType name="CT_RPr">
<xs:all>
<xs:element name="rStyle" minOccurs="0">
<xs:complexType>
<xs:attribute name="val" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="rFonts" type="w:CT_Fonts" minOccurs="0"/>
<xs:element name="b" type="w:CT_OnOff" minOccurs="0"/>
<xs:element name="bCs" type="w:CT_OnOff" minOccurs="0"/>
<xs:element name="i" type="w:CT_OnOff" minOccurs="0"/>
<xs:element name="iCs" type="w:CT_OnOff" minOccurs="0"/>
<xs:element name="caps" type="w:CT_OnOff" minOccurs="0"/>
<xs:element name="smallCaps" type="w:CT_OnOff" minOccurs="0"/>
<xs:element name="strike" type="w:CT_OnOff" minOccurs="0"/>
<xs:element name="dstrike" type="w:CT_OnOff" minOccurs="0"/>
<xs:element name="vanish" type="w:CT_OnOff" minOccurs="0"/>
<xs:element name="color" minOccurs="0">
<xs:complexType>
<xs:attribute name="val" type="xs:string" use="required"/>
<xs:attribute name="themeColor" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="spacing" minOccurs="0">
<xs:complexType>
<xs:attribute name="val" type="xs:integer" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="sz" minOccurs="0">
<xs:complexType>
<xs:attribute name="val" type="xs:positiveInteger" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="szCs" minOccurs="0">
<xs:complexType>
<xs:attribute name="val" type="xs:positiveInteger" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="highlight" minOccurs="0">
<xs:complexType>
<xs:attribute name="val" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="u" minOccurs="0">
<xs:complexType>
<xs:attribute name="val" type="xs:string" use="required"/>
<xs:attribute name="color" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="vertAlign" minOccurs="0">
<xs:complexType>
<xs:attribute name="val" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="lang" minOccurs="0">
<xs:complexType>
<xs:attribute name="val" type="xs:string" use="optional"/>
<xs:attribute name="eastAsia" type="xs:string" use="optional"/>
<xs:attribute name="bidi" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
<!-- ============================================================ -->
<!-- Text -->
<!-- ============================================================ -->
<xs:complexType name="CT_Text" mixed="true">
<xs:attribute ref="xml:space" use="optional"/>
</xs:complexType>
<!-- ============================================================ -->
<!-- Table -->
<!-- ============================================================ -->
<xs:complexType name="CT_Tbl">
<xs:sequence>
<xs:element name="tblPr" type="w:CT_TblPr" minOccurs="0"/>
<xs:element name="tblGrid" type="w:CT_TblGrid" minOccurs="0"/>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="tr" type="w:CT_Row"/>
<xs:element name="bookmarkStart" type="w:CT_BookmarkStart"/>
<xs:element name="bookmarkEnd" type="w:CT_BookmarkEnd"/>
</xs:choice>
</xs:sequence>
</xs:complexType>
<xs:complexType name="CT_TblPr">
<xs:all>
<xs:element name="tblStyle" minOccurs="0">
<xs:complexType>
<xs:attribute name="val" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="tblW" type="w:CT_TblWidth" minOccurs="0"/>
<xs:element name="jc" minOccurs="0">
<xs:complexType>
<xs:attribute name="val" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="tblInd" type="w:CT_TblWidth" minOccurs="0"/>
<xs:element name="tblBorders" type="w:CT_TblBorders" minOccurs="0"/>
<xs:element name="shd" type="w:CT_Shd" minOccurs="0"/>
<xs:element name="tblLayout" minOccurs="0">
<xs:complexType>
<xs:attribute name="type" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="tblCellMar" type="w:CT_TblCellMar" minOccurs="0"/>
<xs:element name="tblLook" minOccurs="0">
<xs:complexType>
<xs:attribute name="val" type="xs:string" use="optional"/>
<xs:attribute name="firstRow" type="xs:string" use="optional"/>
<xs:attribute name="lastRow" type="xs:string" use="optional"/>
<xs:attribute name="firstColumn" type="xs:string" use="optional"/>
<xs:attribute name="lastColumn" type="xs:string" use="optional"/>
<xs:attribute name="noHBand" type="xs:string" use="optional"/>
<xs:attribute name="noVBand" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
<xs:complexType name="CT_TblGrid">
<xs:sequence>
<xs:element name="gridCol" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="w" type="xs:nonNegativeInteger" use="optional"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="CT_Row">
<xs:sequence>
<xs:element name="trPr" type="w:CT_TrPr" minOccurs="0"/>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="tc" type="w:CT_Cell"/>
<xs:element name="bookmarkStart" type="w:CT_BookmarkStart"/>
<xs:element name="bookmarkEnd" type="w:CT_BookmarkEnd"/>
</xs:choice>
</xs:sequence>
</xs:complexType>
<xs:complexType name="CT_TrPr">
<xs:all>
<xs:element name="trHeight" minOccurs="0">
<xs:complexType>
<xs:attribute name="val" type="xs:nonNegativeInteger" use="optional"/>
<xs:attribute name="hRule" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="tblHeader" type="w:CT_OnOff" minOccurs="0"/>
<xs:element name="jc" minOccurs="0">
<xs:complexType>
<xs:attribute name="val" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
<xs:complexType name="CT_Cell">
<xs:sequence>
<xs:element name="tcPr" type="w:CT_TcPr" minOccurs="0"/>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="p" type="w:CT_P"/>
<xs:element name="tbl" type="w:CT_Tbl"/>
</xs:choice>
</xs:sequence>
</xs:complexType>
<xs:complexType name="CT_TcPr">
<xs:all>
<xs:element name="tcW" type="w:CT_TblWidth" minOccurs="0"/>
<xs:element name="gridSpan" minOccurs="0">
<xs:complexType>
<xs:attribute name="val" type="xs:positiveInteger" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="vMerge" minOccurs="0">
<xs:complexType>
<xs:attribute name="val" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="tcBorders" type="w:CT_TcBorders" minOccurs="0"/>
<xs:element name="shd" type="w:CT_Shd" minOccurs="0"/>
<xs:element name="vAlign" minOccurs="0">
<xs:complexType>
<xs:attribute name="val" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="noWrap" type="w:CT_OnOff" minOccurs="0"/>
</xs:all>
</xs:complexType>
<!-- ============================================================ -->
<!-- Section Properties -->
<!-- ============================================================ -->
<xs:complexType name="CT_SectPr">
<xs:all>
<xs:element name="headerReference" minOccurs="0">
<xs:complexType>
<xs:attribute name="type" type="xs:string" use="required"/>
<xs:attribute ref="r:id" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="footerReference" minOccurs="0">
<xs:complexType>
<xs:attribute name="type" type="xs:string" use="required"/>
<xs:attribute ref="r:id" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="type" minOccurs="0">
<xs:complexType>
<xs:attribute name="val" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="pgSz" minOccurs="0">
<xs:complexType>
<xs:attribute name="w" type="xs:nonNegativeInteger" use="required"/>
<xs:attribute name="h" type="xs:nonNegativeInteger" use="required"/>
<xs:attribute name="orient" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="pgMar" minOccurs="0">
<xs:complexType>
<xs:attribute name="top" type="xs:integer" use="required"/>
<xs:attribute name="right" type="xs:nonNegativeInteger" use="required"/>
<xs:attribute name="bottom" type="xs:integer" use="required"/>
<xs:attribute name="left" type="xs:nonNegativeInteger" use="required"/>
<xs:attribute name="header" type="xs:nonNegativeInteger" use="optional"/>
<xs:attribute name="footer" type="xs:nonNegativeInteger" use="optional"/>
<xs:attribute name="gutter" type="xs:nonNegativeInteger" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="pgNumType" minOccurs="0">
<xs:complexType>
<xs:attribute name="fmt" type="xs:string" use="optional"/>
<xs:attribute name="start" type="xs:nonNegativeInteger" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="cols" minOccurs="0">
<xs:complexType>
<xs:attribute name="space" type="xs:nonNegativeInteger" use="optional"/>
<xs:attribute name="num" type="xs:positiveInteger" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="docGrid" minOccurs="0">
<xs:complexType>
<xs:attribute name="linePitch" type="xs:nonNegativeInteger" use="optional"/>
<xs:attribute name="type" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="titlePg" type="w:CT_OnOff" minOccurs="0"/>
</xs:all>
</xs:complexType>
<!-- ============================================================ -->
<!-- Hyperlink -->
<!-- ============================================================ -->
<xs:complexType name="CT_Hyperlink">
<xs:sequence>
<xs:element name="r" type="w:CT_R" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute ref="r:id" use="optional"/>
<xs:attribute name="anchor" type="xs:string" use="optional"/>
<xs:attribute name="history" type="xs:string" use="optional"/>
</xs:complexType>
<!-- ============================================================ -->
<!-- Track Changes -->
<!-- ============================================================ -->
<xs:complexType name="CT_RunTrackChange">
<xs:sequence>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="r" type="w:CT_R"/>
</xs:choice>
</xs:sequence>
<xs:attribute name="id" type="xs:nonNegativeInteger" use="required"/>
<xs:attribute name="author" type="xs:string" use="required"/>
<xs:attribute name="date" type="xs:dateTime" use="optional"/>
</xs:complexType>
<!-- ============================================================ -->
<!-- Bookmarks -->
<!-- ============================================================ -->
<xs:complexType name="CT_BookmarkStart">
<xs:attribute name="id" type="xs:nonNegativeInteger" use="required"/>
<xs:attribute name="name" type="xs:string" use="required"/>
</xs:complexType>
<xs:complexType name="CT_BookmarkEnd">
<xs:attribute name="id" type="xs:nonNegativeInteger" use="required"/>
</xs:complexType>
<!-- ============================================================ -->
<!-- Comments -->
<!-- ============================================================ -->
<xs:complexType name="CT_MarkupRange">
<xs:attribute name="id" type="xs:nonNegativeInteger" use="required"/>
</xs:complexType>
<xs:complexType name="CT_MarkupRef">
<xs:attribute name="id" type="xs:nonNegativeInteger" use="required"/>
</xs:complexType>
<!-- ============================================================ -->
<!-- Footnote/Endnote reference -->
<!-- ============================================================ -->
<xs:complexType name="CT_FtnEdnRef">
<xs:attribute name="id" type="xs:nonNegativeInteger" use="required"/>
</xs:complexType>
<!-- ============================================================ -->
<!-- Drawing (basic inline image) -->
<!-- ============================================================ -->
<xs:complexType name="CT_Drawing">
<xs:sequence>
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<!-- ============================================================ -->
<!-- Structured Document Tag (content control) -->
<!-- ============================================================ -->
<xs:complexType name="CT_SdtBlock">
<xs:sequence>
<xs:element name="sdtPr" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="sdtContent" minOccurs="0">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="p" type="w:CT_P"/>
<xs:element name="tbl" type="w:CT_Tbl"/>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<!-- ============================================================ -->
<!-- Helper types -->
<!-- ============================================================ -->
<xs:complexType name="CT_OnOff">
<xs:attribute name="val" type="xs:string" use="optional"/>
</xs:complexType>
<xs:complexType name="CT_Empty"/>
<xs:complexType name="CT_Br">
<xs:attribute name="type" type="xs:string" use="optional"/>
<xs:attribute name="clear" type="xs:string" use="optional"/>
</xs:complexType>
<xs:complexType name="CT_Fonts">
<xs:attribute name="ascii" type="xs:string" use="optional"/>
<xs:attribute name="hAnsi" type="xs:string" use="optional"/>
<xs:attribute name="eastAsia" type="xs:string" use="optional"/>
<xs:attribute name="cs" type="xs:string" use="optional"/>
<xs:attribute name="asciiTheme" type="xs:string" use="optional"/>
<xs:attribute name="hAnsiTheme" type="xs:string" use="optional"/>
<xs:attribute name="eastAsiaTheme" type="xs:string" use="optional"/>
<xs:attribute name="cstheme" type="xs:string" use="optional"/>
</xs:complexType>
<xs:complexType name="CT_NumPr">
<xs:all>
<xs:element name="ilvl" minOccurs="0">
<xs:complexType>
<xs:attribute name="val" type="xs:nonNegativeInteger" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="numId" minOccurs="0">
<xs:complexType>
<xs:attribute name="val" type="xs:nonNegativeInteger" use="required"/>
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
<xs:complexType name="CT_Spacing">
<xs:attribute name="before" type="xs:nonNegativeInteger" use="optional"/>
<xs:attribute name="after" type="xs:nonNegativeInteger" use="optional"/>
<xs:attribute name="line" type="xs:integer" use="optional"/>
<xs:attribute name="lineRule" type="xs:string" use="optional"/>
<xs:attribute name="beforeAutospacing" type="xs:string" use="optional"/>
<xs:attribute name="afterAutospacing" type="xs:string" use="optional"/>
</xs:complexType>
<xs:complexType name="CT_Ind">
<xs:attribute name="left" type="xs:integer" use="optional"/>
<xs:attribute name="right" type="xs:integer" use="optional"/>
<xs:attribute name="hanging" type="xs:nonNegativeInteger" use="optional"/>
<xs:attribute name="firstLine" type="xs:nonNegativeInteger" use="optional"/>
<xs:attribute name="start" type="xs:integer" use="optional"/>
<xs:attribute name="end" type="xs:integer" use="optional"/>
</xs:complexType>
<xs:complexType name="CT_TblWidth">
<xs:attribute name="w" type="xs:string" use="optional"/>
<xs:attribute name="type" type="xs:string" use="optional"/>
</xs:complexType>
<xs:complexType name="CT_Shd">
<xs:attribute name="val" type="xs:string" use="optional"/>
<xs:attribute name="color" type="xs:string" use="optional"/>
<xs:attribute name="fill" type="xs:string" use="optional"/>
<xs:attribute name="themeFill" type="xs:string" use="optional"/>
</xs:complexType>
<xs:complexType name="CT_Border">
<xs:attribute name="val" type="xs:string" use="required"/>
<xs:attribute name="sz" type="xs:nonNegativeInteger" use="optional"/>
<xs:attribute name="space" type="xs:nonNegativeInteger" use="optional"/>
<xs:attribute name="color" type="xs:string" use="optional"/>
<xs:attribute name="themeColor" type="xs:string" use="optional"/>
</xs:complexType>
<xs:complexType name="CT_PBdr">
<xs:all>
<xs:element name="top" type="w:CT_Border" minOccurs="0"/>
<xs:element name="left" type="w:CT_Border" minOccurs="0"/>
<xs:element name="bottom" type="w:CT_Border" minOccurs="0"/>
<xs:element name="right" type="w:CT_Border" minOccurs="0"/>
<xs:element name="between" type="w:CT_Border" minOccurs="0"/>
</xs:all>
</xs:complexType>
<xs:complexType name="CT_TblBorders">
<xs:all>
<xs:element name="top" type="w:CT_Border" minOccurs="0"/>
<xs:element name="left" type="w:CT_Border" minOccurs="0"/>
<xs:element name="bottom" type="w:CT_Border" minOccurs="0"/>
<xs:element name="right" type="w:CT_Border" minOccurs="0"/>
<xs:element name="insideH" type="w:CT_Border" minOccurs="0"/>
<xs:element name="insideV" type="w:CT_Border" minOccurs="0"/>
</xs:all>
</xs:complexType>
<xs:complexType name="CT_TcBorders">
<xs:all>
<xs:element name="top" type="w:CT_Border" minOccurs="0"/>
<xs:element name="left" type="w:CT_Border" minOccurs="0"/>
<xs:element name="bottom" type="w:CT_Border" minOccurs="0"/>
<xs:element name="right" type="w:CT_Border" minOccurs="0"/>
</xs:all>
</xs:complexType>
<xs:complexType name="CT_TblCellMar">
<xs:all>
<xs:element name="top" type="w:CT_TblWidth" minOccurs="0"/>
<xs:element name="left" type="w:CT_TblWidth" minOccurs="0"/>
<xs:element name="bottom" type="w:CT_TblWidth" minOccurs="0"/>
<xs:element name="right" type="w:CT_TblWidth" minOccurs="0"/>
</xs:all>
</xs:complexType>
<xs:complexType name="CT_Tabs">
<xs:sequence>
<xs:element name="tab" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="val" type="xs:string" use="required"/>
<xs:attribute name="pos" type="xs:integer" use="required"/>
<xs:attribute name="leader" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:schema>