pdf-tei-editor / docs /development /validation.md
cmboulanger's picture
disaster-recovery deploy of pdf-tei-editor
6a49f21 verified
|
Raw
History Blame Contribute Delete
7.46 kB
# XML Schema Validation and Autocomplete
The PDF-TEI Editor supports comprehensive XML schema validation and intelligent autocomplete features for TEI documents, supporting both XSD and RelaxNG schemas.
## Overview
The application supports two types of XML schema validation:
1. **XSD (XML Schema Definition)** - For validation only
2. **RelaxNG (Regular Language for XML Next Generation)** - For validation and intelligent autocomplete
The validation approach is automatically detected based on how the schema is declared in your XML documents.
## XSD Validation
For XSD-based validation, use the standard `xsi:schemaLocation` attribute in your root element:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<TEI xmlns="http://www.tei-c.org/ns/1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.tei-c.org/ns/1.0 https://tei-c.org/release/xml/tei/custom/schema/xsd/tei_all.xsd">
<teiHeader>
<!-- Your TEI content -->
</teiHeader>
</TEI>
```
### XSD Features
- ✅ Full validation against XSD schemas
- ❌ No autocomplete support (XSD schemas are not compatible with the autocomplete generator)
## RelaxNG Validation
For RelaxNG-based validation, use the `xml-model` processing instruction:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-model href="https://tei-c.org/release/xml/tei/custom/schema/relaxng/tei_all.rng"
type="application/xml"
schematypens="http://relaxng.org/ns/structure/1.0"?>
<TEI xmlns="http://www.tei-c.org/ns/1.0">
<teiHeader>
<!-- Your TEI content -->
</teiHeader>
</TEI>
```
### RelaxNG Features
- ✅ Full validation against RelaxNG schemas
-**Intelligent autocomplete** with TEI documentation extracted directly from the schema
- ✅ Context-aware suggestions for elements, attributes, and attribute values
- ✅ Documentation popups with detailed explanations from the TEI schema
## Intelligent Autocomplete System
The autocomplete system provides an enhanced editing experience when using RelaxNG schemas:
### Features
**Context-Aware Suggestions**:
- Element suggestions based on current location in document structure
- Attribute suggestions specific to the current element
- Attribute value suggestions from schema-defined enumerations
- Only valid options are shown at each position
**TEI Documentation Integration**:
- Real-time documentation popups extracted from TEI schema comments
- Detailed explanations of elements, attributes, and their usage
- Examples and best practices embedded in the editor
**Performance Optimization**:
- Schema parsing is cached for fast subsequent access
- Suggestions are generated dynamically without pre-computation
- Minimal impact on editor performance
### How It Works
1. **Schema Detection**: The system reads the `xml-model` processing instruction
2. **Schema Download**: RelaxNG schema is downloaded and cached automatically
3. **Documentation Extraction**: TEI documentation is parsed from schema annotations
4. **Context Analysis**: Current cursor position determines valid suggestions
5. **Real-Time Suggestions**: Autocomplete shows contextually appropriate options
## Schema Caching
Both XSD and RelaxNG schemas are downloaded and cached automatically when first encountered.
### Cache Location
- **Cache Directory**: `schema/cache`
- **Automatic Download**: Schemas are fetched on first use
- **Persistence**: Cached schemas persist across application restarts
### Cache Management
```bash
# Refresh cached schemas (delete cache directory)
rm -rf schema/cache
```
The cache will be automatically rebuilt when documents are opened that reference external schemas.
## Best Practices
### Schema Selection
**For Validation Only**:
- Use XSD schemas with `xsi:schemaLocation`
- Suitable when you only need document validation
- Standard XML toolchain compatibility
**For Enhanced Editing Experience**:
- Use RelaxNG schemas with `xml-model` processing instructions
- Provides full validation plus intelligent autocomplete
- Recommended for interactive document creation and editing
### TEI Projects
For TEI document projects, **RelaxNG is strongly recommended** because:
1. **Full Editing Experience**: Intelligent autocomplete with contextual suggestions
2. **Documentation Integration**: Built-in TEI guidelines and examples
3. **Schema Flexibility**: RelaxNG provides more expressive validation rules
4. **Community Standard**: TEI Guidelines are authored in RelaxNG
### Example TEI Document Setup
```xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-model href="https://tei-c.org/release/xml/tei/custom/schema/relaxng/tei_all.rng"
type="application/xml"
schematypens="http://relaxng.org/ns/structure/1.0"?>
<TEI xmlns="http://www.tei-c.org/ns/1.0">
<teiHeader>
<fileDesc>
<titleStmt>
<title>My TEI Document</title>
</titleStmt>
<publicationStmt>
<p>Publication information</p>
</publicationStmt>
<sourceDesc>
<p>Information about the source</p>
</sourceDesc>
</fileDesc>
</teiHeader>
<text>
<body>
<p>Document content goes here</p>
</body>
</text>
</TEI>
```
## Custom Schemas
The system supports both standard TEI schemas and custom schemas:
### Custom XSD Schemas
```xml
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://example.com/ns https://example.com/schema/custom.xsd">
```
### Custom RelaxNG Schemas
```xml
<?xml-model href="https://example.com/schema/custom.rng"
type="application/xml"
schematypens="http://relaxng.org/ns/structure/1.0"?>
```
## Validation Performance
The validation system is optimized for performance:
- **Incremental Validation**: Only validates changed portions of large documents
- **Background Processing**: Validation runs asynchronously to avoid blocking the editor
- **Caching**: Schema compilation results are cached for repeated use
- **Timeout Protection**: Long-running validations are automatically cancelled
## Troubleshooting
### Common Issues
**Schema Not Found**:
- Verify the schema URL is accessible
- Check network connectivity for remote schemas
- Ensure local schema files are in the correct path
**No Autocomplete Suggestions**:
- Confirm you're using RelaxNG with `xml-model` processing instruction
- Verify the schema URL points to a valid RelaxNG file
- Check that the schema has been successfully downloaded and cached
**Validation Errors**:
- Review the document structure against the schema requirements
- Check for missing required elements or attributes
- Verify namespace declarations match the schema expectations
**Performance Issues**:
- Large schemas may take time to process initially
- Check the browser console for validation timeout warnings
- Consider using simpler schemas for better performance
### Cache Issues
If you encounter schema caching problems:
1. **Clear the cache**: Delete the `schema/cache` directory
2. **Restart the application**: Ensure clean schema reloading
3. **Check file permissions**: Verify the cache directory is writable
4. **Network issues**: Confirm external schema URLs are accessible
## Related Documentation
- [Development Guide](development.md) - Technical implementation details
- [Installation Guide](installation.md) - Setting up the validation system
- [Interface Overview](interface-overview.md) - Using the XML editor with validation