Requirements#

Functional Requirements#

ID

Title

Status

Refinement

Satisfy

Test

req_demo_00001

SVG Link Identification

implemented

req_demo_00002; req_demo_00003

ftr_demo_00001

tsc_int_00001

req_demo_00002

Standard Sphinx Reference Resolution

implemented

ftr_demo_00002

tsc_int_00001

req_demo_00003

Sphinx-Needs Reference Resolution

implemented

ftr_demo_00003

tsc_int_00003

req_demo_00004

SVG File Modification

implemented

ftr_demo_00001

tsc_int_00001, tsc_int_00003

req_demo_00005

SVG Output Preservation

implemented

ftr_demo_00001

tsc_int_00001

req_demo_00006

Build Process Compatibility

implemented

ftr_demo_00001

tsc_int_00001

req_demo_00007

Performance Efficiency

open

req_demo_00008

ftr_demo_00001

req_demo_00008

Scalability for Multiple SVGs

open

ftr_demo_00001

req_demo_00009

Informative Logging

implemented

req_demo_00010

ftr_demo_00004; ftr_demo_00005

tsc_int_00002, tsc_int_00004

req_demo_00010

Configurable Verbosity Level

implemented

ftr_demo_00004

tsc_int_00004

@startuml

' Nodes definition 

node "<size:12>Requirement</size>\n**SVG Link**\n**Identification**\n<size:10>req_demo_00001</size>" as req_demo_00001 [[../traceability/requirements.html#req_demo_00001]] #Coral
node "<size:12>Requirement</size>\n**Standard Sphinx**\n**Reference**\n**Resolution**\n<size:10>req_demo_00002</size>" as req_demo_00002 [[../traceability/requirements.html#req_demo_00002]] #Coral
node "<size:12>Requirement</size>\n**Sphinx-Needs**\n**Reference**\n**Resolution**\n<size:10>req_demo_00003</size>" as req_demo_00003 [[../traceability/requirements.html#req_demo_00003]] #Coral
node "<size:12>Requirement</size>\n**SVG File**\n**Modification**\n<size:10>req_demo_00004</size>" as req_demo_00004 [[../traceability/requirements.html#req_demo_00004]] #Coral
node "<size:12>Requirement</size>\n**SVG Output**\n**Preservation**\n<size:10>req_demo_00005</size>" as req_demo_00005 [[../traceability/requirements.html#req_demo_00005]] #Coral
node "<size:12>Requirement</size>\n**Build Process**\n**Compatibility**\n<size:10>req_demo_00006</size>" as req_demo_00006 [[../traceability/requirements.html#req_demo_00006]] #Coral
node "<size:12>Requirement</size>\n**Performance**\n**Efficiency**\n<size:10>req_demo_00007</size>" as req_demo_00007 [[../traceability/requirements.html#req_demo_00007]] #Coral
node "<size:12>Requirement</size>\n**Scalability for**\n**Multiple SVGs**\n<size:10>req_demo_00008</size>" as req_demo_00008 [[../traceability/requirements.html#req_demo_00008]] #Coral
node "<size:12>Requirement</size>\n**Informative**\n**Logging**\n<size:10>req_demo_00009</size>" as req_demo_00009 [[../traceability/requirements.html#req_demo_00009]] #Coral
node "<size:12>Requirement</size>\n**Configurable**\n**Verbosity Level**\n<size:10>req_demo_00010</size>" as req_demo_00010 [[../traceability/requirements.html#req_demo_00010]] #Coral

' Connection definition 

req_demo_00001 --> req_demo_00002
req_demo_00001 --> req_demo_00003
req_demo_00007 --> req_demo_00008
req_demo_00009 --> req_demo_00010

@enduml

Requirement: SVG Link Identification req_demo_00001
status: implemented
type_ext: Functional
reasoning: Core capability for link resolution.
test: tsc_int_00001
acceptance: The extension successfully identifies `xlink:href` attributes containing Sphinx reference patterns in SVG files.
satisfies: ftr_demo_00001
satisfied by: spc_demo_00001
elaborates: usc_demo_00001

The system shall parse SVG files to accurately identify all <a> elements and extract the values of their xlink:href attributes.

Requirement: Standard Sphinx Reference Resolution req_demo_00002
status: implemented
type_ext: Functional
reasoning: Direct support for core Sphinx linking.
test: tsc_int_00001
acceptance: Resolved Sphinx references generate valid URIs.
refined by: req_demo_00001
satisfies: ftr_demo_00002
satisfied by: spc_demo_00002

The system shall resolve standard Sphinx cross-references (e.g., :ref:`target`, :doc:`target`) found in xlink:href attributes to their corresponding relative or absolute HTML URIs within the Sphinx build output.

Requirement: Sphinx-Needs Reference Resolution req_demo_00003
status: implemented
type_ext: Functional
reasoning: Integration with Sphinx-Needs for traceability.
test: tsc_int_00003
acceptance: Resolved Sphinx-Needs references generate valid URIs.
refined by: req_demo_00001
satisfies: ftr_demo_00003
satisfied by: spc_demo_00003
elaborates: usc_demo_00002

The system shall resolve Sphinx-Needs references (e.g., :need:`MY_NEED_ID`) found in xlink:href attributes to their corresponding HTML URIs based on the needs.json output, if needs_build_json is enabled.

Requirement: SVG File Modification req_demo_00004
status: implemented
type_ext: Functional
reasoning: Essential for making links clickable.
test: tsc_int_00001, tsc_int_00003
acceptance: Modified SVG files contain the correct, updated `xlink:href` values.
satisfies: ftr_demo_00001
satisfied by: spc_demo_00004
verified by req: tsc_demo_00002

The system shall modify the xlink:href attributes within the SVG files by replacing the original Sphinx or Sphinx-Needs reference patterns with the resolved URIs.

Requirement: SVG Output Preservation req_demo_00005
status: implemented
type_ext: Functional
reasoning: Ensures valid SVG output.
test: tsc_int_00001
acceptance: The written SVG files are well-formed and display correctly.
satisfies: ftr_demo_00001

The system shall write the modified SVG content back to the original file path, ensuring the output remains a valid and well-formed SVG.

Nonfunctional Requirements#

ID

Title

Status

Refinement

Satisfy

Test

req_demo_00001

SVG Link Identification

implemented

req_demo_00002; req_demo_00003

ftr_demo_00001

tsc_int_00001

req_demo_00002

Standard Sphinx Reference Resolution

implemented

ftr_demo_00002

tsc_int_00001

req_demo_00003

Sphinx-Needs Reference Resolution

implemented

ftr_demo_00003

tsc_int_00003

req_demo_00004

SVG File Modification

implemented

ftr_demo_00001

tsc_int_00001, tsc_int_00003

req_demo_00005

SVG Output Preservation

implemented

ftr_demo_00001

tsc_int_00001

req_demo_00006

Build Process Compatibility

implemented

ftr_demo_00001

tsc_int_00001

req_demo_00007

Performance Efficiency

open

req_demo_00008

ftr_demo_00001

req_demo_00008

Scalability for Multiple SVGs

open

ftr_demo_00001

req_demo_00009

Informative Logging

implemented

req_demo_00010

ftr_demo_00004; ftr_demo_00005

tsc_int_00002, tsc_int_00004

req_demo_00010

Configurable Verbosity Level

implemented

ftr_demo_00004

tsc_int_00004

@startuml

' Nodes definition 

node "<size:12>Requirement</size>\n**SVG Link**\n**Identification**\n<size:10>req_demo_00001</size>" as req_demo_00001 [[../traceability/requirements.html#req_demo_00001]] #Coral
node "<size:12>Requirement</size>\n**Standard Sphinx**\n**Reference**\n**Resolution**\n<size:10>req_demo_00002</size>" as req_demo_00002 [[../traceability/requirements.html#req_demo_00002]] #Coral
node "<size:12>Requirement</size>\n**Sphinx-Needs**\n**Reference**\n**Resolution**\n<size:10>req_demo_00003</size>" as req_demo_00003 [[../traceability/requirements.html#req_demo_00003]] #Coral
node "<size:12>Requirement</size>\n**SVG File**\n**Modification**\n<size:10>req_demo_00004</size>" as req_demo_00004 [[../traceability/requirements.html#req_demo_00004]] #Coral
node "<size:12>Requirement</size>\n**SVG Output**\n**Preservation**\n<size:10>req_demo_00005</size>" as req_demo_00005 [[../traceability/requirements.html#req_demo_00005]] #Coral
node "<size:12>Requirement</size>\n**Build Process**\n**Compatibility**\n<size:10>req_demo_00006</size>" as req_demo_00006 [[../traceability/requirements.html#req_demo_00006]] #Coral
node "<size:12>Requirement</size>\n**Performance**\n**Efficiency**\n<size:10>req_demo_00007</size>" as req_demo_00007 [[../traceability/requirements.html#req_demo_00007]] #Coral
node "<size:12>Requirement</size>\n**Scalability for**\n**Multiple SVGs**\n<size:10>req_demo_00008</size>" as req_demo_00008 [[../traceability/requirements.html#req_demo_00008]] #Coral
node "<size:12>Requirement</size>\n**Informative**\n**Logging**\n<size:10>req_demo_00009</size>" as req_demo_00009 [[../traceability/requirements.html#req_demo_00009]] #Coral
node "<size:12>Requirement</size>\n**Configurable**\n**Verbosity Level**\n<size:10>req_demo_00010</size>" as req_demo_00010 [[../traceability/requirements.html#req_demo_00010]] #Coral

' Connection definition 

req_demo_00001 --> req_demo_00002
req_demo_00001 --> req_demo_00003
req_demo_00007 --> req_demo_00008
req_demo_00009 --> req_demo_00010

@enduml

Requirement: Build Process Compatibility req_demo_00006
status: implemented
type_ext: Nonfunctional
reasoning: Ensures smooth integration into Sphinx.
test: tsc_int_00001
acceptance: The extension integrates without causing Sphinx build failures.
satisfies: ftr_demo_00001

The extension shall seamlessly integrate into the standard Sphinx build process and execute its logic during the build-finished event without introducing errors that halt the build.

Requirement: Performance Efficiency req_demo_00007
status: open
type_ext: Nonfunctional
reasoning: Important for large documentation sets.
acceptance: Processing time for SVGs is minimal, not significantly impacting build times.
satisfies: ftr_demo_00001

The SVG parsing and modification process shall be optimized to ensure minimal impact on the overall Sphinx build time, particularly for projects with a large number of SVG diagrams.

Requirement: Scalability for Multiple SVGs req_demo_00008
status: open
type_ext: Nonfunctional
reasoning: Ensures performance with many diagrams.
acceptance: The extension handles 100+ SVG files without excessive memory or time consumption.
refined by: req_demo_00007
satisfies: ftr_demo_00001

The system shall efficiently handle the processing of a large number of SVG files (e.g., hundreds or thousands) within a single Sphinx build, without encountering memory exhaustion or excessively long processing times.

Requirement: Informative Logging req_demo_00009
status: implemented
type_ext: Nonfunctional
reasoning: Aids debugging and user understanding.
test: tsc_int_00002, tsc_int_00004
acceptance: Log messages are clear and accurate.

The system shall provide clear and informative log messages for successful reference resolutions and warnings for unresolved references, to aid users in understanding the extension’s operations and troubleshooting.

Requirement: Configurable Verbosity Level req_demo_00010
status: implemented
type_ext: Nonfunctional
reasoning: User control over logging detail.
test: tsc_int_00004
acceptance: Verbose logging can be toggled via `conf.py`.
refined by: req_demo_00009
satisfies: ftr_demo_00004
satisfied by: spc_demo_00005
verified by req: tsc_demo_00004
elaborates: usc_demo_00003

The system shall allow users to configure the verbosity level of the extension’s logging output via a Sphinx configuration option in conf.py.