RDF Validation Deployment
commited on
Commit
Β·
c14e337
1
Parent(s):
954b0c9
Update RDF examples, move Examples section to top, and use handcuff emoji for SHACL theme
Browse files- Fixed SAMPLE_VALID_RDF with complete Work+Instance structure
- Fixed SAMPLE_INVALID_RDF to trigger SHACL violations without XML errors
- Moved Examples & Tools section from bottom to top for better UX
- Changed emoji from π to π (handcuffs) as clever SHACL/shackle pun
- Updated app title to use handcuff emoji theme
README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
---
|
2 |
title: Mcp4rdf
|
3 |
-
emoji:
|
4 |
colorFrom: blue
|
5 |
colorTo: purple
|
6 |
sdk: gradio
|
|
|
1 |
---
|
2 |
title: Mcp4rdf
|
3 |
+
emoji: π
|
4 |
colorFrom: blue
|
5 |
colorTo: purple
|
6 |
sdk: gradio
|
app.py
CHANGED
@@ -106,33 +106,92 @@ def get_openai_client():
|
|
106 |
SAMPLE_VALID_RDF = '''<?xml version="1.0" encoding="UTF-8"?>
|
107 |
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
108 |
xmlns:bf="http://id.loc.gov/ontologies/bibframe/"
|
|
|
109 |
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
|
110 |
|
111 |
<bf:Work rdf:about="http://example.org/work/1">
|
112 |
<rdf:type rdf:resource="http://id.loc.gov/ontologies/bibframe/Text"/>
|
113 |
<bf:title>
|
114 |
<bf:Title>
|
115 |
-
<bf:mainTitle>
|
|
|
116 |
</bf:Title>
|
117 |
</bf:title>
|
118 |
<bf:creator>
|
119 |
<bf:Agent>
|
120 |
-
<
|
|
|
121 |
</bf:Agent>
|
122 |
</bf:creator>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
123 |
</bf:Work>
|
124 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
125 |
</rdf:RDF>'''
|
126 |
|
127 |
SAMPLE_INVALID_RDF = '''<?xml version="1.0" encoding="UTF-8"?>
|
128 |
-
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
129 |
-
|
130 |
-
|
|
|
131 |
<bf:Work rdf:about="http://example.org/work/1">
|
132 |
-
|
133 |
-
|
134 |
-
|
|
|
|
|
|
|
|
|
135 |
</bf:Work>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
136 |
</rdf:RDF>'''
|
137 |
|
138 |
# MCP Server Tools (can be used independently)
|
@@ -516,7 +575,7 @@ def create_interface():
|
|
516 |
|
517 |
gr.HTML(f"""
|
518 |
<div class="header-text">
|
519 |
-
<h1
|
520 |
<p>Validate RDF/XML against SHACL schemas with AI-powered suggestions and corrections</p>
|
521 |
<p><strong>Status:</strong> {api_status}</p>
|
522 |
<details><summary>Debug Info</summary><pre>{debug_info}</pre></details>
|
@@ -550,6 +609,15 @@ def create_interface():
|
|
550 |
)
|
551 |
|
552 |
validate_btn = gr.Button("π Validate RDF", variant="primary", size="lg")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
553 |
|
554 |
# Results section
|
555 |
with gr.Row():
|
@@ -590,16 +658,6 @@ def create_interface():
|
|
590 |
placeholder="Corrected RDF will appear here after validation..."
|
591 |
)
|
592 |
|
593 |
-
# Examples and controls
|
594 |
-
with gr.Row():
|
595 |
-
gr.Markdown("### π Examples & Tools")
|
596 |
-
|
597 |
-
with gr.Row():
|
598 |
-
example1_btn = gr.Button("β
Valid RDF Example", variant="secondary")
|
599 |
-
example2_btn = gr.Button("β Invalid RDF Example", variant="secondary")
|
600 |
-
example3_btn = gr.Button("π BibFrame Example", variant="secondary")
|
601 |
-
clear_btn = gr.Button("ποΈ Clear All", variant="stop")
|
602 |
-
|
603 |
# Event handlers
|
604 |
validate_btn.click(
|
605 |
fn=validate_rdf_interface,
|
|
|
106 |
SAMPLE_VALID_RDF = '''<?xml version="1.0" encoding="UTF-8"?>
|
107 |
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
108 |
xmlns:bf="http://id.loc.gov/ontologies/bibframe/"
|
109 |
+
xmlns:bflc="http://id.loc.gov/ontologies/bflc/"
|
110 |
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
|
111 |
|
112 |
<bf:Work rdf:about="http://example.org/work/1">
|
113 |
<rdf:type rdf:resource="http://id.loc.gov/ontologies/bibframe/Text"/>
|
114 |
<bf:title>
|
115 |
<bf:Title>
|
116 |
+
<bf:mainTitle>Complete Valid Monograph Title</bf:mainTitle>
|
117 |
+
<bf:subtitle>A Comprehensive Example for SHACL Validation</bf:subtitle>
|
118 |
</bf:Title>
|
119 |
</bf:title>
|
120 |
<bf:creator>
|
121 |
<bf:Agent>
|
122 |
+
<rdf:type rdf:resource="http://id.loc.gov/ontologies/bibframe/Person"/>
|
123 |
+
<rdfs:label>Valid Author Name</rdfs:label>
|
124 |
</bf:Agent>
|
125 |
</bf:creator>
|
126 |
+
<bf:subject>
|
127 |
+
<bf:Topic>
|
128 |
+
<rdfs:label>Library Science</rdfs:label>
|
129 |
+
</bf:Topic>
|
130 |
+
</bf:subject>
|
131 |
+
<bf:language>
|
132 |
+
<bf:Language rdf:about="http://id.loc.gov/vocabulary/languages/eng"/>
|
133 |
+
</bf:language>
|
134 |
+
<bf:hasInstance rdf:resource="http://example.org/instance/1"/>
|
135 |
</bf:Work>
|
136 |
|
137 |
+
<bf:Instance rdf:about="http://example.org/instance/1">
|
138 |
+
<rdf:type rdf:resource="http://id.loc.gov/ontologies/bibframe/Print"/>
|
139 |
+
<bf:instanceOf rdf:resource="http://example.org/work/1"/>
|
140 |
+
<bf:title>
|
141 |
+
<bf:Title>
|
142 |
+
<bf:mainTitle>Complete Valid Monograph Title</bf:mainTitle>
|
143 |
+
</bf:Title>
|
144 |
+
</bf:title>
|
145 |
+
<bf:provisionActivity>
|
146 |
+
<bf:Publication>
|
147 |
+
<bf:date>2024</bf:date>
|
148 |
+
<bf:place>
|
149 |
+
<bf:Place>
|
150 |
+
<rdfs:label>Washington, DC</rdfs:label>
|
151 |
+
</bf:Place>
|
152 |
+
</bf:place>
|
153 |
+
<bf:agent>
|
154 |
+
<bf:Agent>
|
155 |
+
<rdfs:label>Sample Publisher</rdfs:label>
|
156 |
+
</bf:Agent>
|
157 |
+
</bf:agent>
|
158 |
+
</bf:Publication>
|
159 |
+
</bf:provisionActivity>
|
160 |
+
<bf:extent>
|
161 |
+
<bf:Extent>
|
162 |
+
<rdfs:label>256 pages</rdfs:label>
|
163 |
+
</bf:Extent>
|
164 |
+
</bf:extent>
|
165 |
+
</bf:Instance>
|
166 |
+
|
167 |
</rdf:RDF>'''
|
168 |
|
169 |
SAMPLE_INVALID_RDF = '''<?xml version="1.0" encoding="UTF-8"?>
|
170 |
+
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
171 |
+
xmlns:bf="http://id.loc.gov/ontologies/bibframe/"
|
172 |
+
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
|
173 |
+
|
174 |
<bf:Work rdf:about="http://example.org/work/1">
|
175 |
+
<!-- Missing rdf:type - this should cause SHACL validation failure -->
|
176 |
+
<bf:title>
|
177 |
+
<!-- Missing bf:Title wrapper - improper title structure -->
|
178 |
+
<bf:mainTitle>Invalid Monograph Title Structure</bf:mainTitle>
|
179 |
+
</bf:title>
|
180 |
+
<!-- Missing required bf:creator property -->
|
181 |
+
<!-- Missing other required properties like bf:language -->
|
182 |
</bf:Work>
|
183 |
+
|
184 |
+
<bf:Instance rdf:about="http://example.org/instance/1">
|
185 |
+
<rdf:type rdf:resource="http://id.loc.gov/ontologies/bibframe/Print"/>
|
186 |
+
<!-- Missing bf:instanceOf property - should link to Work -->
|
187 |
+
<bf:title>
|
188 |
+
<bf:Title>
|
189 |
+
<bf:mainTitle>Invalid Instance Title</bf:mainTitle>
|
190 |
+
</bf:Title>
|
191 |
+
</bf:title>
|
192 |
+
<!-- Missing required bf:provisionActivity -->
|
193 |
+
</bf:Instance>
|
194 |
+
|
195 |
</rdf:RDF>'''
|
196 |
|
197 |
# MCP Server Tools (can be used independently)
|
|
|
575 |
|
576 |
gr.HTML(f"""
|
577 |
<div class="header-text">
|
578 |
+
<h1>π RDF Validation Server with AI</h1>
|
579 |
<p>Validate RDF/XML against SHACL schemas with AI-powered suggestions and corrections</p>
|
580 |
<p><strong>Status:</strong> {api_status}</p>
|
581 |
<details><summary>Debug Info</summary><pre>{debug_info}</pre></details>
|
|
|
609 |
)
|
610 |
|
611 |
validate_btn = gr.Button("π Validate RDF", variant="primary", size="lg")
|
612 |
+
|
613 |
+
# Examples and controls
|
614 |
+
gr.Markdown("### π Examples & Tools")
|
615 |
+
|
616 |
+
with gr.Row():
|
617 |
+
example1_btn = gr.Button("β
Valid RDF Example", variant="secondary")
|
618 |
+
example2_btn = gr.Button("β Invalid RDF Example", variant="secondary")
|
619 |
+
example3_btn = gr.Button("π BibFrame Example", variant="secondary")
|
620 |
+
clear_btn = gr.Button("ποΈ Clear All", variant="stop")
|
621 |
|
622 |
# Results section
|
623 |
with gr.Row():
|
|
|
658 |
placeholder="Corrected RDF will appear here after validation..."
|
659 |
)
|
660 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
661 |
# Event handlers
|
662 |
validate_btn.click(
|
663 |
fn=validate_rdf_interface,
|