Initial commit
This commit is contained in:
		
							
								
								
									
										12
									
								
								Frontend/Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								Frontend/Dockerfile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | ||||
| FROM nginx:stable-alpine | ||||
|  | ||||
| COPY ./* /usr/share/nginx/html/Frontend/ | ||||
|  | ||||
| # COPY ./xpath.html /usr/share/nginx/html | ||||
|  | ||||
|  | ||||
| # COPY ./index.html /usr/share/nginx/html | ||||
| # COPY ./logo.png /usr/share/nginx/html | ||||
| # COPY ./styles.css /usr/share/nginx/html | ||||
| # COPY ./common.css /usr/share/nginx/html | ||||
| # COPY ./favicon.ico /usr/share/nginx/html | ||||
							
								
								
									
										2
									
								
								Frontend/jquery-3.6.0.slim.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								Frontend/jquery-3.6.0.slim.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										25
									
								
								Frontend/new_css/drytest.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								Frontend/new_css/drytest.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | ||||
| <!DOCTYPE html> | ||||
|  | ||||
| <head> | ||||
|     <link rel="stylesheet" href="r11form.css"> | ||||
|     <!-- <script src="scripts.js"></script> --> | ||||
| </head> | ||||
|  | ||||
| <body> | ||||
|  | ||||
|  | ||||
|     <div class="collapsibleList"> | ||||
|         <button class="section-button collapseTrigger">Node-Set</button> | ||||
|         <div class="collapsibleContent"> | ||||
|             [1.0] <a href="#" onClick="return false;" class="collapseTrigger"><code>fn:last()</code></a> | ||||
|             <div class="collapsibleContent"> | ||||
|                 Returns the position of the last node in the context list <br> | ||||
|                 <code>Link do dokumentacji W3C: <a href="https://www.w3.org/TR/1999/REC-xpath-19991116/#section-Node-Set-Functions" target="_parent">Node-Set-Functions</code></a> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| </body> | ||||
							
								
								
									
										
											BIN
										
									
								
								Frontend/new_css/font/fontello.eot
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Frontend/new_css/font/fontello.eot
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										14
									
								
								Frontend/new_css/font/fontello.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								Frontend/new_css/font/fontello.svg
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | ||||
| <?xml version="1.0" standalone="no"?> | ||||
| <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> | ||||
| <svg xmlns="http://www.w3.org/2000/svg"> | ||||
| <metadata>Copyright (C) 2021 by original authors @ fontello.com</metadata> | ||||
| <defs> | ||||
| <font id="fontello" horiz-adv-x="1000" > | ||||
| <font-face font-family="fontello" font-weight="400" font-stretch="normal" units-per-em="1000" ascent="850" descent="-150" /> | ||||
| <missing-glyph horiz-adv-x="1000" /> | ||||
| <glyph glyph-name="plus" unicode="" d="M786 439v-107q0-22-16-38t-38-15h-232v-233q0-22-16-37t-38-16h-107q-22 0-38 16t-15 37v233h-232q-23 0-38 15t-16 38v107q0 23 16 38t38 16h232v232q0 22 15 38t38 16h107q23 0 38-16t16-38v-232h232q23 0 38-16t16-38z" horiz-adv-x="785.7" /> | ||||
|  | ||||
| <glyph glyph-name="cancel" unicode="" d="M724 112q0-22-15-38l-76-76q-16-15-38-15t-38 15l-164 165-164-165q-16-15-38-15t-38 15l-76 76q-16 16-16 38t16 38l164 164-164 164q-16 16-16 38t16 38l76 76q16 16 38 16t38-16l164-164 164 164q16 16 38 16t38-16l76-76q15-15 15-38t-15-38l-164-164 164-164q15-15 15-38z" horiz-adv-x="785.7" /> | ||||
| </font> | ||||
| </defs> | ||||
| </svg> | ||||
| After Width: | Height: | Size: 1.1 KiB | 
							
								
								
									
										
											BIN
										
									
								
								Frontend/new_css/font/fontello.ttf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Frontend/new_css/font/fontello.ttf
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Frontend/new_css/font/fontello.woff
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Frontend/new_css/font/fontello.woff
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Frontend/new_css/font/fontello.woff2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Frontend/new_css/font/fontello.woff2
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										59
									
								
								Frontend/new_css/fontello.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								Frontend/new_css/fontello.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,59 @@ | ||||
| @font-face { | ||||
|     font-family: 'fontello'; | ||||
|     src: url('font/fontello.eot?49304387'); | ||||
|     src: url('font/fontello.eot?49304387#iefix') format('embedded-opentype'), | ||||
|          url('font/fontello.woff2?49304387') format('woff2'), | ||||
|          url('font/fontello.woff?49304387') format('woff'), | ||||
|          url('font/fontello.ttf?49304387') format('truetype'), | ||||
|          url('font/fontello.svg?49304387#fontello') format('svg'); | ||||
|     font-weight: normal; | ||||
|     font-style: normal; | ||||
|   } | ||||
|   /* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */ | ||||
|   /* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */ | ||||
|   /* | ||||
|   @media screen and (-webkit-min-device-pixel-ratio:0) { | ||||
|     @font-face { | ||||
|       font-family: 'fontello'; | ||||
|       src: url('../font/fontello.svg?49304387#fontello') format('svg'); | ||||
|     } | ||||
|   } | ||||
|   */ | ||||
|     | ||||
|    [class^="icon-"]:before, [class*=" icon-"]:before { | ||||
|     font-family: "fontello"; | ||||
|     font-style: normal; | ||||
|     font-weight: normal; | ||||
|     speak: never; | ||||
|     | ||||
|     display: inline-block; | ||||
|     text-decoration: inherit; | ||||
|     width: 1em; | ||||
|     margin-right: .2em; | ||||
|     text-align: center; | ||||
|     /* opacity: .8; */ | ||||
|     | ||||
|     /* For safety - reset parent styles, that can break glyph codes*/ | ||||
|     font-variant: normal; | ||||
|     text-transform: none; | ||||
|     | ||||
|     /* fix buttons height, for twitter bootstrap */ | ||||
|     line-height: 1em; | ||||
|     | ||||
|     /* Animation center compensation - margins should be symmetric */ | ||||
|     /* remove if not needed */ | ||||
|     margin-left: .2em; | ||||
|     | ||||
|     /* you can be more comfortable with increased icons size */ | ||||
|     /* font-size: 120%; */ | ||||
|     | ||||
|     /* Font smoothing. That was taken from TWBS */ | ||||
|     -webkit-font-smoothing: antialiased; | ||||
|     -moz-osx-font-smoothing: grayscale; | ||||
|     | ||||
|     /* Uncomment for 3D effect */ | ||||
|     /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */ | ||||
|   } | ||||
|     | ||||
|   .icon-plus:before { content: '\e801'; } /* '' */ | ||||
|   .icon-cancel:before { content: '\e802'; } /* '' */ | ||||
							
								
								
									
										3
									
								
								Frontend/new_css/main.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								Frontend/new_css/main.css
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| .container { | ||||
|      | ||||
| } | ||||
							
								
								
									
										484
									
								
								Frontend/new_css/r11form.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										484
									
								
								Frontend/new_css/r11form.css
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,484 @@ | ||||
| @import url('https://fonts.googleapis.com/css2?family=Nunito:wght@300;400;700&display=swap'); | ||||
| @import url('https://necolas.github.io/normalize.css/8.0.1/normalize.css'); | ||||
| @import url('fontello.css'); | ||||
|  | ||||
|  | ||||
| .hyperlink, .hyperlink:visited, .hyperlink:active { | ||||
|     color: rgb(47, 125, 146); | ||||
|     cursor: pointer; | ||||
| } | ||||
|  | ||||
| .hyperlink:hover { | ||||
|     filter: brightness(120%); | ||||
| } | ||||
|  | ||||
| .tooltip-window { | ||||
|     position: fixed; | ||||
|     right: 0; | ||||
|     filter: drop-shadow(-2px 0px 2px darkgray); | ||||
|     background: #e8f3f7; | ||||
|     padding: 15px 30px; | ||||
|     font-family: 'Nunito', sans-serif; | ||||
|     width: 40%; | ||||
|     height: 100%; | ||||
|     overflow: scroll; | ||||
| } | ||||
|  | ||||
| .tooltip-window.lite { | ||||
|     width: 30%; | ||||
| } | ||||
| /* .hyperlink.collapseTrigger::before{ | ||||
|     content: "▼"; | ||||
| } */ | ||||
|  | ||||
| .tooltip-window .tip { | ||||
| } | ||||
|  | ||||
| .bordered-field { | ||||
|     border: 2px solid rgba(93, 99, 96, 0.705); | ||||
|     border-radius: 5px; | ||||
|     padding: 8px; | ||||
|      | ||||
| } | ||||
|  | ||||
| .bordered-field:focus { | ||||
|     outline: none; | ||||
|     box-shadow: 0 0 5px rgba(81, 203, 238); | ||||
|     border: 2px solid #00000070; | ||||
| } | ||||
|  | ||||
| .bordered-field:disabled { | ||||
|     background: #eeeeeed2; | ||||
| } | ||||
|  | ||||
| .vertically-resizeable { | ||||
|     resize: vertical; | ||||
| } | ||||
|  | ||||
| .container { | ||||
|     font-family: 'Nunito', sans-serif; | ||||
|     display: flex; | ||||
|     justify-content: left; | ||||
|     width: 100%; | ||||
| } | ||||
|  | ||||
| .tool { | ||||
|     width: 55%; | ||||
|     display: flex; | ||||
|     justify-content: space-evenly; | ||||
| } | ||||
|  | ||||
| .tool.extended { | ||||
|     width: 65%; | ||||
| } | ||||
|  | ||||
| .tool .tool-context { | ||||
|     width: 90%; | ||||
| } | ||||
|  | ||||
| .tool.extended .tool-context { | ||||
|     width: 75%; | ||||
| } | ||||
|  | ||||
| .tool.extended .tool-extention { | ||||
|     width: 20%; | ||||
|     padding-top: 2%; | ||||
|     display: block; | ||||
| } | ||||
|  | ||||
| .tool .tool-extention { | ||||
|     display: none; | ||||
| } | ||||
|  | ||||
| .tool-extention { | ||||
|     opacity: 0; | ||||
|     pointer-events: none; | ||||
| } | ||||
|  | ||||
| .tool-extention.active { | ||||
|     opacity: 100%; | ||||
|     pointer-events: all; | ||||
| } | ||||
|  | ||||
| .clickable-text { | ||||
|     padding: 0; | ||||
|     outline: none; | ||||
|     background: none; | ||||
|     border: none; | ||||
|     font-weight: 300; | ||||
|     cursor: pointer; | ||||
| } | ||||
|  | ||||
| .clickable-text.highlight:hover { | ||||
|     color: #3bc4f1; | ||||
| } | ||||
|  | ||||
| .modification-button { | ||||
|     padding: 0; | ||||
|     outline: none; | ||||
|     background: none; | ||||
|     border: none; | ||||
|     font-weight: 300; | ||||
| } | ||||
|  | ||||
| .modification-button.btn-add { | ||||
|     font-size: 16px; | ||||
|     color: #00000030; | ||||
|     margin: auto 0 auto 0; | ||||
| } | ||||
|  | ||||
| .modification-button.btn-add:hover { | ||||
|     color:#58ac43; | ||||
| } | ||||
|  | ||||
| .modification-button.btn-tile:hover { | ||||
|     color: #ca1111; | ||||
| } | ||||
|  | ||||
| .modification-button.btn-hashmap { | ||||
|     font-size: 16px; | ||||
|     color: #00000030; | ||||
|     margin: auto 0 auto 0; | ||||
| } | ||||
|  | ||||
| .modification-button.btn-hashmap:hover { | ||||
|     color: #ca1111; | ||||
| } | ||||
|  | ||||
| .modification-button.btn-tile { | ||||
|     width: 10%; | ||||
|     margin: 20% 0 0 0; | ||||
|     font-size: 14px; | ||||
|     color: #00000020 | ||||
| } | ||||
|  | ||||
| .tile { | ||||
|     width: 90%; | ||||
|     padding-top: 40%; | ||||
|     border: 1px solid gray; | ||||
|     border-radius: 3px; | ||||
|     position: relative; | ||||
|     background: #f0f0f095; | ||||
|     margin-bottom: 10px; | ||||
|     cursor: default; | ||||
| } | ||||
|  | ||||
| .tile:hover { | ||||
|     filter: brightness(110%); | ||||
| } | ||||
|  | ||||
| .tile.active { | ||||
|     background: #00000070; | ||||
|     color: white; | ||||
|     filter: none; | ||||
| } | ||||
|  | ||||
| .tile .content { | ||||
|     position: absolute; | ||||
|     left: 0; | ||||
|     top: 0; | ||||
|     bottom: 0; | ||||
|     right: 0; | ||||
|     padding: 0 2% 0 7%; | ||||
|     display: flex; | ||||
| } | ||||
|  | ||||
| .text-aligned-to-right { | ||||
|     text-align: right; | ||||
| } | ||||
|  | ||||
| .centered-vertically { | ||||
|     margin-top: auto; | ||||
|     margin-bottom: auto; | ||||
| } | ||||
|  | ||||
| .display-space-between { | ||||
|     width: 100%; | ||||
|     display: flex; | ||||
|     justify-content: space-between; | ||||
| } | ||||
|  | ||||
| .content p { | ||||
|     margin: 0; | ||||
|     padding: 0; | ||||
| } | ||||
|  | ||||
|  | ||||
| .float-left { | ||||
|     display: flex; | ||||
|     justify-content: left; | ||||
|     width: 100%; | ||||
| } | ||||
|  | ||||
| .version-span { | ||||
|     font-size: 13px; | ||||
|     font-weight: 400; | ||||
|     color: rgba(85,85,85,0.555); | ||||
| } | ||||
|  | ||||
| .block-display { | ||||
|     display: block; | ||||
| } | ||||
|  | ||||
| .block-label { | ||||
|     display: block; | ||||
|     margin: 0 0 0 5px; | ||||
| } | ||||
|  | ||||
| .tabmenu { | ||||
|     display: flex; | ||||
|     flex-direction: row; | ||||
|     text-align: center; | ||||
|     border-bottom: 1px solid rgba(185, 185, 185, 0.5); | ||||
| } | ||||
|  | ||||
| .tabitem { | ||||
|     flex-grow: 1; | ||||
|     cursor: pointer; | ||||
|     padding: 5px 0; | ||||
| } | ||||
|  | ||||
| .tabitem:hover { | ||||
|     font-weight: 700; | ||||
| } | ||||
|  | ||||
| .tabitem.active { | ||||
|     background: rgba(33, 34, 34, 0.705); | ||||
|     color: white; | ||||
|     font-weight: 700; | ||||
|     cursor:default; | ||||
|     flex-grow: 1; | ||||
| } | ||||
|  | ||||
| .big-font { | ||||
|     font-size: 20px; | ||||
| } | ||||
|  | ||||
| .action-button.active { | ||||
|     background: #3bc4f1; | ||||
|     border: 1px solid #7ed0eb; | ||||
|     cursor: pointer; | ||||
| } | ||||
|  | ||||
| .action-button.active:hover { | ||||
|     filter: brightness(110%); | ||||
| } | ||||
|  | ||||
| .action-button { | ||||
|     background: rgba(155, 165, 160, 0.507); | ||||
|     border:1px solid rgba(186, 197, 191, 0.507); | ||||
|     color: white; | ||||
|     padding: 10px 20px; | ||||
|     font-weight: 700; | ||||
|     margin: 3px 0; | ||||
| } | ||||
|  | ||||
| .quater-width { | ||||
|     width: 25%; | ||||
| } | ||||
|  | ||||
| .half-width { | ||||
|     width: 50%; | ||||
| } | ||||
|  | ||||
| .half-width.with-padding { | ||||
|     width: 45%; | ||||
| } | ||||
|  | ||||
| .max-width { | ||||
|     width: 100%; | ||||
| } | ||||
|  | ||||
| .max-width.with-padding { | ||||
|     width: 94%; | ||||
| } | ||||
|  | ||||
| .max-height { | ||||
|     height: 100%; | ||||
| } | ||||
|  | ||||
| .height-300 { | ||||
|     height: 300px; | ||||
| } | ||||
|  | ||||
| .max-height.with-padding { | ||||
|     height: 90%; | ||||
| } | ||||
|  | ||||
| .small-margins { | ||||
|     margin: 3%; | ||||
| } | ||||
|  | ||||
| .small-vertical-margin { | ||||
|     margin-top: 10px; | ||||
|     margin-bottom: 10px; | ||||
| } | ||||
|  | ||||
| .medium-vertical-margin { | ||||
|     margin-top: 30px; | ||||
|     margin-bottom: 30px; | ||||
| } | ||||
|  | ||||
| .large-vertical-margin { | ||||
|     margin-top: 50px; | ||||
|     margin-bottom: 50px; | ||||
| } | ||||
|  | ||||
| .textarea-300 { | ||||
|     height: 300px; | ||||
| } | ||||
|  | ||||
| .centered-content { | ||||
|     display: flex; | ||||
|     justify-content: center; | ||||
| } | ||||
|  | ||||
| .table-map { | ||||
|     width: 60%; | ||||
| } | ||||
|  | ||||
| .table-map input{ | ||||
|     font-size: 16px; | ||||
|     padding: 7px; | ||||
|     border: 1px solid rgba(145, 146, 146, 0.849); | ||||
|     border-radius: 5px; | ||||
| } | ||||
|  | ||||
| .table-map input.key { | ||||
|     background: #f0f0f0; | ||||
| } | ||||
|  | ||||
| .table-default { | ||||
|     width: 80%; | ||||
|     border-collapse: collapse; | ||||
|     border-spacing: 0; | ||||
| } | ||||
|  | ||||
| .table-default tr { | ||||
|     background: #f0f0f02d; | ||||
| } | ||||
|  | ||||
| .table-default tr.bottom-border { | ||||
|     border-bottom: 1px solid black; | ||||
| } | ||||
|  | ||||
| .table-default th { | ||||
|     background: #ffffff; | ||||
| } | ||||
|  | ||||
| .table-default tr.even { | ||||
|     background: #f0f0f0; | ||||
| } | ||||
|  | ||||
| .tip { | ||||
|     display: none; | ||||
| } | ||||
|  | ||||
| .tip.active { | ||||
|     display: block; | ||||
| } | ||||
|  | ||||
| .tabcontent { | ||||
|     display: none; | ||||
| } | ||||
|  | ||||
| .tabcontent.active { | ||||
|     display: flex; | ||||
|     justify-content: center; | ||||
| } | ||||
|  | ||||
| .section-button { | ||||
|     width: 100%; | ||||
|     padding: 15px 0; | ||||
|     font-size: 18px; | ||||
|     background: #b4b4b4c5; | ||||
|     cursor: pointer; | ||||
|     border-bottom: darkgray 2px solid !important; | ||||
| } | ||||
|  | ||||
| .section-button:hover { | ||||
|     /* border-bottom: #3bc4f1 2px solid; */ | ||||
|     backdrop-filter: brightness(110%);  | ||||
| } | ||||
|  | ||||
| .section-button .active { | ||||
|     background: #00000030; | ||||
| } | ||||
|  | ||||
| .List .collapsibleContent { | ||||
|     /* display: none; */ | ||||
|     border-left: #bdc5c9 2px solid; | ||||
|      | ||||
|     /* max-height: 0px; */ | ||||
|     /* border-left: #ededed solid 1px; */ | ||||
|     overflow: hidden; | ||||
|     background: #ffffff50; | ||||
| } | ||||
|  | ||||
| .section{ | ||||
|     padding: 10px 0px 20px 0px ; | ||||
| } | ||||
|  | ||||
| .content { | ||||
|     padding: 0px 15px 0px 15px ; | ||||
|     text-align: justify; | ||||
|     overflow: hidden; | ||||
|     transition: max-height .2s ease-out; | ||||
|     max-height: 0px; | ||||
|     border-left: #c0c2c3 2px solid; | ||||
|      | ||||
| } | ||||
|  | ||||
| .collapsibleMini::before{ | ||||
|     content: "►"; | ||||
| } | ||||
|  | ||||
| .collapsibleMini.active::before{ | ||||
|     content: "▼"; | ||||
| } | ||||
|  | ||||
| .content.active{ | ||||
|      | ||||
| } | ||||
|  | ||||
| .hiddable { | ||||
|     display: none; | ||||
| } | ||||
|  | ||||
| .hiddable.active { | ||||
|     display: inherit; | ||||
| } | ||||
|  | ||||
| /* In case of collision with classes that use 'active' */ | ||||
| .hidden { | ||||
|     display: none; | ||||
| } | ||||
|  | ||||
| button:hover{ | ||||
|     filter: brightness(110%); | ||||
| } | ||||
|  | ||||
| .table-doc td, .table-doc th{ | ||||
|     border-spacing: 0px; | ||||
|     padding: 0px 10px; | ||||
| } | ||||
|  | ||||
| .table-doc td { | ||||
|     background-color: rgba(155, 165, 160, 0.342); | ||||
| } | ||||
|  | ||||
| .table-doc th { | ||||
|     background-color: #3bc4f1; | ||||
|     text-align: left; | ||||
|     color: white; | ||||
| } | ||||
|  | ||||
| textarea { | ||||
| 	-webkit-box-sizing: border-box; | ||||
| 	-moz-box-sizing: border-box; | ||||
| 	box-sizing: border-box; | ||||
| } | ||||
|  | ||||
| code{ | ||||
|     line-height: 150%; | ||||
| } | ||||
							
								
								
									
										33
									
								
								Frontend/sample_data/sample_xml.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								Frontend/sample_data/sample_xml.xml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,33 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <l:library xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.release11.com" xmlns:l="http://www.release11.com/library" xmlns:p="http://www.release11.com/person" xmlns:b="http://www.release11.com/book"> | ||||
|     <l:libraryName>City library</l:libraryName> | ||||
|     <l:libraryID>345123</l:libraryID> | ||||
|     <l:readerList> | ||||
|         <p:person> | ||||
|             <p:readerID>7321</p:readerID> | ||||
|             <p:name>Adam</p:name> | ||||
|             <p:surname>Choke</p:surname> | ||||
|         </p:person> | ||||
|         <p:person> | ||||
|             <p:readerID>5123</p:readerID> | ||||
|             <p:name>Lauren</p:name> | ||||
|             <p:surname>Wong</p:surname> | ||||
|         </p:person> | ||||
|     </l:readerList> | ||||
|     <l:bookList> | ||||
|         <b:book> | ||||
|             <b:bookID>6422</b:bookID> | ||||
|             <b:title>Harry Potter</b:title> | ||||
|             <p:readerID>7542</p:readerID> | ||||
|         </b:book> | ||||
|         <b:book> | ||||
|             <b:bookID>1234</b:bookID> | ||||
|             <b:title>Macbeth</b:title> | ||||
|             <p:readerID>5123</p:readerID> | ||||
|         </b:book> | ||||
|         <b:book> | ||||
|             <b:bookID>9556</b:bookID> | ||||
|             <b:title>Romeo and Juliet</b:title> | ||||
|         </b:book> | ||||
|     </l:bookList> | ||||
| </l:library> | ||||
							
								
								
									
										156
									
								
								Frontend/scripts.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										156
									
								
								Frontend/scripts.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,156 @@ | ||||
| var defaultStrings = []; | ||||
| const color_grey = "#6b6b6b"; | ||||
| const color_red = "#ff8f8f"; | ||||
|  | ||||
| //Remove default text and set color to black | ||||
| function clearDefaultContent(element, text) { | ||||
|     if (element.value == text) { | ||||
|         element.value = ""; | ||||
|         element.style.color = "#000000"; | ||||
|         element.style.backgroundColor = "#ffffff"; | ||||
|     } | ||||
| } | ||||
|  | ||||
| //Set default text in grey | ||||
| function setDefaultContent(element, text) { | ||||
|     if (element.value == "") { | ||||
|         var id = element.getAttribute('id'); | ||||
|         if (!defaultStrings.includes(text)) { | ||||
|             defaultStrings.push(text); | ||||
|         } | ||||
|         if (id == "xmlArea") { | ||||
|             element.style.color = color_grey; | ||||
|             element.value = text; | ||||
|         } | ||||
|         if (id == "transformArea") { | ||||
|             element.style.color = color_grey; | ||||
|             element.value = text; | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| function hideList(collList) { | ||||
|     for (i = 0; i < collList.length; i++) { | ||||
|         if (collList[i].nextElementSibling !== null) { | ||||
|             collList[i].nextElementSibling.style.maxHeight = null; | ||||
|             collList[i].nextElementSibling.classList.toggle("collapsibleDataExpanded", false); | ||||
|         } | ||||
|         collList[i].style.display = 'none'; | ||||
|         collList[i].classList.remove("collapsibleActive"); | ||||
|     } | ||||
| } | ||||
|  | ||||
| function checkDefault(text){ | ||||
|     return defaultStrings.includes(text); | ||||
| } | ||||
|  | ||||
| function showList(collList) { | ||||
|     for (i = 0; i < collList.length; i++) { | ||||
|         collList[i].style.display = 'block'; | ||||
|     } | ||||
| } | ||||
|  | ||||
| function smoothFoldElement(element, toogleState, toggleParrent){ | ||||
|     if (toogleState) { | ||||
|         console.log("DUPA"); | ||||
|         if(toggleParrent){ | ||||
|             element.parentElement.style.maxHeight = "0px"; | ||||
|         } | ||||
|          | ||||
|         element.classList.toggle("active", false); | ||||
|         var subLists = collapsibleData.getElementsByClassName("collapsibleData"); | ||||
|         for (j = 0; j < subLists.length; j++) { | ||||
|             subLists[j].style.maxHeight = null; | ||||
|         } | ||||
|     } else { | ||||
|         collapsibleData.parentElement.style.maxHeight = (collapsibleData.parentElement.scrollHeight) + "px"; | ||||
|         collapsibleData.classList.toggle("active", true); | ||||
|         if (collapsibleData.parentElement.classList.contains("collapsibleData") && collapsibleData.parentElement.classList.contains("active")) { | ||||
|             collapsibleData.parentElement.style.maxHeight = (collapsibleData.parentElement.scrollHeight + collapsibleData.scrollHeight) + "px"; | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| //Set tooltip info, function is called by onClick handlers | ||||
| function refreshTooltip() { | ||||
|     var resizeList = document.getElementsByClassName("collapsibleData"); | ||||
|     console.log("collDataList: " + resizeList.length) | ||||
|     document.getElementById("processorTooltipInfo").innerText = procInfo; | ||||
|     document.getElementById("xsltelementsheader").innerText = XSLTheader; | ||||
| } | ||||
|  | ||||
| function performRequest(text, checkXML, checkTransform){ | ||||
|     var xmlData = document.getElementById("xmlArea").value.trim(); | ||||
|     var transformData = document.getElementById("transformArea").value.trim(); | ||||
|      | ||||
|     var empty = false; | ||||
|     if (defaultStrings.includes(xmlData) && checkXML) { | ||||
|             document.getElementById("xmlArea").style.backgroundColor = color_red; | ||||
|             xmlData = ""; | ||||
|             empty = true; | ||||
|     } | ||||
|     if (defaultStrings.includes(transformData) && checkTransform) { | ||||
|         document.getElementById("transformArea").style.backgroundColor = color_red; | ||||
|         empty = true; | ||||
|     } | ||||
|     if (!empty) { | ||||
|         restRequest(text); | ||||
|     }else{ | ||||
|         document.getElementById("resultArea").value = "No data provided!"; | ||||
|         return false; | ||||
|     } | ||||
|      | ||||
| } | ||||
|  | ||||
| //Form REST request, send, receive and display in resultArea | ||||
| async function restRequest(text) { | ||||
|     const escapeChar = "specialEscapeChar"; | ||||
|     // const addr = "http://localhost:8081/" + text; | ||||
|     const addr = "http://gordon.zipper.release11.com:8081/" + text; | ||||
|      | ||||
|     var xmlData = document.getElementById("xmlArea").value.trim(); | ||||
|     var transformData = document.getElementById("transformArea").value.trim(); | ||||
|  | ||||
|     if(defaultStrings.includes(xmlData)){ | ||||
|         xmlData = "<empty/>"; | ||||
|     } | ||||
|  | ||||
|     // var data = xmlData.concat(escapeChar, transformData); | ||||
|  | ||||
|     // const url = addr.concat("?escapechar=", escapeChar, "&processor=", getProcInfo()); | ||||
|  | ||||
|     var jsonData = JSON.stringify({ | ||||
|         "data" : xmlData, | ||||
|         "process" : transformData, | ||||
|         "processor" : getProcessor(), | ||||
|         "version" : getVersion() | ||||
|     }); | ||||
|     // console.log(jsonData); | ||||
|     var init = { | ||||
|         headers: new Headers({ | ||||
|         }), | ||||
|         body: jsonData, | ||||
|         // body: data, | ||||
|         method: "POST" | ||||
|     }; | ||||
|     var request = new Request(addr, init); | ||||
|  | ||||
|      | ||||
|  | ||||
|     await fetch(request).then(response => { | ||||
|         console.log(response.status); | ||||
|         response.text().then(function (text) { | ||||
|             console.log(text); | ||||
|             var result = JSON.parse(text); | ||||
|             document.getElementById("resultArea").value = result.result; | ||||
|             document.getElementById("procinfo").innerText = ' Computed using '.concat(" ", result.processor); | ||||
|             if (response.ok) { | ||||
|                 document.getElementById("procinfo").innerText = document.getElementById("procinfo").innerText.concat(" in ", result.time, "ms"); | ||||
|                 procinfo.style.color = "#30aa58"; | ||||
|             } else { | ||||
|                 procinfo.style.color = "#aa3030"; | ||||
|             } | ||||
|         }); | ||||
|  | ||||
|     }); | ||||
| } | ||||
							
								
								
									
										100
									
								
								Frontend/styles.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										100
									
								
								Frontend/styles.css
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,100 @@ | ||||
| html, body { | ||||
|     margin: 0px; | ||||
|     height: 100%; | ||||
|     min-height: 100%; | ||||
|     font-family: 'Nunito', sans-serif; | ||||
| } | ||||
|  | ||||
| select { | ||||
|     font-size: 16px; | ||||
| } | ||||
|  | ||||
| button#requestButton { | ||||
|     width: 100%; | ||||
| } | ||||
|  | ||||
| div#content { | ||||
|     width: 100%; | ||||
|     min-height: 100%; | ||||
|     display: flex; | ||||
| } | ||||
|  | ||||
| div#fields { | ||||
|     float: left; | ||||
|     width: 55%; | ||||
|     margin-left: 8px; | ||||
|     margin-right: 8px; | ||||
|     height: 100%; | ||||
|     margin-bottom: 60px; | ||||
| } | ||||
|  | ||||
| p { | ||||
|     margin: 1 | ||||
| } | ||||
|  | ||||
| label { | ||||
|     font-size: 20px; | ||||
|     color: rgb(44, 44, 44); | ||||
| } | ||||
|  | ||||
| textarea { | ||||
|     width: 99.4%; | ||||
|     resize: vertical; | ||||
|     color: #6b6b6b; | ||||
| } | ||||
|  | ||||
| textarea#resultArea { | ||||
|     width: 99.4%; | ||||
|     resize: vertical; | ||||
| } | ||||
|  | ||||
| span#procinfo { | ||||
|     color: #30aa58; | ||||
| } | ||||
|  | ||||
| p#tooltipText { | ||||
|     width: 200px; | ||||
|     height: 150px; | ||||
| } | ||||
|  | ||||
| div#tooltip { | ||||
|     margin-top: 160px; | ||||
|     float: right; | ||||
|     width: 40%; | ||||
|     height: 100%; | ||||
| } | ||||
|  | ||||
| .collapsible { | ||||
|     width: 100%; | ||||
| } | ||||
|  | ||||
| .collapsible.active { | ||||
|     background-color: rgb(129, 129, 129) !important; | ||||
| } | ||||
|  | ||||
| .collapsibleData { | ||||
|     transition: max-height .2s ease-out; | ||||
|     max-height: 0px; | ||||
| } | ||||
|  | ||||
| .docTable td, .docTable th{ | ||||
|     border-spacing: 0px; | ||||
|     padding: 0px 10px; | ||||
| } | ||||
|  | ||||
| .docTable td { | ||||
|     background-color: rgba(155, 165, 160, 0.342); | ||||
| } | ||||
|  | ||||
| .docTable th { | ||||
|     background-color: #3bc4f1; | ||||
|     text-align: left; | ||||
|     color: white; | ||||
| } | ||||
|  | ||||
| .collapsibleDataMini{ | ||||
|     /* border-radius: 10px; */ | ||||
|     border: solid rgba(137, 146, 142, 0.267); | ||||
|     border-width: 0px 0px 0px 3px; | ||||
|     margin-left: 10px; | ||||
| } | ||||
							
								
								
									
										1094
									
								
								Frontend/xpath (copy).html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1094
									
								
								Frontend/xpath (copy).html
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										3208
									
								
								Frontend/xpath.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3208
									
								
								Frontend/xpath.html
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										171
									
								
								Frontend/xsd.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										171
									
								
								Frontend/xsd.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,171 @@ | ||||
| <!DOCTYPE html> | ||||
| <html> | ||||
|  | ||||
| <head> | ||||
|     <!-- <link rel="stylesheet" href="styles.css"> --> | ||||
|     <link rel="stylesheet" href="new_css/r11form.css"> | ||||
|     <script src="scripts.js"></script> | ||||
|     <meta charset="utf-8" /> | ||||
| </head> | ||||
|  | ||||
| <body onload="init();"> | ||||
|     <div class="container"> | ||||
|         <div id="tool" class="tool"> | ||||
|             <div class="tool-context"> | ||||
|                 <div class="headline"> | ||||
|                     <h1>Online XSD tester <span class="versionInfo"><span class="version-span">v0.4 BETA</span></span> | ||||
|                     </h1> | ||||
|                 </div> | ||||
|                 <label for="processors">Select XSLT processor:</label> | ||||
|                 <select name="processors" id="processors"> | ||||
|                     <!-- <option value="saxon">Saxon</option> --> | ||||
|                     <option value="xalan">Xalan</option> | ||||
|                 </select> | ||||
|                 <!-- <span id="processorTooltipInfo">procInfo</span><br> --> | ||||
|                 <br> | ||||
|  | ||||
|                 <label for="xmlArea"><b>Insert your XML:</b></label> | ||||
|                 <textarea id="xmlArea" name="xmlArea" rows="15" | ||||
|                     class="textarea-300 bordered-field vertically-resizeable max-width" | ||||
|                     onblur="setDefaultContent(this, 'Insert XML here');" | ||||
|                     onfocus="clearDefaultContent(this, 'Insert XML here');"></textarea> | ||||
|                 <br><br> | ||||
|  | ||||
|                 <label for="transformArea"><b>Insert your XSD:</b></label> | ||||
|                 <textarea id="transformArea" name="transformArea" rows="15" | ||||
|                     class="textarea-300 bordered-field vertically-resizeable max-width" | ||||
|                     onblur="setDefaultContent(this, 'Insert XSD here');" | ||||
|                     onfocus="clearDefaultContent(this, 'Insert XSD here');"></textarea> | ||||
|                 <br> | ||||
|                 <button id="requestButton" class="max-width block-label action-button active" | ||||
|                     onclick="performRequest('xsdpost', true, true)">Verify XSD</button> | ||||
|                 <br><br> | ||||
|  | ||||
|                 <label for="resultArea"><b>Result:<span id="procinfo"></span></b></label> | ||||
|                 <textarea id="resultArea" name="resultArea" rows="2" | ||||
|                     class="bordered-field vert2ically-resizeable max-width" style="margin-bottom: 50px;"></textarea> | ||||
|  | ||||
|             </div> | ||||
|         </div> | ||||
|         <div class="tooltip-window"> | ||||
|             <h2>What is XSD?</h2> | ||||
|             <p><b>XSD is a W3C recomedation that specifies how to describe the elements in XML document</b></p> | ||||
|                 <p>XSD specifies data types, order and arity of elements in XML file.<br> | ||||
|                     Main components of XSD file are:<br> | ||||
|                     - Element declaration - declares properties of elements (names and namespaces)<br> | ||||
|                     - Attribute declarations - declares properties of attributes<br> | ||||
|                     - Simple and complex types:<br> | ||||
|                     - - XSD provides 19 simple data types<br> | ||||
|                     - - More complex types are declared using simple types and relationships<br> | ||||
|                 </p> | ||||
|         </div> | ||||
|  | ||||
|  | ||||
|  | ||||
|     </div> | ||||
|  | ||||
|     <!-- <script> | ||||
|         function getVersion() { | ||||
|             return document.getElementById("versions").value; | ||||
|         } | ||||
|     </script> --> | ||||
|     <script> | ||||
|         function processTooltip() { | ||||
|             console.log("processTooltip"); | ||||
|  | ||||
|  | ||||
|             if (getProcInfo() == "xalan") { | ||||
|                 document.getElementById("tooltipFunctionInfo").innerText = "XSLT 1.0 functions"; | ||||
|                 document.getElementById("processorTooltipInfo").innerText = "Supports XSLT 1.0"; | ||||
|                 hideList(document.getElementsByName("collapse30")); | ||||
|             } else { | ||||
|                 document.getElementById("tooltipFunctionInfo").innerText = "XSLT 1.0, 2.0 & 3.0 functions"; | ||||
|                 document.getElementById("processorTooltipInfo").innerText = "Supports XSLT up to 3.0"; | ||||
|                 showList(document.getElementsByName("collapse30")); | ||||
|             } | ||||
|         } | ||||
|     </script> | ||||
|     <script> | ||||
|         function getProcessor() { | ||||
|             return document.getElementById("processors").value; | ||||
|         } | ||||
|     </script> | ||||
|     <script> | ||||
|         function getVersion() { | ||||
|             if (getProcInfo() == "xalan") { | ||||
|                 return "1.0"; | ||||
|             } else { | ||||
|                 return "3.0"; | ||||
|             } | ||||
|         } | ||||
|     </script> | ||||
|     <script> | ||||
|         function getProcInfo() { | ||||
|             var processVariables = document.getElementById("processors").value;// + "&version=" + document.getElementById("versions").value; | ||||
|             return processVariables; | ||||
|         } | ||||
|     </script> | ||||
|  | ||||
|     <script> | ||||
|         var triggerList = document.getElementsByClassName("collapseTrigger"); | ||||
|         for (i = 0; i < triggerList.length; i++) { | ||||
|             console.log("trigger connected"); | ||||
|             triggerList[i].addEventListener("click", function () { | ||||
|                 console.log("click"); | ||||
|                 var collapsible = this.parentElement; | ||||
|                 var collapsibleData = this.nextElementSibling; | ||||
|                 if (collapsibleData.style.maxHeight > "0px") { | ||||
|                     collapsibleData.style.maxHeight = "0px"; | ||||
|  | ||||
|                     this.classList.toggle("active", false); | ||||
|                     if (!this.classList.contains("collapsibleMini")) { | ||||
|                         collapsible.classList.toggle("active", false); | ||||
|                     } | ||||
|  | ||||
|                     var subLists1 = collapsibleData.getElementsByClassName("content"); | ||||
|                     var subLists2 = collapsibleData.getElementsByClassName("active"); | ||||
|                     for (j = 0; j < subLists1.length; j++) { | ||||
|                         subLists1[j].style.maxHeight = "0px"; | ||||
|                     } | ||||
|                     for (j = 0; j < subLists2.length; j++) { | ||||
|                         subLists2[j].classList.toggle("active", false); | ||||
|                     } | ||||
|                 } else { | ||||
|                     collapsibleData.style.maxHeight = (collapsibleData.scrollHeight) + "px"; | ||||
|  | ||||
|                     this.classList.toggle("active", true); | ||||
|                     if (!this.classList.contains("collapsibleMini")) { | ||||
|                         collapsible.classList.toggle("active", true); | ||||
|                     } else { | ||||
|                         var parentContent = this.closest(".content"); | ||||
|                         parentContent.style.maxHeight = (parentContent.scrollHeight + collapsibleData.scrollHeight) + "px"; | ||||
|                     } | ||||
|                 } | ||||
|             }); | ||||
|         } | ||||
|     </script> | ||||
|  | ||||
|     <script> | ||||
|         function init() { | ||||
|             //Handle clicks in whole form and set info in tooltip | ||||
|             setDefaultContent(document.getElementById("xmlArea"), 'Insert XML here'); | ||||
|             setDefaultContent(document.getElementById("transformArea"), 'Insert XSD here'); | ||||
|             console.log("init"); | ||||
|             // refreshTooltip(); | ||||
|             processTooltip(); | ||||
|             tool.addEventListener('click', event => { | ||||
|                 //Check if script was called from textarea or selector | ||||
|                 var targetID = event.target.getAttribute('id'); | ||||
|                 if (targetID !== "processors" && targetID !== "xmlArea" && targetID !== "transformArea" && targetID !== "versions") { | ||||
|                     return; | ||||
|                 } | ||||
|  | ||||
|                 processTooltip(); | ||||
|                 // console.log("clock"); | ||||
|             }) | ||||
|         } | ||||
|     </script> | ||||
|  | ||||
| </body> | ||||
|  | ||||
| </html> | ||||
							
								
								
									
										540
									
								
								Frontend/xslt (copy).html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										540
									
								
								Frontend/xslt (copy).html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,540 @@ | ||||
| <!DOCTYPE html> | ||||
| <html> | ||||
|  | ||||
| <head> | ||||
|     <!-- <link rel="stylesheet" href="styles.css"> --> | ||||
|     <link rel="stylesheet" href="new_css/r11form.css"> | ||||
|     <script src="scripts.js"></script> | ||||
| </head> | ||||
|  | ||||
| <body onload="init();"> | ||||
|     <div class="container"> | ||||
|         <div id="tool" class="tool"> | ||||
|             <div class="tool-context"> | ||||
|                 <div class="headline"> | ||||
|                     <h1>Online XSLT tester <span class="versionInfo"><span class="version-span">v0.4</span></span></h1> | ||||
|                 </div> | ||||
|                 <label for="processors">Select XSLT processor:</label> | ||||
|                 <select name="processors" id="processors"> | ||||
|                     <option value="saxon">Saxon</option> | ||||
|                     <option value="xalan">Xalan</option> | ||||
|                 </select> | ||||
|                 <span id="processorTooltipInfo">procInfo</span><br> | ||||
|                 <br> | ||||
|  | ||||
|                 <label for="xmlArea"><b>Insert your XML:</b></label> | ||||
|                 <textarea id="xmlArea" name="xmlArea" rows="15" | ||||
|                     class="textarea-300 bordered-field vertically-resizeable max-width" | ||||
|                     onblur="setDefaultContent(this, 'Insert XML here');" | ||||
|                     onfocus="clearDefaultContent(this, 'Insert XML here');"></textarea> | ||||
|                 <br><br> | ||||
|  | ||||
|                 <label for="transformArea"><b>Insert your XSLT:</b></label> | ||||
|                 <textarea id="transformArea" name="transformArea" rows="15" | ||||
|                     class="textarea-300 bordered-field vertically-resizeable max-width" | ||||
|                     onblur="setDefaultContent(this, 'Insert XSLT here');" | ||||
|                     onfocus="clearDefaultContent(this, 'Insert XSLT here');"></textarea> | ||||
|                 <br> | ||||
|                 <button id="requestButton" class="max-width block-label action-button active" | ||||
|                     onclick="performRequest('xsltpost', true, true)">Execute XSLT transform</button> | ||||
|                 <br><br> | ||||
|  | ||||
|                 <label for="resultArea"><b>Transform result:<span id="procinfo"></span></b></label> | ||||
|                 <textarea id="resultArea" name="resultArea" rows="10" | ||||
|                     class="textarea-300 bordered-field vertically-resizeable max-width"></textarea> | ||||
|  | ||||
|             </div> | ||||
|         </div> | ||||
|         <div class="tooltip tooltip-window"> | ||||
|             <h2>What is XSLT?</h2> | ||||
|             <p>XSLT is a language for transforming XML documents into other documents such as XML, HTML and many | ||||
|                 other.<br></p> | ||||
|             <span id="collapsible-lists"> | ||||
|                 <div class="collapsible"> | ||||
|                     <button class="section-button collapseTrigger" style="border: none" style="border: none">XSLT 1.0 vs | ||||
|                         2.0 | ||||
|                         vs 3.0</button> | ||||
|                     <div class="content"> | ||||
|                         <p><b>XSLT 2.0 introduced a host of new features:</b><br> | ||||
|                             - Strong typing and all XSD types<br> | ||||
|                             - The ability to define and write own functions<br> | ||||
|                             - node-set() - replaces XSLT's 1.0 Result Tree Fragment, creating fully functional tree<br> | ||||
|                             - New functions and operators:<br> | ||||
|                             - - XPath 2.0<br> | ||||
|                             - - String processing and regular expressions<br> | ||||
|                             - - Grouping (for-each-group function) | ||||
|                             - - String processing<br> | ||||
|                             - - Sequence type<br> | ||||
|                         </p> | ||||
|                         <p><b>XSLT 3.0 further improved the formula:</b><br> | ||||
|                             - Streaming tranformations (previously file had to be loaded to memory to be processed)<br> | ||||
|                             - Packages - improve the modularity of large stylesheets<br> | ||||
|                             - Improved error handling (for example <code><xsl:try></code>)<br> | ||||
|                             - Support for maps and arrays, enabling XSLT to handle JSON as well as XML<br> | ||||
|                             - Functions can now be arguments to other (higher-order) functions | ||||
|                         </p> | ||||
|                     </div> | ||||
|                 </div> | ||||
|  | ||||
|                 <h2><span id="tooltipFunctionInfo">XSLT 1.0, 2.0 & 3.0 functions</span></h2> | ||||
|                 <div class="collapsible"> | ||||
|                     <button class="section-button collapseTrigger" style="border: none">Templates</button> | ||||
|                     <div class="content"> | ||||
|  | ||||
|                         [v1.0] <a href="https://www.w3.org/TR/xslt-10/#section-Defining-Template-Rules" | ||||
|                             target="_blank"><code><xsl:template></code></a> - defines a set of rules to be | ||||
|                         applied to | ||||
|                         specified node.<br> | ||||
|                         [v1.0] <a href="https://www.w3.org/TR/xslt-10/#section-Applying-Template-Rules" | ||||
|                             target="_blank"><code><xsl:apply-templates></code></a> - applies a template rule to | ||||
|                         the | ||||
|                         current element or to element's child nodes.<br> | ||||
|                         [v1.0] <a href="https://www.w3.org/TR/xslt-10/#apply-imports" | ||||
|                             target="_blank"><code><xsl:apply-imports></code></a> - Applies a template rule from | ||||
|                         an | ||||
|                         imported style sheet<br> | ||||
|                         [v1.0] <a href="https://www.w3.org/TR/xslt-10/#section-Applying-Template-Rules" | ||||
|                             target="_blank"><code><xsl:apply-templates></code></a> - Applies a template rule to | ||||
|                         the | ||||
|                         current element or to the current element's child nodes<br> | ||||
|                         [v1.0] <a href="https://www.w3.org/TR/xslt-10/#named-templates" | ||||
|                             target="_blank"><code><xsl:call-template></code></a> - Calls a named template | ||||
|                         <span name="collapse2">[v2.0] <a href="https://www.w3.org/TR/xslt20/#element-next-match" | ||||
|                                 target="_blank"><code><xsl:next-match></code></a> - overrides another template | ||||
|                             rule | ||||
|                             (considers all other template rules of lower import precedence/priority)<br></span> | ||||
|                         <span name="collapse2">[v3.0] <a href="http://www.w3.org/TR/xslt-30/#element-mode" | ||||
|                                 target="_blank"><code><xsl:mode></code></a> - Allows properties of a mode to be | ||||
|                             defined<br></span> | ||||
|                         <span name="collapse2">[v3.0] <a href="http://www.w3.org/TR/xslt-30/#element-override" | ||||
|                                 target="_blank"><code><xsl:override></code></a> - Allows using package to | ||||
|                             override | ||||
|                             selected components from a used package<br></span> | ||||
|                         <span name="collapse2">[v3.0] <a href="http://www.w3.org/TR/xslt-30/#element-package" | ||||
|                                 target="_blank"><code><xsl:package></code></a> - Defines a set of stylesheet | ||||
|                             modules | ||||
|                             that can be compiled as a unit<br></span> | ||||
|                         <span name="collapse2">[v3.0] <a href="https://www.w3.org/TR/xslt-30/#element-accept" | ||||
|                                 target="_blank"><code><xsl:accept></code></a> - Allows a package to restrict the | ||||
|                             visibility of components exposed by a package<br></span> | ||||
|                         <span name="collapse2">[v3.0] <a | ||||
|                                 href="http://www.w3.org/TR/xslt-30/#element-global-context-item" | ||||
|                                 target="_blank"><code><xsl:global-context-item></code></a> - Declares whether a | ||||
|                             global context item is required, and if so, to declare its required type</span> | ||||
|                     </div> | ||||
|                 </div> | ||||
|                 <div class="collapsible"> | ||||
|                     <button class="section-button collapseTrigger" style="border: none">Repetition and Conditional | ||||
|                         processing</button> | ||||
|                     <div class="content"> | ||||
|                         [v1.0] <a href="https://www.w3.org/TR/xslt-10/#for-each" | ||||
|                             target="_blank"><code><xsl:for-each></code></a> - Loops through each node in a | ||||
|                         specified | ||||
|                         node set<br> | ||||
|                         [v1.0] <a href="https://www.w3.org/TR/xslt-10/#section-Conditional-Processing" | ||||
|                             target="_blank"><code><xsl:if></code></a> - Contains a template that will be applied | ||||
|                         only if a specified condition is true<br> | ||||
|                         [v1.0] <a href="https://www.w3.org/TR/xslt-10/#section-Conditional-Processing-with-xsl:choose" | ||||
|                             target="_blank"><code><xsl:choose></code></a> - Used in conjunction with <when> | ||||
|                         and | ||||
|                         <otherwise> to express multiple conditional tests<br> | ||||
|                         [v1.0] <a href="https://www.w3.org/TR/xslt-10/#section-Conditional-Processing-with-xsl:choose" | ||||
|                             target="_blank"><code><xsl:when></code></a> - Specifies an action for the | ||||
|                         <choose> element<br> | ||||
|                         [v1.0] <a href="https://www.w3.org/TR/xslt-10/#section-Conditional-Processing-with-xsl:choose" | ||||
|                             target="_blank"><code><xsl:otherwise></code></a> - Specifies a default | ||||
|                         action for the <choose> element<br> | ||||
|                         <span name="collapse2">[v2.0] <a href="https://www.w3.org/TR/xslt20/#element-for-each-group" | ||||
|                                 target="_blank"><code><xsl:for-each-group></code></a> - Groups | ||||
|                             elements and performs operations once for each group<br></span> | ||||
|                         <span name="collapse2">[v3.0] <a href="http://www.w3.org/TR/xslt-30/#element-iterate" | ||||
|                                 target="_blank"><code><xsl:iterate></code></a> - Used to iterate | ||||
|                             over a sequence, with the option to set parameters for use in the next | ||||
|                             iteration<br></span> | ||||
|                         <span name="collapse2">[v3.0] <a href="http://www.w3.org/TR/xslt-30/#element-break" | ||||
|                                 target="_blank"><code><xsl:break></code></a> - Causes premature | ||||
|                             completion before the entire input sequence has been processed<br></span> | ||||
|                         <span name="collapse2">[v3.0] <a href="http://www.w3.org/TR/xslt-30/#element-next-iteration" | ||||
|                                 target="_blank"><code><xsl:next-iteration></code></a> - The | ||||
|                             contents | ||||
|                             are a set of xsl:with-param elements defining the values of the iteration | ||||
|                             parameters to be used on the next iteration<br></span> | ||||
|                         <span name="collapse2">[v3.0] <a href="http://www.w3.org/TR/xslt-30/#element-on-completion" | ||||
|                                 target="_blank"><code><xsl:on-completion></code></a> - Defines | ||||
|                             processing to be carried out when the input sequence is exhausted<br></span> | ||||
|                         <span name="collapse2">[v3.0] <a href="http://www.w3.org/TR/xslt-30/#element-fork" | ||||
|                                 target="_blank"><code><xsl:fork></code></a> - The result of the | ||||
|                             xsl:fork instruction is the sequence formed by concatenating the results of | ||||
|                             evaluating each of its contained instructions, in order<br></span> | ||||
|                         <span name="collapse2">[v3.0] <a href="http://www.w3.org/TR/xslt-30/#element-on-empty" | ||||
|                                 target="_blank"><code><xsl:on-empty></code></a> - Outputs the | ||||
|                             enclosed content only if the containing sequence generates no "ordinary" | ||||
|                             content<br></span> | ||||
|                         <span name="collapse2">[v3.0] <a href="http://www.w3.org/TR/xslt-30/#element-on-non-empty" | ||||
|                                 target="_blank"><code><xsl:on-non-empty></code></a> - Outputs the | ||||
|                             enclosed content only if the containing sequence also generates "ordinary" | ||||
|                             content<br></span> | ||||
|                         <span name="collapse2">[v3.0] <a href="http://www.w3.org/TR/xslt-30/#element-try" | ||||
|                                 target="_blank"><code><xsl:try></code></a> - Allows recovery from | ||||
|                             dynamic errors occurring within the expression it wraps<br></span> | ||||
|                         <span name="collapse2">[v3.0] <a href="http://www.w3.org/TR/xslt-30/#element-catch" | ||||
|                                 target="_blank"><code><xsl:catch></code></a> - In conjunction | ||||
|                             with | ||||
|                             xsl:try, handles dynamic errors<br></span> | ||||
|                         <span name="collapse2">[v3.0] <a href="http://www.w3.org/TR/xslt-30/#element-context-item" | ||||
|                                 target="_blank"><code><xsl:context-item></code></a> - Used to | ||||
|                             declare | ||||
|                             the initial context item for a template<br></span> | ||||
|                     </div> | ||||
|                 </div> | ||||
|                 <div class="collapsible"> | ||||
|                     <button class="section-button collapseTrigger" style="border: none">Creating result tree</button> | ||||
|                     <div class="content"> | ||||
|                         [v1.0] <a href="https://www.w3.org/TR/xslt-10/#creating-attributes" | ||||
|                             target="_blank"><code><xsl:attribute></code></a> - Adds an attribute<br> | ||||
|                         [v1.0] <a href="https://www.w3.org/TR/xslt-10/#attribute-sets" | ||||
|                             target="_blank"><code><xsl:attribute-set></code></a> - Defines a named set of | ||||
|                         attributes<br> | ||||
|                         [v1.0] <a href="https://www.w3.org/TR/xslt-10/#copying" | ||||
|                             target="_blank"><code><xsl:copy></code></a> - Creates a copy of the current node | ||||
|                         (without | ||||
|                         child nodes and attributes)<br> | ||||
|                         [v1.0] <a href="https://www.w3.org/TR/xslt-10/#number" | ||||
|                             target="_blank"><code><xsl:number></code></a> - Determines the integer position of | ||||
|                         the | ||||
|                         current node and formats a number<br> | ||||
|                         [v1.0] <a href="https://www.w3.org/TR/xslt-10/#value-of" | ||||
|                             target="_blank"><code><xsl:value-of></code></a> - Extracts the value of a selected | ||||
|                         node<br> | ||||
|                         [v1.0] <a href="https://www.w3.org/TR/xslt-10/#section-Creating-Text" | ||||
|                             target="_blank"><code><xsl:text></code></a> - Writes literal text to the output<br> | ||||
|                         [v1.0] <a href="https://www.w3.org/TR/xslt-10/#section-Creating-Comments" | ||||
|                             target="_blank"><code><xsl:comment></code></a> - Creates a comment node in the result | ||||
|                         tree<br> | ||||
|                         [v1.0] <a href="https://www.w3.org/TR/xslt-10/#section-Creating-Processing-Instructions" | ||||
|                             target="_blank"><code><xsl:processing-instruction></code></a> - Writes a processing | ||||
|                         instruction to the output<br> | ||||
|                         [v1.0] <a href="https://www.w3.org/TR/xslt-10/#key" | ||||
|                             target="_blank"><code><xsl:key></code></a> - | ||||
|                         Declares a named key that can be used in the | ||||
|                         style sheet with the key() function<br> | ||||
|                         [v1.0] <a href="https://www.w3.org/TR/xslt-10/#format-number" | ||||
|                             target="_blank"><code><xsl:decimal-format></code></a> - Defines the characters and | ||||
|                         symbols to be used when converting numbers into strings, with the format-number() function<br> | ||||
|                         [v1.0] <a href="https://www.w3.org/TR/xslt-10/#strip" | ||||
|                             target="_blank"><code><xsl:preserve-space></code></a> - Defines the elements for | ||||
|                         which | ||||
|                         white space should be preserved<br> | ||||
|                         [v1.0] <a href="https://www.w3.org/TR/xslt-10/#strip" | ||||
|                             target="_blank"><code><xsl:strip-space></code></a> - Defines the elements for which | ||||
|                         white | ||||
|                         space should be removed<br> | ||||
|                         [v1.0] <a href="https://www.w3.org/TR/xslt-10/#sorting" | ||||
|                             target="_blank"><code><xsl:sort></code></a> - Sorts the output<br> | ||||
|                         [v1.0] <a href="https://www.w3.org/TR/xslt-10/#output" | ||||
|                             target="_blank"><code><xsl:output></code></a> - Defines the format of the output | ||||
|                         document<br> | ||||
|                         <span name="collapse2">[v2.0] <a href="https://www.w3.org/TR/xslt20/#element-perform-sort" | ||||
|                                 target="_blank"><code><xsl:for-each-group></code></a> - Sorts given | ||||
|                             sequence<br></span> | ||||
|                         <span name="collapse2">[v2.0] <a href="https://www.w3.org/TR/xslt20/#element-result-document" | ||||
|                                 target="_blank"><code><xsl:result-document></code></a> - Creates a final result | ||||
|                             tree<br></span> | ||||
|                         <span name="collapse2">[v2.0] <a href="https://www.w3.org/TR/xslt20/#element-character-map" | ||||
|                                 target="_blank"><code><xsl:character-map></code></a> - Allows a specific | ||||
|                             character | ||||
|                             appearing in the final result tree to be substituted by a specified string of | ||||
|                             characters<br></span> | ||||
|                         <span name="collapse2">[v2.0] <a href="https://www.w3.org/TR/xslt20/#element-character-map" | ||||
|                                 target="_blank"><code><xsl:output-character></code></a> - Defines characters and | ||||
|                             their replacements to be used by character-map<br></span> | ||||
|                         <span name="collapse2">[v3.0] <a href="http://www.w3.org/TR/xslt-30/#element-merge" | ||||
|                                 target="_blank"><code><xsl:merge></code></a> - Merges two or more pre-sorted | ||||
|                             input | ||||
|                             files<br></span> | ||||
|                         <span name="collapse2">[v3.0] <a href="http://www.w3.org/TR/xslt-30/#element-merge-action" | ||||
|                                 target="_blank"><code><xsl:merge-action></code></a> - Defines action to be | ||||
|                             carried | ||||
|                             out on each merged group<br></span> | ||||
|                         <span name="collapse2">[v3.0] <a href="http://www.w3.org/TR/xslt-30/#element-merge-key" | ||||
|                                 target="_blank"><code><xsl:merge-key></code></a> - Used to define the merge keys | ||||
|                             on | ||||
|                             which the input sequences are sorted<br></span> | ||||
|                         <span name="collapse2">[v3.0] <a href="http://www.w3.org/TR/xslt-30/#element-merge-source" | ||||
|                                 target="_blank"><code><xsl:merge-source></code></a> - Describes the input source | ||||
|                             for | ||||
|                             an xsl:merge instruction<br></span> | ||||
|                         <!-- <span name="collapse2">[v3.0] <a href="  " target="_blank"><code><  ></code></a> - <br></span> | ||||
|                         <span name="collapse2">[v3.0] <a href="  " target="_blank"><code><  ></code></a> - <br></span> | ||||
|                         <span name="collapse2">[v3.0] <a href="  " target="_blank"><code><  ></code></a> - <br></span> --> | ||||
|  | ||||
|                     </div> | ||||
|                 </div> | ||||
|                 <div class="collapsible"> | ||||
|                     <button class="section-button collapseTrigger" style="border: none">Stylesheet structure</button> | ||||
|                     <div class="content"> | ||||
|                         [v1.0] <a href="https://www.w3.org/TR/xslt-10/#stylesheet-element" | ||||
|                             target="_blank"><code><xsl:stylesheet></code></a> - Defines the root element of a | ||||
|                         style | ||||
|                         sheet<br> | ||||
|                         [v1.0] <a href="https://www.w3.org/TR/xslt-10/#stylesheet-element" | ||||
|                             target="_blank"><code><xsl:transform></code></a> - Defines the root element of a | ||||
|                         style | ||||
|                         sheet<br> | ||||
|                         [v1.0] <a href="https://www.w3.org/TR/xslt-10/#import" | ||||
|                             target="_blank"><code><xsl:import></code></a> - Imports the contents of one style | ||||
|                         sheet | ||||
|                         into another. Note: An imported style sheet has lower precedence than the importing style | ||||
|                         sheet<br> | ||||
|                         [v1.0] <a href="https://www.w3.org/TR/xslt-10/#include" | ||||
|                             target="_blank"><code><xsl:include></code></a> - Includes the contents of one style | ||||
|                         sheet | ||||
|                         into another. Note: An included style sheet has the same precedence as the including style | ||||
|                         sheet<br> | ||||
|                         [v1.0] <a href="https://www.w3.org/TR/xslt-10/#literal-result-element" | ||||
|                             target="_blank"><code><xsl:namespace-alias></code></a> - Replaces a namespace in the | ||||
|                         style sheet to a different namespace in the output<br> | ||||
|                         [v1.0] <a href="https://www.w3.org/TR/xslt-10/#section-Creating-Elements-with-xsl:element" | ||||
|                             target="_blank"><code><xsl:element></code></a> - Creates an element node in the | ||||
|                         output | ||||
|                         document<br> | ||||
|                     </div> | ||||
|                 </div> | ||||
|                 <div class="collapsible"> | ||||
|                     <button class="section-button collapseTrigger" style="border: none">Variables and | ||||
|                         Parameters</button> | ||||
|                     <div class="content"> | ||||
|                         [v1.0] <a href="https://www.w3.org/TR/xslt-10/#variables" | ||||
|                             target="_blank"><code><xsl:param></code></a> - Declares a local or global | ||||
|                         parameter<br> | ||||
|                         [v1.0] <a href="https://www.w3.org/TR/xslt-10/#variables" | ||||
|                             target="_blank"><code><xsl:variable></code></a> - Declares a local or global | ||||
|                         variable<br> | ||||
|                         [v1.0] <a href="https://www.w3.org/TR/xslt-10/#section-Passing-Parameters-to-Templates" | ||||
|                             target="_blank"><code><xsl:with-param></code></a> - Defines the value of a parameter | ||||
|                         to | ||||
|                         be passed into a template<br> | ||||
|                         [v1.0] <a href="https://www.w3.org/TR/xslt-10/#copy-of" | ||||
|                             target="_blank"><code><xsl:copy-of></code></a> - Creates a copy of the current node | ||||
|                         (with | ||||
|                         child nodes and attributes)<br> | ||||
|                         <span name="collapse2">[v2.0] <a href="https://www.w3.org/TR/xslt20/#element-document" | ||||
|                                 target="_blank"><code><xsl:document></code></a> - Creates a new document | ||||
|                             node<br></span> | ||||
|                         <span name="collapse2">[v2.0] <a href="https://www.w3.org/TR/xslt20/#element-namespace" | ||||
|                                 target="_blank"><code><xsl:namespace></code></a> - Creates a namespace | ||||
|                             node<br></span> | ||||
|                         <span name="collapse2">[v2.0] <a href="https://www.w3.org/TR/xslt20/#element-namespace-alias" | ||||
|                                 target="_blank"><code><xsl:namespace-alias></code></a> - Declares that a literal | ||||
|                             namespace URI is being used as an alias for a target namespace URI<br></span> | ||||
|                         <span name="collapse2">[v2.0] <a href="https://www.w3.org/TR/xslt20/#element-sequence" | ||||
|                                 target="_blank"><code><xsl:sequence></code></a> - Constructs a sequence of nodes | ||||
|                             and/or atomic values<br></span> | ||||
|                     </div> | ||||
|                 </div> | ||||
|                 <span name="collapse30"> | ||||
|                     <div class="collapsible"> | ||||
|                         <button class="section-button collapseTrigger" style="border: none" name="collapse2">[v2.0] | ||||
|                             Regular | ||||
|                             Expressions</button> | ||||
|                         <div class="content" name="collapse2data"> | ||||
|                             [v2.0] <a href="https://www.w3.org/TR/xslt20/#element-analyze-string" | ||||
|                                 target="_blank"><code><xsl:analyze-string></code></a> - Identifies substrings | ||||
|                             that | ||||
|                             match | ||||
|                             given regex<br> | ||||
|                             [v2.0] <a href="https://www.w3.org/TR/xslt20/#element-analyze-string" | ||||
|                                 target="_blank"><code><xsl:matching-substring></code></a> - Used in conjunction | ||||
|                             with | ||||
|                             analize-string, returns matching substrings<br> | ||||
|                             [v2.0] <a href="https://www.w3.org/TR/xslt20/#element-analyze-string" | ||||
|                                 target="_blank"><code><xsl:non-matching-substring></code></a> - Used in | ||||
|                             conjunction | ||||
|                             with | ||||
|                             analize-string, returns substrings that didn't match the regex | ||||
|                         </div> | ||||
|                     </div> | ||||
|                 </span> | ||||
|                 <span name="collapse30"> | ||||
|                     <div class="collapsible"> | ||||
|                         <button class="section-button collapseTrigger" style="border: none" name="collapse2">[v2.0 - | ||||
|                             3.0] | ||||
|                             Callable</button> | ||||
|                         <div class="content" name="collapse2data"> | ||||
|                             <span name="collapse2">[v2.0] <a href="https://www.w3.org/TR/xslt20/#element-function" | ||||
|                                     target="_blank"><code><xsl:function></code></a> - Declares a function that | ||||
|                                 can be | ||||
|                                 called from any XPath expression in the stylesheet<br></span> | ||||
|                             <span name="collapse2">[v3.0] <a href="http://www.w3.org/TR/xslt-30/#element-evaluate" | ||||
|                                     target="_blank"><code><xsl:evaluate></code></a> - Allows dynamic evaluation | ||||
|                                 of | ||||
|                                 XPath | ||||
|                                 expressions from a string<br></span> | ||||
|                             <span name="collapse2">[v3.0] <a href="http://www.w3.org/TR/xslt-30/#element-assert" | ||||
|                                     target="_blank"><code><xsl:assert></code></a> - Asserts a XPath expression, | ||||
|                                 optionally throwing a dynamic error<br></span> | ||||
|                             <!-- <span name="collapse2">[v3.0] <a href="  " target="_blank"><code><  ></code></a> - <br></span> --> | ||||
|                         </div> | ||||
|                     </div> | ||||
|                 </span> | ||||
|                 <div class="collapsible"> | ||||
|                     <button class="section-button collapseTrigger" style="border: none" style="border: none">Other | ||||
|                         elements</button> | ||||
|                     <div class="content"> | ||||
|                         [v1.0] <a href="https://www.w3.org/TR/xslt-10/#message" | ||||
|                             target="_blank"><code><xsl:message></code></a> - Writes a message to the output (used | ||||
|                         to | ||||
|                         report errors)<br> | ||||
|                         [v1.0] <a href="https://www.w3.org/TR/xslt-10/#fallback" | ||||
|                             target="_blank"><code><xsl:fallback></code></a> - Specifies an alternate code to run | ||||
|                         if | ||||
|                         the processor does not support an XSLT element<br> | ||||
|                         <span name="collapse2">[v3.0] <a href="http://www.w3.org/TR/xslt-30/#element-map" | ||||
|                                 target="_blank"><code><xsl:map></code></a> - Used to construct a new | ||||
|                             map<br></span> | ||||
|                         <span name="collapse2">[v3.0] <a href="http://www.w3.org/TR/xslt-30/#element-map-entry" | ||||
|                                 target="_blank"><code><xsl:map-entry></code></a> - Used to construct a singleton | ||||
|                             map | ||||
|                             (one key and one value)<br></span> | ||||
|  | ||||
|                         <span name="collapse2">[v3.0] <a href="http://www.w3.org/TR/xslt-30/#element-expose" | ||||
|                                 target="_blank"><code><xsl:expose></code></a> - Used to modify the visibility of | ||||
|                             selected components within a package<br></span> | ||||
|                         <span name="collapse2">[v3.0] <a href="http://www.w3.org/TR/xslt-30/#element-accumulator" | ||||
|                                 target="_blank"><code><xsl:accumulator></code></a> - Defines a rule that is to be | ||||
|                             applied while the document is being sequentially processed<br></span> | ||||
|                         <span name="collapse2">[v3.0] <a href="http://www.w3.org/TR/xslt-30/#element-accumulator-rule" | ||||
|                                 target="_blank"><code><xsl:accumulator-rule></code></a> - Defines a rule for an | ||||
|                             xsl:accumulator<br></span> | ||||
|                         <span name="collapse2"><b>Streaming: (not usable on this website!)</b></span> | ||||
|                         <span name="collapse2">[v3.0] <a href="http://www.w3.org/TR/xslt-30/#element-source-document" | ||||
|                                 target="_blank"><code><xsl:source-document></code></a> - Initiates streamed or | ||||
|                             unstreamed processing of a source document<br></span> | ||||
|                         <span name="collapse2">[v3.0] <a href="http://www.w3.org/TR/xslt-30/#element-use-package" | ||||
|                                 target="_blank"><code><xsl:use-package></code></a> - <br></span> | ||||
|                         <span name="collapse2">[v3.0] <a href="http://www.w3.org/TR/xslt-30/#element-where-populated" | ||||
|                                 target="_blank"><code><xsl:where-populated></code></a> - Allows conditional | ||||
|                             content | ||||
|                             construction to be made streamable<br></span> | ||||
|                         <span name="collapse2"><b>Packages: (not usable on this website!)</b></span> | ||||
|                         <span name="collapse2">[v3.0] <a href="https://www.w3.org/TR/xslt-30/#element-accept" | ||||
|                                 target="_blank"><code><xsl:accept></code></a> - Allows a package to restrict the | ||||
|                             visibility of components exposed by a package that it uses<br></span> | ||||
|                         <!-- <span name="collapse2">[v3.0] <a href="  " target="_blank"><code><  ></code></a> - <br></span> --> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|                     </div> | ||||
|                 </div> | ||||
|             </span> | ||||
|  | ||||
|         </div> | ||||
|  | ||||
|     </div> | ||||
|  | ||||
|     <!-- <script> | ||||
|         function getVersion() { | ||||
|             return document.getElementById("versions").value; | ||||
|         } | ||||
|     </script> --> | ||||
|     <script> | ||||
|         function processTooltip() { | ||||
|             console.log("processTooltip"); | ||||
|  | ||||
|  | ||||
|             if (getProcInfo() == "xalan") { | ||||
|                 document.getElementById("tooltipFunctionInfo").innerText = "XSLT 1.0 functions"; | ||||
|                 document.getElementById("processorTooltipInfo").innerText = "Supports XSLT 1.0"; | ||||
|                 hideList(document.getElementsByName("collapse30")); | ||||
|             } else { | ||||
|                 document.getElementById("tooltipFunctionInfo").innerText = "XSLT 1.0, 2.0 & 3.0 functions"; | ||||
|                 document.getElementById("processorTooltipInfo").innerText = "Supports XSLT up to 3.0"; | ||||
|                 showList(document.getElementsByName("collapse30")); | ||||
|             } | ||||
|         } | ||||
|     </script> | ||||
|     <script> | ||||
|         function getProcessor() { | ||||
|             return document.getElementById("processors").value; | ||||
|         } | ||||
|     </script> | ||||
|     <script> | ||||
|         function getVersion() { | ||||
|             if (getProcInfo() == "xalan") { | ||||
|                 return "1.0"; | ||||
|             } else { | ||||
|                 return "3.0"; | ||||
|             } | ||||
|         } | ||||
|     </script> | ||||
|     <script> | ||||
|         function getProcInfo() { | ||||
|             var processVariables = document.getElementById("processors").value;// + "&version=" + document.getElementById("versions").value; | ||||
|             return processVariables; | ||||
|         } | ||||
|     </script> | ||||
|  | ||||
|     <script> | ||||
|         var triggerList = document.getElementsByClassName("collapseTrigger"); | ||||
|         for (i = 0; i < triggerList.length; i++) { | ||||
|             console.log("trigger connected"); | ||||
|             triggerList[i].addEventListener("click", function () { | ||||
|                 console.log("click"); | ||||
|                 var collapsible = this.parentElement; | ||||
|                 var collapsibleData = this.nextElementSibling; | ||||
|                 if (collapsibleData.style.maxHeight > "0px") { | ||||
|                     collapsibleData.style.maxHeight = "0px"; | ||||
|  | ||||
|                     this.classList.toggle("active", false); | ||||
|                     if (!this.classList.contains("collapsibleMini")) { | ||||
|                         collapsible.classList.toggle("active", false); | ||||
|                     } | ||||
|  | ||||
|                     var subLists1 = collapsibleData.getElementsByClassName("content"); | ||||
|                     var subLists2 = collapsibleData.getElementsByClassName("active"); | ||||
|                     for (j = 0; j < subLists1.length; j++) { | ||||
|                         subLists1[j].style.maxHeight = "0px"; | ||||
|                     } | ||||
|                     for (j = 0; j < subLists2.length; j++) { | ||||
|                         subLists2[j].classList.toggle("active", false); | ||||
|                     } | ||||
|                 } else { | ||||
|                     collapsibleData.style.maxHeight = (collapsibleData.scrollHeight) + "px"; | ||||
|  | ||||
|                     this.classList.toggle("active", true); | ||||
|                     if (!this.classList.contains("collapsibleMini")) { | ||||
|                         collapsible.classList.toggle("active", true); | ||||
|                     } else { | ||||
|                         var parentContent = this.closest(".content"); | ||||
|                         parentContent.style.maxHeight = (parentContent.scrollHeight + collapsibleData.scrollHeight) + "px"; | ||||
|                     } | ||||
|                 } | ||||
|             }); | ||||
|         } | ||||
|     </script> | ||||
|  | ||||
|     <script> | ||||
|         function init() { | ||||
|             //Handle clicks in whole form and set info in tooltip | ||||
|             setDefaultContent(document.getElementById("xmlArea"), 'Insert XML here'); | ||||
|             setDefaultContent(document.getElementById("transformArea"), 'Insert XSLT here'); | ||||
|             console.log("init"); | ||||
|             // refreshTooltip(); | ||||
|             processTooltip(); | ||||
|             tool.addEventListener('click', event => { | ||||
|                 //Check if script was called from textarea or selector | ||||
|                 var targetID = event.target.getAttribute('id'); | ||||
|                 if (targetID !== "processors" && targetID !== "xmlArea" && targetID !== "transformArea" && targetID !== "versions") { | ||||
|                     return; | ||||
|                 } | ||||
|  | ||||
|                 processTooltip(); | ||||
|                 // console.log("clock"); | ||||
|             }) | ||||
|         } | ||||
|     </script> | ||||
|  | ||||
| </body> | ||||
|  | ||||
| </html> | ||||
							
								
								
									
										1227
									
								
								Frontend/xslt.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1227
									
								
								Frontend/xslt.html
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										11
									
								
								Jenkinsfile
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								Jenkinsfile
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | ||||
| node('master'){ | ||||
| 	stage('git pull'){ | ||||
| 		git credentialsId: '7724c11a-2509-4aa3-9862-106aa354c5b8', url: 'ssh://_git@phabricator.release11.com/diffusion/CZOPW/czopw.git' | ||||
| 		} | ||||
| 	stage('build & deploy'){ | ||||
| 		sh 'docker-compose --context gordon up --force-recreate --build -d' | ||||
| 	} | ||||
|  | ||||
| } | ||||
|  | ||||
|  | ||||
							
								
								
									
										49
									
								
								REST_XSLT/.classpath
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								REST_XSLT/.classpath
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,49 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <classpath> | ||||
| 	<classpathentry kind="src" output="target/classes" path="src/main/java"> | ||||
| 		<attributes> | ||||
| 			<attribute name="optional" value="true"/> | ||||
| 			<attribute name="maven.pomderived" value="true"/> | ||||
| 		</attributes> | ||||
| 	</classpathentry> | ||||
| 	<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"> | ||||
| 		<attributes> | ||||
| 			<attribute name="maven.pomderived" value="true"/> | ||||
| 		</attributes> | ||||
| 	</classpathentry> | ||||
| 	<classpathentry kind="src" output="target/test-classes" path="src/test/java"> | ||||
| 		<attributes> | ||||
| 			<attribute name="optional" value="true"/> | ||||
| 			<attribute name="maven.pomderived" value="true"/> | ||||
| 			<attribute name="test" value="true"/> | ||||
| 		</attributes> | ||||
| 	</classpathentry> | ||||
| 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"> | ||||
| 		<attributes> | ||||
| 			<attribute name="maven.pomderived" value="true"/> | ||||
| 		</attributes> | ||||
| 	</classpathentry> | ||||
| 	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"> | ||||
| 		<attributes> | ||||
| 			<attribute name="maven.pomderived" value="true"/> | ||||
| 		</attributes> | ||||
| 	</classpathentry> | ||||
| 	<classpathentry kind="src" path="target/generated-sources/annotations"> | ||||
| 		<attributes> | ||||
| 			<attribute name="optional" value="true"/> | ||||
| 			<attribute name="maven.pomderived" value="true"/> | ||||
| 			<attribute name="ignore_optional_problems" value="true"/> | ||||
| 			<attribute name="m2e-apt" value="true"/> | ||||
| 		</attributes> | ||||
| 	</classpathentry> | ||||
| 	<classpathentry kind="src" output="target/test-classes" path="target/generated-test-sources/test-annotations"> | ||||
| 		<attributes> | ||||
| 			<attribute name="optional" value="true"/> | ||||
| 			<attribute name="maven.pomderived" value="true"/> | ||||
| 			<attribute name="ignore_optional_problems" value="true"/> | ||||
| 			<attribute name="m2e-apt" value="true"/> | ||||
| 			<attribute name="test" value="true"/> | ||||
| 		</attributes> | ||||
| 	</classpathentry> | ||||
| 	<classpathentry kind="output" path="target/classes"/> | ||||
| </classpath> | ||||
							
								
								
									
										3
									
								
								REST_XSLT/.idea/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								REST_XSLT/.idea/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| # Default ignored files | ||||
| /shelf/ | ||||
| /workspace.xml | ||||
							
								
								
									
										2
									
								
								REST_XSLT/.idea/REST_XSLT.iml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								REST_XSLT/.idea/REST_XSLT.iml
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <module type="JAVA_MODULE" version="4" /> | ||||
							
								
								
									
										14
									
								
								REST_XSLT/.idea/compiler.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								REST_XSLT/.idea/compiler.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="CompilerConfiguration"> | ||||
|     <annotationProcessing> | ||||
|       <profile name="Maven default annotation processors profile" enabled="true"> | ||||
|         <sourceOutputDir name="target/generated-sources/annotations" /> | ||||
|         <sourceTestOutputDir name="target/generated-test-sources/test-annotations" /> | ||||
|         <outputRelativeToContentRoot value="true" /> | ||||
|         <module name="RestTMP" /> | ||||
|         <module name="REST_XSLT" /> | ||||
|       </profile> | ||||
|     </annotationProcessing> | ||||
|   </component> | ||||
| </project> | ||||
							
								
								
									
										7
									
								
								REST_XSLT/.idea/encodings.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								REST_XSLT/.idea/encodings.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="Encoding"> | ||||
|     <file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" /> | ||||
|     <file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" /> | ||||
|   </component> | ||||
| </project> | ||||
							
								
								
									
										20
									
								
								REST_XSLT/.idea/jarRepositories.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								REST_XSLT/.idea/jarRepositories.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="RemoteRepositoriesConfiguration"> | ||||
|     <remote-repository> | ||||
|       <option name="id" value="central" /> | ||||
|       <option name="name" value="Central Repository" /> | ||||
|       <option name="url" value="https://repo.maven.apache.org/maven2" /> | ||||
|     </remote-repository> | ||||
|     <remote-repository> | ||||
|       <option name="id" value="central" /> | ||||
|       <option name="name" value="Maven Central repository" /> | ||||
|       <option name="url" value="https://repo1.maven.org/maven2" /> | ||||
|     </remote-repository> | ||||
|     <remote-repository> | ||||
|       <option name="id" value="jboss.community" /> | ||||
|       <option name="name" value="JBoss Community repository" /> | ||||
|       <option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" /> | ||||
|     </remote-repository> | ||||
|   </component> | ||||
| </project> | ||||
							
								
								
									
										14
									
								
								REST_XSLT/.idea/misc.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								REST_XSLT/.idea/misc.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="ExternalStorageConfigurationManager" enabled="true" /> | ||||
|   <component name="MavenProjectsManager"> | ||||
|     <option name="originalFiles"> | ||||
|       <list> | ||||
|         <option value="$PROJECT_DIR$/pom.xml" /> | ||||
|       </list> | ||||
|     </option> | ||||
|   </component> | ||||
|   <component name="ProjectRootManager" version="2" languageLevel="JDK_11" project-jdk-name="11" project-jdk-type="JavaSDK"> | ||||
|     <output url="file://$PROJECT_DIR$/out" /> | ||||
|   </component> | ||||
| </project> | ||||
							
								
								
									
										124
									
								
								REST_XSLT/.idea/uiDesigner.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										124
									
								
								REST_XSLT/.idea/uiDesigner.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,124 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="Palette2"> | ||||
|     <group name="Swing"> | ||||
|       <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false"> | ||||
|         <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" /> | ||||
|       </item> | ||||
|       <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false"> | ||||
|         <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" /> | ||||
|       </item> | ||||
|       <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false"> | ||||
|         <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" /> | ||||
|       </item> | ||||
|       <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true"> | ||||
|         <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" /> | ||||
|       </item> | ||||
|       <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false"> | ||||
|         <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" /> | ||||
|         <initial-values> | ||||
|           <property name="text" value="Button" /> | ||||
|         </initial-values> | ||||
|       </item> | ||||
|       <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false"> | ||||
|         <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" /> | ||||
|         <initial-values> | ||||
|           <property name="text" value="RadioButton" /> | ||||
|         </initial-values> | ||||
|       </item> | ||||
|       <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false"> | ||||
|         <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" /> | ||||
|         <initial-values> | ||||
|           <property name="text" value="CheckBox" /> | ||||
|         </initial-values> | ||||
|       </item> | ||||
|       <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false"> | ||||
|         <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" /> | ||||
|         <initial-values> | ||||
|           <property name="text" value="Label" /> | ||||
|         </initial-values> | ||||
|       </item> | ||||
|       <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true"> | ||||
|         <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1"> | ||||
|           <preferred-size width="150" height="-1" /> | ||||
|         </default-constraints> | ||||
|       </item> | ||||
|       <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true"> | ||||
|         <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1"> | ||||
|           <preferred-size width="150" height="-1" /> | ||||
|         </default-constraints> | ||||
|       </item> | ||||
|       <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true"> | ||||
|         <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1"> | ||||
|           <preferred-size width="150" height="-1" /> | ||||
|         </default-constraints> | ||||
|       </item> | ||||
|       <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true"> | ||||
|         <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> | ||||
|           <preferred-size width="150" height="50" /> | ||||
|         </default-constraints> | ||||
|       </item> | ||||
|       <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true"> | ||||
|         <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> | ||||
|           <preferred-size width="150" height="50" /> | ||||
|         </default-constraints> | ||||
|       </item> | ||||
|       <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true"> | ||||
|         <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> | ||||
|           <preferred-size width="150" height="50" /> | ||||
|         </default-constraints> | ||||
|       </item> | ||||
|       <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true"> | ||||
|         <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" /> | ||||
|       </item> | ||||
|       <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false"> | ||||
|         <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> | ||||
|           <preferred-size width="150" height="50" /> | ||||
|         </default-constraints> | ||||
|       </item> | ||||
|       <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false"> | ||||
|         <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3"> | ||||
|           <preferred-size width="150" height="50" /> | ||||
|         </default-constraints> | ||||
|       </item> | ||||
|       <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false"> | ||||
|         <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> | ||||
|           <preferred-size width="150" height="50" /> | ||||
|         </default-constraints> | ||||
|       </item> | ||||
|       <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false"> | ||||
|         <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3"> | ||||
|           <preferred-size width="200" height="200" /> | ||||
|         </default-constraints> | ||||
|       </item> | ||||
|       <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false"> | ||||
|         <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3"> | ||||
|           <preferred-size width="200" height="200" /> | ||||
|         </default-constraints> | ||||
|       </item> | ||||
|       <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true"> | ||||
|         <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" /> | ||||
|       </item> | ||||
|       <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false"> | ||||
|         <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" /> | ||||
|       </item> | ||||
|       <item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false"> | ||||
|         <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" /> | ||||
|       </item> | ||||
|       <item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false"> | ||||
|         <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" /> | ||||
|       </item> | ||||
|       <item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false"> | ||||
|         <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1"> | ||||
|           <preferred-size width="-1" height="20" /> | ||||
|         </default-constraints> | ||||
|       </item> | ||||
|       <item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false"> | ||||
|         <default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" /> | ||||
|       </item> | ||||
|       <item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false"> | ||||
|         <default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" /> | ||||
|       </item> | ||||
|     </group> | ||||
|   </component> | ||||
| </project> | ||||
							
								
								
									
										6
									
								
								REST_XSLT/.idea/vcs.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								REST_XSLT/.idea/vcs.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="VcsDirectoryMappings"> | ||||
|     <mapping directory="$PROJECT_DIR$/../.." vcs="Git" /> | ||||
|   </component> | ||||
| </project> | ||||
							
								
								
									
										34
									
								
								REST_XSLT/.project
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								REST_XSLT/.project
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,34 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <projectDescription> | ||||
| 	<name>REST_XSLT</name> | ||||
| 	<comment></comment> | ||||
| 	<projects> | ||||
| 	</projects> | ||||
| 	<buildSpec> | ||||
| 		<buildCommand> | ||||
| 			<name>org.eclipse.jdt.core.javabuilder</name> | ||||
| 			<arguments> | ||||
| 			</arguments> | ||||
| 		</buildCommand> | ||||
| 		<buildCommand> | ||||
| 			<name>org.eclipse.m2e.core.maven2Builder</name> | ||||
| 			<arguments> | ||||
| 			</arguments> | ||||
| 		</buildCommand> | ||||
| 	</buildSpec> | ||||
| 	<natures> | ||||
| 		<nature>org.eclipse.jdt.core.javanature</nature> | ||||
| 		<nature>org.eclipse.m2e.core.maven2Nature</nature> | ||||
| 	</natures> | ||||
| 	<filteredResources> | ||||
| 		<filter> | ||||
| 			<id>1614706323594</id> | ||||
| 			<name></name> | ||||
| 			<type>30</type> | ||||
| 			<matcher> | ||||
| 				<id>org.eclipse.core.resources.regexFilterMatcher</id> | ||||
| 				<arguments>node_modules|.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments> | ||||
| 			</matcher> | ||||
| 		</filter> | ||||
| 	</filteredResources> | ||||
| </projectDescription> | ||||
							
								
								
									
										5
									
								
								REST_XSLT/.settings/org.eclipse.core.resources.prefs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								REST_XSLT/.settings/org.eclipse.core.resources.prefs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| eclipse.preferences.version=1 | ||||
| encoding//src/main/java=UTF-8 | ||||
| encoding//src/main/resources=UTF-8 | ||||
| encoding//src/test/java=UTF-8 | ||||
| encoding/<project>=UTF-8 | ||||
							
								
								
									
										2
									
								
								REST_XSLT/.settings/org.eclipse.jdt.apt.core.prefs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								REST_XSLT/.settings/org.eclipse.jdt.apt.core.prefs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | ||||
| eclipse.preferences.version=1 | ||||
| org.eclipse.jdt.apt.aptEnabled=false | ||||
							
								
								
									
										9
									
								
								REST_XSLT/.settings/org.eclipse.jdt.core.prefs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								REST_XSLT/.settings/org.eclipse.jdt.core.prefs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| eclipse.preferences.version=1 | ||||
| org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 | ||||
| org.eclipse.jdt.core.compiler.compliance=1.8 | ||||
| org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled | ||||
| org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning | ||||
| org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore | ||||
| org.eclipse.jdt.core.compiler.processAnnotations=disabled | ||||
| org.eclipse.jdt.core.compiler.release=disabled | ||||
| org.eclipse.jdt.core.compiler.source=1.8 | ||||
							
								
								
									
										4
									
								
								REST_XSLT/.settings/org.eclipse.m2e.core.prefs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								REST_XSLT/.settings/org.eclipse.m2e.core.prefs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | ||||
| activeProfiles= | ||||
| eclipse.preferences.version=1 | ||||
| resolveWorkspaceProjects=true | ||||
| version=1 | ||||
							
								
								
									
										21
									
								
								REST_XSLT/Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								REST_XSLT/Dockerfile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | ||||
| # Using maven image, based on java 8 | ||||
| FROM maven:3.6.3-jdk-8 as target | ||||
| WORKDIR /build | ||||
| COPY pom.xml . | ||||
| COPY src/ /build/src/ | ||||
| RUN mvn -ntp package | ||||
|  | ||||
| # Go to working directory in docker image | ||||
| # WORKDIR /usr/app/ | ||||
|  | ||||
| FROM openjdk:slim-buster | ||||
| COPY --from=target /build/target/*jar-with-dependencies.jar /app/REST_XSLT.jar | ||||
|  | ||||
| # Download dependencies during image build | ||||
| # (RUN - works on image creation) | ||||
| # (CMD - works on container start) | ||||
| # RUN mvn dependency:resolve | ||||
| # RUN mvn dependency:go-offline | ||||
|  | ||||
| # On container creation - run maven tests | ||||
| CMD exec java -jar /app/REST_XSLT.jar | ||||
							
								
								
									
										2
									
								
								REST_XSLT/RestTMP.iml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								REST_XSLT/RestTMP.iml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <module type="JAVA_MODULE" version="4" /> | ||||
							
								
								
									
										134
									
								
								REST_XSLT/pom.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										134
									
								
								REST_XSLT/pom.xml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,134 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project xmlns="http://maven.apache.org/POM/4.0.0" | ||||
|          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||||
|          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||||
|     <modelVersion>4.0.0</modelVersion> | ||||
|  | ||||
|     <groupId>r11.mltx</groupId> | ||||
|     <artifactId>REST_XSLT</artifactId> | ||||
|     <version>1.0-SNAPSHOT</version> | ||||
|  | ||||
|     <properties> | ||||
|         <maven.compiler.source>11</maven.compiler.source> | ||||
|         <maven.compiler.target>11</maven.compiler.target> | ||||
|         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> | ||||
|     </properties> | ||||
|  | ||||
|     <build> | ||||
|         <plugins> | ||||
| <!--            <plugin>--> | ||||
| <!--                <artifactId>maven-jar-plugin</artifactId>--> | ||||
| <!--                <version>3.1.0</version>--> | ||||
| <!--                <configuration>--> | ||||
| <!--                    <archive>--> | ||||
| <!--                        <manifest>--> | ||||
| <!--                            <addClasspath>true</addClasspath>--> | ||||
| <!--                            <classpathPrefix>lib/</classpathPrefix>--> | ||||
| <!--                            <mainClass>Main</mainClass>--> | ||||
| <!--                        </manifest>--> | ||||
| <!--                    </archive>--> | ||||
| <!--                </configuration>--> | ||||
| <!--            </plugin>--> | ||||
|  | ||||
|             <plugin> | ||||
|                 <artifactId>maven-compiler-plugin</artifactId> | ||||
|                 <version>3.8.1</version> | ||||
|                 <configuration> | ||||
|                     <source>1.8</source> | ||||
|                     <target>1.8</target> | ||||
|                 </configuration> | ||||
|             </plugin> | ||||
|  | ||||
|             <plugin> | ||||
|                 <artifactId>maven-assembly-plugin</artifactId> | ||||
|                 <version>3.3.0</version> | ||||
|  | ||||
|                 <configuration> | ||||
|                     <archive> | ||||
|                         <manifest> | ||||
|                             <addClasspath>true</addClasspath> | ||||
|                             <classpathPrefix>lib/</classpathPrefix> | ||||
|                             <mainClass>Main</mainClass> | ||||
|                         </manifest> | ||||
|                     </archive> | ||||
|                     <descriptorRefs> | ||||
|                         <descriptorRef>jar-with-dependencies</descriptorRef> | ||||
|                     </descriptorRefs> | ||||
|                 </configuration> | ||||
|  | ||||
|                 <executions> | ||||
|                     <execution> | ||||
|                         <id>make-assembly</id> | ||||
|                         <phase>package</phase> | ||||
|                         <goals> | ||||
|                             <goal>single</goal> | ||||
|                         </goals> | ||||
|                     </execution> | ||||
|                 </executions> | ||||
|  | ||||
|             </plugin> | ||||
|         </plugins> | ||||
|  | ||||
|     </build> | ||||
|  | ||||
|     <dependencies> | ||||
|         <dependency> | ||||
|             <groupId>com.fasterxml.jackson.core</groupId> | ||||
|             <artifactId>jackson-core</artifactId> | ||||
|             <version>2.11.0</version> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>com.fasterxml.jackson.core</groupId> | ||||
|             <artifactId>jackson-databind</artifactId> | ||||
|             <version>2.11.0</version> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>com.sparkjava</groupId> | ||||
|             <artifactId>spark-core</artifactId> | ||||
|             <version>2.9.3</version> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>org.slf4j</groupId> | ||||
|             <artifactId>slf4j-simple</artifactId> | ||||
|             <version>1.6.2</version> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
|         <!--    XSLT    --> | ||||
|         <dependency> | ||||
|             <groupId>net.sf.saxon</groupId> | ||||
|             <artifactId>Saxon-HE</artifactId> | ||||
|             <version>10.3</version> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>xalan</groupId> | ||||
|             <artifactId>xalan</artifactId> | ||||
|             <version>2.7.2</version> | ||||
|         </dependency> | ||||
|  | ||||
|         <dependency> | ||||
|             <groupId>org.slf4j</groupId> | ||||
|             <artifactId>jcl-over-slf4j</artifactId> | ||||
|             <version>1.7.0</version> | ||||
|             <scope>runtime</scope> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>org.slf4j</groupId> | ||||
|             <artifactId>slf4j-api</artifactId> | ||||
|             <version>1.7.0</version> | ||||
|             <scope>runtime</scope> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>org.slf4j</groupId> | ||||
|             <artifactId>slf4j-log4j12</artifactId> | ||||
|             <version>1.7.0</version> | ||||
|             <scope>runtime</scope> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>log4j</groupId> | ||||
|             <artifactId>log4j</artifactId> | ||||
|             <version>1.2.14</version> | ||||
|         </dependency> | ||||
|         <!--    JSON    --> | ||||
|     </dependencies> | ||||
|  | ||||
| </project> | ||||
							
								
								
									
										220
									
								
								REST_XSLT/src/main/java/Main.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										220
									
								
								REST_XSLT/src/main/java/Main.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,220 @@ | ||||
| import com.fasterxml.jackson.databind.JsonMappingException; | ||||
| import com.fasterxml.jackson.databind.ObjectMapper; | ||||
| import processors.Saxon; | ||||
| import processors.Xalan; | ||||
| import spark.*; | ||||
|  | ||||
| import java.util.HashMap; | ||||
| import java.util.Map; | ||||
|  | ||||
| public class Main { | ||||
|     public static void main(String[] args) { | ||||
|         Spark.port(8081); | ||||
|  | ||||
|         Spark.after((Filter) (request, response) -> { | ||||
|             response.header("Access-Control-Allow-Origin", "*"); | ||||
|             response.header("access-control-allow-headers", "*"); | ||||
|             response.header("access-control-expose-headers", "*"); | ||||
|             response.header("Access-Control-Allow-Methods", "POST"); | ||||
|         }); | ||||
|  | ||||
|         Spark.post("/xsltpost", xsltHandler); | ||||
|         Spark.post("/xpathpost", xpathHandler); | ||||
|         Spark.post("/xsdpost", xsdHandler); | ||||
|         Spark.get("/procinfo", procinfoHandler); | ||||
|         System.out.println("Server is online"); | ||||
|     } | ||||
|  | ||||
|     static Route procinfoHandler = (Request req, Response resp) -> { | ||||
|         try { | ||||
| //            req.session().id | ||||
|             resp.header("processor", "Saxon " + Saxon.getVersion() + " over s9api"); | ||||
|             return Saxon.getVersion(); | ||||
|         } catch (Exception ex) { | ||||
|             return ex.getMessage(); | ||||
|         } | ||||
|     }; | ||||
|  | ||||
|     static Route xsdHandler = (Request req, Response resp) -> { | ||||
|         String body = req.body(); | ||||
|         System.out.println("Request: " + body); | ||||
|         ObjectMapper mapper = new ObjectMapper(); | ||||
|         Map<String, String> requestMap = null; | ||||
|         Map<String, String> responseMap = new HashMap<>(); | ||||
|         try { | ||||
|             requestMap = mapper.readValue(body, Map.class); | ||||
|         } catch (JsonMappingException ex) { | ||||
|             ex.printStackTrace(); | ||||
|         } | ||||
|  | ||||
|         String data = requestMap.get("data"); | ||||
|         String xsd = requestMap.get("process"); | ||||
|         String processor = requestMap.get("processor"); | ||||
|         String version = requestMap.get("version"); | ||||
|  | ||||
|         resp.header("processor", Xalan.getVersion()); | ||||
|         long timeStart = System.currentTimeMillis(); | ||||
|         String tmp = ""; | ||||
|         try { | ||||
|             tmp = Xalan.validate(data, xsd).trim(); | ||||
|             responseMap.put("result", tmp); | ||||
|             responseMap.put("status", "OK"); | ||||
|         } catch (Exception ex) { | ||||
|             System.out.println("Exception: "+ex.getMessage()); | ||||
|             responseMap.put("result", ex.getMessage()); | ||||
|             responseMap.put("status", "ERR"); | ||||
|             resp.status(400); | ||||
|         } | ||||
|         long duration = System.currentTimeMillis() - timeStart; | ||||
|         responseMap.put("processor", Xalan.getVersion()); | ||||
|         responseMap.put("time", "" + duration); | ||||
|         resp.body(mapper.writeValueAsString(responseMap)); | ||||
|         return resp; | ||||
|     }; | ||||
|  | ||||
|     static Route xpathHandler = (Request req, Response resp) -> { | ||||
|  | ||||
|         String body = req.body(); | ||||
|         System.out.println("Request: " + body); | ||||
|         ObjectMapper mapper = new ObjectMapper(); | ||||
|         Map<String, String> requestMap = null; | ||||
|         Map<String, String> responseMap = new HashMap<>(); | ||||
|         try { | ||||
|             requestMap = mapper.readValue(body, Map.class); | ||||
|         } catch (JsonMappingException ex) { | ||||
|             ex.printStackTrace(); | ||||
|         } | ||||
|  | ||||
|         String data = requestMap.get("data"); | ||||
|         String query = requestMap.get("process"); | ||||
|         String processor = requestMap.get("processor"); | ||||
|         String version = requestMap.get("version"); | ||||
|  | ||||
|         String tmp = ""; | ||||
|         long timeStart = 0; | ||||
|         long duration = 0; | ||||
|  | ||||
|         if (processor == null) { | ||||
|             return "saxon, xalan"; | ||||
|         } | ||||
|         try { | ||||
|             switch (processor) { | ||||
|                 case "saxon": | ||||
|                     resp.header("processor", "Saxon " + Saxon.getVersion() + " " + version + " over s9api"); | ||||
|                     System.out.print("Processing start..."); | ||||
|                     timeStart = System.currentTimeMillis(); | ||||
|                     try { | ||||
|                         tmp = Saxon.processXPath(data, query, version).trim(); | ||||
|                         responseMap.put("result", tmp); | ||||
|                         responseMap.put("status", "OK"); | ||||
|                     } catch (Exception ex) { | ||||
|                         responseMap.put("result", ex.getMessage()); | ||||
|                         responseMap.put("status", "ERR"); | ||||
|                         resp.status(400); | ||||
|                     } | ||||
|                     duration = System.currentTimeMillis() - timeStart; | ||||
|                     System.out.println("end(" + duration + ")"); | ||||
|                     responseMap.put("processor", "Saxon " + Saxon.getVersion() + " " + version + " over s9api"); | ||||
|                     responseMap.put("time", "" + duration); | ||||
|                     resp.body(mapper.writeValueAsString(responseMap)); | ||||
|                     return resp; | ||||
|  | ||||
|                 case "xalan": | ||||
|                     resp.header("processor", Xalan.getVersion()); | ||||
|                     timeStart = System.currentTimeMillis(); | ||||
|                     try { | ||||
|                         tmp = Xalan.processXPath(data, query).trim(); | ||||
|                         responseMap.put("result", tmp); | ||||
|                         responseMap.put("status", "OK"); | ||||
|                     } catch (Exception ex) { | ||||
|                         responseMap.put("result", ex.getMessage()); | ||||
|                         responseMap.put("status", "ERR"); | ||||
|                         resp.status(400); | ||||
|                     } | ||||
|                     duration = System.currentTimeMillis() - timeStart; | ||||
|                     responseMap.put("processor", Xalan.getVersion()); | ||||
|                     responseMap.put("result", tmp); | ||||
|                     responseMap.put("time", "" + duration); | ||||
|                     resp.body(mapper.writeValueAsString(responseMap)); | ||||
|                     return resp; | ||||
|  | ||||
|                 default: | ||||
|                     return "saxon, xalan"; | ||||
|             } | ||||
|  | ||||
|         } catch (Exception ex) { | ||||
|             ex.printStackTrace(); | ||||
|             return ex.getMessage(); | ||||
|         } | ||||
|     }; | ||||
|  | ||||
|     static Route xsltHandler = (Request req, Response resp) -> { | ||||
|         String body = req.body(); | ||||
|         ObjectMapper mapper = new ObjectMapper(); | ||||
|         Map<String, String> jsonMap = null; | ||||
|         Map<String, String> responseMap = new HashMap<>(); | ||||
|         try { | ||||
|             jsonMap = mapper.readValue(body, Map.class); | ||||
|             System.out.println(jsonMap); | ||||
|         } catch (JsonMappingException ex) { | ||||
|             ex.printStackTrace(); | ||||
|         } | ||||
|         String data = jsonMap.get("data"); | ||||
|         String query = jsonMap.get("process"); | ||||
|         String processor = jsonMap.get("processor"); | ||||
|         String version = jsonMap.get("version"); | ||||
|  | ||||
|         if (processor == null) { | ||||
|             return "saxon, xalan"; | ||||
|         } | ||||
|         try { | ||||
|             String tmp = ""; | ||||
|             long timeStart = 0; | ||||
|             long duration = 0; | ||||
|             switch (processor) { | ||||
|                 case "saxon": | ||||
| //                    resp.header("processor", "Saxon " + Saxon.getVersion()); | ||||
|                     timeStart = System.currentTimeMillis(); | ||||
|                     try { | ||||
|                         tmp = Saxon.processXSLT(data, query); | ||||
|                         responseMap.put("result", tmp); | ||||
|                         responseMap.put("status", "OK"); | ||||
|                     } catch (Exception ex) { | ||||
|                         responseMap.put("result", ex.getMessage()); | ||||
|                         responseMap.put("status", "ERR"); | ||||
|                         resp.status(400); | ||||
|                     } | ||||
|  | ||||
|  | ||||
|                     duration = System.currentTimeMillis() - timeStart; | ||||
|                     responseMap.put("processor", "Saxon " + Saxon.getVersion() + " " + version); | ||||
|                     responseMap.put("time", "" + duration); | ||||
|                     resp.body(mapper.writeValueAsString(responseMap)); | ||||
|                     return resp; | ||||
|  | ||||
|                 case "xalan": | ||||
|                     timeStart = System.currentTimeMillis(); | ||||
|                     try { | ||||
|                         tmp = Xalan.processXSLT(data, query); | ||||
|                         responseMap.put("result", tmp); | ||||
|                         responseMap.put("status", "OK"); | ||||
|                     } catch (Exception ex) { | ||||
|                         responseMap.put("result", ex.getMessage()); | ||||
|                         responseMap.put("status", "ERR"); | ||||
|                         resp.status(400); | ||||
|                     } | ||||
|                     duration = System.currentTimeMillis() - timeStart; | ||||
|                     responseMap.put("processor", Xalan.getVersion()); | ||||
|                     responseMap.put("time", "" + duration); | ||||
|                     resp.body(mapper.writeValueAsString(responseMap)); | ||||
|                     return resp; | ||||
|  | ||||
|                 default: | ||||
|                     return "saxon, xalan"; | ||||
|             } | ||||
|         } catch (Exception ex) { | ||||
|             return ex.getMessage(); | ||||
|         } | ||||
|  | ||||
|     }; | ||||
| } | ||||
							
								
								
									
										54
									
								
								REST_XSLT/src/main/java/processors/NewNamespaceResolver.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								REST_XSLT/src/main/java/processors/NewNamespaceResolver.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,54 @@ | ||||
| package processors; | ||||
|  | ||||
| import net.sf.saxon.om.NamespaceBinding; | ||||
| import net.sf.saxon.om.NamespaceMap; | ||||
| import net.sf.saxon.s9api.XPathCompiler; | ||||
| import net.sf.saxon.s9api.XdmNode; | ||||
|  | ||||
| import java.util.Iterator; | ||||
|  | ||||
| public class NewNamespaceResolver { | ||||
|  | ||||
|     private NamespaceMap namespaceMap; | ||||
|  | ||||
|     public NamespaceMap process(XdmNode doc) { | ||||
|         namespaceMap = NamespaceMap.emptyMap(); | ||||
|         Iterator<XdmNode> it = doc.children().iterator(); | ||||
|  | ||||
|         while (it.hasNext()) { | ||||
|             XdmNode tmp = it.next(); | ||||
|             extractNamespace(tmp); | ||||
|         } | ||||
|         return namespaceMap; | ||||
|     } | ||||
|  | ||||
|     public void exportNamespaces(XPathCompiler compiler){ | ||||
|         Iterator<NamespaceBinding> it = namespaceMap.iterator(); | ||||
|         while(it.hasNext()){ | ||||
|             System.out.println(it.next()); | ||||
|         } | ||||
|         namespaceMap.forEach(namespaceBinding -> compiler.declareNamespace(namespaceBinding.getPrefix(), namespaceBinding.getURI())); | ||||
|     } | ||||
|  | ||||
|     private void extractNamespace(XdmNode node) { | ||||
|         NamespaceMap tmp; | ||||
|         if ((tmp = node.getUnderlyingNode().getAllNamespaces()) != null) { | ||||
|             namespaceMap = namespaceMap.putAll(tmp); | ||||
|         } | ||||
|         if (node.children().iterator().hasNext()) { | ||||
|  | ||||
|             Iterator<XdmNode> it = node.children().iterator(); | ||||
|             while (it.hasNext()) { | ||||
|                 XdmNode rNode = it.next(); | ||||
|                 if(rNode.getUnderlyingNode().getPrefix().isEmpty() && !rNode.getParent().getUnderlyingNode().getPrefix().isEmpty()){ | ||||
|  | ||||
|                     System.out.println("prefix missing, parent has "+rNode.getParent().getUnderlyingNode().getPrefix() + ", but child has none"); | ||||
|  | ||||
|                     NamespaceMap nsTMP= rNode.getUnderlyingNode().getAllNamespaces(); | ||||
|                     System.out.println(); | ||||
|                 } | ||||
|                 extractNamespace(rNode); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										53
									
								
								REST_XSLT/src/main/java/processors/Saxon.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								REST_XSLT/src/main/java/processors/Saxon.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,53 @@ | ||||
| package processors; | ||||
|  | ||||
| import net.sf.saxon.om.NamespaceMap; | ||||
| import net.sf.saxon.s9api.*; | ||||
| import javax.xml.transform.stream.StreamSource; | ||||
| import java.io.StringReader; | ||||
| import java.io.StringWriter; | ||||
|  | ||||
| public class Saxon { | ||||
|     public static String processXSLT(String data, String transform) throws SaxonApiException { | ||||
|         Processor processor = new Processor(false); | ||||
|         XsltCompiler compiler = processor.newXsltCompiler(); | ||||
|         XsltExecutable stylesheet = compiler.compile(new StreamSource(new StringReader(transform))); | ||||
|         StringWriter sw = new StringWriter(); | ||||
|         Serializer out = processor.newSerializer(sw); | ||||
|         out.setOutputProperty(Serializer.Property.METHOD, "xml"); | ||||
|         out.setOutputProperty(Serializer.Property.INDENT, "yes"); | ||||
|  | ||||
|         Xslt30Transformer transformer = stylesheet.load30(); | ||||
|         transformer.transform(new StreamSource(new StringReader(data)), out); | ||||
|         return sw.toString(); | ||||
|     } | ||||
|  | ||||
|     public static String processXPath(String data, String query, String version) throws Exception { | ||||
|         Processor p = new Processor(false); | ||||
|         XPathCompiler compiler = p.newXPathCompiler(); | ||||
|         DocumentBuilder builder = p.newDocumentBuilder(); | ||||
|         XdmNode doc = builder.build(new StreamSource(new StringReader(data))); | ||||
|  | ||||
| //        System.out.println(version); | ||||
|  | ||||
|         compiler.setLanguageVersion(version); | ||||
|  | ||||
|         NewNamespaceResolver resolver = new NewNamespaceResolver(); | ||||
|  | ||||
|         NamespaceMap nsMa = resolver.process(doc); | ||||
|  | ||||
|         resolver.exportNamespaces(compiler); | ||||
|  | ||||
|         XdmValue result = compiler.evaluate(query, doc); | ||||
|         StringBuilder sb = new StringBuilder(); | ||||
|         for (XdmItem xdmItem : result) { | ||||
|             sb.append(xdmItem); | ||||
|             sb.append('\n'); | ||||
|         } | ||||
|         return sb.toString(); | ||||
|  | ||||
|     } | ||||
|  | ||||
|     public static String getVersion() { | ||||
|         return new Processor(false).getSaxonProductVersion(); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										91
									
								
								REST_XSLT/src/main/java/processors/Xalan.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								REST_XSLT/src/main/java/processors/Xalan.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,91 @@ | ||||
| package processors; | ||||
|  | ||||
| import org.apache.xpath.domapi.XPathEvaluatorImpl; | ||||
| import org.w3c.dom.Document; | ||||
|  | ||||
| import javax.xml.XMLConstants; | ||||
| import javax.xml.namespace.NamespaceContext; | ||||
| import javax.xml.parsers.DocumentBuilder; | ||||
| import javax.xml.parsers.DocumentBuilderFactory; | ||||
| import javax.xml.transform.*; | ||||
| import javax.xml.transform.dom.DOMSource; | ||||
| import javax.xml.transform.stream.StreamResult; | ||||
| import javax.xml.transform.stream.StreamSource; | ||||
| import javax.xml.validation.Schema; | ||||
| import javax.xml.validation.SchemaFactory; | ||||
| import javax.xml.validation.Validator; | ||||
| import javax.xml.xpath.XPath; | ||||
| import javax.xml.xpath.XPathConstants; | ||||
| import javax.xml.xpath.XPathExpression; | ||||
| import javax.xml.xpath.XPathFactory; | ||||
| import java.io.IOException; | ||||
| import java.io.StringReader; | ||||
| import java.io.StringWriter; | ||||
| import org.w3c.dom.NodeList; | ||||
| import org.xml.sax.InputSource; | ||||
| import org.xml.sax.SAXException; | ||||
|  | ||||
| public class Xalan { | ||||
|  | ||||
|     public static String processXSLT(String data, String transform) throws Exception{ | ||||
|         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); | ||||
|         DocumentBuilder builder = factory.newDocumentBuilder(); | ||||
|         Document document = builder.parse(new InputSource(new StringReader(data))); | ||||
|  | ||||
|  | ||||
|  | ||||
|         StreamSource stylesource = new StreamSource(new StringReader(transform)); | ||||
|  | ||||
|  | ||||
|  | ||||
|         Transformer transformer = TransformerFactory.newInstance().newTransformer(stylesource); | ||||
|         transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); | ||||
|         transformer.setOutputProperty(OutputKeys.INDENT, "yes"); | ||||
|         Source source = new DOMSource(document); | ||||
|         StringWriter sw = new StringWriter(); | ||||
|         Result outputTarget = new StreamResult(sw); | ||||
|         transformer.transform(source, outputTarget); | ||||
|  | ||||
|         return sw.toString(); | ||||
|     } | ||||
|  | ||||
|     public static String processXPath(String data, String transform) throws Exception{ | ||||
|         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); | ||||
|         DocumentBuilder builder = factory.newDocumentBuilder(); | ||||
|  | ||||
|         XPath xpath = XPathFactory.newInstance().newXPath(); | ||||
|  | ||||
|         xpath.setNamespaceContext(new XalanNamespaceResolver(builder.parse(new InputSource(new StringReader(data))), true)); | ||||
|         XPathExpression exp = xpath.compile(transform); | ||||
|         NodeList nodeList = (NodeList) exp.evaluate(new InputSource(new StringReader(data)), XPathConstants.NODESET); | ||||
|         String result = exp.evaluate(new InputSource(new StringReader(data))); | ||||
|         return result; | ||||
|     } | ||||
|      | ||||
|  | ||||
|     public static String getVersion(){ | ||||
|         return org.apache.xalan.Version.getVersion(); | ||||
|     } | ||||
|  | ||||
|     public static String validate(String data, String xsd) throws Exception{ | ||||
|  | ||||
|  | ||||
|         Source dataSource = new StreamSource(new StringReader(data)); | ||||
|         Source xsdSource = new StreamSource(new StringReader(xsd)); | ||||
|         SchemaFactory schemaFactory = SchemaFactory | ||||
|                 .newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); | ||||
| //        try { | ||||
|             Schema schema = schemaFactory.newSchema(xsdSource); | ||||
|             Validator validator = schema.newValidator(); | ||||
|             validator.validate(dataSource); | ||||
| //            System.out.println(dataSource.getSystemId() + " is valid"); | ||||
|             return "XML file is valid"; | ||||
| //        } catch (SAXException e) { | ||||
| //            System.out.println("Invalid: "+e.getMessage()); | ||||
| //            return "XML file is NOT valid: " + e.getMessage(); | ||||
| ////            System.out.println(dataSource.getSystemId() + " is NOT valid reason:" + e); | ||||
| //        } catch (IOException e) { | ||||
| //            return "IO error: "+e.getMessage(); | ||||
| //        } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										121
									
								
								REST_XSLT/src/main/java/processors/XalanNamespaceResolver.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										121
									
								
								REST_XSLT/src/main/java/processors/XalanNamespaceResolver.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,121 @@ | ||||
| package processors; | ||||
|  | ||||
| import org.w3c.dom.*; | ||||
|  | ||||
| import javax.xml.XMLConstants; | ||||
| import javax.xml.namespace.NamespaceContext; | ||||
| import java.util.HashMap; | ||||
| import java.util.Iterator; | ||||
| import java.util.Map; | ||||
|  | ||||
| public class XalanNamespaceResolver implements NamespaceContext { | ||||
|     private static final String DEFAULT_NS = "DEFAULT"; | ||||
|     private Map<String, String> prefix2Uri = new HashMap<String, String>(); | ||||
|     private Map<String, String> uri2Prefix = new HashMap<String, String>(); | ||||
|  | ||||
|     /** | ||||
|      * This constructor parses the document and stores all namespaces it can | ||||
|      * find. If toplevelOnly is true, only namespaces in the root are used. | ||||
|      * | ||||
|      * @param document | ||||
|      *            source document | ||||
|      * @param toplevelOnly | ||||
|      *            restriction of the search to enhance performance | ||||
|      */ | ||||
|     public XalanNamespaceResolver(Document document, boolean toplevelOnly) { | ||||
|         examineNode(document.getFirstChild(), toplevelOnly); | ||||
|         System.out.println("The list of the cached namespaces:"); | ||||
|         for (String key : prefix2Uri.keySet()) { | ||||
|             System.out.println("prefix " + key + ": uri " + prefix2Uri.get(key)); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * A single node is read, the namespace attributes are extracted and stored. | ||||
|      * | ||||
|      * @param node | ||||
|      *            to examine | ||||
|      * @param attributesOnly, | ||||
|      *            if true no recursion happens | ||||
|      */ | ||||
|     private void examineNode(Node node, boolean attributesOnly) { | ||||
|         NamedNodeMap attributes = node.getAttributes(); | ||||
|         for (int i = 0; i < attributes.getLength(); i++) { | ||||
|             Node attribute = attributes.item(i); | ||||
|             storeAttribute((Attr) attribute); | ||||
|         } | ||||
|  | ||||
|         if (!attributesOnly) { | ||||
|             NodeList chields = node.getChildNodes(); | ||||
|             for (int i = 0; i < chields.getLength(); i++) { | ||||
|                 Node chield = chields.item(i); | ||||
|                 if (chield.getNodeType() == Node.ELEMENT_NODE){ | ||||
|                     examineNode(chield, false); | ||||
|                 } | ||||
|  | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * This method looks at an attribute and stores it, if it is a namespace | ||||
|      * attribute. | ||||
|      * | ||||
|      * @param attribute | ||||
|      *            to examine | ||||
|      */ | ||||
|     private void storeAttribute(Attr attribute) { | ||||
|         // examine the attributes in namespace xmlns | ||||
|         String uri = attribute.getNamespaceURI(); | ||||
|         String name = attribute.getLocalName(); | ||||
|         String name2 = attribute.getName(); | ||||
|         String value = attribute.getNodeValue(); | ||||
|         if (attribute.getNodeValue() != null | ||||
|                 /*&& attribute.getNamespaceURI().equals( | ||||
|                 XMLConstants.XMLNS_ATTRIBUTE_NS_URI)*/) { | ||||
|             // Default namespace xmlns="uri goes here" | ||||
|             if (attribute.getNodeName().equals(XMLConstants.XMLNS_ATTRIBUTE)) { | ||||
|                 putInCache(DEFAULT_NS, attribute.getNodeValue()); | ||||
|             } else { | ||||
|                 // The defined prefixes are stored here | ||||
|                 putInCache(attribute.getName().replace("xmlns:", ""), attribute.getNodeValue()); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|     } | ||||
|  | ||||
|     private void putInCache(String prefix, String uri) { | ||||
|         prefix2Uri.put(prefix, uri); | ||||
|         uri2Prefix.put(uri, prefix); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * This method is called by XPath. It returns the default namespace, if the | ||||
|      * prefix is null or "". | ||||
|      * | ||||
|      * @param prefix | ||||
|      *            to search for | ||||
|      * @return uri | ||||
|      */ | ||||
|     public String getNamespaceURI(String prefix) { | ||||
|         if (prefix == null || prefix.equals(XMLConstants.DEFAULT_NS_PREFIX)) { | ||||
|             return prefix2Uri.get(DEFAULT_NS); | ||||
|         } else { | ||||
|             return prefix2Uri.get(prefix); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * This method is not needed in this context, but can be implemented in a | ||||
|      * similar way. | ||||
|      */ | ||||
|     public String getPrefix(String namespaceURI) { | ||||
|         return uri2Prefix.get(namespaceURI); | ||||
|     } | ||||
|  | ||||
|     public Iterator getPrefixes(String namespaceURI) { | ||||
|         // Not implemented | ||||
|         return null; | ||||
|     } | ||||
|  | ||||
| } | ||||
							
								
								
									
										9
									
								
								REST_XSLT/src/main/resources/log4j.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								REST_XSLT/src/main/resources/log4j.properties
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| # Set root logger level to DEBUG and its only appender to A1. | ||||
| log4j.rootLogger=ERROR, A1 | ||||
|  | ||||
| # A1 is set to be a ConsoleAppender. | ||||
| log4j.appender.A1=org.apache.log4j.ConsoleAppender | ||||
|  | ||||
| # A1 uses PatternLayout. | ||||
| log4j.appender.A1.layout=org.apache.log4j.PatternLayout | ||||
| log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n | ||||
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								REST_XSLT/target/REST_XSLT-1.0-SNAPSHOT.jar
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								REST_XSLT/target/REST_XSLT-1.0-SNAPSHOT.jar
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								REST_XSLT/target/classes/Main.class
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								REST_XSLT/target/classes/Main.class
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										9
									
								
								REST_XSLT/target/classes/log4j.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								REST_XSLT/target/classes/log4j.properties
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| # Set root logger level to DEBUG and its only appender to A1. | ||||
| log4j.rootLogger=ERROR, A1 | ||||
|  | ||||
| # A1 is set to be a ConsoleAppender. | ||||
| log4j.appender.A1=org.apache.log4j.ConsoleAppender | ||||
|  | ||||
| # A1 uses PatternLayout. | ||||
| log4j.appender.A1.layout=org.apache.log4j.PatternLayout | ||||
| log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n | ||||
							
								
								
									
										
											BIN
										
									
								
								REST_XSLT/target/classes/processors/NewNamespaceResolver.class
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								REST_XSLT/target/classes/processors/NewNamespaceResolver.class
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								REST_XSLT/target/classes/processors/Saxon.class
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								REST_XSLT/target/classes/processors/Saxon.class
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								REST_XSLT/target/classes/processors/Xalan.class
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								REST_XSLT/target/classes/processors/Xalan.class
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								REST_XSLT/target/classes/processors/XalanNamespaceResolver.class
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								REST_XSLT/target/classes/processors/XalanNamespaceResolver.class
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										5
									
								
								REST_XSLT/target/maven-archiver/pom.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								REST_XSLT/target/maven-archiver/pom.properties
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| #Generated by Maven | ||||
| #Mon Feb 01 11:43:32 CET 2021 | ||||
| groupId=r11.mltx | ||||
| artifactId=REST_XSLT | ||||
| version=1.0-SNAPSHOT | ||||
| @@ -0,0 +1,3 @@ | ||||
| Main.class | ||||
| XSLTProcessors.class | ||||
| XPathProcessors.class | ||||
| @@ -0,0 +1,3 @@ | ||||
| /home/milu/Documents/czopw/Web/REST_XSLT/src/main/java/Main.java | ||||
| /home/milu/Documents/czopw/Web/REST_XSLT/src/main/java/XSLTProcessors.java | ||||
| /home/milu/Documents/czopw/Web/REST_XSLT/src/main/java/XPathProcessors.java | ||||
							
								
								
									
										16
									
								
								docker-compose.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								docker-compose.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | ||||
| version: "3" | ||||
|  | ||||
| services: | ||||
|     xmltools-frontend: | ||||
|         build: ./Frontend | ||||
|         container_name: xmltools-frontend | ||||
|         image: xmltools-frontend | ||||
|         ports: | ||||
|         - 8086:80 | ||||
|  | ||||
|     xmltools-backend: | ||||
|         build: ./REST_XSLT | ||||
|         container_name: xmltools-backend | ||||
|         image: xmltools-backend | ||||
|         ports: | ||||
|         - 8081:8081 | ||||
		Reference in New Issue
	
	Block a user
	 Wojciech Czop
					Wojciech Czop